基於牛頓法的開平方實現

2021-09-18 06:55:42 字數 1801 閱讀 8952

牛頓法是求解最優問題的一種常用方法。

本文主要在實現使用牛頓法進行開平方操作,**使用python實現。在開平方求解中,更多的可以參考這篇文章。牛頓法是一種最優化求解方法,在迭代過程中求取到最接近解的值,類似的還有梯度下降等等。

這裡主要講解我對該方法的推導,有錯誤之處麻煩指出。

首先針對開根號求解,可用以下式子描述:

x =n

x=\sqrt

x=n​

將該式換成:

x 2=

nx^=n

x2=n

移項得x2−

n=0x^ - n = 0

x2−n=0

要求出n的開跟結果,其實就是求出該式的解,對於該式,可以描述為:

x 2−

n=yx^ - n = y

x2−n=y

也就是求出該拋物線與x軸的交點,因為實數範圍內求出的開根號結果大於0,因此只需要計算大於零的一邊。對於該式的求解,牛頓法的迭代速度較快。

圖中,首先給定初始的值,這個值可以隨便給,圖中選的是x=4,如紅色豎線所示。牛頓法的精髓就在於,給定初始值之後,能夠快速下降到目標解。在x=4這一點,獲取該點的切線,如圖紫色斜線所示。求出該點切線與x軸交點即為下次迭代的x值,最後迭代多次之後,如果在誤差範圍內,輸出結果。

令給定乙個初始值x1x_

x1​。

在式中:

x 2−

n=yx^ - n = y

x2−n=y

其對應的點為(x1

,x12

−n)(x_,x_^ - n)

(x1​,x

12​−

n),該點對應的斜率為 2x1,斜率公式為:

2 x=

y2x = y

2x=y

斜率公式可通過對x求導得出。將點和斜率帶入斜線公式:

a x+

b=yax+b=y

ax+b=y

求得下乙個迭代的點為:

x 2=

−ba=

n2x1

+x12

x_=\frac=\frac}+\frac}

x2​=a−

b​=2

x1​n

​+2x

1​​迭代多次,知道求出xn−

xn−1

<

δx_-x_

xn​−xn−1​

\delta

δ為自定的誤差範圍。

**如下:

def squareroot(n):

tx = 100

lstx = tx

for i in range(10):

tx = (n / tx / 2 + tx / 2)

if (abs(tx - lstx) < 0.0000001):

break

lstx = tx

return tx

測試了本方法與系統自帶方法運算效率:

可能是因為python的原因,結果雖然正確,但是時間上時系統自帶方法的兩倍。但是就算如此,該方法也比二分法好。

github link:

利用牛頓迭代法求解開平方

牛頓迭代法是用來求函式零點的一種方法,求得的結果為數值解,速度較快。如圖所示,從 x n 開始迭代,過 x n,f x n 點作曲線 f x 的切線 圖中的紅色虛線 該切線的方程為 y f x n f x n x x n 令y等於0,此時x的值即為 x 的值 0 f x n f x n x x n ...

基於 8086 組合語言 減奇數法開平方

用減奇數法,可以求近似平方根。那位大俠能給個匯程式設計序啊,感激不盡!最佳答案 程式如下 data segment num dw 12345 被開方數 0 65535 mes i db srqt is 用於提示.data ends code segment assume cs code,ds dat...

C C 二分法實現開平方

1.數學原理 求乙個數c的平方等價於求方程 x2 cx c x2 c 的解,方程解的問題可以轉換為函式零點問題。即求函式 f x x2 c f x x c f x x 2 c的零點。零點定理 若f a f b 0則 m in a,b 有f m 0 由零點定理可知,只需估計a,b的值,令m a b 2...