矩陣及其基本運算(連載建構中)
MATLAB,即“矩陣實驗室”,它是以矩陣為基本運算單元。因此從最基本的運算單元出發,介紹MATLAB的命令及其用法。
1.1 矩陣的表示
1.1.1 數值矩陣的生成
1.實數值矩陣輸入
MATLAB的強大功能之一體現在能直接處理向量或矩陣。當然首要任務是輸入待處理的向量或矩陣。
不管是任何矩陣(向量),我們可以直接按行方式輸入每個元素:同一行中的元素用逗號(,)或者用空白字元來分隔,且空格個數不限;不同的行用分號(;)分隔。所有元素處於一方括號([ ])內;當矩陣是多維(三維以上),且方括號內的元素是維數較低的矩陣時,會有多重的方括號。如:
>> Time = [11 12 1 2 3 4 5 6 7 8 9 10]
Time =
11 12 1 2 3 4 5 6 7 8 9 10
>> X_Data = [2.32 3.43;4.37 5.98]
X_Data =
2.43 3.43
4.37 5.98
vect_a =
1 2 3 4 5
>> Matrix_B = [1 2 3;
>> 2 3 4;3 4 5]
Matrix_B = 1 2 3
2 3 4
3 4 5
>> Null_M = [ ] %生成一個空矩陣
2.複數矩陣輸入
複數矩陣有兩種生成方式:
第一種方式
例1-1
>> a=2.7;b=13/25;
>> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1]
C=
1.0000 5.4000 + 0.5200i 0.8544
0.7071 5.3000 4.5000
第2種方式
例1-2
>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16]
R =
1 2 3
4 5 6
M =
11 12 13
14 15 16
>> CN=R+i*M
CN =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i
4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i
1.1.2 符號矩陣的生成
在MATLAB中輸入符號向量或者矩陣的方法和輸入數值類型的向量或者矩陣在形式上很相像,只不過要用到符號矩陣定義函數sym,或者是用到符號定義函數syms,先定義一些必要的符號變數,再像定義普通矩陣一樣輸入符號矩陣。
這時的函數sym實際是在定義一個符號運算式,這時的符號矩陣中的元素可以是任何的符號或者是運算式,而且長度沒有限制,只是將方括號置於用於創建符號運算式的單引號中。如下例:
例1-3
>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!],')
sym_matrix =
[a b c]
[Jack Help Me! NO WAY!]
>> sym_digits = sym('[1 2 3;a b c;sin(x)cos(y)tan(z)]')
sym_digits =
[1 2 3]
[a b c]
[sin(x)cos(y)tan(z)]
先定義矩陣中的每一個元素為一個符號變數,而後像普通矩陣一樣輸入符號矩陣。
例1-4
>> syms a b c ;
>> M1 = sym('Classical');
>> M2 = sym(' Jazz');
>> M3 = sym('Blues')
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =
[ a b c]
[Classical Jazz Blues]
[ 2 3 5]
把數值矩陣轉化成相應的符號矩陣。
數值型和符號型在MATLAB中是不相同的,它們之間不能直接進行轉化。MATLAB提供了一個將數值型轉化成符號型的命令,即sym。
例1-5
>> Digit_Matrix = [1/3 sqrt(2) 3.4234;exp(0.23) log(29) 23^(-11.23)]
>> Syms_Matrix = sym(Digit_Matrix)
結果是:
Digit_Matrix =
0.3333 1.4142 3.4234
1.2586 3.3673 0.0000
Syms_Matrix =
[ 1/3, sqrt(2), 17117/5000]
[5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)]
注意:矩陣是用分數形式還是浮點形式表示的,將矩陣轉化成符號矩陣後,都將以最接近原值的有理數形式表示或者是函數形式表示。
1.1.3 大矩陣的生成
對於大型矩陣,一般創建M檔,以便於修改:
例1-6 用M檔創建大矩陣,檔案名為example.m
exm=[ 456 468 873 2 579 55
21 687 54 488 8 13
65 4567 88 98 21 5
456 68 4589 654 5 987
5488 10 9 6 33 77]
在MATLAB視窗輸入:
>>example;
>>size(exm) %顯示exm的大小
ans=
5 6 %表示exm有5行6列。
1.1.4 多維陣列的創建
函數 cat
格式 A=cat(n,A1,A2,…,Am)
說明 n=1和n=2時分別構造[A1;A2]和[A1,A2],都是二維陣列,而n=3時可以構造出三維陣列。
例1-7
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A4=cat(3,A1,A2,A3)
A4(:,:,1) =
1 2 3
4 5 6
7 8 9
A4(:,:,2) =
1 4 7
2 5 8
3 6 9
A4(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
或用另一種原始方式可以定義:
例1-8
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;
>> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3
A5(:,:,1) =
1 2 3
4 5 6
7 8 9
A5(:,:,2) =
1 4 7
2 5 8
3 6 9
A5(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
1.1.5 特殊矩陣的生成
命令 全零陣
函數 zeros
格式 B = zeros(n) %生成n×n全零陣
B = zeros(m,n) %生成m×n全零陣
B = zeros([m n]) %生成m×n全零陣
B = zeros(d1,d2,d3…) %生成d1×d2×d3×…全零陣或陣列
B = zeros([d1 d2 d3…]) %生成d1×d2×d3×…全零陣或陣列
B = zeros(size(A)) %生成與矩陣A相同大小的全零陣
命令 單位陣
函數 eye
格式 Y = eye(n) %生成n×n單位陣
Y = eye(m,n) %生成m×n單位陣
Y = eye(size(A)) %生成與矩陣A相同大小的單位陣
命令 全1陣
函數 ones
格式 Y = ones(n) %生成n×n全1陣
Y = ones(m,n) %生成m×n全1陣
Y = ones([m n]) %生成m×n全1陣
Y = ones(d1,d2,d3…) %生成d1×d2×d3×…全1陣或陣列
Y = ones([d1 d2 d3…]) %生成d1×d2×d3×…全1陣或陣列
Y = ones(size(A)) %生成與矩陣A相同大小的全1陣
命令 均勻分佈隨機矩陣
函數 rand
格式 Y = rand(n) %生成n×n隨機矩陣,其元素在(0,1)內
Y = rand(m,n) %生成m×n隨機矩陣
Y = rand([m n]) %生成m×n隨機矩陣
Y = rand(m,n,p,…) %生成m×n×p×…隨機矩陣或陣列
Y = rand([m n p…]) %生成m×n×p×…隨機矩陣或陣列
Y = rand(size(A)) %生成與矩陣A相同大小的隨機矩陣
rand %無變數輸入時只產生一個亂數
s = rand('state') %產生包括均勻發生器當前狀態的35個元素的向量
rand('state', s) %使狀態重置為s
rand('state', 0) %重置發生器到初始狀態
rand('state', j) %對整數j重置發生器到第j個狀態
rand('state', sum (100*clock)) %每次重置到不同狀態
例1-9 產生一個3×4隨機矩陣
>> R=rand(3,4)
R =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
例1-10 產生一個在區間[10, 20]內均勻分佈的4階隨機矩陣
>> a=10;b=20;
>> x=a+(b-a)*rand(4)
x =
19.2181 19.3547 10.5789 11.3889
17.3821 19.1690 13.5287 12.0277
11.7627 14.1027 18.1317 11.9872
14.0571 18.9365 10.0986 16.0379
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。