Matlab: 矩陣運算

Create a 3X3X2 matrix A which contains a matrix of magic(3) and another rand(3,3)*10.
題旨:創造一個多維矩陣,在這裡先宣告 A為 3x3x2矩陣,之後再填入兩個3x3矩陣,分別是 magic(3) 和 rand(3)*10 。

程式內容:
>> A=zeros(3,3,2);
>> A(:,:,1)=magic(3);
>> A(:,:,2)=rands(3,3)*10;
>> A

A(:,:,1) =
8 1 6
3 5 7
4 9 2
A(:,:,2) =
-0.2804 -0.8706 -1.1059
7.8260 -9.6299 2.3086
5.2419 6.4281 5.8387

結果與討論:
結果如上所示,在這裡順便測試一下,當輸入 A(4) 顯示的是 1 ,而
A(12)=5.2419;可以觀察到A(4)=A(1 ,2 ,1), A(12)= A( 3, 1, 2) 。在多維矩陣裡也可以直接用數列直接呼叫矩陣各個位置,順序為先從 A (: , : , 1)的 第一行、第二行、第三行、A( : , : , 2)的第一行、第二行、第三行。


Assume that matrices A=[45 89 99; 12 34 55], B=[15 25 45; 65 50 30]. Find matrices that join A & B both in vertical and horizontal directions. Also, find a two-page matrix with A & B stored in separate pages. Use commands horizcat and verticat to check the results with those from above.
題旨:
A, B 兩個2x3 矩陣利用 cat 指令作合併的動作,cat(dim ,A ,B)中dim=1
代表兩個矩陣垂直合併,dim=2 代表兩個矩陣平行合併,而dim=3為分頁。
在這裡用dim=1,2,3 分別做出矩陣 C1,C2,C3 ,接著利用 horzcat 指令和vertcat指令檢查,horzcat(A,B) 為平行合併,vertcat(A,B) 為垂直合併。

程式內容
>> A=[45 89 99;12 34 55];
>> B=[15 25 45;65 50 30];
>> C1=cat(1,A,B);
>> C2=cat(2,A,B);
>> C3=cat(3,A,B);
>> C1

C1 =
45 89 99
12 34 55
15 25 45
65 50 30
>> C2
C2 =
45 89 99 15 25 45
12 34 55 65 50 30
>> C3
C3(:,:,1) =
45 89 99
12 34 55
C3(:,:,2) =
15 25 45
65 50 30
>> Ch=horzcat(A,B)
Ch =
45 89 99 15 25 45
12 34 55 65 50 30
>> Cv=vertcat(A,B)
Cv =
45 89 99
12 34 55
15 25 45
65 50 30
>> isequal(Cv,C1)
ans =
1
>> isequal(Ch,C2)
ans =
1
結果與分析
先利用cat(1,A,B) cat(2,A,B) cat(3,A,B) 分別創造平行合併矩陣,垂直合併矩陣,和三維矩陣..C1,C2,C3,可以由程式碼看出結果。而之後用horzcat 和vertcat兩個指令作同樣的動作,為 Ch 和Cv 矩陣,在這裡老師的題目給的指令似乎有筆誤。最後在利用isequal 指令檢查 C1和 Ch是否是相同的矩陣,C2和Cv是否是相同的矩陣,最後結果都是邏輯值 1 ,所以 cat( 1, A, B) = horzcat( A,B)、cat( 2, A, B )=vertcat( A, B) 。

Find a matrix M which contains A as the first and third pages and B the second and fourth pages.
題旨:
已知矩陣 A, B 求M矩陣的第一頁和第三頁是矩陣A,M矩陣的第二頁和第四頁是矩陣B,在這裡可以利用cat指令或是直接宣告 M(: , : , 1)、M(: , : , 2)、M(: , : , 3)、M(: , : , 4)都可以,在這裡採用 cat指令寫成指令檔。

程式內容
/matrix.m/ %matrix的指令檔
function output=matrix(input1,input2)
output=cat(3,input1,input2,input1,input2);

/command windows/ %在command windows執行
舉例來說
>> A=[1 2;3 4];
>> B=[5 6;7 8];
>> M=matrix(A,B);
>> M
M(:,:,1) =
1 2
3 4
M(:,:,2) =
5 6
7 8
M(:,:,3) =
1 2
3 4
M(:,:,4) =
5 6
7 8
結果與分析
在本題試過兩種作法,結果都一樣,一種是用cat(3,A,B) 一種是一頁一頁宣告


Construct a 2X2 cell array that contains 'Eric' [90 100]; 'Peter' [35 60]; 'Jan' [77 67].
題旨:
宣告一個2x3細胞矩陣A包含題目所題到的六個元素,用A(1,1)={}形式設定每個元素的值,再用celldisp把細胞矩陣A的詳細內容展示出來。

程式內容
>> A(1,1)={'Eric'};
>> A(2,1)={'Peter'};
>> A(3,1)={'Jan'};
>> A(1,2)={[90 100]};
>> A(2,2)={[35 60]};
>> A(3,2)={[77 67]};
>> A
A =
'Eric' [1x2 double]
'Peter' [1x2 double]
'Jan' [1x2 double]
>> celldisp(A)
A{1,1} =
Eric
A{2,1} =
Peter
A{3,1} =
Jan
A{1,2} =
90 100
A{2,2} =
35 60
A{3,2} =
77 67

結果與分析
在這裡選用了最基本的指定位置填入內容


Construct a structural Array that contains the following data:Name: 'Philip', 'Peter','Roberts', 'Roe'Age: 35, 45, 55, 60Salary: 50,000 40,000 80,000 120,000

題旨:
宣告一個 結構矩陣,有Name, Age, Salary共三類各4項,在這裡使用指令struct直接宣告內容。

程式內容
>> clear
>> B=struct('Name',{'Philip','Peter','Roberts','Roe'},'Age',{35,45,55,60},'Salary',{'50,000','40,000','80,000','120,000'});

>> B(1)
ans =
Name: 'Philip'
Age: 35
Salary: '50,000'

>> B(2)
ans =
Name: 'Peter'
Age: 45
Salary: '40,000'

>> B(3)
ans =
Name: 'Roberts'
Age: 55
Salary: '80,000'

>> B(4)
ans =
Name: 'Roe'
Age: 60
Salary: '120,000'

結果與分析
使用struct指令可以方便的宣告結構矩陣的內容,免除了一項一項宣告的麻煩,
在struct裡面中括號和大括號的用法需特別注意,如 {35,45,55,60}、[35 45 55 60]、{[35 45 55 60]} 都是不同的結果。

0 意見: