2012年8月21日 星期二

matlab 教學(1)

 矩陣及其基本運算(連載建構中)

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.434.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  43  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 cJackHelp Me!NO WAY!]'

sym_matrix =

[a         b          c]

[Jack   Help Me!   NO WAY!]

>> sym_digits = sym'[1 2 3a b csinxcosytanz]'

sym_digits =

[1        2        3]

[a        b        c]

[sinxcosytanz]

2用命令syms定義矩陣

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

1-4

>> syms  a  b  c

>> M1 = sym'Classical');

>> M2 = sym' Jazz');

>> M3 = sym'Blues'

>> syms_matrix = [a  b  c M1 M2 M3int2str[2  3  5]]

syms_matrix =

[   a      b     c]

[Classical  Jazz  Blues]

[   2      3     5]

把數值矩陣轉化成相應的符號矩陣。

數值型和符號型在MATLAB中是不相同的,它們之間不能直接進行轉化。MATLAB提供了一個將數值型轉化成符號型的命令,即sym

1-5

>> Digit_Matrix = [1/3  sqrt2 3.4234exp0.23 log29 23^-11.23]

>> Syms_Matrix = symDigit_Matrix

結果是:

Digit_Matrix =

0.3333    1.4142    3.4234

1.2586    3.3673    0.0000

Syms_Matrix =

[            1/3                   sqrt2),                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      %表示exm56列。

1.1.4  多維陣列的創建


函數  cat

格式  A=cat(n,A1,A2,,Am)

說明  n=1n=2時分別構造[A1A2][A1A2],都是二維陣列,而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×n1

Y = ones(m,n)           %生成m×n1

Y = ones([m n])          %生成m×n1

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隨機矩陣,其元素在(01)內

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

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。