矩陣和數組操作
Matlab中文含義就是矩陣實驗室的意思,輕松靈活的處理矩陣式Matlab語言的特色。
概念:
數組:與其它編程語言一樣,定義是:相同數據類型元素的集合。
矩陣:數學中早已定義。不再贅述,matlab中處理最多的是二維矩陣
矩陣的創建:
1直接輸入
在命令行窗口中定義 A=[1,2,3;4,5,6;7,8,9] 分好是換行,逗號是本行 回車后如下圖:
2函數法生成特殊的矩陣
(1)零矩陣:zeros(n) :生成n*n的零矩陣
zeros(n,m): 生成n*m的零矩陣
如下圖:
(2)單位矩陣:eye(n): 生成n*n的單位矩陣(對角線元素為1 其余元素為0)
eye(n,m): 生成n*m的單位陣
如下圖:
(3)魔方矩陣(行、列、對角線元素和相同):magic()用法和以上函數一樣
(4)對角矩陣(對角線上的矩陣非0):dig(1:5) :生成對角線元素為1,2,3,4,5 的5*5矩陣 如下圖:
(5)上三角矩陣(對角線以下的元素為0): triu()
(6)下三角元素(對角線元素以上為0): tril()
代碼:
>> a=[1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
>> a=zeros(3,2)
a =
0 0
0 0
0 0
>> a=eye(4)
a =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a=diag([1:5])
a =
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
>> b=magic(3)
a=triu(b)
b =
8 1 6
3 5 7
4 9 2
a =
8 1 6
0 5 7
0 0 2
>> b=magic(3)
a=tril(b)
b =
8 1 6
3 5 7
4 9 2
a =
8 0 0
3 5 0
4 9 2
3 矩陣的基本操作
顯示矩陣:直接在命令中輸入矩陣名稱回車即可,或者使用函數disp(矩陣名字) 也可以
矩陣判空:isempty(A) 為空返回1 不空返回0
isequal(A ,B) 判斷矩陣A和矩陣B是否相等(矩陣相等當且僅當矩陣行列一樣,並且對應元素都相等)
size(A) 獲取矩陣行數和列數
length(A) 獲取矩陣的長度(行數和列數中的最大值)
numel(A) 獲取A矩陣中元素個數之和
ndims(A) 獲取A矩陣的維度(注意是維度不是列數)
代碼:
>> a=magic(4);
>> a=magic(4);
dsip(a)
未定義與 'double' 類型的輸入參數相對應的函數 'dsip'。
是不是想輸入:
>> a=magic(4);
disp(a)
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b=magic(4);
disp(isequal(A,B))
未定義函數或變量 'A'。
是不是想輸入:
>> b=magic(4);
disp(isequal(a,b))
1
>> [m,n]=size(a)
m =
4
n =
4
>> disp(length(a))
4
>> numel(a)
ans =
16
>> ndims(a)
ans =
2
4 訪問矩陣元素
圓括號訪問:A(3,4) 訪問矩陣第三行第四列的元素
A(3) 訪問矩陣中按列排列的第3個元素(按列排列也成線性編碼,就是第一列排完,再排第二列。。。。依次)
注意:訪問矩陣元素在matlab中使用的是圓括號。而在其他高級編程語言中卻使用的是方括號[] ,在matlab中方括號[]用到矩陣或者數組定義的使用。
冒號運算符:
冒號運算符很強大,使用頻率也很高。A(:,1) 訪問矩陣A第一列的所有元素。 A(1,:) 訪問矩陣A的第一行的所有元素
A(:,n) 訪問矩陣A的第n列元素
A(:,:) 訪問矩陣A的所有元素
diag(A) 訪問矩陣A的對角線元素
diag(A,k) 訪問矩陣A的第K條對角線元素(主對角線為第0條)、
end A(1,2:end) 訪問矩陣A的第一行的第二列到最后一列的元素
A(end,end) 訪問矩陣A的最后一個元素
find() 查找矩陣中滿足一定條件的元素
index=find(A) 查找矩陣A中非零的元素,並返回矩陣中非零元素的線性索引(按列排列)
[m,n]=find(A==1) 查找矩陣A中等於1的元素的行列下標 行給m 列給n
[m,n]=find(A==1,k) 查找矩陣A等於1的元素的行列下標,返回前K個滿足要求的元素的下標
連接矩陣:
[A,B] 水平方向上連接兩個矩陣
[A;B] A在上,B在下,垂直方向上連接矩陣
矩陣求逆: A’ 即是矩陣A的逆矩陣
改變矩陣大小(假若A是3*3的矩陣):A(:,4)=1 向矩陣A中添加第四列元素,並賦值為1 ,A變成3*4的矩陣。
A(4,1)=1 :第四行第一列為1,剩余的矩陣A的第四行元素為0
矩陣大小重排:reshape(A ,m,n) 用於重新排列矩陣A,返回大小m*n的矩陣,前提是A的行列乘積=m*n
repmat() 復制矩陣函數 B=repmat(A,m,n) 將A當做一個整體單元,復制成大小為m*n的矩陣
B=unique(A) 去除矩陣A中重復的元素,將不重復的元素從小到大排列傳給B,B以向量形式接受
代碼:
>> 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
>> a(1,2)
ans =
24
>> a(:,1)
ans =
17
23
4
10
11
>> diag(a)
ans =
17
5
13
21
9
>> diag(a)
ans =
17
5
13
21
9
>> diag(a,1)
ans =
24
7
20
3
>> a(1,end)
ans =
15
>> a(:,end)
ans =
15
16
22
3
9
>> a(2,2:end)
ans =
5 7 14 16
>> a(end,end)
ans =
9
>> index=find(a)
index =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>> find(a>10)
ans =
1
2
5
6
9
10
13
14
15
17
18
19
21
22
23
>> [m,n]=find(a==1)
m =
1
n =
3
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b=[7,8,9;1,2,3]
b =
7 8 9
1 2 3
>> [a,b]
ans =
1 2 3 7 8 9
4 5 6 1 2 3
>> [a;b]
ans =
1 2 3
4 5 6
7 8 9
1 2 3
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a'
ans =
8 3 4
1 5 9
6 7 2
>> a(4,1)=2
a =
8 1 6
3 5 7
4 9 2
2 0 0
>> a(:,4)=1
a =
8 1 6 1
3 5 7 1
4 9 2 1
2 0 0 1
>> a=[1:12]
a =
1 2 3 4 5 6 7 8 9 10 11 12
>> reshape(a,3,4)
ans =
1 4 7 10
2 5 8 11
3 6 9 12
>> a=[1,2;3,4]
a =
1 2
3 4
>> repmat(a,2,2)
ans =
1 2 1 2
3 4 3 4
1 2 1 2
3 4 3 4
>> a=repmat(a,2,2)
a =
1 2 1 2
3 4 3 4
1 2 1 2
3 4 3 4
>> a=unique(a)
a =
1
2
3
4
矩陣加減乘除乘方運算
A+B 矩陣加(要求A,B有相同的行列數)
A-B 矩陣減(要求A,B有相同的行列數)
A+1(標量) 矩陣加標量 等價於矩陣的每一個元素都加上標量
A*B 矩陣的乘法 前提是矩陣A的列數等於矩陣B的行數
A.*B A點乘B A矩陣的元素乘上B矩陣對應位置的元素(前提是矩陣行列數一樣)
A*標量 矩陣A中的每一個元素都乘以標量
A/B 右除 計算Bx=A
A\B 左除 計算Ax=B
(區分左除還是右除很簡單,就是看除號往那邊倒,哪邊就是除數)同樣左除和右除也在數值的計算中,如1/2 1\2
A^2 矩陣乘方運算,A*A
A.^2 矩陣的點乘方運算 矩陣A中每一個元素的平方
det(A) 求矩陣A的行列式
inv(A) 求矩陣A的逆
rank(A) 求矩陣A的秩
[v,d]=eig(A) 求矩陣A的特征值和特征向量, V是矩陣,每一列對應一個特征向量,d是特征向量對應的特征值。
C=A>B 判斷A中的元素是否大於B中的元素,返回一個大小一樣的矩陣,在其對應的位置上賦值,1表示大於,0表示不大於。
C=A<B 原理和上述一樣
C=find(A>k) 將矩陣A中大於k的元素按照線性編碼傳入C中。
數組和向量的一些運算和矩陣的運算基本一致,向量就是一個一維的數組,而數組運算無非就比矩陣運算多了個關系和邏輯運算。在matlab中我們使用最多的就是向量和矩陣
代碼:
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b=[1,1,1;8,10,12]
b =
1 1 1
8 10 12
>> a+b
ans =
2 3 4
12 15 18
>> a-b
ans =
0 1 2
-4 -5 -6
>> a./b
ans =
1.0000 2.0000 3.0000
0.5000 0.5000 0.5000
>> a/b
ans =
-3.0000 0.5000
-0.0000 0.5000
>> a\b
ans =
3.0000 4.0000 5.0000
0 0 0
-0.6667 -1.0000 -1.3333
>> a.\b
ans =
1.0000 0.5000 0.3333
2.0000 2.0000 2.0000
>> a^2
錯誤使用 ^
輸入必須為標量和方陣。
要按元素進行 POWER 計算,請改用 POWER (.^)。
>> a=[1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
>> a^2
ans =
30 36 42
66 81 96
102 126 150
>> a.^2
ans =
1 4 9
16 25 36
49 64 81
>> det(a)
ans =
6.6613e-16
>> a=ones(3)
a =
1 1 1
1 1 1
1 1 1
>> det(a)
ans =
0
>> inv(a)
警告: 矩陣為奇異工作精度。
ans =
Inf Inf Inf
Inf Inf Inf
Inf Inf Inf
>> a=dig(3)
未定義與 'double' 類型的輸入參數相對應的函數 'dig'。
是不是想輸入:
>> a=diag(3)
a =
3
>> a=eye(3)
a =
1 0 0
0 1 0
0 0 1
>> det(a)
ans =
1
>> inv(a)
ans =
1 0 0
0 1 0
0 0 1
>> rank(a)
ans =
3
>> [v,d]=eig(a)
v =
1 0 0
0 1 0
0 0 1
d =
1 0 0
0 1 0
0 0 1
>> a=[1,2,3;3,2,1;4,5,6]
a =
1 2 3
3 2 1
4 5 6
>> b=magic(3)
b =
8 1 6
3 5 7
4 9 2
>> c=a>b
c =
0 1 0
0 0 0
0 0 1
>> a<b
ans =
1 0 1
0 1 1
0 1 0
>> a==b
ans =
0 0 0
1 0 0
1 0 0
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> find(a)
ans =
1
2
3
4
5
6
>> v=find(a)
v =
1
2
3
4
5
6
>> v=find(a)
v =
1
2
3
4
5
6
>> v=find(a>2)
v =
2
4
5
6
>> a=3
a =
3
>> ~a
ans =
0
>>