求解積分的數值方法——Matlab實現
阿新 • • 發佈:2019-02-13
求解節分的數值方法
方法主要是以下兩種的實現:
- 複合梯形公式
- 複合辛普森公式
實現程式碼見最下方
演算法實現
- 請採用複合梯形公式與複合辛普森公式,計算 sin(x)/x 在[0, 1]範圍內的積分。取樣點數目為 5、9、17、33。
設計思路
- 複合梯形公式,利用取樣點,每兩個相鄰的取樣點,利用梯形公式計算其積分,最後將所有小部分的積分加在一起
- 複合辛普森公式,同樣是利用取樣點,不過每相鄰的取樣點,在中間再取一個點,三點插值計算該部分的積分,最後加起來
數值實驗
- 複合梯形公式,不同數目取樣點的結果與精確解的關係
- 複合梯形公式,不同數目取樣點的結果與精確解的關係
結果分析
- 由複合梯形公式的結果可見,取樣點數越高,所要求的式子所求積分更加接近於精確解
- 複合辛普森公式則不同,在本道題題目要求下,取樣點越多,一開始越接近精確解,但是當超過一定數目後,遠離精確解
實現程式碼
- 複合型梯形公式
clear;
format long;
a1 = 0;
b1 = 1;
x = [5,9,17,33];
y(1) = oula(a1, b1, x(1));
y(2) = oula(a1, b1, x(2));
y(3) = oula(a1, b1, x(3));
y(4) = oula(a1, b1, x(4));
for s = 1:4
z(s) = 0.9460831;
end
y(2,:) = z;
plot(x,y);
function result = oula(a, b, n)
h = (b-a)/n;
x = 0.0;
for m = 1:n
x0 = a + (m-1)*h;
x1 = a + m*h;
if(x0 == a)
y0 = 1;
else
y0 = (sin(x0))/x0;
end
y1 = (sin(x1))/x1;
x = x + y0 + y1;
end
result = x * (h/2);
end
- 複合型辛普森公式
clear;
format long;
a = 0;
b = 1;
x = [5,9,17,33];
y(1) = simpson(a, b, x(1));
y(2) = simpson(a, b, x(2));
y(3) = simpson(a, b, x(3));
y(4) = simpson(a, b, x(4));
for s = 1:4
z(s) = 0.9460831;
end
y(2,:) = z;
plot(x,y);
function result = simpson(a, b, n)
h = (b-a)/n;
y0 = 0.0;
y1 = 0.0;
for m = 0:n-1
x0 = a + m*h;
x1 = x0 + h/2;
if(x0 == a)
y0 = 1;
else
y0 = y0 + (sin(x0))/x0;
end
y1 = y1 + (sin(x1))/x1;
end
fa = 1;
fb = (sin(b))/b;
result = (4*y1 + 2*y0 - fa + fb) * (h/6);
end