科學計算與Matlab筆記:第2章:Matlab矩陣處理
1. 特殊矩陣
通用的特殊矩陣
>zeros函式:產生全0的矩陣,即零矩陣
>ones函式:產生全1的矩陣,即1矩陣
>eye函式:產生對角線為1的矩陣。當矩陣為方陣時則得到一個單位陣
>rand函式:產生0~1區間均勻分佈的隨機矩陣
>randn函式:產生均值為0,方差為1的標準正態分佈隨機矩陣。
zeros函式的呼叫格式:
>zeros(m): 產生mxm的零矩陣
>zeros(m,n):產生mxn零矩陣
>zeros(size(A)):產生與矩陣A同樣大小的零矩陣
>> A=zeros(2,3)
A =
0 0 0
0 0 0
>> zeros(size(A))
ans =
0 0 0
0 0 0
>> zeros(size(reshape(A,3,2)))
ans =
0 0
0 0
0 0
例1 首先產生5階兩位隨機矩陣A,在產生均值為0.6,方差為0.1的5階正態分佈隨機矩陣B,最後驗證(A+B)I=IA+BI(I為單位矩陣)
>rand函式:產生0~1開區間均勻分佈的隨機數x
>fix(a+(b-a+1)*x):產生a~b區間上均勻分佈的隨機整數
>randn函式:產生均值為0,方差為1的標準正態分佈隨機數x
>u+cx:得到均值為u,方差為c^2的隨機數
>> A=fix(10+(99-10+1)*rand(5));
>> B=0.6+sqrt(0.1)*rand(5);
>> C=eye(5);
>> (A+B)*C==C*A+B*C
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
用於專門學科的特殊矩陣
(1)魔方矩陣
>> M=magic(3)
M =
8 1 6
3 5 7
4 9 2
>n階魔方陣有1,2,3,……,n^2個整陣列成,且每行每列以及主、副對角線上各n個元素之和都相等。
>n階魔方方陣每行每列元素的的和為(1+2+3+...+n^2)/n = (n+n^3)/2
>MATLAB函式magic(n)產生一個特定的魔方陣
例2 產生8階魔方矩陣,求其每行每列元素的和。
>> M=magic(8);
>> sum(M(1,:))
ans =
260
>> sum(M(:,1))
ans =
260
>> trace(M)
ans =
260
(2)範德蒙行列式
在MATLAB中,函式vander(V)生成以向量V為基礎的範德蒙矩陣
>> A=vander(1:5)
A =
1 1 1 1 1
16 8 4 2 1
81 27 9 3 1
256 64 16 4 1
625 125 25 5 1
範德蒙矩陣常用在各種通訊系統的糾錯編碼中,如Reed-Solomon編碼以範德蒙矩陣為基礎
(3)希爾伯特矩陣
希爾伯特矩陣是著名的病態矩陣:矩陣中任何一個元素微小的變動,都會引起矩陣值以及逆矩陣的值的較大的擾動,病態程度與矩陣的階數有關,階數越高,病態程度越嚴重。
在MATLAB中,生成n階希爾伯特的函式為:hilb(n):
>> format rat //以有理數格式顯示
>> H=hilb(4)
H =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
(4)伴隨矩陣(特徵值為多項式方程的根)
(4)伴隨矩陣
MATLAB生成伴隨矩陣的函式是compan(p),其中p是一個多項式的係數向量,高次冪係數排在前,低次冪係數排在後。
例如, 生成多項式(x^3 - 2x^2 - 5x + 6)的伴隨矩陣
>> p=[1,-2,-6,6];
>> A=compan(p)
A =
2 6 -6
1 0 0
0 1 0
(5)帕斯卡矩陣
例3 生成5階帕斯卡矩陣,驗證他的逆矩陣的所有元素也為矩陣
>> format rat
>> P=pascal(5)
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> inv(P)
ans =
5 -10 10 -5 1
-10 30 -35 19 -4
10 -35 46 -27 6
-5 19 -27 17 -4
1 -4 6 -4 1
2. 矩陣變換
>對角矩陣:只有對角線上有非零元素的矩陣
>數量矩陣:對角線上的元素相等的對角矩陣
>單位矩陣:對角線上的元素都為1的對角矩陣
(1)提取矩陣的對角線元素
>diag(A):提取矩陣A的主對角線元素,生成一個列向量
>diag(A,k):提取矩陣A的第k條對角線元素,生成一個列向量
主對角線:k=0,向上,向下分別為k=1,2,…… /k=-1,-2,……對角線
(2)構造對角陣
>diag(V):以向量V為主對角元素,產生對角矩陣
>diag(V,k):以向量V為第k條對角元素,產生對角矩陣
例1 先建立5x5矩陣A,然後將A的第1行元素乘以1,第2行元素乘以2,……,第5行元素乘以5
>> A=[7,0,1,0,5;3,5,7,4,1;4,0,3,0,2;1,1,9,2,3;1,8,5,2,9]
A =
7 0 1 0 5
3 5 7 4 1
4 0 3 0 2
1 1 9 2 3
1 8 5 2 9
>> D=diag(1:5)
D =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
>> D*A
ans =
7 0 1 0 5
6 10 14 8 2
12 0 9 0 6
4 4 36 8 12
5 40 25 10 45
要將A的各列元素分別乘以對角陣的對角線元素,如何實現?
>> A*D
ans =
7 0 3 0 25
3 10 21 16 5
4 0 9 0 10
1 2 27 8 15
1 16 15 8 45
三角陣
>上三角陣:矩陣的對角線以下的元素全為0的矩陣
>下三角陣:矩陣的對角線以上的元素全為0的矩陣
(1)上三角陣
>triu(A):提取矩陣A的主對角線及以上的元素
>triu(A,k):提取矩陣A的第k條對角線及以上的元素
>> triu(ones(4),-1)
ans =
1 1 1 1
1 1 1 1
0 1 1 1
0 0 1 1
(2)下三角陣
在MATLAB中,提取矩陣A的下三角矩陣的函式是tril,其用法與triu函式完全相同。
>tril(A):提取矩陣A的主對角線及以下的元素
>tril(A,k):提取矩陣A的第k條對角線及以下的元素
>> tril(ones(4),-1)
ans =
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
矩陣的轉轉置
>轉置運算子是小數點後面接單引號(.')
>共扼轉置,其運算子是單引號(‘),它在轉置的基礎上還要提取每個數的複共軛
>> A=[1,3;3+4i,1-2i]
A =
1 + 0i 3 + 0i
3 + 4i 1 - 2i
>> A.'
ans =
1 + 0i 3 + 4i
3 + 0i 1 - 2i
>> A'
ans =
1 + 0i 3 - 4i
3 + 0i 1 + 2i
矩陣的旋轉
rot90(A,k):將矩陣A逆時針方向旋轉90°的k倍,當k為1時可以省略
>> A=[1,3,2;-3,2,1;4,1,2]
A =
1 3 2
-3 2 1
4 1 2
>> rot90(A)
ans =
2 1 2
3 2 1
1 -3 4
>> rot90(A,2)
ans =
2 1 4
1 2 -3
2 3 1
>fliplr(A):對矩陣A實施左右翻轉
>flipud(A):對矩陣A實施上下翻轉
A =
1 3 2
-3 2 1
4 1 2
>> flipud(A)
ans =
4 1 2
-3 2 1
1 3 2
>> fliplr(A)
ans =
2 3 1
1 2 -3
2 1 4
例2 驗證魔方方陣的主對角線,副對角線元素之和相等
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> D1=diag(A);
>> sum(D1)
ans =
65
>> B=flipud(A)
B =
11 18 25 2 9
10 12 19 21 3
4 6 13 20 22
23 5 7 14 16
17 24 1 8 15
>> D2=diag(B);
>> sum(D2)>
ans =
65
矩陣的求逆
>對於一個方陣A,如果存在一個與其相同階的方陣B,使得AB=BA=I(I為單位矩陣),則稱B為A的逆矩陣,當然A也是B的逆矩陣
>inv(A):求方陣A的逆矩陣
3. 矩陣求值
方陣的行列式
>把一個方陣看作一個行列式,並對其按行列式的規則求值,這個值就稱為方陣所對應的行列式的值
>det(A):求方陣A所對應的行列式的值
矩陣的秩
>矩陣線性無關的行數和列數成為矩陣的秩
>rank(A): 求矩陣A的秩
例2 求3~20階魔方陣的秩
>> for n=3:20
r(n)=rank(magic(n));
end
>> bar(r)
>> grid on
>> axis([2,21,0,20])
矩陣的跡
>矩陣的跡等於矩陣的對角線元素之和,也等於矩陣的特徵值之和
>trace(A):求矩陣A的跡
>> A=[1,3,2;-3,2,1;4,1,2]
A =
1 3 2
-3 2 1
4 1 2
>> b=trace(A)
b =
5
>> t=sum(diag(A))
t =
5
向量和矩陣的範數
矩陣或向量的範數用於定義矩陣或向量在某種意義下的長度
矩陣的條件數
>矩陣A的條件數等於A的範數與A的逆矩陣的範數的乘積
>條件數越接近於1,矩陣的效能越好,反之,矩陣的效能越差
在MATLAB中,計算矩陣A的3種條件數的函式是:
>cond(A,1):計算A的1-範數下的條件數
>cond(A,2)或cond(A):計算A的2-範數下的條件數
>cond(A,inf):計算A的正無窮-範數下的條件數
例3 求2~10階希爾伯特矩陣的條件數
>> for n=2:10
c(n)=cond(hilb(n));
end
>> format long
>> c'
ans =
1.0e+13 *
0
0.000000000001928
0.000000000052406
0.000000001551374
0.000000047660725
0.000001495105864
0.000047536735692
0.001525757525282
0.049315438266897
1.602457362635516
>> c
c =
1.0e+13 *
Columns 1 through 5
0 0.000000000001928 0.000000000052406 0.000000001551374 0.000000047660725
Columns 6 through 10
0.000001495105864 0.000047536735692 0.001525757525282 0.049315438266897 1.602457362635516
4. 矩陣的特徵值與特徵向量
矩陣特徵值的數學定義
設A是n階方陣,如果存在常數λ和n維非零列向量x,是的等式Ax=λx成立,則稱λ為A的特徵值,x是對應特徵值λ的特徵向量
函式呼叫格式有兩種:
>E=eig(A):求矩陣A的全部特徵值,構成向量E
>[X,D]=eig(A):求矩陣A的全部特徵值,構成對角陣D,併產生矩陣X,X各列是相應的特徵向量
>> A=[1,1,0;1,0,5;1,10,2]
A =
1 1 0
1 0 5
1 10 2
>> [X,D]=eig(A)
X =
0.072196186226992 0.975064063761619 0.088619224195266
0.523368974057523 -0.075013465822403 -0.635606218080313
0.849042182514069 -0.208861321230112 0.766910274178584
D =
8.249260679947781 0 0
0 0.923068166892527 0
0 0 -6.172328846840313
>> A*X(:,1)
ans =
0.595565160284515
4.317407098797336
7.003970291830358
>> D(1)*X(:,1)
ans =
0.595565160284514
4.317407098797333
7.003970291830355
>> R=[-1,2,0;2,-4,1;1,1,-6];
>> S=[1,2;2,3];
>> A=[R,zeros(3,2);zeros(2,3),S];
>> [X1,D1]=eig(R)
X1 =
0.855336847706575 0.451748808798346 0.189889692402449
0.470284611344323 -0.839453879712591 -0.511105640718618
0.217327543786097 -0.302059923830942 0.838279743728139
D1 =
0.099647729675864 0 0
0 -4.716463058067783 0
0 0 -6.383184671608076
>> [X2,D2]=eig(S)
X2 =
-0.850650808352040 0.525731112119133
0.525731112119133 0.850650808352040
D2 =
-0.236067977499790 0
0 4.236067977499790
>> [X3,D3]=eig(A)
X3 =
0.855336847706575 0.451748808798346 0.189889692402449 0 0
0.470284611344323 -0.839453879712591 -0.511105640718618 0 0
0.217327543786097 -0.302059923830942 0.838279743728139 0 0
0 0 0 -0.850650808352040 -0.525731112119133
0 0 0 0.525731112119133 -0.850650808352040
D3 =
0.099647729675864 0 0 0 0
0 -4.716463058067783 0 0 0
0 0 -6.383184671608076 0 0
0 0 0 -0.236067977499790 0
0 0 0 0 4.236067977499790
>>
5. 稀疏矩陣
矩陣的儲存方式:完全儲存方式+稀疏儲存方式
稀疏儲存方式只儲存矩陣的非零元素的值及其位置,即行號和列號
注意:採用稀疏儲存方式時,矩陣元素的儲存順序並沒有改變,也是按列的順序進行儲存
>> A=sparse(eye(5))
A =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
>> B=full(A)
B =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> whos
Name Size Bytes Class Attributes
A 5x5 128 double sparse
B 5x5 200 double
>> A=sparse([1,2,2],[2,1,4],[2,5,-7])
A =
(2,1) 5
(1,2) 2
(2,4) -7
>> B=full(A)
B =
0 2 0 0
5 0 0 -7
>> A=[2,2,1;2,1,-1;2,4,3]
A =
2 2 1
2 1 -1
2 4 3
>> B=spconvert(A) //最後一列從小到大按行排列?
B =
(2,1) -1
(2,2) 1
(2,4) 3
>> A=[11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A =
11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
>> [B,d]=spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
>> A=spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
>> kf1=[1;1;2;1;0];
>> k0=[2;4;6;6;1];
>> k1=[0;3;1;4;2];
>> B=[kf1,k0,k1];
>> d=[-1;0;1];
>> A=spdiags(B,d,5,5);
>> f=[0;3;2;1;5];
>> x=A\f
x =
-0.166666666666667
0.111111111111111
2.722222222222222
-3.611111111111111
8.611111111111111
注意:當參與運算的資料物件不全是稀疏儲存矩陣時,所得結果是完全儲存形式。
相關文章
- 科學計算與Matlab筆記:第3章:Matlab程式流程控制Matlab筆記
- matlab計算含有未知數的矩陣Matlab矩陣
- MATLAB(6)矩陣和向量運算Matlab矩陣
- MATLAB(4)矩陣操作Matlab矩陣
- Matlab生成隨機矩陣Matlab隨機矩陣
- Matlab矩陣運算的硬體資源分析Matlab矩陣
- matlab矩陣連線圖解Matlab矩陣圖解
- MATLAB(5) 特殊矩陣的建立Matlab矩陣
- Matlab學習筆記(一)Matlab筆記
- 【機器視覺與影象處理】基於MATLAB的角度計算視覺Matlab
- [MatLab]學習筆記2:MatLab數值資料Matlab筆記
- Matlab筆記Matlab筆記
- matlab標量或矩陣比較Matlab矩陣
- 美賽整理之Matlab的工程數學計算學習筆記(高等數學)Matlab筆記
- 灰度共生矩陣GLCM及其matlab實現矩陣Matlab
- matlab比較兩個矩陣是否相等Matlab矩陣
- 科學計算與視覺化之二(Matlab C/C++函式庫) (轉)視覺化MatlabC++函式
- matlab影像處理之開運算閉運算(1)Matlab
- 《計算機與電腦科學》摘錄筆記計算機筆記
- MATLAB符號數學筆記(一)Matlab符號筆記
- matlab學習筆記一:安裝Matlab筆記
- matlab如何統計矩陣各元素的出現次數Matlab矩陣
- MATLAB學習筆記:數值積分Matlab筆記
- MATLAB學習筆記—多型函式Matlab筆記多型函式
- matlab產生隨機數或隨機矩陣Matlab隨機矩陣
- matlab之cat:以特定維度連線矩陣Matlab矩陣
- 矩陣計算矩陣
- 【numpy學習筆記】矩陣操作筆記矩陣
- Matlab產生特定範圍的隨機數矩陣Matlab隨機矩陣
- matlab之size:返回矩陣的行數和列數Matlab矩陣
- 用matlab生成同一元素的矩陣Matlab矩陣
- Python科學計算之Numpy陣列生成與運算Python陣列
- Matlab統計矩陣內各值出現次數以及所佔比例Matlab矩陣
- [00]數字影像處理-matlab速成Matlab
- matlab感興趣區域處理Matlab
- MATLAB及其訊號處理基礎Matlab
- matlab影象處理常用命令Matlab
- Matlab影像處理常用基本函式Matlab函式