修正牛顿拉普森法(Modified Newton-Raphson MNR)求单根(python,数值积分)

第二十篇 修正牛顿拉普森法求单根

对于大型方程组,按照上篇的方法需要一直计算导数的值,这可能会使迭代过程变得费时费力。可以使用一种改进的方法(还有许多其他的“改进的”方法),其中第一次评估的f‘(x0)的值用于整个迭代过程的外推。按下图所示,可以看到外推线现在与初始猜测值x0对应的导数一直平行。
在这里插入图片描述
计算实例:
使用修正牛顿拉普森求下面函数在x=2附近的根
在这里插入图片描述
修正牛顿拉普森公式为
在这里插入图片描述
因此这个例子可以变化成
在这里插入图片描述

迭代结果可以展示在下面这个表格中在这里插入图片描述
这种情况下的收敛速度相当慢,因为一直保持x=2时的梯度值,但这个梯度值实际上与根植x≈1.32472的“正确”梯度相差很多。
程序如下:
其中分为一个主程序和一个检查是否收敛的子程序check,和求解的非线性方程f35,和这个方程的导数f35’。

#对于一个单根的修正牛顿拉普森法
import B
x0=1.0;tol=1e-5;limit=100
print('开始的猜测值',x0)
print('前几次迭代值')
iters=0
def f35(x):
    f35=x**3-x-1.0
    return f35
def f35dash(x):
    f35dash=3.0*x**2-1.0
    return f35dash
fd=f35dash(x0)
while(True):
    iters=iters+1
    x1=x0-f35(x0)/fd
    if  B.check(x1,x0,tol)==True or iters==limit:
        break
    x0=x1
    if iters<5:
        print(x1)
print('迭代到收敛的次数',iters)
print('解',x1)
check
def check(x1,x0,tol):
  check=not abs(x1-x0)/abs(x0)>tol
  return check

终端输出结果如下
在这里插入图片描述
程序结果与计算结果一致。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深渊潜航

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

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

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

打赏作者

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

抵扣说明:

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

余额充值