- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上版
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if…end 語句
- MATLAB - if…else 語句
- MATLAB - if…elseif…else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - return 語句
- MATLAB - 無返回值函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try…catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化圖形
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等值線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面圖
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換函式
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者自定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
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
>>