利用牛顿公式求解方程的根并且实现牛顿下山法

本文探讨了牛顿公式在求解方程中的应用,通过对比牛顿求根法与牛顿下山法,展示了后者如何防止发散并加速收敛。通过实例分析,观察了两种方法在不同场景下的表现,特别关注了在非收敛和收敛函数上的区别。

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

实验要求
a. 实现牛顿公式,并分别找到收敛和发散的例子
算法介绍
牛顿公式原理如下图:

 

为了防止牛顿迭代发散并且加速迭代速度,所以我们在这里引入一个新的方法——
牛顿下山法:

 

根据牛顿公式原理以及牛顿下山法的原理,我们可以将算法进行代码实现。
算法步骤
牛顿求根法
1. 定义xy,x为所要求得根的大概位置,y为我们要求得根的精度;
2. 计算f(x);
3. 计算f(x)的导数f'(X);
4. 计算x = 1 - f(X) / f'(x);
5. 比较误差|f(x) - x| 是否小于y,若大于y则返回第二步,若小于y则跳出循环输出结果;
6. 注:在牛顿求根法中还要设置一个最大迭代次数,以免一些发散的例子导致一直循环而无法跳出循环。
牛顿下山法
1. 定义xyk,x为所要求得根的大概位置,y为我们要求得根的精度,k为下山因子初始值为1;
2. 计算f(x)并将其绝对值值赋给一个中间量mid;
3. 计算f(x)的导数f'(X);
4. 计算x = 1 -k * (f(X) / f'(x)) ;
5. 计算f(x)
6. 比较|f(x)|mid的大小,若|f(x)|小于mid,则继续计算,否则k = k/2,返回上一步;
7. 比较误差|f(x) - x| 是否小于y,若大于y则返回第二步,若小于y则跳出循环输出结果;
算法实现
实现算法所用语言:Python
牛顿求根公式实现代码牛顿下山法实现代码:
 
对比函数代码:实验结果

在这里我们选取一个特殊的函数作为例子:
 

 

这个函数在x = 1 x=2 处对于牛顿法不收敛,并且有两个根分别是-13.23483652635
x = 1 ,我们可以发现在发散部分牛顿求根公式根本没有办法求根,但是牛顿下山公式却可以求出方程的根:
 
虚线上方为牛顿求根公式,虚线下方为牛顿下山法公式。
x = 2.6 ,我们可以发现即便牛顿求根公式也可以求出方程的根但是收敛速度远远不如牛顿下山法:
 
虚线上方为牛顿求根公式,虚线下方为牛顿下山法公式。
同理,若我们选取一个收敛的例子:

 

 

x = 0.6时我们来对比牛顿求根公式与牛顿下山法的区别,也可以明显地看出牛顿下山法对牛顿求根公式收敛速度的优化效果:
 
虚线上方为牛顿求根公式,虚线下方为牛顿下山法公式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值