牛顿-拉夫逊方法(Newton-Raphson method)

牛顿法Newton's method)又称为牛顿-拉夫逊方法Newton-Raphson method),将非线性方程 f(x) = 0 近似为:   f(xk) + f´(xk)(xk+1 -  xk

) = 0,得

牛顿法Newton's method)又称为牛顿-拉夫逊方法Newton-Raphson method),将非线性方程 f(x) = 0 近似为:   f(xk) + f´(xk)(xk+1 -  xk) = 0,得
Newton <wbr>Raphson <wbr>method

如果
f'连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果f'(x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍
Newton <wbr>Raphson <wbr>method

例题一:
求方程
f   ( x   ) = cos( x   ) −   x   3   的根。两边求导,得 f    '( x   ) = −sin( x   ) − 3 x   2   。由于cos( x   ) ≤ 1(对于所有 x   ),以及 x   3 >1(对于 x   >1),可知方程的根位于0和1之间。我们从 x   0   = 0.5开始。


例题二:
编写一个程序,求以下方程的根:
x³-5x²+6x-80=0
算法设计:牛顿迭代法
利用牛顿迭代公式 x(n+1)=x(n)-f(x(n))/f'(x(n));
循环体为:
for(int i=0;i
{
        x1=x0-f(x0)/df(x0);
        x0=x1;
}
其中n为迭代次数,该值越大根值越精确;x0为在方程根取值范围内的任意值,作为初始迭代的条件。
C++实现如下:


#include

using namespace std;  

float f(float x)  

{  

    float y;  

    y=x*x*x-5.0*x*x+16.0*x-80.0;  

    return y;  

}  

float df(float x)  

{  

    float y;  

    y=3.0*x*x-10.0*x+6;  

    return y;  

}  

int main()  

{  

    float x0,x1;  

    int n;  

    cout<<"输入x0:";  

    cin>>x0;  

    cout<<"迭代次数:";  

    cin>>n;  

    for(int i=0;i

    {  

        x1=x0-f(x0)/df(x0);  

        x0=x1;  

    }  

    cout<<"方程的根:x="<

    return 0;  

}  

输入x0:2

迭代次数:10
方程的根:x=5.15874
Press any key to continue

输入x0:2

迭代次数:100
方程的根:x=5
Press any key to continue

非线性代数方程组求解
n 个变量 个方程的非线性方程组, 其一般形式如下: 
Newton <wbr>Raphson <wbr>method

式(1)中 是定义在 维欧式空间中开域上的实值函数。若用向量记,令: 

Newton <wbr>Raphson <wbr>method

则方程组(1)也可以表示为: 

                    Newton <wbr>Raphson <wbr>method


非线性数值方法种类较多,最常用的是Newton迭代法。求解非线性方程组的Newton法是一个最基本而且十分重要的方法,目前使用的很多有效的迭代法都是以Newton法为基础,或由它派生而来。

Newton <wbr>Raphson <wbr>method


Newton <wbr>Raphson <wbr>method

Newton <wbr>Raphson <wbr>method

预先确定的最大迭代次数 M 作为终止迭代条件。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部