More Related Content
More from hungchiayang1 (18)
Ppt 145-149
- 2. 數值求根法 :二分逼近法 (一)
146
求根步驟:
1. 設定容許誤差 tol > 0
2. 尋找區間 [a,b] 使得根 r 在區間內,且 f(a)f(b) < 0 ,
設定 fa = f(a),fb = f(b)
3. c 為 [a,b] 中點,計算 f(c) ,設定 fc = f(c) 。
4. 如果 |fc| < tol,則 c 為近似根,輸出 c 後停止計算
5. 如果 fa · fc < 0,則根在 [a,c] 之間,更新 b = c 與 fb = fc;
如果 fc · fb < 0,則根在 [c,b] 之間,更新 a = c 與 fa = fc
6. 回到步驟 3 執行
國立中央大學數學系
- 3. 147
import math
# 函數 : x**2 - 2 與一次微分: 2x
def f(x) : x**2 - 2
def df(x) : 2*x
# 根
r = math.sqrt(2)
# 二分逼近法
a , b , k = 1 , 2 , 0
fa , fb = f(a) , f(b)
tol = 1.e-5
print( ”> 二分逼近法: 起始區間 (”, a , ”,” , b , ”)” , sep=”” )
while True :
c = (a + b)/2
err = abs(c-r)
k += 1
# 迭代次數 近似根 誤差,以下 10e 代表以 10 格與科學記號呈現數字
print( "{:<2} : {:<10e} {:<10e}".format(k,c,err) , sep="" )
fc = f(c)
數值求根法 :二分逼近法 (二)
國立中央大學數學系
- 4. 148
# 函數絕對值小於 tol 才跳離迭代
if abs(fc) < tol : break
if fc * fa < 0 :
b = c
fb = fc
else :
a = c
fa = fc
print()
數值求根法 :二分逼近法 (三)
國立中央大學數學系
- 5. 149
程式輸出:
> 二分逼近法: 起始區間 [1,2]
1 : 1.500000e+00 8.578644e-02
2 : 1.250000e+00 1.642136e-01
3 : 1.375000e+00 3.921356e-02
4 : 1.437500e+00 2.328644e-02
5 : 1.406250e+00 7.963562e-03
6 : 1.421875e+00 7.661438e-03
7 : 1.414062e+00 1.510624e-04
8 : 1.417969e+00 3.755188e-03
9 : 1.416016e+00 1.802063e-03
10 : 1.415039e+00 8.255001e-04
11 : 1.414551e+00 3.372189e-04
12 : 1.414307e+00 9.307825e-05
13 : 1.414185e+00 2.899206e-05
14 : 1.414246e+00 3.204310e-05
15 : 1.414215e+00 1.525518e-06
數值求根法 :二分逼近法 (四)
國立中央大學數學系