牛顿迭代法

牛顿迭代法

牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。

对于形如 f ( x ) = 0 f(x)=0 f(x)=0的方程,首先任意估算一个解 x 0 x_0 x0,再把该估计值代入原方程中。由于一般不会正好选择到正确的解,所以有 f ( x ) = a f(x)=a f(x)=a。这时计算函数在 x 0 x_0 x0处的斜率,和这条斜率与x轴的交点 x 1 x_1 x1

f ( x ) = 0 f(x)=0 f(x)=0中精确解的意义是,当取得解的时候,函数值为零(即 f ( x ) f(x) f(x)的精确解是函数的零点)。因此, x 1 x_1 x1 x 0 x_0 x0更加接近精确的解。只要不断以此方法更新x,就可以取得无限接近的精确的解。

但是,有可能会遇到牛顿迭代法无法收敛的情况。比如函数有多个零点,或者函数不连续的时候。
在这里插入图片描述
由上图可知, f ( x n ) x n − x n + 1 = f ′ ( x ) \displaystyle\frac{f(x_n)}{x_n - x_{n+1}} = f'(x) xnxn+1f(xn)=f(x)
所以 x n + 1 = x n x_{n+1} = x_n xn+1=xn − - f ( x n ) f ′ ( x n ) \displaystyle\frac{f(x_n)}{f'(x_{n})} f(xn)f(xn)
例题
添加链接描述
code

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
ll a, b, c;
double x;
int main() 
{
    cin >> a >> b >> c;
    x = 1.0;
    while(fabs(pow(x, a) + b * log(x) - c) >= 1e-7)
        x -= (pow(x, a) + b * log(x) - c) / (a * pow(x, a-1) + b/x);
    cout << setprecision(14) << fixed << x << endl;
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值