-- date: 2022/1/18
-- title: matlab的基礎使用
-- author: longRookie
一、常用函數
1.1 創建矩陣
【函數說明】直接輸入矩陣數值,分號代表行間隔,創建數值矩陣。
>> A=[1 3 5;2 4 6;7 8 9]
A =
1 3 5
2 4 6
7 8 9
1.2 zeros函數:創建全0矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A=zeros(n): 創建\(n \times n\) 全0矩陣。
\(\color{red}{\rightarrow}\) A=zeros(n,m): 創建\(n \times m\)全0矩陣。
\(\color{red}{\rightarrow}\) A=zeros(size(B)): 創建與矩陣B相同大小的全0矩陣。
>> A=zeros(3);
>> A
A =
0 0 0
0 0 0
0 0 0
>> A=zeros(2,3);
>> A
A =
0 0 0
0 0 0
1.3 eye函數:創建單位矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A=eye(n): 創建\(n\times n\)單位矩陣。
\(\color{red}{\rightarrow}\) A=eye(n,m): 創建$n\times m $單位矩陣。
\(\color{red}{\rightarrow}\) A=eye(size(B)): 創建與矩陣B相同大小的單位矩陣。
>> A=eye(3,4);
>> A
A =
1 0 0 0
0 1 0 0
0 0 1 0
1.4 ones函數:創建全1矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A=ones(n): 創建\(n\times n\)全1矩陣。
\(\color{red}{\rightarrow}\) A=ones(n,m): 創建$n\times m $ 全1矩陣。
\(\color{red}{\rightarrow}\) A=ones(size(B)): 創建與矩陣B相同大小的全1矩陣。
>> A=ones(3);
>> A
A =
1 1 1
1 1 1
1 1 1
1.5 rand函數: 創建均勻分布隨機函數
【函數說明】
\(\color{red}{\rightarrow}\) A=rand(n): 創建$n \times n $維均勻分布隨機矩陣,其元素在(0,1)內
\(\color{red}{\rightarrow}\) A=rand(n,m): 創建$n\times m $ 均勻分布隨機矩陣
\(\color{red}{\rightarrow}\) A=rand(size(B)): 創建與矩陣B相同大小的均勻分布隨機矩陣
>> A = rand(4);
>> A
A =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> A = rand(3,4);
>> A
A =
0.4218 0.9595 0.8491 0.7577
0.9157 0.6557 0.9340 0.7431
0.7922 0.0357 0.6787 0.3922
1.6 randn函數: 創建正態分布隨機矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A = randn(n): 創建\(n\times n\)正態隨機矩陣。
\(\color{red}{\rightarrow}\) A=randn(n,m): 創建$n\times m $正態隨機矩陣。
\(\color{red}{\rightarrow}\) A=randn(size(B)): 創建與矩陣B相同大小的正態分布隨機矩陣。
>> A=randn(3,5);
>> A
A =
0.2939 -1.1471 -2.9443 -0.7549 -0.1022
-0.7873 -1.0689 1.4384 1.3703 -0.2414
0.8884 -0.8095 0.3252 -1.7115 0.3192
1.7 hankel函數:創建Hankel矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A=hankel(n): 第一列元素為n,反三角以下元素為0。
\(\color{red}{\rightarrow}\) A=hankel(n,m): 第一列元素為m,最后一行元素為m,如果n的最后一個元素與m的第一個元素不同,則交叉位置取n的最后一個元素。
【矩陣說明】
漢克爾矩陣是指每一條逆對角線上的元素都相等的矩陣。
>> n = [3 2 1];
>> m = [1 5 9];
>> A = hankel(n,m);
>> A
A =
3 2 1
2 1 5
1 5 9
>> A=hankel(n);
>> A
A =
3 2 1
2 1 0
1 0 0
1.8 topelitz函數:創建Topelitz矩陣
【函數說明】
\(\color{red}{\rightarrow}\) A= toeplitz(n): 用向量n創建一個對稱Toeplitz矩陣。
\(\color{red}{\rightarrow}\) A=topelitz(n,m):第一列元素為n,第一行元素為m,如果n的第一個元素與m的第一個元素不同,則交叉位置元素取n的第一個元素。
【矩陣說明】
托普利茲矩陣的主對角線上的元素相等,平行於主對角線的線上的元素也相等。
>> n=[1 2 3 4];
>> m = [1 5 8 9];
>> A=toeplitz(n);
>> A
A =
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
>> A=toeplitz(n,m);
>> A
A =
1 5 8 9
2 1 5 8
3 2 1 5
4 3 2 1
1.9 det函數:計算方陣行列式
【函數說明】
\(\color{red}{\rightarrow}\) det(A):計算方陣A的行列式
【注】
了解代數余子式
>> A=[1 3 6;2 4 5;1 2 3];
>> A
A =
1 3 6
2 4 5
1 2 3
>> det(A)
ans =
-1
1.10 inv函數:求方陣的逆矩陣
【函數說明】
\(\color{red}{\rightarrow}\) inv(A):計算方陣A的逆矩陣\(A^{-1}\)
【注】
了解伴隨矩陣,\(A^{-1}=\frac{1}{|A|}A^*\)。
矩陣有逆的充要條件。
>> A= [1 3 6;2 4 5;1 2 3];
>> inv(A)
ans =
-2 -3 9
1 3 -7
0 -1 2
1.11 pinv函數:求矩陣的偽逆矩陣
【函數說明】
\(\color{red}{\rightarrow}\) pinv(A):計算矩陣A的偽逆矩陣\(A^+\)。
【矩陣說明】
與A的轉置矩陣\(A^T\)同型,並且滿足\(AXA=A,XAX=X\),此時矩陣X為矩陣A的偽逆矩陣。如果A為非奇異矩陣,pinv(A)=inv(A),但inv(A)花費時間更少。
>> A=[1 3 6;2 4 5;1 2 3;1 1 1];
>> pinv(A)
ans =
0.1579 -0.8421 0.3684 2.1579
-0.6842 1.3158 -0.2632 -1.6842
0.4737 -0.5263 0.1053 0.4737
1.12 rank函數:求矩陣的逆
【函數說明】
\(\color{red}{\rightarrow}\) rank(A):計算矩陣A的秩;
【注】
分為行秩和列秩;對應線性無關的最大行數和列數;
>> A=[1 3 6; 2 4 5; 1 2 3];
>> rank(A)
ans =
3
1.13 diag函數:抽取矩陣對角線元素
【函數說明】
\(\color{red}{\rightarrow}\) A=diag(m):以m為主對角線元素,其余元素為0。
\(\color{red}{\rightarrow}\) m=diag(A):取矩陣A的主對角線元素構造向量m。
>> A=[1 3 6;2 4 5;1 2 3];
>> m=diag(A)
m =
1
4
3
>> m=[1 2 3];
>> A=diag(m)
A =
1 0 0
0 2 0
0 0 3
1.14 fliplr函數:矩陣左右翻轉
【函數說明】
\(\color{red}{\rightarrow}\) fliplr(A):將矩陣A左右翻轉。
>> A=[1 3 6;2 4 5;1 2 3]
A =
1 3 6
2 4 5
1 2 3
>> fliplr(A)
ans =
6 3 1
5 4 2
3 2 1
1.15 eig函數:矩陣特征值分解
【函數說明】
\(\color{red}{\rightarrow}\) d = eig(A):計算A的特征值。
\(\color{red}{\rightarrow}\) d = eig(A,B):計算A的廣義特征值。
\(\color{red}{\rightarrow}\) [V,D]=eig(A):計算A的特征值對角陣D和特征向量構成的矩陣V。
\(\color{red}{\rightarrow}\) [V,D]=eig(A,B):計算A的廣義特征值對角陣D和廣義特征向量構成的矩陣V。
【注】
A是n階向量,如果存在數m和非零n維列向量x,使Ax=mx成立,則稱m是矩陣A的一個特征值,非零向量x稱為特征值\(\lambda\)的特征向量。
代數重數和幾何重數
>> A=[1 3 6;2 4 5;1 2 3];
>> [V,D]=eig(A);
>> V
V =
-0.5970 -0.9433 0.6669
-0.7083 0.3209 -0.6977
-0.3767 0.0847 0.2615
>> D
D =
8.3451 0 0
0 -0.5594 0
0 0 0.2142
>>
1.16 svd函數:矩陣奇異值分解
【函數說明】
\(\color{red}{\rightarrow}\) s=svd(A):計算矩陣A的奇異值向量;
\(\color{red}{\rightarrow}\) [U,S,V]=svd(A):計算A的奇異值對角陣S和兩個友矩陣U和V
【注】
奇異值相當於方陣中的特征值,奇異值分解相當於方陣中的特征值分解。
奇異值分解的揭秘(一):矩陣的奇異值分解過程 - 知乎 (zhihu.com)
特征值分解 和 SVD分解 - 知乎 (zhihu.com)
>> A=[1 3 6;2 4 5;1 2 3];
>> [U,S,A]=svd(A);
>> U
U =
-0.6608 0.7306 -0.1718
-0.6544 -0.6730 -0.3447
-0.3675 -0.1154 0.9228
>> S
S =
10.1722 0 0
0 1.2331 0
0 0 0.0797
>> A
A =
-0.2298 -0.5926 0.7720
-0.5245 -0.5928 -0.6112
-0.8198 0.5453 0.1746
1.17 矩陣轉置和共軛轉置
【函數說明】
\(\color{red}{\rightarrow}\) \(A.'\):計算A的轉置矩陣。
\(\color{red}{\rightarrow}\) \(A'\):計算A的共軛轉置矩陣。
>> A= randn(2,3)+j*randn(2,3); %創建一個復矩陣
>> A
A =
列 1 至 2
0.5377 - 0.4336i -2.2588 + 3.5784i
1.8339 + 0.3426i 0.8622 + 2.7694i
列 3
0.3188 - 1.3499i
-1.3077 + 3.0349i
>> A'
ans =
0.5377 + 0.4336i 1.8339 - 0.3426i
-2.2588 - 3.5784i 0.8622 - 2.7694i
0.3188 + 1.3499i -1.3077 - 3.0349i
>> A.'
ans =
0.5377 - 0.4336i 1.8339 + 0.3426i
-2.2588 + 3.5784i 0.8622 + 2.7694i
0.3188 - 1.3499i -1.3077 + 3.0349i
1.18 awgn函數:添加高斯白噪聲
【函數說明】
\(\color{red}{\rightarrow}\) Y=awgnl(X,SNR):向信號X添加高斯白噪聲,信噪比SNR單位為dB。信號X的功率假定為0dBW。
\(\color{red}{\rightarrow}\) Y=awgn(X,SNR,sigpower):向信號X添加高斯白噪聲,信噪比SNR單位為dB。信號X的功率為sigpower(dBW)。
\(\color{red}{\rightarrow}\) Y=awgn(X,SNR,'measured'):向信號X添加高斯白噪聲,信噪比SNR單位為dB。在添加噪聲前計算信號X功率(dBW)。
>> X=randn(2,5); %產生一隨機信號
>> X
X =
0.7254 0.7147 -0.1241 1.4090 0.6715
-0.0631 -0.2050 1.4897 1.4172 -1.2075
>> Y=awgn(X,10,'measured');
>> Y
Y =
0.9432 0.8632 0.0966 1.4983 0.9413
0.4320 0.1092 1.3976 1.1781 -1.5558
1.19 sin函數:正弦函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y=\sin(x)\):返回x中各元素的正弦值,x單位為弧度(rad)。
1.20 cos函數:余弦函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y=\cos(x)\):返回x中各元素的余弦值,x單位為弧度(rad)。
1.21 tan函數:正切函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y=\tan(x)\):返回x中各元素的正切值,x單位為弧度(rad)。
1.22 asin函數:反正弦函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y=asin(x)\):返回x中各元素的反正弦值,y單位為弧度(rad)。
1.23 acos函數:反余弦函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y=acos(x)\):返回x中各元素的反余弦值,y單位為弧度(rad)。
1.24 atan函數:反正切函數
【函數說明】
\(\color{red}{\rightarrow}\) \(y= atan(x)\):返回x中各元素的反正弦值,x單位為弧度(rad)。
1.25 abs函數:求復數的模
【函數說明】
\(\color{red}{\rightarrow}\) y=abs(x):如果x是實數,返回x的絕對值;如果x是復數,返回x的模。
>> a= -1;
>> b=1+1j;
>> abs(a)
ans =
1
>> abs(b)
ans =
1.4142
1.26 angle函數:求復數的相位角
【函數說明】
\(\color{red}{\rightarrow}\) y=angle(x):返回復數x的相位角,單位為弧度(rad)。
【注】
將復數用向量的形式在直角坐標系中表示出來,向量與X軸正半軸的夾角就是該復數的相位角.
1.27 real函數:求復數的實部
【函數說明】
\(\color{red}{\rightarrow}\) y=real(x):返回復數x的實數部分。
>> a=1+1j
a =
1.0000 + 1.0000i
>> real(a)
ans =
1
1.28 imag函數:求復數的虛部
【函數說明】
\(\color{red}{\rightarrow}\) y=imag(x):返回復數x的虛部部分
>> a=1+1j
a =
1.0000 + 1.0000i
>> imag(a)
ans =
1
1.29 sum函數:求和函數
【函數說明】
\(\color{red}{\rightarrow}\) B=sum(A):如果A為一向量,返回各元素之和;如果A為矩陣,返回各列元素之和構成的一個行向量。
\(\color{red}{\rightarrow}\) B=sum(A,dim):沿着dim指定的維數求和,其中\(dim \in [1,N]\),N為矩陣維數。當dim取1時,返回列向量之和構造的行向量;當dim取2時,返回行向量之和構造的列向量。
>> A=[1 3 6;2 4 5;1 1 1];
>> sum(A,1)
ans =
4 8 12
>> sum(A,2)
ans =
10
11
3
>> sum(A)
ans =
4 8 12
1.30 max函數:求最大值函數
【函數說明】
\(\color{red}{\rightarrow}\) B=max(A):如果A為一向量,返回各元素之中的最大值;如果A是矩陣,返回各列元素最大值構成的一個行向量。
\(\color{red}{\rightarrow}\) B=max(A,[],dim):沿着dim指定的維數求最大值,其中\(dim \in [1,N]\),N為矩陣維數。當dim取1時,返回列向量最大值構成的行向量;當dim取2時,返回行向量最大值構造的列向量。
>> A=[1 3 6;2 4 5;1 2 3;1 1 1];
>> max(A,[],1)
ans =
2 4 6
>> max(A,[],2)
ans =
6
5
3
1
>> max(A)
ans =
2 4 6
1.31 min函數:求最小值函數
【函數說明】
\(\color{red}{\rightarrow}\) B=min(A):如果A為一向量,返回各元素之中的最小值;如果A是矩陣,返回各列元素最小值構成的一個行向量。
\(\color{red}{\rightarrow}\) B=min(A,[],dim):沿着dim指定的維數求最小值,其中\(dim \in [1,N]\),N為矩陣維數。當dim取1時,返回列向量最小值構成的行向量;當dim取2時,返回行向量最小值構造的列向量。
>> A=[1 3 6;2 4 5;1 2 3;1 1 1];
>> min(A)
ans =
1 1 1
>> min(A,[],1)
ans =
1 1 1
>> min(A,[],2)
ans =
1
2
1
1
1.32 sort函數:排序函數
【函數說明】
\(\color{red}{\rightarrow}\) B=sort(A):如果A為一向量,則將A中各元素按從小到大排序;如果A為矩陣,則將A中各列元素按從小到大排序。
\(\color{red}{\rightarrow}\) B=sort(A,dim):沿着dim指定的順序排序,當dim取1時,則將A中各列元素按從小到大排序;當dim取2時,則將A中各行元素從小到大排序。
\(\color{red}{\rightarrow}\) B=sort(...,mode):將矩陣中元素按指定模式排列,當mode=’ascend‘時,則按從小到大排序;當mode='descend'時,則按從大到小排序。
\(\color{red}{\rightarrow}\) [B,V]=sort(A),將A排序,並返回一個與A同形的矩陣V,指定B矩陣中各元素在A中的位置。V是一個排序索引。
【注】
對數組元素排序 - MATLAB sort - MathWorks 中國
1.33 poly2sym函數:創建多項式
【函數說明】
\(\color{red}{\rightarrow}\) y=poly2sym(c):返回一個符號多項式。其中,參數c為保存多項式的系數的向量。
\(\color{red}{\rightarrow}\) y=poly2sym(c,'t'):返回一個符號多項式。其中,參數c為保存多項式的系數的向量,t為符號變量。
>> c=[1 2 5 7]
c =
1 2 5 7
>> y=poly2sym(c);
>> y
y =
x^3 + 2*x^2 + 5*x + 7
1.34 sym2poly函數:符號多項式轉換為數值多項式
\(\color{red}{\rightarrow}\) c=sym2poly(y):返回符號多項式y的數值系數構成的行向量。
>> syms x;
>> y=x^3+2*x^2+5*x+7;
>> c=sym2poly(y);
>> c
c =
1 2 5 7
1.35 roots函數:多項式求根
\(\color{red}{\rightarrow}\) r=roots(c):返回一個由多項式根構成的列向量。
>> c=[1,2,5,7];
>> r=roots(c);
>> r
r =
-0.1981 + 2.0797i
-0.1981 - 2.0797i
-1.6038 + 0.0000i
1.36 size函數:求矩陣大小
\(\color{red}{\rightarrow}\) [m,n]=size(A):分別返回矩陣的行數和列數。
>> A=[1 2 3 4;5 6 7 8];
>> A
A =
1 2 3 4
5 6 7 8
>> [m,n] = size(A);
>> m
m =
2
>> n
n =
4
