Sqrtx python 牛頓迭代法詳解

2021-08-19 20:05:10 字數 2612 閱讀 2731

「」」

實現 int sqrt(int x) 函式。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

輸入: 4

輸出: 2

示例 2:

輸入: 8

輸出: 2

說明: 8 的平方根是 2.82842…,

由於返回型別是整數,小數部分將被捨去。

implement int sqrt(int x).

compute and return the square root of x.

「」」

我們要求x2

=ax 2=

a就是求x2

−a=0

x 2−

a=0的解,且x為非負數。

解決sqrt求平方根可以採取牛頓迭代法,下面簡單介紹一下牛頓迭代法,更多的可以自己搜搜。

在曲線上隨便找乙個的a點,(事先不知道根點就是解在那兒,所以隨便找乙個點),做乙個切線,切線的根(就是和x軸的交點)與曲線的根,存在一定的距離。可以從這個切線的根出發,做一根垂線,和曲線相交於b點,繼續重複剛才的工作:可以發現

b點比之前a點更接近曲線的根點。那麼經過多次迭代後會越來越接近曲線的根。

已知曲線方程f(

x)f (x

),在xn

x

n點做切線,求xn

n點的切線方程為:f(

xn)+

f′(x

n)(x

−xn)

f (x

n)+f

′(xn

)(x−

xn)。 要求x

n+1 xn+

1,就求f(

xn)+

f′(x

n)(x

−xn)

=0f (x

n)+f

′(xn

)(x−

xn)=

0的解。

可以得到f(

xn)+

f′(x

n+1)

(x−x

n)=0

f (x

n)+f

′(xn

+1)(

x−xn

)=0=>

=>

xn+1=xn

−f(x

n)f′

(xn)

x n+

1=xn

−f(x

n)f′

(xn)

; 我們將xn+

1 xn+

1代入到x2

−a=0

x 2−

a=0中,可以得到乙個比xn

+1x n+

1更接近與方程的根點(解),多次迭代就可以得到乙個近似於a−

−√a

的x x

。 即x=

(xn+

axn)

2' role="presentation">x=(

xn+a

xn)2

x=(x

n+ax

n)2所以**就如下所示

class

solution

(object):

defmysqrt

(self, x):

""" :type x: int

:rtype: int

"""result = 1.0

while abs(result * result - x) > 0.1:

result = (result + x / result) / 2

return int(result)

至於如何設計逼近的程度,取決於設定的精度。如0.1…..等。

但是如何確定b點就比a點更接近與根點。可以就這題而言,做差最簡單。 |x

n−(x

n+ax

n)2|

−|xn

+1−(

xn+a

xn)2

|>

0 |xn

−(xn

+axn

)2|−

|xn+

1−(x

n+ax

n)2|

>

0xn+

1=xn

−f(x

n)f′

(xn)

x n+

1=xn

−f(x

n)f′

(xn)

就可以得出!

ps:這題雖然簡單,但是確實讓我好學了一把牛頓迭代法!

牛頓迭代 牛頓下山

2009 11 18 16 59 51 分類 計算方法數學類 字型大小 訂閱 牛頓迭代法,牛頓下山迭代 include include float newtonfun float x0,float c float xiashanfun float x0,float c float fun1 floa...

重聚 牛頓迭代

給出n和p,求最小的正整數x使得x p q 有斯特林公式n 2 n n e n 取個log得log n 0.5 log 2 pi n 0.5 log n n 然後log p q q log p 不過二分是過不去的 這個函式可以牛頓迭代,就是對於乙個x,在函式上做切線,與x軸的交點作為下一次的x 複雜...

牛頓法和牛頓迭代法

牛頓法,大致的思想是用泰勒公式的前幾項來代替原來的函式,然後對函式進行求解和優化。牛頓法和應用於最優化的牛頓法稍微有些差別。牛頓法用來迭代的求解乙個方程的解,原理如下 對於乙個函式f x 它的泰勒級數展開式是這樣的 f x f x 0 f x 0 x x 0 frac f x 0 x x 0 2 f...