思想原理
为了求解积分值,人们想到一种近似方法。假设要求\(f(x)\)在\([a,b]\)上的积分,将积分区间等长分成\(n\)段,则每两个分段点之间的距离\(h={b-a}/n\),然后如下图进行近似
则该区间上的积分值就近似等同于每个小梯形的面积之和。
推导过程
这样原先的积分\(\int_{a}^bf(x)\)求解,可以进行如下推导
第一个梯形面积:上底\(f(x_0)\) 下底\(f(x_1)\) 高\(h=\frac{b-a}{2}\) ==> 面积$$S_1=\frac{(f(x_0)+f(x_1))h}{2}$$
同理第二个梯形面积 $$S_2=\frac{(f(x_1)+f(x_2))h}{2}$$\[... \]最后一个梯形面积: $$S_{n}=\frac{(f(x_{n-1})+f(x_n))*h}{2}$$
提取公因式\(\frac{h}{2}\),其中\(h=\frac{b-a}{2}\),于是,求和即可得到 $$\sum_{i=1}^nS_i = (\frac{b-a}{2n})[f(x_0)+2\sum_{i=1}^{n-1}f(x_i)+f(x_n)]$$
Result: $$\int_a^bf(x) \approx (\frac{b-a}{2n})[f(x_0)+2\sum_{i=1}^{n-1}f(x_i)+f(x_n)]$$
matlab代码实现
% matlab自带的函数求积分
fun = @(x) sin(x);
right = integral(fun,0,1);
fprintf('the right value is %f\n',right);
% 梯形近似
myanswer = trapezoidal(fun,0,1,1000);
fprintf('the appro value is %f\n',myanswer);
% Trapezoidal Rule 梯形规则
% 未设置精度
function re = trapezoidal(f,a,b,n)
h = (b-a)/ n;
y0 = f(a);
yn = f(b);
x0 = a;
sum = 0;
e = b-h;
for i = 1:n
next = x0 + h*i;
sum = sum + f(next);
end
re = (h/2)*(y0+yn+sum*2);
end
Result: