MATLAB基礎學習系列二——矩陣

矩陣的建立以及操作

1.矩陣的建立

1.直接輸入法
a=[1 2 3] 或者 a=[1,2,3]
b=[1 2 3     
	4 5 6 
	7 8 9]  或者
b=[1 2 3;4 5 6;7 8 9]
%分號代表行,元素之間用空格或者逗號
注意:
在MATLAB中也可以用已經定義好的矩陣來定義其他矩陣。例如:
 C=[1 5]
 D=[6,C]
D =
 6     1     5

2.M文件建立矩陣
啓動編輯器(輸入edit命令,或者使用按鈕)

3. %冒號運算符用於定義一個新矩陣或修改原有矩陣。
e1:e2:23
e1爲初始值,e2爲步長,e3爲終止值,產生行向量,以e1開始,
>>A=1:2:7
 A= 
	1 3 5 7
%提取矩陣A1的第一列
>> A1=[1 2 3;11 12 13;21 22 23];
>> X=A1(:,1) %表示所有行的第一列
X =
     1
    11
    21

>>Y=A1(2:3,1:2) %表示第2行到第三行,從第一列到第二列
Y =
11    12
21    22

>>M=A(1,:)  %獲取第一行 所有列的內容
>> C=A(1,2:3)  %獲取第一行 2到3列的內容
>> D=A(1,2:end)  %獲取第一行 2到最後的內容
>> D=A([1,2],[1,2])  %獲取第一行第一列、第二列;第二行第一列第二列
>> D1=A(1,[1,2])  %獲取第一行 第一列第二列的內容

5.linspace建立行向量
linspace(a,b,n)--a和b分別爲行向量的第一個元素和最後一個元素,n爲總元素,
省略n自動產生100個元素的行向量。

2.特殊矩陣

全零矩陣和全1矩陣常用做佔位矩陣,用於程序的循環結構,這樣可以提高運行速度。

2.1.全零矩陣—zeros函數

>>zeros(m)  %M*M的全零矩陣
>>zeros(m,n) %創建m*n的全零矩陣
>> zeros(3)
ans =
 0     0     0
 0     0     0
 0     0     0

>> zeros(3,4)
ans =
 0     0     0     0
 0     0     0     0
 0     0     0     0

2.2.全1矩陣–ones函數

>>ones(m) %創建m*m的全1矩陣
>>ones(m,n) %創建m*n的全1矩陣
>> ones(3)
ans =
 1     1     1
 1     1     1
 1     1     1

>> ones(2,3)
ans =
 1     1     1
 1     1     1

2.3.對角矩陣–diag函數(提取矩陣對角線上的元素)

>>diag(A) %提取二維矩陣A中的對角元素。
>> A=[1,2,3;4,5,6;7,8,9]
A =
 1     2     3
 4     5     6
 7     8     9	
>> diag(A)
ans =
 1
 5
 9
定義函數diag的第二個輸入參數k,可以提取出其他對角線上的元素。若k爲正數,則提取矩陣右上角對角線上的元素,若k爲負數,則提取矩陣左下角對角線上的元素。
>> diag(A,1)
ans =
 2
 6

>> diag(A,2)
ans =
 3

>> diag(A,-1)
ans =
 4
 8
注:如果函數diag的輸入不是二維矩陣,而是矢量,那麼MATLAB會把輸入矢量作爲對角線元素產生一個新的矩陣,並將新矩陣的其他元素置爲零。
>> B=[1,2,3]
B =
 1     2     3

>> diag(B)
ans =
 1     0     0
 0     2     0
 0     0     3

>> diag(B,1)
ans =
 0     1     0     0
 0     0     2     0
 0     0     0     3
 0     0     0     0

2.4魔方矩陣–magic函數

在魔方矩陣中,所有的行,列以及對角元素之和均相等。

 >>magic(5)
ans =
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
擴展:
>> fliplr(A)  %對矩陣的列進行左右對稱翻轉
ans =
15     8     1    24    17
16    14     7     5    23
22    20    13     6     4
 3    21    19    12    10
 9     2    25    18    11

>> flipud(A) %對矩陣的行進行上下對稱翻轉
ans =
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

2.5Hilbert矩陣

>>hilb(4)
ans =
   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   
>> format short
>>ans
ans =
   ans =
    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111

2.6Toeplitz矩陣

>>toeplitz(1:6)
ans =
 1     2     3     4     5     6
 2     1     2     3     4     5
 3     2     1     2     3     4
 4     3     2     1     2     3
 5     4     3     2     1     2
 6     5     4     3     2     1

2.7 隨機矩陣

1.隨機數 rand 0-1 均勻分佈的隨機矩陣
2.randn 均值爲0 方差爲1 的標準正態分佈的隨機矩陣
>>S=0+(10-0)*rand(10,1) --0到10之間的隨機數
%從a到b之間均勻的隨機數
>>S=a+(b-a)*rand
>>y=u+sqrt(s)*randn %產生均值爲u,方差爲s的正態分佈
>>y=0.6+sqrt(5)*randn %會產生5個序列
>>mean(y) %獲取序列的均值
>>std(y) %獲取序列的方差

3矩陣的操作

在矩陣中元素是以列的方式存放,下標從1開始(即從第一列開始)

3.1.矩陣元素的獲取

A =
 1     2     3
11    12    13
23    24    25

>> A(2,3) %第二行,第三列的元素是13
>> A(3)   %索引爲3的元素是23
>> [m,n]=find(A==3)---1,3--返回下標
>>in = find(A==11)--2---返回索引

ind2sub和sub2ind是matlab中下標與索引相互轉換用的兩個函數。
ind代表索引(index);sub代表下標(subscript),即行列值。
>>sub2ind(size(A),2,3)---8
>>[n,m]=ind2sub(size(A),8)---2,3

3.2.重排矩陣–使用reshape函數

H=reshape(A,9,1)--9行1列的矩陣
I=A(:) 這個效率高 排爲列向量

3.3.矩陣轉置 L=A’

3.4刪除矩陣元素—對 對應的元素賦空置

>> A=[1,3,5;4,5,7;55,66,77] 
>>	 A(1,:)=[] ---刪除第一行的元素

3.5矩陣擴展

A =
 4     5     7
55    66    77
>>C=repmat(A,2,1)--把A矩陣看做一個整體,增加兩行一列

C =
 4     5     7
55    66    77
 4     5     7
55    66    77

>>D=repmat(A,2,2)
D =
 4     5     7     4     5     7
55    66    77    55    66    77
 4     5     7     4     5     7
55    66    77    55    66    77

3.6. 矩陣壓縮—把重複的元素去除

>>F=[1 2 3 4 4 5 6 6 6 6]
>>F1=unique(F)
F1 =
 1     2     3     4     5     6

4.矩陣之間的運算

4.1簡單運算

1.
矩陣之間的加法,減法運算,即對應元素之間的運算(兩個矩陣的行和列相等)
2.點乘運算
矩陣的行列一樣,對應元素相乘
3.矩陣間乘法
A(m*n)*B(n*m)--m*m

4.2求矩陣的行列式和逆

>>det(A) %求矩陣的行列式
>如果矩陣的行列式不爲0,則可以求得矩陣的逆。
>>inv(A)

4.3求內積

%例如有兩個矩陣求內積a,b
>>a=[1+5i;2;3+6i;7-2i];
>> b=[2-i;4+3i;3-i;6];
>>s=sum(conj(b).*a)
>>s1=b'*a
>>s=dot(b,a)
%以上三個命令的結果都是一樣的。

4.4.矩陣的相似化簡和分解

求解Jordan標準型,使用jordan函數
>> A=[0 3 3;-1 8 6;2 -14 -10];
>> jordan(A) %默認的結果爲上三角形式
ans =
 0     0     0
 0    -1     1
 0     0    -1
>> [v j]=jordan(A)  
v =
 4    -3    -3
 2    -3    -2
 -2     4     2

j =
 0     0     0
 0    -1     1
 0     0    -1

4.5 求矩陣的特徵值,使用eig函數

>> A=[1 0 i;0 2 0;-i 0 1];
>> eig(A)   %求解特徵值
ans =
 0
 2
 2

>> [e d]=eig(A)  % e表示特徵向量,d表示特徵值
e =      
   0.0000 + 0.7071i   0.0000 + 0.7071i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   0.0000 + 1.0000i
  -0.7071 + 0.0000i   0.7071 + 0.0000i   0.0000 + 0.0000i

d =      
 0     0     0
 0     2     0
 0     0     2

4.6.向量和矩陣的範數(範數指的是距離),使用norm函數

>> A=[0 3 3;-1 8 6;2 -14 -10];
>> norm(A,1)  %ans = 25 ,1範數
>> norm(A,2)   %ans = 20.4523 ,2範數
>> norm(A,inf)  %ans = 26 ,無窮範數
>> norm(A,'fro')  %ans = 20.4695 ,f範數

4.7函數矩陣,計算函數矩陣A(x)的一階和二階導數,其中A(x)爲:

A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]
>> syms x  %創建了一個符號
A(x)=[sin(x) exp(x) 1;cos(x) x^2+1 log(x)]

>> diff(A) %求一階導 
ans(x) =
[  cos(x), exp(x),   0]
[ -sin(x),    2*x, 1/x]

>> diff(A,2) %求二階導
>> diff(ans) %對二階導的結果求導,即三階導

4.8矩陣函數,使用funm函數計算矩陣函數

有矩陣C=[0 1;0 -2],求expC,sinC,cosC
>> C=[0 1;0 -2];
>> expC=funm(C,@exp)
>> sinC=funm(C,@sin)
>>cosC=funm(C,@cos)

5.線性方程組的求解

x+2y+3z=5
x+4y+9z=-2
x+8y+7z=6
步驟一:建立矩陣等式左邊按行排,常數項按列排
即:>> A=[1,2,3;1,4,9;1,8,7];
	>> B=[5,-2,6]';
	>> x=inv(A)*B  % A的逆乘以B
	或者
	>> x=A\B
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章