三、矩陣運算
(一)矩陣函數和特殊矩陣
- 常見的矩陣處理函數
- 表3-1 常見的矩陣函數
函數 | 說明 |
/或\ | 矩陣除法中的左除或右除,可以用於求解線性方程組 |
accumarray(ind,val) | 累加創建數組 |
A^n | 求解矩陣A的n次冪 |
balance(A) | 將矩陣A進行縮放以提高其特征值的精度 |
[V,D]=cdf2rdf(V,D) | 將復數對角矩陣轉換為兩個實數對角矩陣 |
chol(A) | 對矩陣A進行Cholesky因式分解 |
cholinc(A,DropTol) | 對矩陣A進行不完全的Cholesky因式分解,DropTol指定分解誤差 |
cholinc(A,Options) | 對矩陣A進行不完全的Cholesky因式分解,Options為包含3個分量的結構體 |
cholupdate(R,X) | Cholesky因式分解的秩1升級 |
cond(A) | 利用奇異值分解求矩陣A的范數 |
condest(A) | 求矩陣A的范數1的條件數估計 |
[V,D,s]=condeig(A) | 求矩陣A與重特征值相對應的條件數 |
det(A) | 求矩陣的行列式 |
dmperm(A) | 求矩陣A進行Dulmage-Mendelsohn排列 |
eig(A) | 求矩陣A的特征值和特征向量 |
[V,D]=eig(A) | 求矩陣A的特征向量矩陣(V)和特征值對角矩陣(D) |
expm(A) | 矩陣指數函數 |
funm(A) | 矩陣通用函數 |
gsvd(A,B) | 求矩陣A的廣義奇異值 |
[U,V,X,C,S]=gsvd(A) | 求矩陣A進行廣義奇異值分解 |
hess(A) | 求矩陣A的Hessenburg標准型 |
inv(A) | 求矩陣A的逆 |
linsolve(A,y,options) | 快速求解方程組Ax=y,其中A的結構由options條件給定 |
logm(A) | 矩陣的對數運算 |
lscov(A,y,V) | 已知數據的協方差矩陣(V),求線性方程組的最小二乘解 |
lsqnonneg(A,y) | 求線性方程組的非負最小二乘解 |
[L,U,P]=lu(A) | 對矩陣A進行LU分解 |
minres(A,y) | 利用最小殘差方法求線性方程組的解 |
norm(A,type) | 求矩陣或向量(由type指定)的范數 |
null(A) | 求A的零空間 |
orth(A) | 求A的正交空間 |
pinv(A) | 求A的偽逆矩陣 |
planerot(X) | 求X進行平面旋轉 |
ploy(A) | 求A的特征多項式 |
polyeig(A0,A1,...) | 多項式的特征值解 |
polyvalm(A) | 求A的矩陣多項式 |
qr(A) | 對A進行正交三角分解 |
qrdelete(Q,R,J) | 從QR分解中刪除行或列 |
qrinsert(Q,R,J,X) | 在QR分解中插入行或列 |
qz(A,B) | 廣義特征值問題求解 |
rank(A) | 利用奇異值分解求A的秩 |
rcond(A) | 對A進行LAPACK倒數條件估計 |
rref(A) | 將矩陣A變換為行階梯型 |
rsf2csf(A) | 將A由實塊對角陣轉換為復塊對角陣 |
schur(A) | 對矩陣A進行Schur分解 |
sqrtm(A) | 求矩陣A的平方根 |
subspace(A,B) | 求兩個子空間A和B之間的角度 |
svd(A) | 求矩陣A的奇異值 |
[U,S,V]=svd(A) | 對A進行奇異值分解 |
trace(A) | 求矩陣A的跡(即對角線元素之和) |
- 特殊矩陣
- 表3-2 特殊矩陣
矩陣 | 說明 |
[] | 空矩陣 |
blkdiag(a0,a1,...) | 以輸入參數為對角元素生成對角矩陣 |
compan(P) | 求多項式的伴隨矩陣 |
eye(r,c) | 產生r行,c列的單位矩陣 |
gallery | 生成一系列的測試矩陣(50個以上) |
hadamard(n) | 生成1個n階的Hadamard矩陣 |
hankel(C) | 生成C的Hankel矩陣 |
hilb(n) | 生成n階的Hilbert矩陣 |
invhilb(n) | 生成n階的逆Hilbert矩陣 |
magic(n) | 生成n階的魔幻矩陣 |
ones(r,c) | 生成r行、c列的全1矩陣 |
pascal(n) | 生成n階的Pascal矩陣 |
rand(r,c) | 生成r行、c列的隨機矩陣(元素值介於0和1之間) |
randn(r,c) | 生成r行、c列的零均值和單位方差的正態分布的隨機矩陣 |
rosser | 典型的對稱矩陣特征值問題測試 |
toeplitz(C,R) | 生成Toeplitz矩陣 |
vander(C) | 生成Vandermonde矩陣 |
wilkinson(n) | 生成n階的Wilkinson特征值測試矩陣 |
zeros(r,c) | 生成r行、c列的全0矩陣 |
- 稀疏矩陣
- 稀疏矩陣中大部分元素都是0,只有少部分元素是非0的。
- 一般,MATLAB存儲稀疏矩陣需要通過3個矩陣,對於一個m×n的矩陣(假設其中有nz個非0元素,存儲在長度為nz_max的矩陣中)
- 第一個矩陣:存儲所有非0元素,矩陣長度為nz_max
- 第二個矩陣:存儲所有非0元素的行下標,矩陣長度也為nz_max
- 第三個矩陣:存儲每一列開始處的指針和標志這3個矩陣結束的指針,存儲長度為n+1
- 創建稀疏矩陣
- sparse(i,j,s,m,n,nz_max)使用[i,j,s]來創建m×n維稀疏矩陣s(s為所有非0元素構成的向量,ij為非0元素的行下標、列下標)
- spdiags(B,d,m,n)可以抽取、創建或替代對角稀疏矩陣(d表示長度為p的整數向量,B為滿矩陣)
- 表3-3 稀疏矩陣函數
函數 | 說明 |
bicg | 求解雙共軛梯度迭代線性方程的解 |
bicgstab | 求解雙共軛梯度穩定迭代線性方程的解 |
cgs | 求解二次共軛梯度迭代線性方程曾的解 |
cholinc | 不完全Cholesky分解 |
colamd | 列估計最小度重排序方法 |
colamdtree | 帶列消元樹排序后的colamd方法 |
colmmd | 列最小度排序 |
colperm | 對列進行隨機排序 |
condest | 1范數估計 |
dmperm | Dulmage-Nebdeksohn重排序方法 |
eigs | 使用APPACK的特征值 |
etree | 矩陣消元樹結構 |
etreeplot | 繪制消元路徑 |
find | 尋找非0元素索引 |
full | 將稀疏矩陣轉化為完整矩陣 |
gmres | 求廣義最小殘差迭代線性方程的解 |
gplot | 繪制圖論圖形 |
issparse | 判斷是否為稀疏矩陣 |
lsqr | 標准方程中共軛梯度的LSQR實現 |
luinc | 不完全LU因式分解 |
minres | 最小殘差迭代線性方程求解 |
Nnz | 求矩陣中的非0元素個數 |
nonzeros | 提取矩陣中的非0元素 |
normest | 矩陣的2范數估計 |
nzmax | 求分配給非0元素的存儲空間 |
pcg | 求預處理共軛梯度迭代線性方程組的解 |
qmr | 偽最小殘差迭代線性方程組解法 |
randperm | 產生隨機排列的數組 |
spalloc | 為稀疏矩陣分配內存空間 |
sparse | 創建稀疏矩陣 |
spaugment | 建立最小二乘增廣矩陣 |
spconvert | 從外部格式中載入稀疏矩陣 |
sodiags | 利用對角元素生成稀疏矩陣 |
speye | 單位稀疏矩陣 |
spfun | 將一個函數應用於非0元素 |
spones | 將所有非0元素用1代替 |
spparms | 設置稀疏矩陣程序的參數 |
sprand | 創建均勻分布的隨機稀疏矩陣 |
sprandn | 創建高斯分布的隨機稀疏矩陣 |
sprandsym | 創建對稱的隨機稀疏矩陣 |
sprank | 求結構秩的值 |
spy | 稀疏矩陣的圖形表示 |
svds | 產生一些奇異值 |
symbfact | 符合因式分解 |
symamd | 對稱估計最小階次重排序法 |
symamdtree | 帶對稱消元樹排序后的symand |
symmd | 對稱最小階次重排序 |
symmlq | 對稱LQ迭代線性方程的求解 |
symrcm | 對稱的反向Cuthill-Mckee重排序 |
treelayout | 變換成樹狀結構 |
treeplot | 畫出樹狀圖 |
-
- 創建稀疏矩陣並畫出稀疏矩陣的圖(e_three_1.m)
(二)矩陣分析
- 范數分析
- 向量的范數
- 線性空間中的某個向量$\textbf{x}=\left \{ x_{1},x_{2},\cdots ,x_{n} \right \}$,其p范數定義為:$\left \| \mathbf{x} \right \|_{p}=\left ( \sum_{i=1}^{n}\left | x_{i}\right |^{p}\right )^{\frac{1}{p}}$