C++用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0。系数a,b,c,d由主函数输入,求x在1附近的1个实根。

求出的根由主函数输出。下面的分函数我看不太懂能哪位大神给每句话注释出来一下吗,尤其是在做循环的这一部分,谢谢啦#include<iostream>#include<cma... 求出的根由主函数输出。
下面的分函数我看不太懂能哪位大神给每句话注释出来一下吗,尤其是在做循环的这一部分,谢谢啦
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double solut(double,double,double,double);
double a,b,c,d;
cout<<"input a,b,c,d:";
cin>>a>>b>>c>>d;
cout<<solut(a,b,c,d)<<endl;
return 0;
}

double solut(double a,double b,double c,double d)
{double x=1,x0,f,f1;
do
{
x0=x;
f=((a*x0+b)*x0+c)*x0+d;
f1=(3*a*x0+2*b)*x0+c;
x=x0-f/f1;
}
while(fabs(x-x0)>1e-5);
return(x);
}
展开
 我来答
seizeF
推荐于2017-09-04 · TA获得超过412个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:227万
展开全部

牛顿迭代法的基本原理是,给定一个初始x0,做一条垂线与函数f(x)相交,得到的交点为(x0,y0),过该点在f(x)上作一条切线,得到该切线与x轴的交点为(x1, 0)。之后对(x1, 0)重复上述步骤,直到与x轴的交点的横坐标xn逐渐收敛到f(x)=0的根。也就是对于第i+1次迭代(i>=0),有下列等式


    


再来看代码,

double x=1,x0,f,f1; 
do 
{
    x0=x;
    f=((a*x0+b)*x0+c)*x0+d;
    f1=(3*a*x0+2*b)*x0+c;
    x=x0-f/f1;
} while(fabs(x-x0)>1e-5);

其中

f=((a*x0+b)*x0+c)*x0+d;

是用来求f在第i+1次迭代时的,在xi处的值,这里f(x)是一个3次多项式,即


    

f1=(3*a*x0+2*b)*x0+c;

f1是用来求第i+1次迭代时,f在xi处的导数,而f在x处的导数为


    


而循环结束一般是误差在某个范围内,就认为得到解了,所以是

while(fabs(x-x0)>1e-5);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式