MATLAB - 梯形法則



梯形法則是一種用於逼近函式定積分的數值方法。它透過將曲線下的面積分成一系列梯形而不是矩形(如矩形法則),然後將它們的面積相加來獲得總積分的估計值。

梯形法則的步驟詳解

步驟 1 - 分割區間 [a, b]

應用梯形法則的第一步是將要積分函式 f(x) 的區間 [a,b] 分成 n 個寬度相等的子區間 Δx。

每個子區間的寬度 Δx 計算如下:

$$\mathrm{\Delta x\: = \: \frac{b \: - \: a}{n}}$$

此分割得到 n+1 個點 x0,x1,x2,…,xn,其中

$$\mathrm{x_{i} \: = \: a \: + \: i\cdot\Delta x \:\:for\: i \: = \: 0,1,2,\dots, n }$$

這裡,x0 = a 和 xn = b 表示區間的端點。

步驟 2 - 形成梯形

$$\mathrm{\begin{bmatrix} x_{i - 1}, & x_{i} \end{bmatrix}}$$

對於每個子區間,使用子區間端點處的函式值形成一個梯形:

$$\mathrm{f(x_{i-1}) \: and \: f(x_{i})}$$

$$\mathrm{\begin{bmatrix} x_{i - 1}, & x_{i} \end{bmatrix}}$$

底邊為 f(xi-1) 和 f(xi),高為 Δx 的梯形的面積由下式給出:

$$\mathrm{梯形_{i}面積 \: = \: \frac{1}{2} \: \times \: \Delta x \: \times \: [f(x_{i-1}) \: + \: f(x_{i})]}$$

曲線下的總近似面積(代表積分)是所有梯形面積的總和。

步驟 3 - 對梯形面積求和

區間 [a,b] 上函式 f(x) 的積分近似於所有梯形面積的總和:

$$\mathrm{\displaystyle\int_{a}^{b} f(x)\: dx\: \approx \: \displaystyle\sum\limits_{i=1}^n \: 梯形_{i}面積}$$

代入面積公式,則變為:

$$\mathrm{\displaystyle\int_{a}^{b} f(x)\: dx\: \approx \: \frac{\Delta x}{2} \left[f(x_{0}) \: + \: 2 \displaystyle\sum\limits_{i=1}^{n-1} f(x_{i}) \: + \: f(x_{n})\right]}$$

此公式給出了函式值的加權和,其中端點 f(x0) 和 f(xn) 各計數一次,而所有中間函式值 f(x1), f(x2), …..f(xn-1) 各計數兩次。

現在讓我們看看如何在 matlab 中實現梯形法則。

可以使用迴圈進行手動方法或利用內建的 trapz 函式在 MATLAB 中實現梯形法則。

語法

Q = trapz(Y)
Q = trapz(X,Y)
Q = trapz(___,dim)

語法解釋

trapz(Y) - 對於向量 Y,它使用梯形法則計算 Y 中值的近似積分,假設點是等距的。

對於矩陣 Y,它分別計算每一列的積分,得到一個包含結果的行向量。對於多維陣列 Y,它沿第一個具有多個元素的維度計算積分。計算後,此維度變為單個值,而其他維度保持不變。

trapz(X,Y) - 它使用梯形法則計算 Y 的積分,關於 X 給出的值或間距。

如果 X 是座標向量:X 中的元素個數必須與 Y 的第一個具有多個元素的維度的尺寸匹配。

如果 X 是單個數字(標量),trapz(X,Y) 與將該數字 X 乘以 trapz(Y) 的結果相同,後者假設均勻間距。

trapz(___,dim) - 對於 Q = trapz(___,dim):它使用梯形法則沿 Y 的特定維度 dim 計算積分。必須指定 Y,也可以選擇性地指定 X。如果提供 X,它可以是單個數字(標量)或長度與 Y 沿指定的維度 dim 的大小匹配的向量。例如:如果 Y 是矩陣並且使用 trapz(X,Y,2),它將對 Y 的每一行進行積分。

示例 1:使用 trapz(Y),其中 Y 是向量

Y = [1, 4, 9, 16, 25];
Q = trapz(Y);
disp(Q);

該向量表示一系列等距點(假設相隔 1 個單位)的值。trapz(Y) 函式計算這些值的近似積分。

輸出 Q 是 Y 中值的近似積分,它給出了這些點表示的曲線下的總面積。

執行後,輸出為:

>> Y = [1, 4, 9, 16, 25];
Q = trapz(Y);
disp(Q);

    42

>> 

示例 2:使用 trapz(Y),其中 Y 是矩陣

Y = [1 2 3; 4 5 6; 7 8 9];
Q = trapz(Y);
disp(Q);

該矩陣表示多組資料,每列一組。trapz(Y) 函式分別計算每一列的積分。輸出 Q 是一個行向量,包含 Y 的每一列的積分值。對於此矩陣,trapz(Y) 給出的結果類似於 [8 10 12]。

執行後,輸出為:

>> Y = [1 2 3; 4 5 6; 7 8 9];
Q = trapz(Y);
disp(Q);
     8    10    12

>> 

示例 3:使用 trapz(X,Y),其中 X 和 Y 是向量

X = [1, 2, 3, 4, 5];
Y = [1, 4, 9, 16, 25];
Q = trapz(X, Y);
disp(Q);

這裡,X 是一個向量,其長度必須與 Y 的第一維的大小匹配(兩者都有 5 個元素)。

trapz(X,Y) 計算 Y 關於 X 的積分,考慮 X 中點之間的實際間距。

程式碼執行後,我們得到的輸出如下:

>> X = [1, 2, 3, 4, 5];
Y = [1, 4, 9, 16, 25];
Q = trapz(X, Y);
disp(Q);

    42

>> 

示例 4:使用 trapz(X,Y),其中 X 是一個標量數

X = 1;
Y = [1, 4, 9, 16, 25];
Q = trapz(X, Y);
disp(Q);

這裡,X 是一個表示點之間均勻間距的單個數字。

trapz(X,Y) 等效於將 X 乘以 trapz(Y) 的結果。由於 X=1,它只返回 trapz(Y) 的結果,假設點是等距的。

輸出 Q 將給出 Y 的近似積分,假設點之間有 1 個單位的均勻間距。

程式碼執行後,我們得到的輸出如下。

>> X = 1;
Y = [1, 4, 9, 16, 25];
Q = trapz(X, Y);
disp(Q);

    42

>> 

示例 5:沿列進行積分,dim=1

我們擁有的程式碼是:

Y = [1 2 3; 
     4 5 6; 
     7 8 9];

Q = trapz(Y, 1);
disp(Q);

維度:dim = 1 表示沿矩陣的每一列進行積分。結果將是一個行向量,其中每個元素表示 Y 的對應列的積分。這裡,Q 中的每個值都是 Y 的每一列值的積分。

執行後,我們得到的輸出是。

>> Y = [1 2 3; 
     4 5 6; 
     7 8 9];

Q = trapz(Y, 1);
disp(Q);

     8    10    12

>> 

示例 6:沿行進行積分 (dim = 2)

我們擁有的程式碼是。

Y = [1 2 3; 
     4 5 6; 
     7 8 9];

Q = trapz(Y, 2);
disp(Q);

維度 - dim = 2 表示沿矩陣的每一行進行積分。

結果將是一個列向量,其中每個元素表示 Y 的對應行的積分。

程式碼執行後,輸出是

>> Y = [1 2 3; 
     4 5 6; 
     7 8 9];

Q = trapz(Y, 2);
disp(Q);

     4
    10
    16

>> 
廣告
© . All rights reserved.