牛顿法求根号数(Python)

30 篇文章 0 订阅
25 篇文章 8 订阅

简述

以前也是用过这个东西的,但是一直都不是很清楚原理。
后来理解了牛顿法了之后,发现这个东西,就是牛顿法的一个简单的应用而已。

代码

target: 就是目标数

x T + 1 = x T − f ( x T ) f ′ ( x T ) x_{T+1} = x_{T} - \frac{f(x_T)}{f'(x_T)} xT+1=xTf(xT)f(xT)

若收敛,则
x ∗ = x ∗ − f ( x ∗ ) f ′ ( x ∗ ) x_{*} = x_{*} - \frac{f(x_*)}{f'(x_*)} x=xf(x)f(x)
即,只有当 f ( x ∗ ) f(x_*) f(x)为0即可。
所以,求根号时,选择的方程为
f ( x ) = x 2 − N f(x) = x^2 - N f(x)=x2N

用牛顿法就可以计算出根号N

from sympy import *

x = symbols("x")

target = 10
func = x ** 2 - target
ffunc = diff(func, x)
MAXSTEP = 100
step_count = 0
x0 = target / 2
temp = func.subs(x, x0)
while step_count < MAXSTEP and abs(temp) > 1e-10:
    x0 = x0 - (temp / (ffunc.subs(x, x0)))
    temp = func.subs(x, x0)
    step_count += 1
print(x0)
print(step_count)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肥宅_Sean

公众号“肥宅Sean”欢迎关注

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

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

打赏作者

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

抵扣说明:

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

余额充值