[数学] Trapezoidal Rule 梯形法则


思想原理

为了求解积分值,人们想到一种近似方法。假设要求\(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:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM