MATLAB學習筆記(三)

MATLAB的矩陣運算

本人今天主要學習的內容是:
1.矩陣運算的基本規則
2.從矩陣中提取數據
3.利用矩陣變量進行數值計算
4.創建和使用特殊矩陣

1.矩陣的定義

1)直接定義矩陣有兩種定義方式均可

>> C = [1,2,3;3,4,5;4,5,6]
C =
     1     2     3
     3     4     5
     4     5     6
>> C = [1,2,3
3,4,5
4,5,6]
C =
     1     2     3
     3     4     5
     4     5     6

2)如果一行有太多的元素需要跨行去寫,則省略號表示本行未完,轉入下一行

>> A = [1,2,3,...
3,4,5]
A =
     1     2     3     3     4     5

3)可以用已經定義的矩陣來定義其他矩陣

>> B = [1,2];
>> S = [3,B]
S =
     3     1     2
>> T = [30,10,20;S]
T =
    30    10    20
     3     1     2

4)可以通過圓括號加標號來修改矩陣元素的值

>> S(1) = 0
S =
     0     1     2

5)可以通過圓括號加標號來增加矩陣元素


>> S(4) = 5
S =
     0     1     2     5
>> S(8) = 8
S =
     0     1     2     5     0     0     0     8

2.冒號的使用

1)可以使用冒號定義等差矩陣,使用兩個參數或者三個參數。兩個參數的默認步長爲1,三個參數的步長爲第2個參數

>> H = 1:8
H =
     1     2     3     4     5     6     7     8
>> time = 0.0:0.5:2.0
time =
         0    0.5000    1.0000    1.5000    2.0000

2)提取數據功能。個人以爲類似於Python中的list的切片功能,只不過這裏是矩陣而不是數組。
定義矩陣:

>> M = [1,2,3,4,5;
       2,3,4,5,6;
       3,4,5,6,7]
M =
     1     2     3     4     5
     2     3     4     5     6
     3     4     5     6     7

提取第一列:

>> x = M(:,1)
x =
     1
     2
     3

提取第四列:

>> y = M(:,4)
y =
     4
     5
     6

提取第一行

>> z = M(1,:)
z =
     1     2     3     4     5

提取第二行和第三行:

>> w = M(2:3,:)
w =
     2     3     4     5     6
     3     4     5     6     7

提取第2行和第3行中第4列和第5列的元素:

>> w = M(2:3,4:5)
w =
     5     6
     6     7

使用M(:)可以把原矩陣轉換成一個長的列矢量,注意,原矩陣並沒有改變其存儲方式,僅僅是表示形式而已:

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

提取單個元素,既可以用行下標和列下標來提取,也可以直接使用序號來提取。序號是指從M(:)中的第幾個元素。如下例中兩種方法是等價的

>> M(2,3)
ans =
     4
>> M(8)
ans =
     4

3.特殊矩陣

1)全零矩陣zeros

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

2)全1矩陣ones

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

【注】全0矩陣和全1矩陣常用作佔位矩陣,用於程序的循環結構,這樣可以提高運行速度

>> ones(1,5)
ans =
     1     1     1     1     1
>> b = ans * pi
b =
    3.1416    3.1416    3.1416    3.1416    3.1416
>> zeros(1,5)
ans =
     0     0     0     0     0
>> b = ans + pi
b =
    3.1416    3.1416    3.1416    3.1416    3.1416
>> 

3)對角矩陣
用函數diag可以提取矩陣主對角線上的元素

>> A = [1,2,3;3,4,5;1,2,3]
A =
     1     2     3
     3     4     5
     1     2     3
>> diag(A)
ans =
     1
     4
     3

用diag使用兩個參數可以提取非主對角線上的元素,正數代表主對角線上方,負數代表主對角線下方。

>> A
A =
     1     2     3
     3     4     5
     1     2     3
>> diag(A,1)
ans =
     2
     5
>> diag(A,-1)
ans =
     3
     2
>> 

若輸入的是矢量而不是矩陣,則函數diag會把矢量作爲對角線元素而生成一個新的矩陣,並將矩陣的其他元素置零

>> 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

4)魔方矩陣

函數 用法
fliplr 對矩陣的列進行左右對稱翻轉
flipud 對矩陣的行進行上下對稱翻轉
magic(m) 創建一個m*m的魔方矩陣

魔方矩陣時一種很有趣但是沒有實際用途的特殊矩陣,在魔方矩陣中,所有的行列已經對角線元素之和均相等

>> A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> sum(A)  %按列求和
ans =
    34    34    34    34
>> sum(A')  %轉置後按列求和
ans =
    34    34    34    34
>> sum(diag(A))  %對角線元素求和
ans =
    34
>> fliplr(A)  %對矩陣的列進行左右對稱翻轉
ans =
    13     3     2    16
     8    10    11     5
    12     6     7     9
     1    15    14     4
>> sum(diag(A))  %對角線元素的和
ans =
    34
>> 

MATLAB中可以產生任何大於2*2的魔方矩陣,魔方矩陣的解不是唯一的,也可能有其他的解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章