Newton迭代法计算一元三次方程及不同初值选取对收敛性的影响

时间:2024-03-27 13:10:40

题:

用Newtown迭代法求方程f(x)=x^3-x-1=0的根。采取一下两种方案实现,分析初值的选取对迭代法收敛性的影响。要求输出每次的迭代结果并统计所用的迭代次数,取精度c=0.5*1e-5。方案一:取初值x=1.5。    方案二:取初值x=0。

 

 

 

程序流程图:

Newton迭代法计算一元三次方程及不同初值选取对收敛性的影响

 

 

 

代码:

#include<iostream>

using namespace std;
#include<iomanip>

#define c 0.5e-5//精度
#define g(x) (2*x*x*x+1)/(3*x*x-1)//迭代函数
#define MAXREPT 100//最大迭代次数

int main()
{
    double x0 = 0, x1 = 1.5;
    int i = 0, n = 0;
    cout << setw(3) << 'i' <<  setw(10) << "x1" << endl;
    for(i=0;i<MAXREPT;i++)
    {
        x0 = x1;
        x1 = g(x0);
        cout << setw(3) << i << resetiosflags(ios::fixed) << setprecision(6) << setw(10) << x1 << endl;
        if (abs(x1 - x0) < c)
        {
            cout << "The anwser is " << x1 << ",the repeat times are " << i;
            n++ ;//计数变量,n==1代表迭代100次后,x1-x0的绝对值在精度范围内
            break;
        }
    }
    if (n==0)//若(abs(x1 - x0) < c)==0,即迭代100次后,x1-x0的绝对值仍不在精度范围内
    {
        cout << "After 100 repeate,no solved";
    }    
    return 0;
}

运行结果:

Newton迭代法计算一元三次方程及不同初值选取对收敛性的影响

 

 

 

 

方案二:

     本方案只需把方案一代码部分的x0的初始值命名为0即可,故只在此展示运行结果:

Newton迭代法计算一元三次方程及不同初值选取对收敛性的影响

 

 

分析:迭代法的几何的几何意义是把f(xn)处的切线与x轴的交点视为x(n+1),并以x(n+1)为近似值,不断迭代。

方案一的初值在根的附近,迭代次数为3,方案二则花费了20次。初始值的选取对Newtown迭代法的收敛性影响很大。