[數學] 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