
- 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 語句
- 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 - 高斯消元法
高斯消元法(也稱為Gaussian Elimination)是一種求解線性方程組的方法。它涉及使用一系列運算將方程組的增廣矩陣轉換為行階梯形,然後進行回代以找到解。
讓我們首先了解什麼是增廣矩陣和行階梯形矩陣。
增廣矩陣是線性代數中用於求解線性方程組的矩陣。它將方程組的係數矩陣和常數矩陣組合成一個矩陣。增廣矩陣通常透過將常數列(方程的右邊)附加到係數列來編寫。
例如,考慮線性方程組:
$$\mathrm{2x \: + \: 3y \: = \: 5}$$
$$\mathrm{4x \: + \: 6y \: = \: 10}$$
係數矩陣 (A) 和常數矩陣 (b) 為:
$$\mathrm{A \: = \: \begin{pmatrix} 2 & 3 \\ 4 & 6 \end{pmatrix} \: , \: b \: = \: \left(\begin{array}{c}5\\ 10\end{array}\right)}$$
增廣矩陣 (A|b) 是透過將 b 附加到 A 形成的:
$$\mathrm{\begin{pmatrix} 2 & 3 & | & 5 \\ 4 & 6 & | & 10\end{pmatrix}}$$
**行階梯形 (REF)** 是線性代數中使用的矩陣的一種特定形式,用於簡化求解線性方程組的過程。如果矩陣滿足以下條件,則該矩陣為行階梯形:
- 所有非零行都在所有零行的上方。
- 每個非零行的首個非零元素(也稱為主元)為 1,並且位於其上方行的首個非零元素的右邊。
- 首個非零元素在其列中是唯一的非零元素。
這是一個 3×4 行階梯形矩陣的示例:
$$\mathrm{\begin{pmatrix} 1 & 2 & 3 & 4 \\ 0 & 1 & 5 & 6 \\ 0 & 0 & 1 & 7\end{pmatrix}}$$
在這個例子中:
- 第一個首個非零元素是 1,它出現在第一列。
- 第二個首個非零元素也是 1,它出現在第一個首個非零元素的右邊,在第二行和第二列。
- 第三個首個非零元素是 1,它出現在第二個首個非零元素的右邊,在第三行和第三列。
- 所有首個非零元素下方的元素都是零。
- 行的順序排列,使得任何零行(如果存在)都在底部(在這個特定示例中沒有零行)。
高斯消元法的步驟
考慮線性方程組:
$$\mathrm{\begin{cases} 2x \: + \: 3y \: = \: 8\\ 4x \: + \: 9y \: = \: 20\end{cases}}$$
我們可以將其寫成增廣矩陣形式:
$$\mathrm{\begin{bmatrix} 2 & 3 & | & 8 \\ 4 & 9 & | & 20\end{bmatrix}}$$
基於上述等式,高斯消元法的步驟如下:
1. 形成增廣矩陣:
$$\mathrm{\begin{bmatrix} 2 & 3 & | & 8 \\ 4 & 9 & | & 20\end{bmatrix}}$$
2. 將第一行的首個非零元素化為 1(如果它還不是 1):
將第一行除以 2:
$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 4 & 9 & | & 20\end{bmatrix}}$$
消去第二行中的 x 項:
從第二行中減去第一行的 4 倍:
$$\mathrm{R2 \: = \: R2 \: - \: 4 \: \times \: R1}$$
$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 0 & 3 & | & 4\end{bmatrix}}$$
將第二行的首個非零元素化為 1(如果它還不是 1):
將第二行除以 3:
$$\mathrm{\begin{bmatrix} 1 & \frac{3}{2} & | & 4 \\ 0 & 1 & | & \frac{4}{3}\end{bmatrix}}$$
消去第一行中的 y 項:
從第一行中減去第二行的 3/2 倍。
$$\mathrm{R1 \: = \: R1 \: - \: \frac{3}{2} \: \times \: R2}$$
$$\mathrm{\begin{bmatrix} 1 & 0 & | & \frac{10}{3} \\ 0 & 1 & | & \frac{4}{3}\end{bmatrix}}$$
寫出解
從最終的增廣矩陣中,我們可以直接看到解。
$$\mathrm{x \: = \: \frac{10}{3} \: , \: y \: = \: \frac{4}{3}}$$
因此,方程組的解為。
$$\mathrm{x \: = \: \frac{10}{3} \: , \: y \: = \: \frac{4}{3}}$$
現在我們知道了高斯消元法的步驟,讓我們嘗試在matlab中做同樣的事情。
MATLAB 中的高斯消元法
我們將使用的方程是。
$$\mathrm{\begin{cases} 2x \: + \: 3y \: = \: 8\\ 4x \: + \: 9y \: = \: 20\end{cases}}$$
**步驟 1** - 定義係數矩陣 A 和右端向量 b
A = [2 3; 4 9]; b = [8; 20];
**步驟 2** - 用向量 b 增廣矩陣 A。
Ab = [A b];
**步驟 3** - 執行行運算以將 A 轉換為上三角矩陣。
MATLAB 有一個名為 rref(簡化行階梯形)的函式,它簡化了此過程。但是,如果您想手動執行這些步驟,您可以執行以下操作:
% Forward elimination n = size(Ab, 1); for i = 1:n-1 for j = i+1:n factor = Ab(j,i) / Ab(i,i); Ab(j,:) = Ab(j,:) - factor * Ab(i,:); end end
**步驟 4** - 向後代入以求解變數。
% Initialize the solution vector x = zeros(n,1); % Backward substitution x(n) = Ab(n,end) / Ab(n,n); for i = n-1:-1:1 x(i) = (Ab(i,end) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i); end
**步驟 5** - 顯示結果
disp('The solution is:'); disp(x);
完整的matlab程式碼如下。
% Define the coefficient matrix A and the right-hand side vector b A = [2 3; 4 9]; b = [8; 20]; % Augment the matrix A with the vector b Ab = [A b]; % Forward elimination n = size(Ab, 1); for i = 1:n-1 for j = i+1:n factor = Ab(j,i) / Ab(i,i); Ab(j,:) = Ab(j,:) - factor * Ab(i,:); end end % Initialize the solution vector x = zeros(n,1); % Backward substitution x(n) = Ab(n,end) / Ab(n,n); for i = n-1:-1:1 x(i) = (Ab(i,end) - Ab(i,i+1:n) * x(i+1:n)) / Ab(i,i); end % Display the result disp('The solution is:'); disp(x);
當代碼在matlab命令視窗中執行時,我們得到的輸出是
The solution is: 2.0000 1.3333
使用 rref(簡化行階梯形)
您可以使用MATLAB內建的rref()函式來達到與下面所示相同的結果。
% Define the coefficient matrix A and the right-hand side vector b A = [2 3; 4 9]; b = [8; 20]; % Augment the matrix A with the vector b Ab = [A b]; % Use rref to get the Reduced Row Echelon Form R = rref(Ab); % Extract the solutions x = R(:,end); % Display the result disp('The solution is:'); disp(x);
執行後的輸出為:
The solution is: 2.0000 1.3333