SlideShare a Scribd company logo
1 of 4
數值求根法 :牛頓迭代法 (一)
 求根步驟:
1. 設定容許誤差 tol > 0
2. 猜測起始近似根為 a
3. 計算 f(a) 與 f’(a)
4. 計算 b = a −
5. 如果 |f(b)| < tol ,則 b 為近似根,輸出 b 後停止計算
6. 更新 a = b ,回到步驟 3
1
國立中央大學數學系
 不良的起始近似根 a 可能造成求根步驟無法收斂,此時要變更起始近似根。
起始近似根可透過函數圖形來估算。
2
數值求根法 :牛頓迭代法 (二)
 以上兩種求根法是否收斂都跟起始設定有關,二分逼近法起始求根範圍
(a,b) 如果不滿足 f(a)f(b) < 0,則演算步驟不成立。牛頓法的起
始根 a 若不靠近函數根 r ,往往造成近似根不收斂。為了確保兩個方
法都能收斂,可先用畫圖法畫出函數圖形,由中觀察根的大概位置,然
後找出二分逼近法的起始範圍 (a,b) 或是牛頓法的起始點 a 。
一般來說,二分逼近法是最緩慢的求根法,牛頓求根法的收斂速度則是
相當快,幾次迭代就可快速逼近函數根。
 本程式利用函式來設定求根函數與其一次微分函數,此範例的求根函數為
f(x) = − 2,函數根 r 為 ,一次微分則為 f(x) = 2x 。
函數根 r 用來計算根的誤差,決定近似根的品質。兩種求根法都以近似
根的函數值是否小於容忍值 tol 來決定是否跳離迴圈結束迭代。
國立中央大學數學系
3
import math
# 函數 : x**2 - 2 與一次微分: 2x
def f(x) :
return x**2 - 2
def df(x) :
return 2*x
# 根
r = math.sqrt(2)
# 牛頓迭代法
a , k , tol = 2 , 0 , 1.e-14
err = abs(a-r)
print( "> 牛頓迭代法:" )
print( "{:<2} : {:<10e} {:<10e}".format(k,a,err) , sep="" )
while True :
b = a - f(a)/df(a)
err = abs(b-r)
k += 1
# 迭代次數 近似根 誤差,以下 10e 代表以 10 格與科學記號呈現數字
print( "{:<2} : {:<10e} {:<10e}".format(k,b,err) , sep="" )
# 函數絕對值小於 tol 才跳離迭代
if abs(f(b)) < tol : break
a = b
數值求根法 :牛頓迭代法 (三)
國立中央大學數學系
4
程式輸出:
> 牛頓迭代法:
0 : 2.000000e+00 5.857864e-01
1 : 1.500000e+00 8.578644e-02
2 : 1.416667e+00 2.453104e-03
3 : 1.414216e+00 2.123901e-06
4 : 1.414214e+00 1.594724e-12
5 : 1.414214e+00 0.000000e+00
數值求根法 :牛頓迭代法 (四)
國立中央大學數學系

More Related Content

More from mclmath

函數微分_習題1.pptx
函數微分_習題1.pptx函數微分_習題1.pptx
函數微分_習題1.pptxmclmath
 
函數微分_範例.pptx
函數微分_範例.pptx函數微分_範例.pptx
函數微分_範例.pptxmclmath
 
函數畫圖_習題3.pptx
函數畫圖_習題3.pptx函數畫圖_習題3.pptx
函數畫圖_習題3.pptxmclmath
 
函數畫圖_習題2.pptx
函數畫圖_習題2.pptx函數畫圖_習題2.pptx
函數畫圖_習題2.pptxmclmath
 
函數畫圖_習題1.pptx
函數畫圖_習題1.pptx函數畫圖_習題1.pptx
函數畫圖_習題1.pptxmclmath
 
函數畫圖.pptx
函數畫圖.pptx函數畫圖.pptx
函數畫圖.pptxmclmath
 
9習題五.pptx
9習題五.pptx9習題五.pptx
9習題五.pptxmclmath
 
9習題四.pptx
9習題四.pptx9習題四.pptx
9習題四.pptxmclmath
 
SymPy在微積分上的應用:範例.pptx
SymPy在微積分上的應用:範例.pptxSymPy在微積分上的應用:範例.pptx
SymPy在微積分上的應用:範例.pptxmclmath
 
SymPy在微積分上的應用.ppt
SymPy在微積分上的應用.pptSymPy在微積分上的應用.ppt
SymPy在微積分上的應用.pptmclmath
 
極座標畫圖:範例程式.pptx
極座標畫圖:範例程式.pptx極座標畫圖:範例程式.pptx
極座標畫圖:範例程式.pptxmclmath
 
SymPy範例程式講義下載連結更新.ppt
SymPy範例程式講義下載連結更新.pptSymPy範例程式講義下載連結更新.ppt
SymPy範例程式講義下載連結更新.pptmclmath
 
Taylor exercise1
Taylor exercise1Taylor exercise1
Taylor exercise1mclmath
 

More from mclmath (13)

函數微分_習題1.pptx
函數微分_習題1.pptx函數微分_習題1.pptx
函數微分_習題1.pptx
 
函數微分_範例.pptx
函數微分_範例.pptx函數微分_範例.pptx
函數微分_範例.pptx
 
函數畫圖_習題3.pptx
函數畫圖_習題3.pptx函數畫圖_習題3.pptx
函數畫圖_習題3.pptx
 
函數畫圖_習題2.pptx
函數畫圖_習題2.pptx函數畫圖_習題2.pptx
函數畫圖_習題2.pptx
 
函數畫圖_習題1.pptx
函數畫圖_習題1.pptx函數畫圖_習題1.pptx
函數畫圖_習題1.pptx
 
函數畫圖.pptx
函數畫圖.pptx函數畫圖.pptx
函數畫圖.pptx
 
9習題五.pptx
9習題五.pptx9習題五.pptx
9習題五.pptx
 
9習題四.pptx
9習題四.pptx9習題四.pptx
9習題四.pptx
 
SymPy在微積分上的應用:範例.pptx
SymPy在微積分上的應用:範例.pptxSymPy在微積分上的應用:範例.pptx
SymPy在微積分上的應用:範例.pptx
 
SymPy在微積分上的應用.ppt
SymPy在微積分上的應用.pptSymPy在微積分上的應用.ppt
SymPy在微積分上的應用.ppt
 
極座標畫圖:範例程式.pptx
極座標畫圖:範例程式.pptx極座標畫圖:範例程式.pptx
極座標畫圖:範例程式.pptx
 
SymPy範例程式講義下載連結更新.ppt
SymPy範例程式講義下載連結更新.pptSymPy範例程式講義下載連結更新.ppt
SymPy範例程式講義下載連結更新.ppt
 
Taylor exercise1
Taylor exercise1Taylor exercise1
Taylor exercise1
 

牛頓迭代法_範例.pptx

  • 1. 數值求根法 :牛頓迭代法 (一)  求根步驟: 1. 設定容許誤差 tol > 0 2. 猜測起始近似根為 a 3. 計算 f(a) 與 f’(a) 4. 計算 b = a − 5. 如果 |f(b)| < tol ,則 b 為近似根,輸出 b 後停止計算 6. 更新 a = b ,回到步驟 3 1 國立中央大學數學系  不良的起始近似根 a 可能造成求根步驟無法收斂,此時要變更起始近似根。 起始近似根可透過函數圖形來估算。
  • 2. 2 數值求根法 :牛頓迭代法 (二)  以上兩種求根法是否收斂都跟起始設定有關,二分逼近法起始求根範圍 (a,b) 如果不滿足 f(a)f(b) < 0,則演算步驟不成立。牛頓法的起 始根 a 若不靠近函數根 r ,往往造成近似根不收斂。為了確保兩個方 法都能收斂,可先用畫圖法畫出函數圖形,由中觀察根的大概位置,然 後找出二分逼近法的起始範圍 (a,b) 或是牛頓法的起始點 a 。 一般來說,二分逼近法是最緩慢的求根法,牛頓求根法的收斂速度則是 相當快,幾次迭代就可快速逼近函數根。  本程式利用函式來設定求根函數與其一次微分函數,此範例的求根函數為 f(x) = − 2,函數根 r 為 ,一次微分則為 f(x) = 2x 。 函數根 r 用來計算根的誤差,決定近似根的品質。兩種求根法都以近似 根的函數值是否小於容忍值 tol 來決定是否跳離迴圈結束迭代。 國立中央大學數學系
  • 3. 3 import math # 函數 : x**2 - 2 與一次微分: 2x def f(x) : return x**2 - 2 def df(x) : return 2*x # 根 r = math.sqrt(2) # 牛頓迭代法 a , k , tol = 2 , 0 , 1.e-14 err = abs(a-r) print( "> 牛頓迭代法:" ) print( "{:<2} : {:<10e} {:<10e}".format(k,a,err) , sep="" ) while True : b = a - f(a)/df(a) err = abs(b-r) k += 1 # 迭代次數 近似根 誤差,以下 10e 代表以 10 格與科學記號呈現數字 print( "{:<2} : {:<10e} {:<10e}".format(k,b,err) , sep="" ) # 函數絕對值小於 tol 才跳離迭代 if abs(f(b)) < tol : break a = b 數值求根法 :牛頓迭代法 (三) 國立中央大學數學系
  • 4. 4 程式輸出: > 牛頓迭代法: 0 : 2.000000e+00 5.857864e-01 1 : 1.500000e+00 8.578644e-02 2 : 1.416667e+00 2.453104e-03 3 : 1.414216e+00 2.123901e-06 4 : 1.414214e+00 1.594724e-12 5 : 1.414214e+00 0.000000e+00 數值求根法 :牛頓迭代法 (四) 國立中央大學數學系