数值分析 埃特肯Aitken加速收敛

本文分享了一段使用埃特肯加速法求解方程x^3-x^2-1=0在x0=1.5附近根的C++代码实现。通过迭代公式求解,代码中包含了fun函数和AitkenIterative函数,展示了如何逐步逼近方程的根,直至满足精度要求ε=10^-4。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题目:用埃特肯法求方程x^3-x^2-1=0在x0=1.5附近的根,ε=10^-4.

网上找了一个开三次根方法的,但是代码好像不太友好 http://blog.itpub.net/11355887/viewspace-974948/

 

我这个迭代公式是同除x^2的,循环有点重复,就十分钟写的懒得改了。

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;

double fun(double x);
void AitkenIterative(double x);

int main()
{
    double x0=1.5;
    AitkenIterative(x0);
    return 0;
}

double fun(double x)
{
    return 1 + 1.0/pow(x,2); // φ(x)=1+1/x^2
}
/////////
int i=0;
void AitkenIterative(double x)
{
    cout<<"x"<< i << " : "<< x << endl;
    
    double y1 = fun(x);
    double z1 = fun(y1);
    cout<<"y"<< i+1 << " : "<< y1 << endl;
    cout<<"z"<< i+1 << " : "<< z1 << endl;
    
    double x1 = ( x*z1 - y1*y1 ) / ( x-2*y1+z1 );
    cout<<"x"<< i+1 << " : "<< x1 << endl;
    //---------------------------------------------
    double y2 = fun(x1);
    double z2 = fun(y2);
    cout<<"y"<< i+2 << " : "<< y2 << endl;
    cout<<"z"<< i+2 << " : "<< z2 << endl;
    
    double x2 = ( x1*z2 - y2*y2 ) / ( x1-2*y2+z2 );
    cout <<"x"<< i+2 << " : "<< x2 << endl;
    
    double cha= fabs( x2-x1 ); 
    cout <<"x"<< i+2 << "-" <<"x"<< i+1 << " : "<< cha << endl;
    
    if( i<5 && cha>0.0001 ){
        i++;
        cout <<"---------------"<<endl;
        AitkenIterative(x1);
    }
    else return ;
    
} 

可能有错,欢迎指正交流

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值