题:
用Newtown迭代法求方程f(x)=x^3-x-1=0的根。采取一下两种方案实现,分析初值的选取对迭代法收敛性的影响。要求输出每次的迭代结果并统计所用的迭代次数,取精度c=0.5*1e-5。方案一:取初值x=1.5。 方案二:取初值x=0。
程序流程图:
代码:
#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;
}
运行结果:
方案二:
本方案只需把方案一代码部分的x0的初始值命名为0即可,故只在此展示运行结果:
分析:迭代法的几何的几何意义是把f(xn)处的切线与x轴的交点视为x(n+1),并以x(n+1)为近似值,不断迭代。
方案一的初值在根的附近,迭代次数为3,方案二则花费了20次。初始值的选取对Newtown迭代法的收敛性影响很大。