| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:请教看一个求一元三次方程根的程序
只看楼主 加入收藏
spikespiegel
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
请教看一个求一元三次方程根的程序
#include <iostream>
#include <math.h>

using namespace std;

class cubic
{
public:
    double a,b,c,d;
    double A, B, C, Y1, Y2, T, theta;
    double delta,root1;
    typedef struct xushu
    {
        double shibu;
        double xubu;
    }xushu;
    xushu root2, root3;

    void rooting()
    {
        cout << "Please input coefficients a, b, c and d respectively to calculate roots." << endl;
        cout << "The coefficient a is: ";
        cin >> a;
        cout << "The coefficient b is: ";
        cin >> b;
        cout << "The coefficient c is: ";
        cin >> c;
        cout << "The coefficient d is: ";
        cin >> d;
        A = pow(b,2)-3*a*c;
        B = b*c-9*a*d;
        C = pow(c,2)-3*b*d;
        delta = pow(B,2)-4*A*C;
        if (A==B&&A==0&&B==0)
        {
            root1 = -b/(3*a);
            root2.shibu = -c/b;
            root3.shibu = -3*d/c;
        }
        else if (delta > 0)
        {
            Y1 = A*b+3*a*(-B+pow((pow(B,2)-4*A*C),(1.0/2)))/2;
            Y2 = A*b+3*a*(-B-pow((pow(B,2)-4*A*C),(1.0/2)))/2;
            root1 = (-b-pow(Y1,(1.0/3))-pow(Y2,(1.0/3)))/(3*a);
            root2.shibu = (-2*b+pow(Y1,(1.0/3))+pow(Y2,(1.0/3)))/(6*a);
            root2.xubu = (pow(3,(1.0/2))*(pow(Y1,(1.0/3))-pow(Y2,(1.0/3))))/(6*a);
            root3.shibu = (-2*b+pow(Y1,(1.0/3))-pow(Y2,(1.0/3)))/(6*a);
            root3.xubu = (-pow(3,(1.0/2))*(pow(Y1,(1.0/3))-pow(Y2,(1.0/3))))/(6*a);
            cout << root1 << root2.shibu << root2.xubu << root3.shibu << root3.xubu << endl;
        }
        else if (delta == 0 && A != 0)
        {
            root1 = -b/a+(B/A);
            root2.shibu = root3.shibu = -(B/A)/2;
            cout << root1 << root2.shibu << root3.shibu << endl;
        }
        else if (delta < 0 && A>0 && T>-1 && T<1)
        {
            T=(2*A*b-3*a*B)/(pow(2*A,(3/2)));
            theta = acos(T);
            root1 = (-b-pow(2*A,(1.0/2))*cos(theta/3))/(3*a);
            root2.shibu = (-b+pow(A,(1.0/2))*(cos(theta/3))+(pow(3,(1.0/2)*sin(theta/3))))/(3*a);
            root3.shibu = (-b+pow(A,(1.0/2))*(cos(theta/3))-(pow(3,(1.0/2)*sin(theta/3))))/(3*a);
            cout << root1 << root2.shibu << root3.shibu << endl;
        }
    }
}calCubic;

[ 本帖最后由 spikespiegel 于 2010-11-17 17:05 编辑 ]
搜索更多相关主题的帖子: 方程 
2010-11-17 15:32
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:7 
能说明是啥问题吗?
2010-11-17 16:33
spikespiegel
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-4
收藏
得分:0 
编译出来后输入4个系数 然后结果显示的一律是-1.#IND 不过好像能判断根的数量
2010-11-17 16:45
快速回复:请教看一个求一元三次方程根的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.073695 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved