天天看點

matlab求兩向量夾角_MATLAB的矩陣運算與重構

5. 數組運算與矩陣運算

在MATLAB中,術語矩陣和數組在一般情況下是沒有差別的。嚴格地說,一個矩陣就是一個二維的數組,是用來進行線性代數運算的。MATLAB運用于矩陣上的數學運算符是以線性代數中的矩陣運算法則來進行計算的,而數組運算是基于兩個矩陣對應元素之間的,是以在MATLAB中,數組運算和矩陣運算是有差別的。

為了更清晰地表述數組運算和矩陣運算的差別,本節将二者相對應的指令清單進行對比,以說明其異同。表2-8列出了兩種運算指令形式和實質功能的差別。

表2-8        數組運算與矩陣運算的差別

數組運算 矩陣運算
指    令 說    明 指    令 說    明
A.' 非共轭轉置,相當于(conj(A')) A' 共轭轉置
A+B與A-B 對應元素之間加減 A+B或A-B 對應元素之間加減
k.*A或A.*k k乘A的每個元素 k*A或A*k k乘A的每個元素
k+A與k-A k加(減)A的每個元素 k+A與k-A k加(減)A的每個元素
A.*B 兩數組對應元素相乘 A*B 按線性代數的矩陣乘法規則
A.^k A的每個元素進行k次方運算 A^k k個矩陣A相乘
k.^A 以k為底,分别以A的元素為指數求幂值 k^A 矩陣的幂。K和A不能同時為矩陣。按照矩陣幂的運算法則進行計算
k./A和A.\k k分别被A的元素除
左除A./B A的元素被B的對應元素除 左除A\B AX=B的解
右除B.\A 與上式結果相同 右除B/A XA=B的解
說明:k為标量,即單個數值,A和B均為矩陣或者數組

【例2-11】  數組運算和矩陣運算的比較。

>> A=[1 2;3 4];       % 測試矩陣A

>> B=[4 3;2 1];       % 測試矩陣B

>> r1=100+A           % 矩陣A加上一個常數

r1 =

   101   102

   103   104

>> r2_1=A*B            % 兩個矩陣相乘,矩陣乘法

r2_1 =

     8     5

    20    13

>> r2_2=A.*B            % 兩個矩陣相乘,數組乘法

r2_2 =

     4     6

     6     4

>> r3_1=A\B             % 矩陣左除

r3_1 =

  -6.0000   -5.0000

   5.0000    4.0000

>> r3_2=A.\B            % 數組除法

r3_2 =

   4.0000    1.5000

   0.6667    0.2500

>> r4_1=B/A             % 矩陣右除

r4_1 =

  -3.5000    2.5000

  -2.5000    1.5000

>> r4_2=B./A           % 數組除法

r4_2 =

   4.0000    1.5000

   0.6667    0.2500

>> r5_1=A.^2           % 數組幂

r5_1 =

     1     4

     9    16

>> r5_2=A^2            % 矩陣幂

r5_2 =

     7    10

    15    22

>> r6_1=2.^A           % 數組幂

r6_1 =

     2     4

     8    16

6  矩陣的重構

6.1 矩陣元素的擴充與删除

MATLAB提供有對矩陣中的元素進行行或者列的擴充與删除的功能。

1.矩陣元素的擴充

将資料儲存在矩陣現有維數以外的元素中時,矩陣的尺寸會自動增加,以便容納下這個新元素。這個功能可以用來進行矩陣的擴充。

【例2-12】  矩陣的擴充。

>> A=magic(4)

A =

    16     2    3    13

     5    11   10     8

     9     7    6    12

     4    14   15     1

>> A(6,7)=17                     

A =

    16     2    3    13     0    0     0

     5    11   10     8     0    0     0

     9     7    6    12     0    0     0

     4    14   15     1     0    0     0

     0     0    0     0     0    0     0

     0     0    0     0     0    0    17

>> A(:,8)=ones(6,1)

A =

    16     2    3    13     0    0     0     1

     5    11   10     8     0    0     0     1

     9     7    6    12     0    0     0     1

     4    14   15     1     0    0     0     1

     0     0    0     0     0    0     0     1

     0     0    0     0     0    0    17     1

本例中,A的原始矩陣并沒有A(6,7)這個元素,通過指派給A(6,7),矩陣A擴充成了一個6´7的新矩陣,其中未指派的擴充部分以0來填充。另外本例還說明了如何對矩陣的多個元素進行擴充指派,直接将一個列向量指派給了擴充部分。

2.矩陣元素的删除

通過将行或列指定為空矩陣[],即可從矩陣中删除行和列。

【例2-13】  矩陣的删除。

>> A=magic(4)

A =

    16     2    3    13

     5    11   10     8

     9     7    6    12

     4    14   15     1

>> A(:,1)=[]          %  删除矩陣A的第1列

A =

     2     3   13

    11    10    8

     7     6   12

    14    15    1

>> A(2,:)=[]         %  删除矩陣A的第2行

A =

     2     3   13

     7     6   12

    14    15    1

6.2 矩陣的重構

使用者可以通過矩陣旋轉,改變維數和截取部分元素來産生所需要的新矩陣。MATLAB提供了一些矩陣重構函數,如表2-9所示。

表2-9       常用的矩陣重構函數及說明

函數形式 函數功能 函數形式 函數功能
B=rot90(A) 矩陣B由矩陣A逆時針旋轉90°所得 L=tril(A,k) L矩陣第k條對角線及以下的元素取矩陣A的元素,其餘為0
B=rot90(A,K) 矩陣B由矩陣A逆時針旋轉k×90°所得 L=tril(A) L矩陣主對角線及以下的元素取矩陣A的元素,其餘為0
B=flipud(A) 矩陣B由矩陣A上下翻轉所得 U=triu(A,K) U矩陣第k條對角線及以上的元素取矩陣A的元素,其餘為0
B=reshape(A,m,n) 将矩陣A改寫為矩陣B,矩陣B的維數為(m×n),m×n等于矩陣A的元素總個數 U=triu(A) U矩陣主對角線及以上的元素取矩陣A的元素,其餘為0
B=fliplr(A) 矩陣B由矩陣A左右翻轉所得 說明:A、B、L、U均為矩陣

【例2-14】  矩陣的重構示例。

>> a=reshape(1:9,3,3)                %  建立測試矩陣

>> a= [1,7;2,8;3,9;4,10;5,11;6,12]  %  建立測試矩陣

a =

     1     7

     2     8

     3     9

     4    10

     5    11

     6    12

>> a = reshape(a,4,3)           %  使用reshape改變a的形狀,

%  注意前後兩個a每一個單下标對應的元素是一緻的

a =

     1     5    9

     2     6   10

     3     7   11

     4     8   12

>> b=rot90(a,3)                    %  将矩陣a逆時針旋轉3×90°

b =

     4     3    2     1

     8     7    6     5

    12    11   10     9>> c=fliplr(a)                     %  将矩陣a左右翻轉

c =

     9     5    1

    10     6    2

    11     7    3

    12     8    4>> d=flipud(a)                   %  将矩陣a上下翻轉

d =

     4     8   12

     3     7   11

     2     6   10

     1     5    9【例2-15】  矩陣部分元素的提取。

>> a=[1 2 3;4 5 6; 7 8 9]  %  建立測試矩陣

a =

     1     2    3

     4     5    6

     7     8    9

>> b=diag(a)          %  求a的對角矩陣

b =

     1

     5

     9

>> c=triu(a,1)        % c矩陣第1條對角線及以上的元素取矩陣a的元素,其餘為0

c =

     0     2    3

     0     0    6

     0     0    0

>> d=triu(a,2)       %  d矩陣第2條對角線及以上的元素取矩陣a的元素,其餘為0

d =

     0     0    3

     0     0    0

     0     0    0

>> e=triu(a,-1)     % e矩陣中除了第3行第1列元素為0,其餘元素都取自矩陣a的元素

e =

     1     2    3

     4     5    6

     0     8    9

>> f=tril(a,-1)     % 下三角矩陣的提取

f =

     0     0    0

     4     0    0

     7     8    0

matlab求兩向量夾角_MATLAB的矩陣運算與重構