matlab基本知識點2



矩陣的乘方運算與開方運算

在matlab7.0中,可以使用A^p來計算A的p次方,使用sqrtm()來對矩陣開方運算,如果有X*X=A,則有sqrtm(A)=X;

矩陣的開方運算與乘方運算互爲逆運算。


矩陣的指數運算用expm函數來實現,expm(X)=V*diag(exp(diag(D)))/V,其中X爲已知矩陣,[V,D]=eig(X);對數運算用logm函數實現,L=logm(A),與矩陣的指數運算互爲逆運算。


矩陣的逆運算

矩陣的逆運算充分必要條件爲其行列式不爲0,使用inv函數

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

A =

     1     0     0     0
     1     2     0     0
     2     1     3     0
     1     2     1     4

>> B = inv(A)

B =

    1.0000         0         0         0
   -0.5000    0.5000         0         0
   -0.5000   -0.1667    0.3333         0
    0.1250   -0.2083   -0.0833    0.2500

計算矩陣的行列式函數,det()函數


使用eig或eigs可以進行矩陣的特徵值計算。

E = eig(X),命令生成由矩陣X的特徵值所組成的列向量

[V,D]=eig(X)命令生成兩個矩陣X和D,其中V 是以矩陣X的特徵向量作爲列向量組成的矩陣,D是由X的特徵值作爲主對角線元素構成的對角矩陣。


norm函數

norm(X)計算矩陣X的2-範數

norm(X,2)計算矩陣的2-範數

norm(X,1)計算矩陣的1-範數

norm(X,inf)計算矩陣的無窮範數

norm(X,'fro')計算矩陣X的Frobenius範數


normest只能計算矩陣的2-範數,並且爲估計值,使用於計算norm(X)比較費時的情況。


矩陣的條件數計算:(衡量矩陣是“病態”,還是“良態”)

cond(X)返回關於矩陣X的2-範數的條件數

cond(X,P)返回關於矩陣X的P-範數的條件數


recond(X)用來計算矩陣X條件數的倒數值

condest(X)用於計算X的的1-範數的條件數的估計值


矩陣X的條件數越大,表明A越“病態”,反之,越“良態”。



矩陣的秩

函數rank();

>> T = rand(6)

T =

    0.8147    0.2785    0.9572    0.7922    0.6787    0.7060
    0.9058    0.5469    0.4854    0.9595    0.7577    0.0318
    0.1270    0.9575    0.8003    0.6557    0.7431    0.2769
    0.9134    0.9649    0.1419    0.0357    0.3922    0.0462
    0.6324    0.1576    0.4218    0.8491    0.6555    0.0971
    0.0975    0.9706    0.9157    0.9340    0.1712    0.8235

>> r = rank(T)

r =

     6
矩陣的跡(矩陣主對角線所有元素的和)

trace()函數求得



三角分解

lu函數實現

[L,U] = lu(X),將矩陣X分解成一個上三角矩陣L和一個下三角矩陣U,使用X=L*U

正交分解

qr函數實現

[Q,R] = qr(A),產生一個與A維數相同的上三角矩陣R和一個正交矩陣Q,使得A = Q*R

特徵值分解

eig()函數實現

[V,D] = eig(X)命令生成一個矩陣V和D,其中V是由矩陣X的特徵向量作爲列向量組成的矩陣,D由矩陣X的特徵值作爲主對角線元素構成的對角矩陣。



矩陣的變維

使用reshape函數來對矩陣進行變維操作

reshape(X,M,N)將矩陣X的所有元素分配到一個MxN的矩陣中,當矩陣X的元素不是MxN時,將返回一個錯誤。

reshape(X,M,N,P...)將矩陣X的所有元素分配到MxNxP的多維矩陣上去。

>> A = rand(4,2)

A =

    0.6948    0.4387
    0.3171    0.3816
    0.9502    0.7655
    0.0344    0.7952

>> reshape(A,2,4)

ans =

    0.6948    0.9502    0.4387    0.7655
    0.3171    0.0344    0.3816    0.7952


矩陣的變向包括對矩陣進行旋轉,上下翻轉,左右翻轉,以及對指定的維進行翻轉,分別由rot90,flipud,fliplr,和flipdim函數來實現。

例子省略



特殊矩陣生成函數:

zeros(),ones(),diag(V,k)V表示向量,k表示V向量偏離主對角線的個數,k>0往上偏離,k<0往下偏離,k=0就在主對角線。

rand()隨機矩陣(生成的矩陣元素在0-1之間)

randn()生成的矩陣服從正態分佈N(0,1)

範德蒙矩陣A=vander(v)

>> v=[1 3 5 7 9];
>> A = vander(v)

A =

           1           1           1           1           1
          81          27           9           3           1
         625         125          25           5           1
        2401         343          49           7           1
        6561         729          81           9           1

magic()魔術矩陣,生成的矩陣每一行,每一列以及每條主對角線的元素和都相等。(二階矩陣除外)

Hilbert矩陣,病態矩陣

hilb()



數組尋址和排序

>> A = randn(1,10)

A =

   -0.8649   -0.0301   -0.1649    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135

>> A(4)

ans =

    0.6277

>> A(2:6)

ans =

   -0.0301   -0.1649    0.6277    1.0933    1.1093

>> A([1 3 7 4])

ans =

   -0.8649   -0.1649   -0.8637    0.6277

>> A(4:end)

ans =

    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135


數組排序

sort(A)若A爲矩陣,默認對A各列進行升序排序

sort(A,dim)

如果dim=1

sort(A,1)等同於sort(A)

如果dim=2

將矩陣A的各行進行升序排序


數組的基本數值運算

數組運算符由矩陣運算符前面增加 "  . "來表示

加減運算

>> X=[1,4,7]

X =

     1     4     7

>> Y = [2,5,8]

Y =

     2     5     8

>> X-Y

ans =

    -1    -1    -1

>> X+Y

ans =

     3     9    15

數組的 乘除運算

>> X=[10 52 96 12 56]

X =

    10    52    96    12    56

>> Y = [2 26 3 4 8]

Y =

     2    26     3     4     8

>> Z = [10 52 96 12 56 42]

Z =

    10    52    96    12    56    42

>> Z1 = X.*Y

Z1 =

          20        1352         288          48         448

>> Z2 = X.*Z
??? Error using ==> times
Matrix dimensions must agree.
 
>> Z3 = X./Y

Z3 =

     5     2    32     3     7

>> Z4 = X.\Y

Z4 =

    0.2000    0.5000    0.0313    0.3333    0.1429

數組的乘方.^

>> X = [3 6 9]

X =

     3     6     9

>> Z = X.^3

Z =

    27   216   729

1個數組爲指數,底數爲標量的情況

>> X = [4,5,6,7,8]

X =

     4     5     6     7     8


>> Z = 3.^X

Z =

          81         243         729        2187        6561


rem(X,n)爲求餘函數,X爲被除數,n爲除數


邏輯運算符:

&與   |或  ~非


稀疏矩陣的生成

speye函數

>> A = eye(10)

A =

     1     0     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0
     0     0     0     1     0     0     0     0     0     0
     0     0     0     0     1     0     0     0     0     0
     0     0     0     0     0     1     0     0     0     0
     0     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     0     1     0     0
     0     0     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     0     0     1

>> speye(A)
??? Error using ==> speye
Please use SPEYE(N), SPEYE(M,N) or SPEYE([M,N]).
 
>> speye(size(A))

ans =

   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
   (6,6)        1
   (7,7)        1
   (8,8)        1
   (9,9)        1
  (10,10)       1

>> speye(2)

ans =

   (1,1)        1
   (2,2)        1

>> speye(7,6)

ans =

   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
   (6,6)        1


sprand函數用於生成隨機稀疏矩陣函數(其元素服從0-1分佈)


將稀疏矩陣與滿矩陣進行相互轉換的函數有sparse,full,和find函數。

sparse函數將滿矩陣變爲稀疏矩陣

full函數將稀疏矩陣變爲滿矩陣

find函數查找矩陣的非0函數位置


對稀疏矩陣的操作

nz = nnz(S)返回矩陣S中非零元素的個數

D = nnz(S)/prod(size(S))表示稀疏矩陣S中非零元素的密度


(S)生成一個與稀疏矩陣S結構相同的稀疏矩陣R,但是在矩陣S中的非零元素的位置上用元素1代替

R = spones

>> S = sprandsym(10,0.05)

S =

   (9,3)      -1.4057
  (10,3)      -0.7423
   (3,9)      -1.4057
   (3,10)     -0.7423

 
>> R = spones(S)

R =

   (9,3)        1
  (10,3)        1
   (3,9)        1
   (3,10)       1

spalloc用來爲稀疏矩陣分配空間

issparse用來判斷矩陣是否爲稀疏矩陣


矩陣的乘方運算與開方運算

在matlab7.0中,可以使用A^p來計算A的p次方,使用sqrtm()來對矩陣開方運算,如果有X*X=A,則有sqrtm(A)=X;

矩陣的開方運算與乘方運算互爲逆運算。


矩陣的指數運算用expm函數來實現,expm(X)=V*diag(exp(diag(D)))/V,其中X爲已知矩陣,[V,D]=eig(X);對數運算用logm函數實現,L=logm(A),與矩陣的指數運算互爲逆運算。


矩陣的逆運算

矩陣的逆運算充分必要條件爲其行列式不爲0,使用inv函數

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

A =

     1     0     0     0
     1     2     0     0
     2     1     3     0
     1     2     1     4

>> B = inv(A)

B =

    1.0000         0         0         0
   -0.5000    0.5000         0         0
   -0.5000   -0.1667    0.3333         0
    0.1250   -0.2083   -0.0833    0.2500

計算矩陣的行列式函數,det()函數


使用eig或eigs可以進行矩陣的特徵值計算。

E = eig(X),命令生成由矩陣X的特徵值所組成的列向量

[V,D]=eig(X)命令生成兩個矩陣X和D,其中V 是以矩陣X的特徵向量作爲列向量組成的矩陣,D是由X的特徵值作爲主對角線元素構成的對角矩陣。


norm函數

norm(X)計算矩陣X的2-範數

norm(X,2)計算矩陣的2-範數

norm(X,1)計算矩陣的1-範數

norm(X,inf)計算矩陣的無窮範數

norm(X,'fro')計算矩陣X的Frobenius範數


normest只能計算矩陣的2-範數,並且爲估計值,使用於計算norm(X)比較費時的情況。


矩陣的條件數計算:(衡量矩陣是“病態”,還是“良態”)

cond(X)返回關於矩陣X的2-範數的條件數

cond(X,P)返回關於矩陣X的P-範數的條件數


recond(X)用來計算矩陣X條件數的倒數值

condest(X)用於計算X的的1-範數的條件數的估計值


矩陣X的條件數越大,表明A越“病態”,反之,越“良態”。



矩陣的秩

函數rank();

>> T = rand(6)

T =

    0.8147    0.2785    0.9572    0.7922    0.6787    0.7060
    0.9058    0.5469    0.4854    0.9595    0.7577    0.0318
    0.1270    0.9575    0.8003    0.6557    0.7431    0.2769
    0.9134    0.9649    0.1419    0.0357    0.3922    0.0462
    0.6324    0.1576    0.4218    0.8491    0.6555    0.0971
    0.0975    0.9706    0.9157    0.9340    0.1712    0.8235

>> r = rank(T)

r =

     6
矩陣的跡(矩陣主對角線所有元素的和)

trace()函數求得



三角分解

lu函數實現

[L,U] = lu(X),將矩陣X分解成一個上三角矩陣L和一個下三角矩陣U,使用X=L*U

正交分解

qr函數實現

[Q,R] = qr(A),產生一個與A維數相同的上三角矩陣R和一個正交矩陣Q,使得A = Q*R

特徵值分解

eig()函數實現

[V,D] = eig(X)命令生成一個矩陣V和D,其中V是由矩陣X的特徵向量作爲列向量組成的矩陣,D由矩陣X的特徵值作爲主對角線元素構成的對角矩陣。



矩陣的變維

使用reshape函數來對矩陣進行變維操作

reshape(X,M,N)將矩陣X的所有元素分配到一個MxN的矩陣中,當矩陣X的元素不是MxN時,將返回一個錯誤。

reshape(X,M,N,P...)將矩陣X的所有元素分配到MxNxP的多維矩陣上去。

>> A = rand(4,2)

A =

    0.6948    0.4387
    0.3171    0.3816
    0.9502    0.7655
    0.0344    0.7952

>> reshape(A,2,4)

ans =

    0.6948    0.9502    0.4387    0.7655
    0.3171    0.0344    0.3816    0.7952


矩陣的變向包括對矩陣進行旋轉,上下翻轉,左右翻轉,以及對指定的維進行翻轉,分別由rot90,flipud,fliplr,和flipdim函數來實現。

例子省略



特殊矩陣生成函數:

zeros(),ones(),diag(V,k)V表示向量,k表示V向量偏離主對角線的個數,k>0往上偏離,k<0往下偏離,k=0就在主對角線。

rand()隨機矩陣(生成的矩陣元素在0-1之間)

randn()生成的矩陣服從正態分佈N(0,1)

範德蒙矩陣A=vander(v)

>> v=[1 3 5 7 9];
>> A = vander(v)

A =

           1           1           1           1           1
          81          27           9           3           1
         625         125          25           5           1
        2401         343          49           7           1
        6561         729          81           9           1

magic()魔術矩陣,生成的矩陣每一行,每一列以及每條主對角線的元素和都相等。(二階矩陣除外)

Hilbert矩陣,病態矩陣

hilb()



數組尋址和排序

>> A = randn(1,10)

A =

   -0.8649   -0.0301   -0.1649    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135

>> A(4)

ans =

    0.6277

>> A(2:6)

ans =

   -0.0301   -0.1649    0.6277    1.0933    1.1093

>> A([1 3 7 4])

ans =

   -0.8649   -0.1649   -0.8637    0.6277

>> A(4:end)

ans =

    0.6277    1.0933    1.1093   -0.8637    0.0774   -1.2141   -1.1135


數組排序

sort(A)若A爲矩陣,默認對A各列進行升序排序

sort(A,dim)

如果dim=1

sort(A,1)等同於sort(A)

如果dim=2

將矩陣A的各行進行升序排序


數組的基本數值運算

數組運算符由矩陣運算符前面增加 "  . "來表示

加減運算

>> X=[1,4,7]

X =

     1     4     7

>> Y = [2,5,8]

Y =

     2     5     8

>> X-Y

ans =

    -1    -1    -1

>> X+Y

ans =

     3     9    15

數組的 乘除運算

>> X=[10 52 96 12 56]

X =

    10    52    96    12    56

>> Y = [2 26 3 4 8]

Y =

     2    26     3     4     8

>> Z = [10 52 96 12 56 42]

Z =

    10    52    96    12    56    42

>> Z1 = X.*Y

Z1 =

          20        1352         288          48         448

>> Z2 = X.*Z
??? Error using ==> times
Matrix dimensions must agree.
 
>> Z3 = X./Y

Z3 =

     5     2    32     3     7

>> Z4 = X.\Y

Z4 =

    0.2000    0.5000    0.0313    0.3333    0.1429

數組的乘方.^

>> X = [3 6 9]

X =

     3     6     9

>> Z = X.^3

Z =

    27   216   729

1個數組爲指數,底數爲標量的情況

>> X = [4,5,6,7,8]

X =

     4     5     6     7     8


>> Z = 3.^X

Z =

          81         243         729        2187        6561


rem(X,n)爲求餘函數,X爲被除數,n爲除數


邏輯運算符:

&與   |或  ~非


稀疏矩陣的生成

speye函數

>> A = eye(10)

A =

     1     0     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0
     0     0     0     1     0     0     0     0     0     0
     0     0     0     0     1     0     0     0     0     0
     0     0     0     0     0     1     0     0     0     0
     0     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     0     1     0     0
     0     0     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     0     0     1

>> speye(A)
??? Error using ==> speye
Please use SPEYE(N), SPEYE(M,N) or SPEYE([M,N]).
 
>> speye(size(A))

ans =

   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
   (6,6)        1
   (7,7)        1
   (8,8)        1
   (9,9)        1
  (10,10)       1

>> speye(2)

ans =

   (1,1)        1
   (2,2)        1

>> speye(7,6)

ans =

   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1
   (6,6)        1


sprand函數用於生成隨機稀疏矩陣函數(其元素服從0-1分佈)


將稀疏矩陣與滿矩陣進行相互轉換的函數有sparse,full,和find函數。

sparse函數將滿矩陣變爲稀疏矩陣

full函數將稀疏矩陣變爲滿矩陣

find函數查找矩陣的非0函數位置


對稀疏矩陣的操作

nz = nnz(S)返回矩陣S中非零元素的個數

D = nnz(S)/prod(size(S))表示稀疏矩陣S中非零元素的密度


(S)生成一個與稀疏矩陣S結構相同的稀疏矩陣R,但是在矩陣S中的非零元素的位置上用元素1代替

R = spones

>> S = sprandsym(10,0.05)

S =

   (9,3)      -1.4057
  (10,3)      -0.7423
   (3,9)      -1.4057
   (3,10)     -0.7423

 
>> R = spones(S)

R =

   (9,3)        1
  (10,3)        1
   (3,9)        1
   (3,10)       1

spalloc用來爲稀疏矩陣分配空間

issparse用來判斷矩陣是否爲稀疏矩陣


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