天天看點

牛頓法求根号數(Python)

簡述

以前也是用過這個東西的,但是一直都不是很清楚原理。

後來了解了牛頓法了之後,發現這個東西,就是牛頓法的一個簡單的應用而已。

代碼

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​=xT​−f′(xT​)f(xT​)​

若收斂,則

x ∗ = x ∗ − f ( x ∗ ) f ′ ( x ∗ ) x_{*} = x_{*} - \frac{f(x_*)}{f'(x_*)} x∗​=x∗​−f′(x∗​)f(x∗​)​

即,隻有當 f ( x ∗ ) f(x_*) f(x∗​)為0即可。

是以,求根号時,選擇的方程為

f ( x ) = x 2 − N f(x) = x^2 - N f(x)=x2−N

用牛頓法就可以計算出根号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)