在前文——“不动点迭代法计算三元一次方程及不同迭代函数对收敛性的影响”中,对于函数f(x)=x^3-2*x-1,用不动点迭代法求根,当选取迭代函数x=(x^3-1)/2时,计算结果不收敛。下面用Aitken加速法尝试,看看会发生什么:
题:
用不动点迭代法求方程f(x)=x^3-2*x-1=0的根,用Aitken加速法按等价方程x=(x^3-1)/2实现。要求输出每次的迭代结果并统计所用的迭代次数,取精度c=0.5*10^(-5),x0=2.
迭代公式如下(迭代公式参考 计算方法——江西高校出版社):
程序流程图见本人前文——“不动点迭代法计算三元一次方程及不同迭代函数对收敛性的影响”,不同之处是在x=g(x)阶段,替换成上图的迭代公式。
代码:
#include <iostream>
#define MAXREPT 100
#define f(x) (x*x*x-1)/2//表示y与x0及z与y之间的函数
#define g(x,y,z) z-(z-y)*(z-y)/(z+x-2*y)//表示x1与x0关系的函数
using namespace std;
#define c 0.5e-5
#include<iomanip>
int main()
{
double x0 = 0, x1 = 2,y=0,z=0;
int i =