牛顿迭代法

一、牛顿法概念

二、图形示例

牛顿法以x_{n}点的切线与x轴的交点作为下一次迭代的 x_{n+1},依次类推,逐渐逼近。

二、牛顿法特点

牛顿法的优点是收敛速度快,特别是当接近根的时候。然而,它也有以下缺点:

  • 需要计算函数的导数。
  • 收敛速度和初始猜测值的选择有很大关系,如果初始值选择不当,可能会导致不收敛。
  • 对于多根的方程,可能会收敛到非期望的根。

三、示例

以方程 f(x)=x^2-115 为例

迭代公式:x_{k+1}=x_{k}-(x_{k}^2-115)/(2*x_{k})

迭代次数0:令x_{0} = 5

迭代次数1:x_{1}=x_{0}-(x_{0}^2-115)/(2*x_{0})=5-(5^2-115)/(2*5)=14

依次类推,,,

四、代码


/*********
求解方程:
    f(x) = x^2 - 115
迭代公式:
    x_(k+1) = x_(k) - (x_(k)^2 - 115)/2*x_(k);
*/

#include <cmath>
#include <iostream>

bool NewTon(const float x, float& next_x) {

    const float e = 0.001;
    float fx = x*x - 115;
    if(std::fabs(fx) <= e) { //迭代终止条件
        return false;
    }

    next_x = x - fx/(2 * x);
    return true;
}

int main() {

    float x = 5.0;

    std::cout << "迭代次数:0: x = " << x << std::endl;

    int iteration = 500;
    while (iteration-- > 0) {
        if(!NewTon(x, x)) {
            break;
        }
        std::cout << "迭代次数:" <<  500 - iteration << ", x = " << x << std::endl;
    }

    std::cout << "最终结果: x = " <<  x << std::endl;

    return 0;
}

输出结果:

迭代次数:0: x = 5
迭代次数:1, x = 14
迭代次数:2, x = 11.1071
迭代次数:3, x = 10.7304
迭代次数:4, x = 10.7238
最终结果: x = 10.7238

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值