用牛頓法求正數的開方值
阿新 • • 發佈:2020-12-20
**
用牛頓法求正數的開方值
**
牛頓迭代公式形式:
程式碼:
#用牛頓法經過迭代求任意正數a的開方值
from sympy import *
def f(x,a): #定義函式f,返回原方程
return (x**2)-(a)
def f1(x): #定義函式f1,返回函式導數
return 2*x
def Newton(x0,a):
for n in range(1,8): #設定迴圈次數和n的起始值
x1=x0-(f(x0,a)/(f1(x0)))
m=x1- x0
if abs(x1-x0)<10**-5:
break
else:
x0 = x1 #上一步的計算結果賦值給x0,進行下一次迭代。
print("迭代次數:",n)
print("迭代結果:","{0:.5f}".format(x1)) #結果保留五位小數
print("誤差:","{0:.5f}".format(abs(m)),'\n')
Newton( 10,115) #呼叫Newton函式,迭代初始值為10,求115的開方值
結果:
迭代次數: 1
迭代結果: 10.75000
誤差: 0.75000
迭代次數: 2
迭代結果: 10.72384
誤差: 0.02616
迭代次數: 3
迭代結果: 10.72381
誤差: 0.00003
結論:
從結果來看用牛頓迭代法求一個正數的開方值只需迭代很少次數就可以得到一個精度很高的近似值,所以牛頓法的收斂速度很快。