MATLAB矩陣運算(1)


                                                                                                                                                  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]

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,先定義一些必要的符號變量,再像定義普通矩陣一樣輸入符號矩陣。

1.用命令sym定義矩陣:

這時的函數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)]

2.用命令syms定義矩陣

先定義矩陣中的每一個元素為一個符號變量,而后像普通矩陣一樣輸入符號矩陣。

例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

命令  正態分布隨機矩陣

函數  randn

格式  Y = randn(n)          %生成n×n正態分布隨機矩陣

Y = randn(m,n)        %生成m×n正態分布隨機矩陣

Y = randn([m n])              %生成m×n正態分布隨機矩陣

Y = randn(m,n,p,…)    %生成m×n×p×…正態分布隨機矩陣或數組

Y = randn([m n p…])          %生成m×n×p×…正態分布隨機矩陣或數組

Y = randn(size(A))       %生成與矩陣A相同大小的正態分布隨機矩陣

randn                 %無變量輸入時只產生一個正態分布隨機數

s = randn('state')       %產生包括正態發生器當前狀態的2個元素的向量

s = randn('state', s)            %重置狀態為s

s = randn('state', 0)            %重置發生器為初始狀態

s = randn('state', j)             %對於整數j重置狀態到第j狀態

s = randn('state', sum(100*clock))    %每次重置到不同狀態

例1-11  產生均值為0.6,方差為0.1的4階矩陣

>> mu=0.6; sigma=0.1;

>> x=mu+sqrt(sigma)*randn(4)

x =

    0.8311    0.7799    0.1335    1.0565

    0.7827    0.5192    0.5260    0.4890

    0.6127    0.4806    0.6375    0.7971

    0.8141    0.5064    0.6996    0.8527

命令  產生隨機排列

函數  randperm

格式  p = randperm(n)     %產生1~n之間整數的隨機排列

例1-12

>> randperm(6)

ans =

     3     2     1     5     4     6

命令  產生線性等分向量

函數  linspace

格式  y = linspace(a,b)     %在(a, b)上產生100個線性等分點

y = linspace(a,b,n)    %在(a, b)上產生n個線性等分點

命令  產生對數等分向量

函數  logspace

格式  y = logspace(a,b)     %在(         )之間產生50個對數等分向量

y = logspace(a,b,n)

y = logspace(a,pi)

命令  計算矩陣中元素個數

n = numel(a)    %返回矩陣A的元素的個數

命令  產生以輸入元素為對角線元素的矩陣

函數  blkdiag

格式  out = blkdiag(a,b,c,d,…)   %產生以a,b,c,d,…為對角線元素的矩陣

例1-13

>> out = blkdiag(1,2,3,4)

out =

     1     0     0     0

     0     2     0     0

     0     0     3     0

     0     0     0     4

命令  友矩陣

函數  compan

格式  A = compan(u)    %u為多項式系統向量,A為友矩陣,A的第1行元素為      -u (2:n)/u(1),其中u (2:n)為u的第2到第n個元素,A為特征值就是多項式的特征根。

例1-14  求多項式                               的友矩陣和根

>> u=[1 0 -7 6];

>> A=compan(u)    %求多項式的友矩陣

A =

   0     7    -6

     1     0     0

     0     1     0

>> eig(A)     %A的特征值就是多項式的根

ans =

  -3.0000

  2.0000

  1.0000

命令  hadamard矩陣

函數  hadamard

格式  H = hadamard(n)     %返回n階hadamard矩陣

例1-15

>> h=hadamard(4)

h =

   1     1     1     1

     1    -1     1    -1

     1     1    -1    -1

     1    -1    -1     1

命令  Hankel方陣

函數  hankel

格式  H = hankel(c)     %第1列元素為c,反三角以下元素為0。

H = hankel(c,r)   %第1列元素為c,最后一行元素為r,如果c的最后一個元素與r的第一個元素不同,交叉位置元素取為c的最后一個元素。

例1-16

>> c=1:3,r=7:10

c =

     1     2     3

r =

     7     8     9    10

>> h=hankel(c,r)

h =

     1     2     3     8

     2     3     8     9

     3     8     9    10

命令  Hilbert矩陣

函數  hilb

格式  H = hilb(n)     %返回n階Hilbert矩陣,其元素為H(i,j)=1/(i+j-1)。

例1-17  產生一個3階Hilbert矩陣

>> format rat      %以有理形式輸出

>> H=hilb(3)

H =

      1           1/2          1/3    

     1/2          1/3          1/4    

     1/3          1/4          1/5    

命令  逆Hilbert矩陣

函數  invhilb

格式  H = invhilb(n)    %產生n階逆Hilbert矩陣

命令  Magic(魔方)矩陣

函數  magic

格式  M = magic(n)    %產生n 階魔方矩陣

例1-18

>> M=magic(3)

M =

      8            1            6     

      3            5            7     

      4            9            2     

命令  Pascal矩陣

函數  pascal

格式  A = pascal(n)      %產生n階Pascal矩陣,它是對稱、正定矩陣,它的元素由Pascal三角組成,它的逆矩陣的所有元素都是整數。

A = pascal(n,1)     %返回由下三角的Cholesky系數組成的Pascal矩陣

A = pascal(n,2)     %返回Pascal(n,1)的轉置和交換的形式

例1-19

>> A=pascal(4)

A =

      1            1            1            1     

      1            2            3            4     

      1            3            6           10     

      1            4           10           20     

>> A=pascal(3,1)

A =

      1            0            0     

      1           -1            0     

      1           -2            1     

>> A=pascal(3,2)

A =

      1            1            1     

     -2           -1            0     

      1            0            0     

命令  托普利茲矩陣

函數  toeplitz

格式  T = toeplitz(c,r)    %生成一個非對稱的托普利茲矩陣,將c作為第1列,將r作為第1 行,其余元素與左上角相鄰元素相等。

T = toeplitz(r)      %用向量r生成一個對稱的托普利茲矩陣

例1-20

>> c=[1 2 3 4 5];

>> r=[1.5 2.5 3.5 4.5 5.5];

>> T=toeplitz(c,r)

T =

      1           5/2          7/2          9/2         11/2    

      2            1           5/2          7/2          9/2    

      3            2            1           5/2          7/2    

      4            3            2            1           5/2    

      5            4            3            2            1     

命令  Wilkinson特征值測試陣

函數  wilkinson

格式  W = wilkinson(n)    %返回n階Wilkinson特征值測試陣

例1-21

>> W=wilkinson(4)

W =

     3/2           1            0            0     

      1           1/2           1            0     

      0            1           1/2           1     

      0            0            1           3/2    

>> W=wilkinson(7)

W =

      3     1      0      0       0       0         0   

      1     2      1      0       0       0         0   

      0     1      1      1       0       0         0    

      0     0      1      0       1       0         0   

      0     0      0      1       1       1         0   

      0     0      0      0       1       2         1   

      0     0      0      0       0       1         3   

                                                                                                                                                        1.2  矩陣運算

1.2.1  加、減運算

運算符:“+”和“-”分別為加、減運算符。

運算規則:對應元素相加、減,即按線性代數中矩陣的“十”,“一”運算進行。

例1-22 

>>A=[1, 1, 1; 1, 2, 3; 1, 3, 6]

>>B=[8, 1, 6; 3, 5, 7; 4, 9, 2]

>>A+B=A+B

>>A-B=A-B

結果顯示:A+B=

9   2   7

4   7  10

5  12   8

A-B=

-7    0   -5

-2    -3   -4

-3    -6    4

1.2.2  乘法

運算符:*

運算規則:按線性代數中矩陣乘法運算進行,即放在前面的矩陣的各行元素,分別與放在后面的矩陣的各列元素對應相乘並相加。

1.兩個矩陣相乘

例1-23

>>X= [2  3  4  5;

      1  2  2  1];

>>Y=[0  1  1;

     1  1  0;

     0  0  1;

     1  0  0];

Z=X*Y

結果顯示為:

Z=

   8  5  6

   3  3  3

2.矩陣的數乘:數乘矩陣

上例中:a=2*X

則顯示:a =

4  6  8  10

2  4  4  2

向量的點乘(內積):維數相同的兩個向量的點乘。

數組乘法:

A.*B表示A與B對應元素相乘。

3.向量點積

函數  dot

格式  C = dot(A,B)       %若A、B為向量,則返回向量A與B的點積,A與B長度相同;若為矩陣,則A與B有相同的維數。

C = dot(A,B,dim)    %在dim維數中給出A與B的點積

例       >>X=[-1  0  2];

>>Y=[-2  -1  1];

>>Z=dot(X, Y)

則顯示:Z =

4

還可用另一種算法:

sum(X.*Y)

ans=

     4

4.向量叉乘

在數學上,兩向量的叉乘是一個過兩相交向量的交點且垂直於兩向量所在平面的向量。在Matlab中,用函數cross實現。

函數  cross

格式  C = cross(A,B)   %若A、B為向量,則返回A與B的叉乘,即C=A×B,A、B必須是3個元素的向量;若A、B為矩陣,則返回一個3×n矩陣,其中的列是A與B對應列的叉積,A、B都是3×n矩陣。

C = cross(A,B,dim)   %在dim維數中給出向量A與B的叉積。A和B必須具有相同的維數,size(A,dim)和size(B,dim)必須是3。

例1-24  計算垂直於向量(1, 2, 3)和(4, 5, 6)的向量。

   >>a=[1  2  3];

   >>b=[4  5  6];

   >>c=cross(a,b)

結果顯示:

    c=

       -3     6    -3

可得垂直於向量(1, 2, 3)和(4, 5, 6)的向量為±(-3, 6, -3)

5.混合積

混合積由以上兩函數實現:

例1-25  計算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合積

解:

>>a=[1  2  3]; b=[4  5  6]; c=[-3  6  -3];

>>x=dot(a, cross(b, c))

結果顯示:x =

              54

注意:先叉乘后點乘,順序不可顛倒。

6.矩陣的卷積和多項式乘法

函數  conv

格式  w = conv(u,v)   %u、v為向量,其長度可不相同。

說明  長度為m的向量序列u和長度為n的向量序列v的卷積(Convolution)定義為: 式中:w向量序列的長度為(m+n-1),當m=n時,

w(1) = u(1)*v(1)

w(2) = u(1)*v(2)+u(2)*v(1)

w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1)

w(n) = u(1)*v(n)+u(2)*v(n-1)+ … +u(n)*v(1)

w(2*n-1) = u(n)*v(n)

例1-26  展開多項式

解:>> w=conv([1,2,2],conv([1,4],[1,1]))

w =

    1     7    16    18     8

>> P=poly2str(w,'s')    %將w表示成多項式

P =

  s^4 + 7 s^3 + 16 s^2 + 18 s + 8

7.反褶積(解卷)和多項式除法運算

函數  deconv

格式  [q,r] = deconv(v,u)  %多項式v除以多項式u,返回商多項式q和余多項式r。

注意:v、u、q、r都是按降冪排列的多項式系數向量。

例1-27                                 ,則其卷積為

>>u = [1   2   3   4]

>>v = [10   20   30]

>>c = conv(u,v)

c =

   10     40     100     160     170     120

則反褶積為

>>[q,r] = deconv(c,u)

q =

   10    20    30

r =

   0      0      0      0      0      0

8.張量積

函數  kron

格式  C=kron (A,B)   %A為m×n矩陣,B為p×q矩陣,則C為mp×nq矩陣。

說明  A與B的張量積定義為: A B與B A均為mp×nq矩陣,但一般地A B B A。

例1-28         求A B。

>> A=[1 2;3 4];B=[1 2 3;4 5 6;7 8 9];

>> C=kron(A,B)

C =

    1     2     3     2     4     6

    4     5     6     8     10    12

    7     8     9     14    16    18

    3     6     9     4     8     12

    12    15    18    16    20    24

    21    24    27    28    32    36

1.2.3  集合運算

1.兩個集合的交集

函數  intersect

格式  c = intersect(a,b)         %返回向量a、b的公共部分,即c= a∩b。

c = intersect(A,B,'rows')   %A、B為相同列數的矩陣,返回元素相同的行。

[c,ia,ib] = intersect(a,b)   %c為a、b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置。

例1-29

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

A =

    1     2     3     4

    1     2     4     6

    6     7     1     4

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

B =

    1     2     3     8

    1     1     4     6

    6     7     1     4

>> C=intersect(A,B,'rows')

C =

    6     7     1     4

例1-30

>> A = [1 9 6 20]; B = [1 2 3 4 6 10 20];

>> [c,ia,ib] = intersect(A,B)

c =

     1     6    20

ia =

     1     3     4

ib =

     1     5     7

2.檢測集合中的元素

函數  ismember

格式  k = ismember(a,S)         %當a中元素屬於S時,k取1,否則,k取0。

k = ismember(A,S,'rows')   %A、S有相同的列,返回行相同k取1,不相同取0的列向量。

例1-31

>> S=[0  2  4  6  8  10  12  14  16  18  20];

>> a=[1  2  3  4  5  6];

>> k=ismember(a,S)

k =

     0     1     0     1     0     1     %1表示相同元素的位置

例1-32

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

>> k=ismember(A,B,'rows')

k =

   0

     0

     1         %1表示元素相同的行

3.兩集合的差

函數  setdiff

格式  c = setdiff(a,b)         %返回屬於a但不屬於b的不同元素的集合,C = a-b。

c = setdiff(A,B,'rows')   %返回屬於A但不屬於B的不同行

[c,i] = setdiff(…)        %c與前面一致,i表示c中元素在A中的位置。

例1-33

>> A = [1 7 9 6 20]; B = [1 2 3 4 6 10 20];

>> c=setdiff(A,B)

c =

     7     9

例1-34

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

>> c=setdiff(A,B,'rows')

c =

     1     2     3     4

     1     2     4     6

4.兩個集合交集的非(異或)

函數  setxor

格式  c = setxor(a,b)         %返回集合a、b交集的非

c = setxor(A,B,'rows')   %返回矩陣A、B交集的非,A、B有相同列數。

[c,ia,ib] = setxor(…)     %ia、ib表示c中元素分別在a (或A)、b(或B)中位置

例1-35

>> A=[1  2  3  4];

>> B=[2  4  5  8];

>> C=setxor(A,B)

C =

     1     3     5     8

例1-36

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

A =

     1     2     3     4

     1     2     4     6

     6     7     1     4

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

B =

     1     2     3     8

     1     1     4     6

     6     7     1     4

>> [C,ia,ib]=setxor(A,B,'rows')

C =

     1     1     4     6

     1     2     3     4

     1     2     3     8

     1     2     4     6

ia =

     1

     2

ib =

     2

     1

5.兩集合的並集

函數  union

格式  c = union(a,b)         %返回a、b的並集,即c = a∪b。

c = union(A,B,'rows')   %返回矩陣A、B不同行向量構成的大矩陣,其中相同行向量只取其一。

[c,ia,ib] = union(…)     %ia、ib分別表示c中行向量在原矩陣(向量)中的位置

例1-37

>> A=[1 2 3 4];

>> B=[2 4 5 8];

>> c=union(A,B)

則結果為

c =

     1     2     3     4     5     8

例1-38

>> A=[1 2 3 4;1 2 4 6]

A =

     1     2     3     4

     1     2     4     6

>> B=[1 2 3 8;1 1 4 6]

B =

     1     2     3     8

     1     1     4     6

>> [c,ia,ib]=union(A,B,'rows')

c =

     1     1     4     6

     1     2     3     4

     1     2     3     8

     1     2     4     6

ia =

     1

     2

ib =

     2

     1

6.取集合的單值元素

函數

格式  b = unique (a)         %取集合a的不重復元素構成的向量

b = unique (A,'rows')   %返回A、B不同行元素組成的矩陣

[b,i,j] = unique (…)     %i、j體現b中元素在原向量(矩陣)中的位置

例1-39

>> A=[1 1 2 2 4 4 6  4  6]

A =

     1     1     2     2     4     4     6     4     6

>> [c,i,j]=unique(A)

c =

     1     2     4     6

i =

     2     4     8     9

j =

   1     1     2     2     3     3     4     3     4

例1-40

>> A=[1 2 2 4;1 1 4 6;1 1 4 6]

A =

   1     2     2     4

     1     1     4     6

     1     1     4     6

>> [c,i,j]=unique(A,'rows')

c =

     1     1     4     6

     1     2     2     4

i =

     3

     1

j =

     2

     1

     1

1.2.4  除法運算

Matlab提供了兩種除法運算:左除(\)和右除(/)。一般情況下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。

例:a=[1  2  3; 4  2  6; 7  4  9]

b=[4; 1; 2];

x=a\b

則顯示:x=

-1.5000

           2.0000

0.5000

如果a為非奇異矩陣,則a\b和b/a可通過a的逆矩陣與b陣得到:

       a\b = inv(a)*b

       b/a = b*inv(a)

數組除法:

A./B表示A中元素與B中元素對應相除。

1.2.5  矩陣乘方

運算符:^

運算規則:

(1)當A為方陣,P為大於0的整數時,A^P表示A的P次方,即A自乘P次;P為小於0的整數時,A^P表示A-1的P次方。

(2)當A為方陣,p為非整數時,則 其中V為A的特征向量, 為特征值對角矩陣。如果有重根,以上指令不成立。

(3)標量的矩陣乘方PA,標量的矩陣乘方定義為 式中V,D取自特征值分解AV=AD。

(4)標量的數組乘方P.^A,標量的數組乘方定義為 數組乘方:A.^P:表示A的每個元素的P次乘方。

1.2.6  矩陣函數

命令  方陣指數

函數  expm

格式  Y = expm(A)   %使用Pade近似算法計算eA,這是一個內部函數,A為方陣。

      Y=expm1(A)   %使用一個M文件和內部函數相同的算法計算eA

      Y=expm2(A)   %使用泰勒級數計算eA

      Y=expm3(A)   %使用特征值和特征向量計算eA

命令  矩陣的對數

函數  logm

格式  Y = logm(X)         %計算矩陣X的對數,它是expm(X)的反函數。

[Y,esterr] = logm(X)   %esterr為相對殘差的估計值:norm(expm(Y)-X)/norm(X)

例1-41

>> A=[1 1 0;0 0 2;0 0 -1];

>> Y=expm(A)

Y =

   2.7183    1.7183    1.0862

        0    1.0000    1.2642

        0         0    0.3679

>> A=logm(Y)

A =

   1.0000    1.0000    0.0000

       0         0    2.0000

         0         0   -1.0000

命令  方陣的函數

函數  funm

格式  F = funm(A,fun)        %A為方陣,計算由fun指定的A的矩陣函數,fun可以是任意基本函數,如sin、cos等等,例如:funm(A, ’exp’)=expm(A)。

[F,esterr] = funm(A,fun)   %esterr為結果所產生的相對誤差的估計值。

命令  矩陣的方根

函數  sqrtm

格式  X = sqrtm(A)   %矩陣A的平方根A1/2,相當於X*X=A,求X。若A的特征值有非負實部,則X是唯一的;若A的特征值有負的實部,則X為復矩陣;若A為奇異矩陣,則X不存在。

[X,resnorm] = sqrtm(A)       % resnorm為結果產生的相對誤差

[X,alpha,condest] = sqrtm(A)   % alpha為穩定因子,condest為結果的條件數的估計值。

命令  矩陣A的多項式

函數  polyvalm

格式  polyvalm(P, A)   %P為多項式系數向量,方陣A為多項式變量,返回多項式值。

1.2.7  矩陣轉置

運算符:′

運算規則:若矩陣A的元素為實數,則與線性代數中矩陣的轉置相同。

若A為復數矩陣,則A轉置后的元素由A對應元素的共軛復數構成。

若僅希望轉置,則用如下命令:A.′。

1.2.8  方陣的行列式

函數  det

格式  d = det(X)    %返回方陣X的多項式的值

例1-42

>> A=[1 2 3;4 5 6;7 8 9]

A =

   1     2     3

     4     5     6

     7     8     9

>> D=det(A)

D =

     0

1.2.9  逆與偽逆

命令  逆

函數  inv

格式  Y=inv(X)   %求方陣X的逆矩陣。若X為奇異陣或近似奇異陣,將給出警告信息。

例1-43  求 的逆矩陣

方法一

>>A=[1  2  3; 2  2  1; 3  4  3];

>>Y=inv(A)或Y=A^(-1)

則結果顯示為

 Y =

      1.0000    3.0000   -2.0000

      -1.5000   -3.0000    2.5000

      1.0000    1.0000   -1.0000

方法二:由增廣矩陣 進行初等行變換

>>B=[1, 2, 3, 1, 0, 0; 2, 2, 1, 0, 1, 0; 3, 4, 3, 0, 0, 1];

>>C=rref(B)     %化行最簡形

>>X=C(:, 4:6)    %取矩陣C中的A^(-1)部分

顯示結果如下:

C =

    1.0000         0         0    1.0000    3.0000   -2.0000

         0    1.0000         0   -1.5000   -3.0000    2.5000

         0         0    1.0000    1.0000    1.0000   -1.0000

X =

    1.0000    3.0000   -2.0000

   -1.5000   -3.0000    2.5000

    1.0000    1.0000   -1.0000

例1-44

>> A=[2 1 -1;2 1 2;1 -1 1];

>> format rat    %用有理格式輸出

>> D=inv(A)

D =

     1/3           0           1/3    

      0           1/3         -2/3    

    -1/3          1/3           0     

命令  偽逆

函數  pinv

格式  B = pinv(A)      %求矩陣A的偽逆

      B = pinv(A, tol)   %tol為誤差:max(size(A))*norm(A)*eps

說明  當矩陣為長方陣時,方程AX=I和XA=I至少有一個無解,這時A的偽逆能在某種程度上代表矩陣的逆,若A為非奇異矩陣,則pinv(A) = inv(A)。

例1-45

>> A=magic(5);   %產生5階魔方陣。

>> A=A(:,1:4)    %取5階魔方陣的前4列元素構成矩陣A。

A =

    17    24     1     8

    23     5     7    14

     4     6    13    20

    10    12    19    21

    11    18    25     2

>> X=pinv(A)    %計算A的偽逆

X =

   -0.0041    0.0527   -0.0222   -0.0132    0.0069

    0.0437   -0.0363    0.0040    0.0033    0.0038

   -0.0305    0.0027   -0.0004    0.0068    0.0355

    0.0060   -0.0041    0.0314    0.0211   -0.0315

1.2.10  矩陣的跡

函數  trace

格式  b=trace (A)   %返回矩陣A的跡,即A的對角線元素之和。

1.2.11  矩陣和向量的范數

命令  向量的范數

函數  norm

格式  n = norm(X)      %X為向量,求歐幾里德范數,即 。

n = norm(X,inf)   %求 -范數,即 。

n = norm(X,1)    %求1-范數,即 。

n = norm(X,-inf)  %求向量X的元素的絕對值的最小值,即 。

n = norm(X, p)   %求p-范數,即 ,所以norm(X,2) = norm(X)。

命令  矩陣的范數

函數  norm

格式  n = norm(A)    %A為矩陣,求歐幾里德范數 ,等於A的最大奇異值。

n = norm(A,1)   %求A的列范數 ,等於A的列向量的1-范數的最大值。

n = norm(A,2)   %求A的歐幾里德范數 ,和norm(A)相同。

n = norm(A,inf)   %求行范數 ,等於A的行向量的1-范數的最大值

即:max(sum(abs(A')))。

n = norm(A, 'fro' )   %求矩陣A的Frobenius范數 ,

即sqrt(sum(diag(A'*A))),不能用矩陣p-范數的定義來求。

命令  范數的估計值

函數  normest

格式  nrm = normest(A)         %矩陣A的2-范數(歐幾里德范數)的估計值,相對誤差小於106

nrm = normest(A,tol)       %tol為指定相對誤差

[nrm,count] = normest(…)   %count給出計算估計值的迭代次數

1.2.12  條件數

命令  矩陣的條件數

函數  cond

格式  c = cond(X)   %求X的2-范數的條件數,即X的最大奇異值和最小奇異值的商。

c = cond(X,p)   %求p-范數的條件數,p的值可以是1、2、inf或者’fro’。

說明  線性方程組AX=b的條件數是一個大於或者等於1的實數,用來衡量關於數據中的擾動,也就是A/或b對解X的靈敏度。一個差條件的方程組的條件數很大。條件數的定義為:

命令  1-范數的條件數估計

函數  condest

格式  c = condest (A)       %方陣A的1-范數的條件數的下界估值。

[c,v] = condest (A)   %v為向量,滿足 ,即norm(A*v,1) =norm(A,1)*norm(v,1)/c。

[c,v] = condest (A,t)   %求上面的c和v,同時顯示出關於計算的步驟信息。如果t=1,則計算的每步都顯示出來;如果t=-1,則給出商c/rcond(A)。

命令  矩陣可逆的條件數估值

函數  rcond

格式  c = rcond(A)   %對於差條件矩陣A來說,給出一個接近於0的數;對於好條件矩陣A,則給出一個接近於1的數。

命令  特征值的條件數

函數  condeig

格式  c = condeig(A)        %返回矩陣A的特征值的條件數

[V,D,c] = condeig(A)   %D為A的特征值對角陣,V為A的特征向量。

1.2.13  矩陣的秩

函數  rank

格式  k = rank (A)      %求矩陣A的秩

k = rank (A,tol)   %tol為給定誤差


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM