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

求出的根由主函数输出。
下面的分函数我看不太懂能哪位大神给每句话注释出来一下吗,尤其是在做循环的这一部分,谢谢啦
#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);
}

牛顿迭代法的基本原理是,给定一个初始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);

温馨提示:内容为网友见解,仅供参考
无其他回答

...系数a,b,c,d由主函数输入,求x在1附近的1个实根。
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)>1...

利用牛顿迭代法求根,方程是ax³+bx²+cx+d=0.
\/\/此函数是用来求一元3次方程ax^3+bx^2+cx+d=0的解 \/\/比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解 \/\/牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))\/f'(x(n))。include<iostream> include<cmath> using namespace std;double diedai(double a,double...

牛顿迭代法C++代码
首先,我们需要定义一个主函数,用户可以输入方程的系数(a, b, c, d),然后调用diedai函数进行迭代计算,直到满足给定的精度要求。牛顿迭代法求解一元三次方程在C++中,我们可以编写如下的代码来求解一元三次方程 ax^3 + bx^2 + cx + d = 0 的解。例如,对于方程 x^3 - 27 = 0,可以...

用牛顿迭代法求一元三次方程的根
用牛顿迭代法求方程'a * x ^ 3 + b * x ^ 2 + c * x + d = 0, 系数a = 1, b = 2, c = 3, d = 4, x在0附近的一个实数根为1.33333333333。算法代码如下:Private Sub Command1_Click() '牛顿迭代法 Dim a As Double, b As Double, c As Double, d As Double, ...

C语言编程——内容:用牛顿迭代法求一元三次方程的根。要求:由主函数调...
其中f'(X0)是函数在X0处的斜率,也就是在X0处的导数。代码如下:include<stdio.h> include<math.h> float f(float a,float b,float c,float d,float x){ float f;f=((a*x+b)*x+c)*x+d;return f;} float f1(float a,float b,float c,float x){ float f;f=(x*3*a+2*...

一元三次方程必背公式
一元三次方程的求解需要使用代数方法,而不是简单的公式。一元三次方程的一般形式是 ax^3 + bx^2 + cx + d = 0,其中a、b、c、d是已知系数,x是未知数。尽管没有像求解二次方程的求根公式那样的通用公式,但可以使用下列公式之一来求解一元三次方程根的和与根的乘积法:- 三个根的和等于...

一元三次方程怎么求根?
三次方程求根公式为:ax3+bx2+cx+d=0。标准型的一元三次方程aX^3+bX^2+cX+d=0(a,b,c,d∈R,且a≠0)其解法有:1、意大利学者卡尔丹于1545年发表的卡尔丹公式法;2、中国学者范盛金于1989年发表的盛金公式法。一元三次方程解法思想是:通过配方和换元,使三次方程降次为二次方程求解。...

C++编写程序用牛顿迭代法求一元方程5x^3—3x^2+2x—8=0 在x=1.1附近...
#include "math.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){double x = 1.1;while(fabs(5*x*x*x-3*x*x+2*x-8)>0.000001)x = x - (5*x*x*x-3*x*x+2*x-8)\/(15*x*x-6*x+2);cout<<"方程的解为"<<x<<endl;system("pause");return 0;} ...

用牛顿迭代法求多项式的根(C\/C++语言)
用牛顿迭代法求多项式的根(C\/C++语言) 求x^3-1.8*x^2+0.15*x+0.65=0的解,有三个解,已知!我的程序是:#include<iostream.h>#include<math.h>#include<conio.h>constintN=200;\/\/带入原函数后所得的值doublef(floatx){ret... 求x^3-1.8*x^2+0.15*x+0.65=0的解,有三个解,已知!我的程序是:...

什么是牛顿迭代法?
\/\/此函数是用来求3元一次方程ax^3+bx^2+cx+d=0的解 \/\/比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解 #include<iostream> #include<cmath> using namespace std; int main() { double diedai(double a,double b,double c,double d,double x); double a,b,c,d; double...

相似回答