[計算機軟件及應用]Matlab中的向量運算_第1頁
[計算機軟件及應用]Matlab中的向量運算_第2頁
[計算機軟件及應用]Matlab中的向量運算_第3頁
[計算機軟件及應用]Matlab中的向量運算_第4頁
[計算機軟件及應用]Matlab中的向量運算_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、.2利用冒號表達式生成向量冒號表達式的基本形式為x=x0:step:xn,其中x0、step、xn 分別為給定數(shù)值,x0 表示向量的首元素數(shù)值,xn 表示向量尾元素數(shù)值限,step表示從第二個元素開始,元素數(shù)值大小與前一個元素值大小的差值。注意:這里強調(diào)xn 為尾元素數(shù)值限,而非尾元素值,當xn-x0 恰為step值的整數(shù)倍時,xn才能成為尾值。若x0<xn,則需step>0;若x0>xn 則需step<0;若x0=xn,則向量只有一個元素。若step=1,則可省略此項的輸入,直接寫成x=x0:xn。此時可以不用“ ”?!纠纭?gt;> a=1:2:12a= 1

2、 3 5 7 9 11>> a=1:-2:12a= Empty matrix: 1-by-0 >> a=12:-2:1a= 12 10 8 6 4 2>> a=1:2:1a= 1>> a=1:6a=1 2 3 4 5 63線性等分向量的生成在MATLAB中提供了線性等分功能函數(shù)linspace,用來生成線性等分向量,其調(diào)用格式如下: y=linspace(x1,x2)生成100維的行向量,使得y(1)=x1,y(100)=x2; y=linspace(x1,x2,n)生成n維的行向量,使得y(1)=x1,y(n)=x2。【例如】a1=linspa

3、ce(1,100,6)a1 = 1.0000 20.8000 40.6000 60.4000 80.2000 100.0000說明 線性等分函數(shù)和冒號表達式都可生成等分向量。但前者是設(shè)定了向量的維數(shù)去生成等間隔向量,而后者是通過設(shè)定間隔來生成維數(shù)隨之確定的等間隔向量。4對數(shù)等分向量的生成在自動控制,數(shù)字信號處理中常常需要對數(shù)刻度坐標,MATLAB中還提供了對數(shù)等分功能函數(shù),具體格式如下:y=logspace(x1,x2)生成50維對數(shù)等分向量,使得y(1)=10x1,y(50)=10x2;y=logspace(x1,x2,n)生成n維對數(shù)等分向量,使得y(1)=10x1,y(n)=10x2;【

4、例如】>> a2=logspace(0,5,6)a2 = 1 10 100 1000 10000 100000另外,向量還可以從矩陣中提取,還可以把向量看成1×n階(行向量)或n×1階(列向量)的矩陣,以矩陣形式生成。由于在MATLAB中矩陣比向量重要得多,此類函數(shù)將在下節(jié)矩陣中詳細介紹,專門對向量運算感興趣的讀者可參考下一節(jié)。2.2.2 向量的基本運算1加(減)與數(shù)加(減)【例如】>> a1-1 %這里的a1即上頁中生成的a1 ans = 0 19.8000 39.6000 59.4000 79.2000 99.0000 2數(shù)乘 【例如】 >

5、> a1*2 ans = 2.0000 41.6000 81.2000 120.8000 160.4000 200.00002.2.3 點積、叉積及混合積的實現(xiàn)1點積計算在高等數(shù)學中,向量的點積是指兩個向量在其中某一個向量方向上的投影的乘積,通??梢杂脕硪甓x向量的模。在MATLAB中,向量的點積可由函數(shù)dot來實現(xiàn)。dot 向量點積函數(shù)dot(a,b) 返回向量a和b的數(shù)量點積。a和b必須同維。當a和b都為列向量時,dot(a,b) 同于a.*b。dot(a,b,dim) 返回a和b在維數(shù)為dim的點積?!纠?.4】 試計算向量a=(1,2 ,3)和向量b =(3,4,5)的點積。&

6、gt;> a=1 2 3;>> b=3,4,5;>> dot(a,b)ans = 26還可以用另一種方法計算向量的點積。>> sum(a.*b)ans = 262叉積在數(shù)學上,向量的叉積表示過兩相交向量的交點的垂直于兩向量所在平面的向量。在MATLAB中,向量的叉積由函數(shù)cross來實現(xiàn)。cross 向量叉積函數(shù)c = cross(a,b)返回向量a和b的叉積向量。即C = a×b。a和b必須為三維向量。c = cross(a,b)返回向量a和b的前3位的叉積。c = cross(a,b,dim)當a和b為n維數(shù)組時,則返回a和b的dim維向

7、量的叉積。a和b必須有相同的維數(shù)。且size(a,dim)和size(a,dim)必須為3。【例2.5】 計算垂直于向量a =(1,2,3)和b =(3,4,5)的向量。a=1 2 3;b=3,4,5;c=cross(a,b)c= -2 4 -2得到同時垂直a、b的向量為±(-2,4,-2)。3混合積向量的混合積由以上兩個函數(shù)實現(xiàn)?!纠?.6】 計算上面向量a、b、c的混合積。>> dot(a,cross(b,c)ans = 24注意 函數(shù)的順序不可顛倒,否則將出錯。2.3 矩陣及其運算MATLAB原意為矩陣實驗室,而且MATLAB的所有的數(shù)值功能都是以(復)矩陣為基本單

8、元進行的,因此,MATLAB中矩陣的運算功能可謂最全面、最強大。本節(jié)將對矩陣及其運算進行詳細的闡述。2.3.1 矩陣的生成1直接輸入小矩陣從鍵盤上直接輸入矩陣是最方便、最常用和最好的創(chuàng)建數(shù)值矩陣的方法,尤其適合較小的簡單矩陣。在用此方法創(chuàng)建矩陣時,應當注意以下幾點。輸入矩陣時要以“ ”為其標識,即矩陣的元素應在“ ”內(nèi)部,此時MATLAB才將其識別為矩陣。矩陣的同行元素之間可由空格或“,”分隔,行與行之間要用“;”或回車符分隔。l 矩陣大小可不預先定義。l 矩陣元素可為運算表達式。l 若不想獲得中間結(jié)果,可以“;”結(jié)束。l 無任何元素的空矩陣亦合法?!纠?.7】 創(chuàng)建一簡單數(shù)值矩陣。>&

9、gt; a=1 2 3;1 1 1;4 5 6a= 1 2 3 1 1 1 4 5 6【例2.8】 創(chuàng)建一帶有運算表達式的矩陣。>> b=sin(pi/3),cos(pi/4);log(9),tanh(6);此時矩陣已經(jīng)建立并存儲在內(nèi)存中,只是沒有顯示在屏幕上而已。若用戶想查看此矩陣,只需鍵入矩陣名。2創(chuàng)建M文件輸入大矩陣M文件是一種可以在MATLAB環(huán)境下運行的文本文件。它可以分為命令式文件和函數(shù)式文件兩種。在此處主要用到的是命令式M文件,用它的最簡單形式來創(chuàng)建大型矩陣。更加詳細的內(nèi)容將在第5章中討論。當矩陣的規(guī)模比較大,直接輸入法就顯得笨拙,出現(xiàn)差錯也不易修改。為了解決此問題,

10、可以利用M文件的特點將所要輸入的矩陣按格式先寫入一文本文件中,并將此文件以m為其擴展名,即為M文件。在MATLAB命令窗中輸入此M文件名,則所要輸入的大型矩陣就被輸入到內(nèi)存中?!纠纭烤幹埔幻麨閑xample.m的M文件,內(nèi)容如下。%example.m%創(chuàng)建一M文件輸入矩陣的示例文件exm=456 468 873 2 579 55 21,687,54 488 8 13 65 4656 88 98 021 5 475 68,4596 654 5 987 5488 10 9 6 33 77 在MATLAB命令窗中輸入:>> example;>> size(exm)ans =

11、 5 6說明l 在M文件中%符號后面的內(nèi)容只起注釋作用,將不被執(zhí)行。l 例中的size函數(shù)為求矩陣的維數(shù)函數(shù),結(jié)果表明矩陣為5×6階的矩陣。l 在實際應用中,用來輸入矩陣的M文件通常是用C語言或其他高級語言生成的已存在的數(shù)據(jù)文件。在通常的使用中,上例中的矩陣還不算是“大型”矩陣,此處只是借例說明而已。矩陣的輸入方式還有很多種,其他的方法將在后面的章節(jié)中逐步介紹。2.3.2 矩陣的基本數(shù)學運算矩陣的基本數(shù)學運算包括矩陣的四則運算、與常數(shù)的運算、逆運算、行列式運算、冪運算、指數(shù)運算、對數(shù)運算和開方運算等。下面將一一進行討論。1矩陣的四則運算在前面介紹過,MATLAB是以(復)矩陣為基本運

12、算單元的,因此,矩陣的四則運算格式與2.1節(jié)中講的數(shù)字的運算是相同的,不過對具體的運算還有一些具體的要求。(1)矩陣的加和減矩陣的加減法使用“+”、“-”運算符,格式與數(shù)字運算完全相同,但要求加減的兩矩陣是同階的?!纠纭?gt;> a=1 2 3;2 3 4;3 4 5 ;>> b=1 1 1;2 2 2;3 3 3;>> c=a+bc= 2 3 4 4 5 6 6 7 8(2)矩陣的乘法矩陣的乘法使用運算符“*”,要求相乘的雙方要有相鄰公共維,即若A為i×j階,則B必須為j×k階時,A和B才可以相乘。【例如】>> e=b,5 5

13、 5'e= 1 1 1 5 2 2 2 5 3 3 3 5>> f=a*ef= 14 14 14 30 20 20 20 45 26 26 26 60(3)矩陣的除法矩陣的除法可以有兩種形式:左除“”和右除“/”,在傳統(tǒng)的MATLAB算法中,右除是要先計算矩陣的逆再做矩陣的乘法,而左除則不需要計算矩陣的逆而直接進行除運算。通常右除要快一點,但左除可以避免被除矩陣的奇異性所帶來的麻煩。在MATLAB 6.0中兩者的區(qū)別不太大。通常用矩陣的除法來求解方程組的解。對于方程組Ax=b,其中A是一個(n×m)階的矩陣,則: 當n=m且非奇異時,此方程稱為恰定方程; 當n&g

14、t;m時,此方程稱為超定方程; 當n<m時,此方程稱為欠定方程。這3種方程都可以用矩陣的除法求解?!纠?.9】 比較用左除和右除法分別求解恰定方程的解。為了比較這兩種方法的區(qū)別,先構(gòu)造一個系數(shù)矩陣條件數(shù)很大的高階恰定方程。>> rand('seed',12);>> a=rand(100)+1.e8;>> x=ones(100,1);>> b=a*x;其條件數(shù)為:>> cond(a)ans = 5.0482e+011可見其條件數(shù)是足夠大的,病態(tài)很嚴重。首先用右除法計算此方程。>> tic;x1=b

15、9;/a;t1=toc計算時間為:t1 = 0.1100計算解與精確解之間的誤差為:>> er1=norm(x-x1')er1 = 139.8326解的相對殘差為:>> re1=norm(a*x1'-b)/norm(b)re1 = 4.3095e-009用左除法解方程:>> tic;x1=ab;t1=toct1 = 0切換到長型形式格式:>> tic;x1=ab;t1=toct1 = 0.05000000000000與真實解之間的誤差為:>> er2=norm(x-x1)er2 = 5.228819204329127e

16、-005相對殘差為:>> re1=norm(a*x1-b)/norm(b)re1 = 4.900067335093966e-016從此例可以看出,右除比左除計算的速度要慢,且精度也差很多。但這種情況只是在條件數(shù)很大時才表現(xiàn)得如此明顯,對于一般的矩陣,兩者幾乎沒有差別。在MATLAB中求解超定方程是采用最小二乘法來求解的,這也是曲線擬合的基本方法?!纠?.10】 用矩陣的除法求解超定方程??聪旅娴姆匠?。若考慮線性方程標準型Ax'=',則A =(x2 ,1)可以看成為矩陣的系數(shù),x =(a,b)'是未知數(shù),y=。這樣建立超定方程如下:>> x=19

17、25 31 38 44'>> y=19 32.3 49 73.3 97.8'>> a=x.2,ones(5,1)a= 361 1 625 1 961 1 1444 1 1936 1>> b=y;>> ab=abab = 0.05003512421916 0.97257865690678>> x1=19:0.1:44;>> y1=ab(2)+x1.2*ab(1); %或y1=polyvar(ab,x1);>> plot(x,y,'o');>> hold;>>

18、 plot(x1,y1)結(jié)果如圖2.2。圖2.2 解超定方程擬和欠定方程的解是不惟一的,在MATLAB中用除法解方程時所得的解是所有解中范數(shù)最小的一個?!纠?.11】 對例2.10中的矩陣用除法解一個欠定方程。>> a=a'a= 361 625 961 1444 1936 1 1 1 1 1>> b=1;1;>> x=abx= 1.22857142857143 0 0 0 -0.22857142857143用戶若有興趣可以驗證此解的范數(shù)約為1.25,任何其他的方程解的范數(shù)都比此值大。2矩陣與常數(shù)間運算常數(shù)與矩陣的運算即是同此矩陣的各元素之間進行運算,

19、如數(shù)加是指每個元素都加上此常數(shù),數(shù)乘即是每個元素都與此數(shù)相乘。需要注意的是,當進行數(shù)除時,常數(shù)通常只能做除數(shù)。3矩陣的逆運算矩陣的逆運算是矩陣運算中很重要的一種運算。它在線性代數(shù)及計算方法中都有很多的論述。而在MATLAB中,眾多的復雜理論只變成了一個簡單的命令inv。【例2.12】 求下面A矩陣的逆。解:>> a=2 1 -3 -1;3 1 0 7;-1 2 4 -2;1 0 -1 5;>> inv(a)ans =-0.04705882352941 0.58823529411765 -0.27058823529412 -0.94117647058824 0.38823

20、529411765 -0.35294117647059 0.48235294117647 0.76470588235294-0.22352941176471 0.29411764705882 -0.03529411764706 -0.47058823529412-0.03529411764706 -0.05882352941176 0.04705882352941 0.294117647058824矩陣的行列式運算矩陣的行列式的值可由det函數(shù)計算得出?!纠?.13】 求上例中的A矩陣及其逆的行列式之積。>> a1=det(a);>> a2=det(inv(a);>

21、;> a1*a2ans = 15矩陣的冪運算矩陣的冪運算的形式同數(shù)字的冪運算的形式相同,即用算符“”來表示。矩陣的冪運算在計算過程中與矩陣的某種分解有關(guān),計算所得值并非是矩陣每個元素的冪值。這一點是值得讀者注意的!6矩陣的指數(shù)運算矩陣的指數(shù)運算的最常用的命令為expm,其他的命令還有expm1、expm2和expm3。其中expm1是由Pade近似計算矩陣指數(shù),expm2是由Taylor級數(shù)計算矩陣指數(shù),expm3是由特征值法計算矩陣指數(shù)。而expm函數(shù)使用的方法與expm1相同。 【例2.14】 計算矩陣的指數(shù),并比較不同函數(shù)的結(jié)果。>> b=magic(3);>&g

22、t; expm(b)ans = 1.0e+006 * 1.08975825103465 1.08959533283740 1.08966378860004 1.08962271514245 1.08971717757707 1.08967747975257 1.08963640629498 1.08970486205763 1.08967610411948>> expm1(b)ans = 1.0e+006 * 1.08975825103465 1.08959533283740 1.08966378860004 1.08962271514245 1.08971717757707 1.

23、08967747975257 1.08963640629498 1.08970486205763 1.08967610411948>> expm2(b)ans = 1.0e+006 * 1.08975825103466 1.08959533283740 1.08966378860005 1.08962271514246 1.08971717757708 1.08967747975257 1.08963640629499 1.08970486205763 1.08967610411949>> expm3(b)ans = 1.0e+006 * 1.0897582510346

24、8 1.08959533283742 1.08966378860007 1.08962271514248 1.08971717757710 1.08967747975259 1.08963640629501 1.08970486205765 1.08967610411951說明expm的計算結(jié)果同于expm1。幾個函數(shù)的計算結(jié)果是有差別的,但差別很小。7矩陣的對數(shù)運算矩陣的對數(shù)運算由函數(shù)logm實現(xiàn)?!纠?.15】 對例2.14中的矩陣求其對數(shù)。>> logm(b)ans = Columns 1 through 2 1.96203467715006+0.08528517857520

25、i 0.37300776197608+ 0.75895105456357i 0.37300776197608+0.11767613948263i 1.96203467715005+ 1.04719755119660i0.37300776197608-0.20296131805783i 0.37300776197608- 1.80614860576016iColumn 30.37300776197608 - 0.84423623313876i0.37300776197608 - 1.16487369067923i1.96203467715005 + 2.00910992381800i8矩陣的開方

26、運算矩陣的開方運算函數(shù)為sqrtm。2.3.3 矩陣的基本函數(shù)運算矩陣的函數(shù)運算是矩陣運算中最實用的部分,它主要包括特征值的計算、奇異值的計算條件數(shù)、各類范數(shù)、矩陣的秩與跡的計算和矩陣的空間運算等。 1特征值函數(shù)矩陣的特征值可以由兩個函數(shù)eig和eigs計算得出。其中函數(shù)eig可以給出特征值和特征向量的值,而函數(shù)eigs則是使用迭代法求解特征值和特征向量的函數(shù),具體調(diào)用形式請查看help eigs。這里只用到它的求解特征值的部分?!纠?.16】 計算如下矩陣的特征值和特征向量。解:>> A=7 3 -2;3 4 -1;-2 -1 3;>> x,y=eig(A)x= 5.

27、773502691896260e-001 9.878369738279814e-002 -8.104988882151846e-001-5.773502691896265e-001 -6.525207782419939e-001 -4.907986355208505e-001 5.773502691896246e-001 -7.513044756247937e-001 3.197002526943342e-001y= 2.000000000000000e+000 0 0 0 2.394448724536010e+000 0 0 0 9.605551275463988e+000說明 其中x為特征

28、向量矩陣,y為特征值矩陣。2奇異值函數(shù)同樣,矩陣的奇異值函數(shù)也有兩種形式svd和svds,它們所使用的方法相同,只是計算值略有差別。3條件數(shù)函數(shù)條件數(shù)的值是判斷矩陣“病態(tài)”程度的量度,因此,它在理論分析中有著重要的應用。在MATLAB中可由如下3個函數(shù)實現(xiàn)條件數(shù)的計算。l cond 計算矩陣的條件數(shù)的值。l condest 計算矩陣的1范數(shù)條件數(shù)的估計值。l rcond 計算矩陣的條件數(shù)的倒數(shù)值?!纠?.17】 計算9階Hilbert矩陣的各條件數(shù)的值。>> h=hilb(9);>> cond(h)ans = 4.931532141187868e+011>>

29、 rcond(h)ans = 1.237264927935885e-012>> condest(h)ans = 1.099650993366049e+012可見雖然各條件數(shù)的計算數(shù)值并不相同,但結(jié)論是一致的,即此矩陣是嚴重病態(tài)的。4特征值的條件數(shù)在求解矩陣的特征值時也會遇到“病態(tài)”問題,此時就需要引入特征值的條件數(shù),其具體求解算法可參見參考資料【3】。在MATLAB中有專門用于求解特征值條件數(shù)的函數(shù)condeig。 其調(diào)用形式為:condeig(A)或V,D,s = condeig(A)其中V,D,s = condeig(A)等同于V,D = eig(A) 和s = condeig

30、(A)。其中V是特征向量組成的矩陣,其列向量是特征向量,D的對角元素是對應的特征值,s是對應的特征值條件數(shù)?!纠?.18】 計算下面矩陣的特征值條件數(shù)。>> a=-149 -50 -154;537 180 546;-27 -9 -25a= -149 -50 -154 537 180 546 -27 -9 -25>> V,D,s = condeig(a)V= 0.3162 0.4041 0.1391 -0.9487 -0.9091 -0.9740 0.0000 -0.1010 0.1789D= 1.0000 0 0 0 2.0000 0 0 0 3.0000s= 603.

31、6390 395.2366 219.29205范數(shù)函數(shù)矩陣(向量)的范數(shù)是矩陣(向量)的一種量度,它可分為1范數(shù)、2范數(shù)、無窮范數(shù)和F范數(shù)等。其中最常用的是2范數(shù),也即平方和范數(shù)。范數(shù)的計算可由函數(shù)norm和normest實現(xiàn),其中norm的調(diào)用格式為cond(X,P),P的取值可以是1、2、inf或fro;而normest只能計算矩陣2范數(shù)的估計值。 6秩函數(shù) 矩陣的秩的求解可由函數(shù)rank實現(xiàn)。 【例如】e= 1 1 1 5 2 2 2 5 3 3 3 5>> rank(e)ans = 27跡函數(shù)矩陣所有對角線上元素的和稱為矩陣的跡,在MATLAB中可由trace函數(shù)計算得出。

32、【例2.19】 求前面例中由M文件建立的矩陣的跡。>> exampleexm = 456 468 873 2 579 55 21 687 54 488 8 13 65 4656 88 98 21 5 475 68 4596 654 5 987 5488 10 9 6 33 77>> trace(exm)ans = 19188零空間函數(shù)求一矩陣的零空間矩陣的函數(shù)為null,看下面的例子。A= 1 2 3 1 2 31 2 3>> null(A)ans = -0.1690 -0.9487 0.8452 0.0000 -0.5071 0.3162>>

33、null(A,'r')ans = -2 -3 1 0 0 19正交空間函數(shù)函數(shù)orth用來求矩陣的一組正交基。下面求前面的exm矩陣的正交矩陣。>> orth(exm)ans = 0.1374 0.1554 -0.0398 0.9192 -0.3322 0.0241 0.1156 0.0910 -0.3530 -0.9237 0.1069 0.6777 0.7060 -0.0379 0.1717 0.3602 0.6180 -0.6758 -0.1584 0.0807 0.9162 -0.3484 0.1869 -0.0619 0.022410偽逆函數(shù)矩陣的偽逆函數(shù)

34、在求解系數(shù)矩陣為嚴重“病態(tài)”的問題時可避免“偽解”的產(chǎn)生。矩陣的偽逆由函數(shù)pinv實現(xiàn)。【例如】>> a=magic(4) %生成4階的魔方陣a= 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1>> inv(a) %常規(guī)方法求逆Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.567374e-017.ans = 1.0e+014 *0.93824992236885 2.81474976710656 -2.814

35、74976710656 -0.93824992236885 2.81474976710656 8.44424930131968 -8.44424930131968 -2.81474976710656-2.81474976710656 -8.44424930131968 8.44424930131968 2.81474976710656-0.93824992236885 -2.81474976710656 2.81474976710656 0.93824992236885>> pinv(a) %偽逆ans = 0.10110294117647 -0.07389705882353 -0

36、.06139705882353 0.06360294117647-0.03639705882353 0.03860294117647 0.02610294117647 0.00110294117647 0.01360294117647 -0.01139705882353 -0.02389705882353 0.05110294117647-0.04889705882353 0.07610294117647 0.08860294117647 -0.08639705882ans = 0 8 0 0>> pinv(a)*bans = 1.00000000000000 1.00000000

37、000000 1.00000000000000 1.0000000000000011通用函數(shù)形式以上所介紹的針對矩陣的函數(shù)形式在實際運算中是遠遠不夠的,對常用的其他運算,如三角函數(shù)運算和雙曲函數(shù)運算等,需要一種能夠使用這些通用函數(shù)的形式。在MATLAB中使用通用函數(shù)的格式為funm(A,'funname'),其中A為輸入矩陣變量,funname為調(diào)用的函數(shù)名。如funm(b,'log'),其作用同于logm(b),而funm(b,'sqrt')同于sqrtm(b)。因此,需要對常用的函數(shù)有個全面的了解,見表2.6和表2.7。表2.6 基本函數(shù)表表

38、2.7 特殊函數(shù)表2.3.4 矩陣分解函數(shù)1特征值分解矩陣的特征值分解也調(diào)用函數(shù)eig,為了分解,還要在調(diào)用時作一些形式上的變化,如:l V,D = eig(X)此函數(shù)得到矩陣X的特征值對角矩陣D和其列為對應特征值的特征向量矩陣V,于是矩陣的特征值分解為X×V = V×D。l V,D = eig(X,'nobalance')此形式為關(guān)閉平衡算法的求解方法。平衡算法對于某些問題可以得到更高的準確度。l V,D = eig(A,B)對矩陣A和B作廣義特征值分解,即A×V = B×V×D【例2.20】 矩陣的特征值分解演示。l 單矩陣

39、的特征值分解>> a=-149 -50 -154;537 180 546;-27 -9 -25;>> v,d=eig(a)v= 0.3162 0.4041 0.1391 -0.9487 -0.9091 -0.9740 0.0000 -0.1010 0.1789d= 1.0000 0 0 0 2.0000 0 0 0 3.0000l 雙矩陣的廣義特征值分解>> b=2 10 2;10 5 -8;2 -8 11;>> v,d=eig(a,b)v= 0.8211 -0.3138 -0.0191 -0.3452 0.9495 -0.9441 -0.454

40、6 -0.0044 0.3290d= 12.9030 0 0 0 -0.0045 0 0 0 0.07062復數(shù)特征值對角陣與實數(shù)塊特征值對角陣的轉(zhuǎn)化即使是對于實陣,其特征值也可能出現(xiàn)復數(shù)。而在實際使用中,常需要把這些共軛復數(shù)特征值轉(zhuǎn)化為實數(shù)塊。為此,MATLAB提供了兩個進行此項轉(zhuǎn)化的函數(shù)cdf2rdf和rsf2csf。V,D = cdf2rdf(V,D)將復數(shù)對角型轉(zhuǎn)化成實數(shù)塊對角型。U,T = rsf2csf(U,T)將實數(shù)塊轉(zhuǎn)化成復數(shù)對角型。【例2.21】 復實特征值對角陣的轉(zhuǎn)化演示。>> a=1 -3;2 2/3;>> v,d=eig(a)v= -0.7728

41、 + 0.0527i -0.7728 - 0.0527i 0 + 0.6325i 0 - 0.6325id= 0.8333 + 2.4438i 0 0 0.8333 - 2.4438i>> vs,ds=cdf2rdf(v,d)vs = -0.7728 0.0527 0 0.6325ds = 0.8333 2.4438 -2.4438 0.8333>> vs*ds/vsans = 1.0000 -3.0000 2.0000 0.6667由此可見此值等于a矩陣。2.4.1 基本數(shù)組運算為了對比矩陣運算和數(shù)組運算的不同,本節(jié)完全按照上一節(jié)的順序,讀者可以對照來看,這樣更能領(lǐng)會

42、到矩陣運算和數(shù)組運算的異同。1數(shù)組的四則運算在舊版本的數(shù)組四則運算中,加減運算與矩陣運算中的幾乎完全相同,同樣要求運算雙方維數(shù)相同,所得結(jié)果為對應元素的加減,只不過是數(shù)組運算中的運算符多了一個小圓點,即“.+”和“.-”,但在MATLAB的新版本中,這兩個命令不再存在,從而使矩陣的加減法和數(shù)組的加減法完全統(tǒng)一。而在乘除法中由于數(shù)組的對應元素間的運算的特點,使數(shù)組運算中的乘除法與矩陣的乘除法有相當大的區(qū)別。數(shù)組的乘除法是指兩同維數(shù)組間對應元素之間的乘除法,它們的運算符為“.*”和“./”或“.”。 【例如】>> a1=1 2 3;2 3 4;3 4 5 ;>> b1=1

43、1 1;2 2 2;3 3 3;>> a1.b1ans = 1.0000 0.5000 0.3333 1.0000 0.6667 0.5000 1.0000 0.7500 0.60002數(shù)組與常數(shù)間運算數(shù)組與常數(shù)之間的數(shù)加和數(shù)減運算還存在,在算符上可以加“.”,也可以不加“.”,但要注意加“.”時要把常數(shù)寫在前面?!纠纭?gt;> 3.+b1ans = 4 4 4 5 5 5 6 6 6數(shù)組與常數(shù)之間的數(shù)乘運算即為數(shù)組元素分別與此常數(shù)進行相乘,此時加不加“.”都一樣,看下面的例子:>> 3.*a1ans = 3 6 9 6 9 12 9 12 15在矩陣的運算中

44、,與常數(shù)之間的除法是有限制的,常數(shù)只能做除數(shù)。在數(shù)組運算中,由于有了“對應關(guān)系”的規(guī)定,因此與常數(shù)之間進行除法運算時形式上沒有任何限制?!纠纭?gt;> b1.9ans = 9.0000 9.0000 9.0000 4.5000 4.5000 4.5000 3.0000 3.0000 3.00003數(shù)組的冪運算數(shù)組的冪運算算符為“.”,它表示每個數(shù)組元素的冪運算,這是同矩陣的冪運算不同的,看下面的例子?!纠?.31】>> a=2 1 -3 -1;3 1 0 7;-1 2 4 -2;1 0 -1 5;>> a3ans = 32 -28 -101 34 99 -12

45、 -151 239 -1 49 93 8 51 -17 -98 139>> a.3ans = 8 1 -27 -1 27 1 0 343-1 8 64 -8 1 0 -1 125可見矩陣的冪運算和數(shù)組的冪運算所得的結(jié)果有很大的差別!同矩陣運算相比,數(shù)組運算中這些運算符都有所簡化,它們分別是exp、log和sqrt。用戶會發(fā)現(xiàn)這時的運算符和數(shù)字運算時的運算符作用完全相同。有了“對應元素”的規(guī)定,數(shù)組的運算實質(zhì)上就是針對于數(shù)組內(nèi)部的每個元素進行的。2.4.2 數(shù)組函數(shù)運算對于數(shù)組運算的通用函數(shù)運算,只要把所有運算的數(shù)組當數(shù)字一樣帶入函數(shù)中,不需要做什么變形。其通用形式為funname(

46、A),其中funname為常用函數(shù)名,參見函數(shù)名表2.5和表2.6。2.4.3 數(shù)組邏輯運算邏輯運算是數(shù)組運算所特有的一種運算形式,它包括基本邏輯關(guān)系運算和邏輯函數(shù)運算。1基本邏輯關(guān)系運算所謂的基本邏輯關(guān)系運算指的是幾乎所有的高級語言所普遍適用的邏輯運算。如大小的比較、邏輯與或非等邏輯關(guān)系。在MATLAB中,它們的實現(xiàn)見表2.9。表2.9 基本邏輯運算表說明l 在關(guān)系比較中,若比較的雙方為同維的數(shù)組,則比較的結(jié)果也是同維的數(shù)組。它的l 元素值由0和1組成。當比較雙方對應位置上的元素值滿足比較關(guān)系時,它的對應值為1,否則為0。l 當比較雙方中一方為常數(shù),另一方為一數(shù)組,則結(jié)果與數(shù)組同維,且其值為

47、已知數(shù)組與常數(shù)依次比較的結(jié)果。l 邏輯與、或、非運算的意義如下:與 當運算雙方的對應元素值都為非0時,結(jié)果為1,否則為0;或 當運算雙方的對應元素值有一非0時,結(jié)果為1,否則為0;非 當運算數(shù)組上的對應位置上的值為0時,結(jié)果為1,否則為0。l 在算術(shù)運算、比較運算和邏輯與或非運算中,它們的優(yōu)先級關(guān)系先后為:比較運算、算術(shù)運算、邏輯與或非運算?!纠?.32】 數(shù)組邏輯運算演示。>> a=1:3;4:6;7:9;>> x=5;>> y=ones(3)*5;>> xa=x<=axa = 0 0 0 0 1 1 1 1 1>> b=0

48、1 0;1 0 1;0 0 1;>> ab=a&bab = 0 1 0 1 0 1 0 0 12邏輯關(guān)系函數(shù)運算邏輯關(guān)系的函數(shù)運算中,大部分函數(shù)是MATLAB所特有的,它們給用戶帶來了很大的方便。因此掌握并運用它們是必要的。主要的邏輯關(guān)系函數(shù)見下表2.10。表2.10 邏輯關(guān)系函數(shù)表這里所提供的邏輯關(guān)系運算函數(shù)并非全部。特殊專業(yè)的用戶可以很方便地查找到相應的特殊函數(shù),而對大多數(shù)的用戶來說是用不到的,這里不再冗述?!纠?.33】 all和any的使用。>> a=magic(5);>> a(:,3)=zeros(5,1)a= 17 24 0 8 15 2

49、3 5 0 14 16 4 6 0 20 22 10 12 0 21 3 11 18 0 2 9>> a1=all(a(:,1)<10)a1 = 0>> a2=all(a>3)a2 = 1 1 0 0 0>> a11=any(a(:,1)>10)a11 = 1 1 0 1 1【例2.34】 find函數(shù)的用法。>> a=1:5;>> a=1./aa= 1.0000 0.5000 0.3333 0.2500 0.2000>> f1=find(a)f1 = 1 2 3 4 5>> f2=find(

50、abs(a)>0.4|abs(a)<0.23)f2 = 1 2 52.5 多項式運算2.5.1 多項式的表示方法 多項式的表達約定:對于多項式用以下的行向量表示:這樣就把多項式的問題轉(zhuǎn)化為向量問題。1系數(shù)向量的直接輸入法由于在MATLAB中的多項式是以向量形式儲存的,因此,最簡單的多項式輸入即為直接的向量輸入,MATLAB自動將向量元素按降冪順序分配給各系數(shù)值。向量可以為行向量,也可以是列向量?!纠?.35】 輸入多項式>> p=1 -5 6 -33;>> poly2sym(p)ans = x3-5*x2+6*x-33說明:其中的poly2sym是符號工具箱

51、中的函數(shù),可將多項式向量表示成為符號形式。2特征多項式輸入法多項式創(chuàng)建的另一個途徑是從矩陣求其特征多項式獲得,由函數(shù)poly實現(xiàn)?!纠?.36】>> a=1 2 3;2 3 4;3 4 5;>> p1=poly(a)p1 = 1.0000 -9.0000 -6.0000 0.0000>> poly2sym(p1)ans =x3-9*x2-6*x-1803831259791359/2535301200456458802993406410752說明l 由特征多項式生成的多項式的首項系數(shù)一定是1。l n階矩陣一般產(chǎn)生n次多項式。3由根創(chuàng)建多項式由給定的根也可產(chǎn)生其

52、對應的多項式,此功能還由函數(shù)poly實現(xiàn)?!纠?.37】 由給定的根向量生成其對應多項式。>> root=-5 -3+4i -3-4i;>> p=poly(root)p= 1 11 55 125>> poly2sym(p)ans = x3+11*x2+55*x+125說明l 若要生成實系數(shù)多項式,則根中的復數(shù)必定對應共軛。l 有時生成的多項式向量包含很小的虛部,可用real命令將其濾掉。2.5.2 多項式運算1求多項式的值求多項式的值可以有兩種形式,對應著兩種算法:一種在輸入變量值代入多項式計算時是以數(shù)組為單元的,此時的計算函數(shù)為polyval;另一種是以矩陣為計算單元,進行矩陣式運算,以求得多項式的值,此時的函數(shù)為polyvalm。這兩種計算在數(shù)值上有很大的差別,這主要源于矩陣計算和數(shù)組運算的差別。【例2.38】 對同一多項式及變量值分別計算矩陣計算值和數(shù)組計算值。>> p=1 11 55 125;&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論