實驗9 數值積分實驗
成績 |
實驗類型:●驗證性實驗 ○綜合性實驗 ○設計性實驗
實驗目的:進一步熟練掌握變步長數值積分算法,提高程式設計能力和解決定積分問題的實踐技能。
實驗内容:用龍貝格積分算法計算

實驗原理
實驗算例中a=0,b=1,f(x)=x2 .
T(0)=(b-a)(f(a)+f(b))/2 ; H(0) =(b-a)·f( (a+b)/2 ) ; T(i)=(T(i-1)+H(i-1))/2
T(i)的語義是将積分區間做2i 等分複化梯形求積分公式算出的近似值。
H(i)的語義是将積分區間做2i 等分時,将每個小區間的長度乘該小區間中點處函數值的乘積進行累加求和的結果。
龍貝格積分算法:生成i>=j 的積分近似值表R(i, j)具體計算如下:.
R(i,0)=T(i)=(T(i-1)+H(i-1))/2, i>=0,T(i)為區間逐次減半遞推梯形求積分公式算出的結果;
R(i,1)=S(i), i>=1,S(i)為由T(i)、T(i-1)聯合遞推得出的區間逐次減半遞推辛普森求積分公式算出的結果;
R(i,2)=B(i), i>=2,B(i)為由S(i)、S(i-1)聯合遞推得出布爾求積分公式算出的結果;
,,,,,,,,,,;歸納總結有如下遞推關系式
由上面遞推關系式計算積分近似值R(i, j)構成三角表,循環結束條件:|R(i, i)-R(i-1, i-1)|<< span="">
成立時,則以R(i, i)作為最終的積分近似值,否則繼續循環計算。這一算法叫龍貝格積分算法,
實驗步驟
1 要求上機實驗前先編寫出程式代碼
2 編輯錄入程式
3 調試程式并記錄調試過程中出現的問題及修改程式的過程
4 經反複調試後,運作程式并驗證程式運作是否正确。
5 記錄運作時的輸入和主要中間結果輸出,以便與手工解算作比較。
6 要求在A4紙上手工計算并和計算機程式計算的主要中間結果進行比較,驗證手工解算和機器解算的R(i, j)構成三角表是否一緻。
實驗報告:根據實驗情況和結果撰寫并遞交實驗報告。
實驗總結 (學會了......; 掌握了......; 訓練了......; 發現了......; 今後學習中......有待提高。)
程式代碼(MATLAB程式,必須自己獨立程式設計)
電子報告word檔案命名規則:專業班級-學号後兩位-實驗X-姓名.doc, 如資訊123班學号為201212030315的郭海濤同學實驗9報告word檔案命名則應是:資訊123-15-實驗9-郭海濤.doc, 其中 .doc是Word檔案擴充名。特别提醒:電子報告檔案命名不規範的報告将不予接收。
一、實驗代碼
function s = maromb(fun,a,b,tol)
%用龍貝格公式求積分
%格式:s = maromb(fun,a,b,tol),fun 是被積函數,a,b是積分
%下、上限,tol 是容許誤差,s 是傳回積分近似值
if nargin < 4,tol = 1e-4;end
i = 1;j = 1;h = b - a;
T(1,1) = h * (feval(fun,a) + feval(fun,b)) / 2;
T(i+1,j) = T(i,j)/2 + sum(feval(fun,a + h/2:h:b - h/2)) * h/2;
T(i+1,j+1) = (4^j * T(i+1,j) - T(i,j)) / (4^j - 1);
while (abs(T(i+1,i+1) - T(i,i)) > tol)
i = i+1;
h = h/2;
T(i+1,1) = T(i,1)/2 + sum(feval(fun,a + h/2:h:b - h/2)) * h/2;
for j = 1:i
T(i+1,j+1) = (4^j * T(i+1,j) - T(i,j)) / (4^j - 1);
end
end
T
s = T(i+1,j+1);
運作結果:
>> fun = inline('x.^2');
>> a = 0;
>> b = 1;
>> tol = 1e-5;
>> s = maromb(fun,a,b,tol)
T =
0.5000 0 0
0.3750 0.3333 0
0.3438 0.3333 0.3333
s =
0.3333
二、實驗總結
通過本次實驗我學會了使用龍貝格公式求積分的算法程式;掌握了使用龍貝格算法求解積分的本領;訓練了我的程式設計的能力和把數學問題轉化為算法的能力;在本次實驗中我發現了自己在程式設計方面和思考問題方面的一些不足;在今後的學習中我的程式設計能力和編寫算法的能力有待提高。