More Related Content
Similar to Ppt 167-173 (20)
More from hungchiayang1 (20)
Ppt 167-173
- 4. 數值積分法 (三)
170
本題分別利用迴圈與公式來估算 的積分,觀察
程式碼可知使用迴圈的計算方式遠比公式來得笨拙許多,主要原因在公
式計算積分中,我們利用了 python 的串列截取語法迅速取得部份串
列,使用一列式子即能求得梯形法的積分估算值,例如以下的式子雖然
看不到迴圈,但卻有滿滿的「迴圈」精神:
# 梯形法係數:1,2,2,2,...,2,2,1
isum2 = h * sum( [ ys[0] , 2*sum(ys[1:-1]) , ys[-1] ] ) / 2
以上的 ys 為函數值串列。
由程式執行結果可知,三種數值積分法的積分誤差:
Simpson 積分法 < 梯形積分法 < 矩形積分法
執行結果完全符合數值積分的理論預期。
國立中央大學數學系
- 5. 數值積分法 (四)
171
import pylab
pi = pylab.pi
# [a,b] 100 等份
a , b , n = pi/4 , pi , 100
# 定義函式
fn = lambda x : abs( pylab.sin(x) - pylab.cos(x) )
# 取等份點成 xs ,向量式運算得 ys
xs , h = pylab.linspace(a,b,n+1,retstep=True)
ys = abs( pylab.sin(xs) - pylab.cos(xs) )
# rsum : 矩形面積
# lsum : 下矩形面積 , usum : 上矩形面積 , tsum : 梯形面積
rsum , lsum , usum , tsum = 0 , 0 , 0 , 0
y1 = ys[0]
# 迴圈計算:矩形、上矩形、下矩形、梯形
for y2 in ys[1:] :
rsum += y1
if y1 < y2 :
lsum += y1
usum += y2
else :
lsum += y2
usum += y1
tsum += y1 + y2
y1 = y2
國立中央大學數學系
- 6. 數值積分法 (五)
172
rsum *= h
lsum *= h
usum *= h
tsum *= h/2
isum = 1 + pylab.sqrt(2) # 正確解
print( "數學積分 :" , round(isum,9) , end="nn" )
print( "迴圈求積:" )
print( "矩形積分 :" , round(usum,9) , " 誤差:" , round(abs(isum-rsum),10) )
print( "上矩形積分 :" , round(usum,9) , " 誤差:" , round(abs(isum-usum),10) )
print( "下矩形積分 :" , round(lsum,9) , " 誤差:" , round(abs(isum-lsum),10) )
print( "梯形積分法 :" , round(tsum,9) , " 誤差:" , round(abs(isum-tsum),10) )
print()
# 公式計算:矩形、梯形、Simpson
# 矩形法係數:1,1,1,1,...,1,1
isum1 = h * sum( ys[:-1] )
# 梯形法係數:1,2,2,2,...,2,2,1
isum2 = h * sum( [ ys[0] , 2*sum(ys[1:-1]) , ys[-1] ] ) / 2
# Simpson 1/3 rule 係數:1,4,2,4,2,...,2,4,1
isum3 = h * sum([ ys[0], 4*sum(ys[1:-1:2]), 2*sum(ys[2:-1:2]), ys[-1] ]) / 3
國立中央大學數學系
- 7. 數值積分法 (六)
173
print( "公式求積:" )
print( "矩形積分法 :" , round(isum1,9) , " 誤差:" , round(abs(isum-isum1),10) )
print( "梯形積分法 :" , round(isum2,9) , " 誤差:" , round(abs(isum-isum2),10) )
print( "Simpson積分:" , round(isum3,9) , " 誤差:" , round(abs(isum-isum3),10) )
程式輸出:
數學積分 : 2.414213562
迴圈求積:
矩形積分 : 2.435641493 誤差: 0.0118926641
上矩形積分 : 2.435641493 誤差: 0.0214279302
下矩形積分 : 2.392562249 誤差: 0.0216513135
梯形積分法 : 2.414101871 誤差: 0.0001116917
公式求積:
矩形積分法 : 2.402320898 誤差: 0.0118926641
梯形積分法 : 2.414101871 誤差: 0.0001116917
Simpson積分: 2.414213567 誤差: 4.1e-09
國立中央大學數學系