矩陣的建立以及操作
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