求解节分的数值方法
方法主要是以下两种的实现:
- 复合梯形公式
- 复合辛普森公式
实现代码见最下方
算法实现
- 请采用复合梯形公式与复合辛普森公式,计算 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