解非线性方程python实现牛顿迭代法

1.基本概念

        牛顿迭代法是一种求函数零点的方法,它是利用函数f(x)的泰勒展式的前几项来寻找方程f(x)=0的根的近似值。牛顿迭代法的基本思想是:对于方程f(x)=0,给定一个初值x0​,用其在该点处的切线与x轴交点为新的近似值,然后以新的近似值继续进行迭代,直到满足精度要求为止。

        具体来说,对于函数f(x),可以将其在点xn​处展开为二阶泰勒多项式:

f(x)=f\left(x_n\right)+\left(x-x_n\right) \dot{f}\left(x_n\right)+\frac{\left(x-x_n\right)^2}{2} \ddot{f}^{}(\xi)

        其中ξ是x和xn​之间的某个点,f'和f′′分别表示f(x)的一阶和二阶导数。令f(x)=0,则有:

x=x_n-\frac{f\left(x_n\right)}{f^{\prime}\left(x_n\right)}

        这个公式称为牛顿迭代法的迭代公式。不断使用这个公式,即可得到逐步逼近方程f(x)=0根的近似值。

        需要注意的是,牛顿迭代法对于初值的选取比较敏感,有时可能会导致不收敛或者收敛到错误的根上。此外,当函数f(x)的导数为0时,迭代公式中的分母会为0,也会导致收敛失败。

2.代码实现

        下面是一个简单的Python实现,求解多项式

f(x)=x^3+2 x^2+10 x-20

        初始解为x=2,f'(x)=3x^2+4x+10

"""
@Time : 2023/10/14 0012 13:21
@Auth : yeqc
"""


def f(x):
  return x**3+2*x**2+10*x-20

def df(x):
  return 3*x**2+4*x+10

x = 2
eps = 1e-6
while abs(f(x)) > eps:
  x = x - f(x)/df(x)
print(x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心不心安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值