如果有人問2的算術平方根是多少,相信所有的程式員都會張口說出1.414這個答案。不過,要是精度要求更高一點,大多數的程式員就隻能依賴電腦了。比如,Python程式員會這樣寫:
>>> pow(2, 1/2)
1.4142135623730951
或者,像下面這樣寫,也沒有問題:
>>> 2**(1/2)1.4142135623730951
但是,如果想要通過計算的方式(不是指在草紙上手工開方),得到高精度的結果,作為程式員應該如何寫代碼呢?這裡,以計算2的算術平方根為例,介紹科學巨人牛頓的逼近法。
def f(x): # 定義函數f(x)
return x**2 - 2def df(x): # 定義函數f(x)的導函數
return 2*xdef newton_raphson_method(): # 牛頓-拉弗森方法
tiny = 1e-15 # 當f(x_n)小于tiny時,疊代結束
i, x = 0, 2 # 疊代計數器和初始值
while True:
i += 1 # 疊代計數器加1
x = x-f(x)/df(x) # 計算下一個x
if abs(f(x)) < tiny: # 滿足疊代結束條件
print('\n經過%d次疊代,2的算術平方根為%.030f'%(i, x)) breakif __name__ == '__main__':
newton_raphson_method()