永发信息网

C++解一个一元三次方程

答案:1  悬赏:70  手机版
解决时间 2021-11-17 20:09
  • 提问者网友:谁的错
  • 2021-11-16 23:36
C++解一个一元三次方程
最佳答案
  • 五星知识达人网友:千夜
  • 2021-11-17 00:54
代码,思路,注释都在这儿了。望采纳。
#include 
#include 

double solve(double k) {
    //输入k的值。
    //设 f(x) = k*(x-1)³+x³+5/3*x²=0 (k>0)
    //则 f'(x) = 3k*(x-1)^2 + 3x^2 + 10/3*x
    //因为 f'(x)在(0,1)为正,所以f(x)在(0,1)为增函数。
    //因此考虑牛顿法。
    //牛顿法:迭代x(n+1) = x(n) - f(x)/f'(x)
    //初值可设置为0或者1。
    double delta = 0.0001; //精确度, 可调。
    double x = 0; //初始值
    double f = k*(x-1)*(x-1)*(x-1) + x*x*x+5/3*x*x; //原函数
    double f_diff = 3*k*(x-1)*(x-1) + 3*x*x + 10/3*x; //导数
    double nextx = x - f / f_diff; //迭代的下一步
    while ( abs(nextx-x) > delta) {
        x = nextx;
        f = k*(x-1)*(x-1)*(x-1) + x*x*x+5/3*x*x; //原函数
        f_diff = 3*k*(x-1)*(x-1) + 3*x*x + 10/3*x; //导数
        nextx = x - f / f_diff; //迭代的下一步
    }
    return nextx;
}

int main(){
    double k = 1;
    double x = solve(k);//求解
    double f = k*(x-1)*(x-1)*(x-1) + x*x*x+5/3*x*x;
    printf("x = %lf, f(x) = %lf", x, f);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯