牛顿迭代法求开方的应用~
众所周知,徒手开根号有许多方法,最著名的就是长除法, 还有些别的方法,比如前段时间毕导在b站上的视频1分钟教你徒手开根号!卖计算器的都哭了...._哔哩哔哩_bilibili ,个人认为还是数形结合的方法好用ヾ(^▽^*))),如果你和我一样,看这个标题就好奇计算器是怎么开根号的呢?那就往下看!
-
牛顿迭代法
-
定义
牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法
公式
其实不难理解o(^▽^)o
原理
设方程函数,改方程可以变成
, 我们只需要求出函数
的解,就可以求出
的解, emm,不错o(* ̄︶ ̄*)o
那就倒进函数计算器模拟一波?推荐desmos :D
*注:如果是求开三次方跟,则迭代公式是 xn = 2/3*xn + x/(3*xn*xn)
-
理论可行,实践开始!!!
尝试求方程 f(x)=x^3-2=0的根(*^▽^*)
1.建立函数 f(x) 和它的导数 f'(x)
这个对大家一定没有难度啦(๑´ㅂ`๑)
def f(x):
return x**3 -2
def df(x):
return 3*x**2
2.加上迭代算法
def newton_ (f, df, x0, tol=1e-6, max_iter=100):
count = 0
while True:
x1 = x0 - f(x0)/df(x0)
if abs(x1 - x0) < tol:
break
x0 = x1
count += 1
if count >= max_iter:
raise ValueError("Iteration limit exceeded")
return x1
3.函数直接出解
root = newton_method(f, df, 1.5)
print("Root:", root)
-
这种方法的优缺点
1 优点
简而言之 就是迭代次数少精度高(对应收敛速度快)
其他优点占时想不到o(≧口≦)o
知道的欢迎在评论区讨论~
2 缺点
1.对目标函数有较高要求(例如海森矩阵必须正定)
2.实话说,计算量是有点大|(*′口`)
总结
这种迭代方法总的来说还是挺不错的
还有其他一些著名的迭代方法比如
最经典的迭代算法是欧几里得算法·,用于计算两个整数a,b的最大公约数
还有一个很典型的例子是斐波那契(Fibonacci)数列
-
一个扩展
泰勒展开?
眼神好的 肯定感觉很眼熟, 这也是泰勒展开到第二阶!