




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、2.利用冒號表達式生成向量冒號表達式的基本形式為x=x0:step:xn,其中x0、step、xn分別為給定數值,x0表示向量的首元素數值,xn表示向量尾元素數值限,step表示從第二個元素開始,元素數值大小與前一個元素值大小的差值。注意:這里強調xn為尾元素數值限,而非尾元素值,當xn-x0恰為step值的整數倍時,xn才能成為尾值。若x0<xn,則需step>0;若x0>xn則需step<0;若x0=xn,則向量只有一個元素。若step=1,則可省略此項的輸入,直接寫成x=x0:xn。此時可以不用“”。【例如】>>a=1:2:12a=1357911>
2、; >a=1:-2:12a=Emptymatrix:1-by-0>>a=12:-2:1a=12108642> >a=1:2:1a=1> >a=1:6a=1234563.線性等分向量的生成在MATLAB中提供了線性等分功能函數linspace,用來生成線性等分向量,其調用格式如下:y=linspace(x1,x2)生成100維的行向量,使得y(1)=x1,y(100)=x2;y=linspace(x1,x2,n)生成n維的行向量,使得y(1)=x1,y(n)=x2。【例如】a1=linspace(1,100,6)al=1.000020.800040.60
3、0060.400080.2000100.0000說明線性等分函數和冒號表達式都可生成等分向量。但前者是設定了向量的維數去生成等間隔向量,而后者是通過設定間隔來生成維數隨之確定的等間隔向量。4,對數等分向量的生成在自動控制,數字信號處理中常常需要對數刻度坐標,MATLAB中還提供了對數等分功能函數,具體格式如下:y=logspace(x1,x2)生成50維對數等分向量,使得y(1)=10x1,y(50)=10x2;y=logspace(x1,x2,n)生成n維對數等分向量,使得y(1)=10x1,y(n)=10x2;【例如】>>a2=logspace(0,5,6)a2=1101001
4、00010000100000另外,向量還可以從矩陣中提取,還可以把向量看成1xn階(行向量)或nX1階(列向量)的矩陣,以矩陣形式生成。由于在MATLAB中矩陣比向量重要得多,止匕類函數將在下節矩陣中詳細介紹,專門對向量運算感興趣的讀者可參考下一節。2.2.2向量的基本運算1.加(減)與數加(減)【例如】>>a1-1%這里的a1即上頁中生成的a1ans=019.800039.600059.400079.200099.00002.數乘【例如】>>a1*2ans=2.000041.600081.2000120.8000160.4000200.00002.2.3點積、叉積及混
5、合積的實現1點積計算在高等數學中,向量的點積是指兩個向量在其中某一個向量方向上的投影的乘積,通常可以用來引申定義向量的模。在MATLAB中,向量的點積可由函數dot來實現。dot向量點積函數dot(a,b)返回向量a和b的數量點積。a和b必須同維。當a和b都為列向量時,dot(a,b)同于a.*bodot(a,b,dim)返回a和b在維數為dim的點積。【例2.4】試計算向量a=(1,2,3)和向量b=(3,4,5)的點積。> >a=123;> >b=3,4,5;> >dot(a,b)ans=26還可以用另一種方法計算向量的點積。>>sum(a.
6、*b)ans=262,叉積在數學上,向量的叉積表示過兩相交向量的交點的垂直于兩向量所在平面的向量。在MATLAB中,向量的叉積由函數cross來實現。cross向量叉積函數c=cross(a,b)返回向量a和b的叉積向量。即C=axb。a和b必須為三維向量。c=cross(a,b)返回向量a和b的前3位的叉積。c=cross(a,b,dim)當a和b為n維數組時,則返回a和b的dim維向量的叉積。a和b必須有相同的維數。且size(a,dim)和size(a,dim)必須為3。【例2.5】計算垂直于向量a=(1,2,3)和b=(3,4,5)的向量。a=123;b=3,4,5;c=cross(a
7、,b)c=-24-2得到同時垂直a、b的向量為土(-2,4,-2)向量的混合積由以上兩個函數實現。【例2.6計算上面向量a、b、c的混合積。>>dot(a,cross(b,c)ans=24注意函數的順序不可顛倒,否則將出錯。2.3矩陣及其運算MATLAB原意為矩陣實驗室,而且MATLAB的所有的數值功能都是以(復)矩陣為基本單元進行的,因此,MATLAB中矩陣的運算功能可謂最全面、最強大。本節將對矩陣及其運算進行詳細的闡述。2.3.1 矩陣的生成1.直接輸入小矩陣從鍵盤上直接輸入矩陣是最方便、最常用和最好的創建數值矩陣的方法,尤其適合較小的簡單矩陣。在用此方法創建矩陣時,應當注意以
8、下幾點。輸入矩陣時要以“”為其標識,即矩陣的元素應在“”內部,止匕時MATLAB才將其識別為矩陣。矩陣的同行元素之間可由空格或“,”分隔,行與行之間要用“;”或回車符分隔。矩陣大小可不預先定義。矩陣元素可為運算表達式。若不想獲得中間結果,可以“結束。無任何元素的空矩陣亦合法。【例2.7】創建一簡單數值矩陣。>>a=123;111;456a=123111456【例2.8創建一帶有運算表達式的矩陣。>>b=sin(pi/3),cos(pi/4);log(9),tanh(6);此時矩陣已經建立并存儲在內存中,只是沒有顯示在屏幕上而已。若用戶想查看此矩陣,只需鍵入矩陣名。2.創
9、建M文件輸入大矩陣M文件是一種可以在MATLAB環境下運行的文本文件。它可以分為命令式文件和函數式文件兩種。在此處主要用到的是命令式M文件,用它的最簡單形式來創建大型矩陣。更加詳細的內容將在第5章中討論。當矩陣的規模比較大,直接輸入法就顯得笨拙,出現差錯也不易修改。為了解決此問題,可以利用M文件的特點將所要輸入的矩陣按格式先寫入一文本文件中,并將此文件以m為其擴展名,即為M文件。在MATLAB命令窗中輸入此M文件名,則所要輸入的大型矩陣就被輸入到內存中。【例如】編制一名為example.m的M文件,內容如下。%example.m%創建一M文件輸入矩陣的示例文件exm=4564688732579
10、5521,687,544888136546568898021547568,45966545987548810963377在MATLAB命令窗中輸入:>>example;>>size(exm)ans=56說明在M文件中符號后面的內容只起注釋作用,將不被執行。例中的size函數為求矩陣的維數函數,結果表明矩陣為5X6階的矩陣。在實際應用中,用來輸入矩陣的M文件通常是用C語言或其他高級語言生成的已存在的數據文件。在通常的使用中,上例中的矩陣還不算是“大型”矩陣,此處只是借例說明而已。矩陣的輸入方式還有很多種,其他的方法將在后面的章節中逐步介紹。2.3.2矩陣的基本數學運算矩陣
11、的基本數學運算包括矩陣的四則運算、與常數的運算、逆運算、行列式運算、幕運算、指數運算、對數運算和開方運算等。下面將一一進行討論。1.矩陣的四則運算在前面介紹過,MATLAB是以(復)矩陣為基本運算單元的,因此,矩陣的四則運算格式與2.1節中講的數字的運算是相同的,不過對具體的運算還有一些具體的要求。(1)矩陣的加和減矩陣的加減法使用“+”、“-”運算符,格式與數字運算完全相同,但要求加減的兩矩陣是同階的。【例如】> >a=123;234;345;> >b=111;222;333;> >c=a+bc=2 344 566 78(2)矩陣的乘法矩陣的乘法使用運算符
12、“*”,要求相乘的雙方要有相鄰公共維,即若A為iXj階,則B必須為jXk階時,A和B才可以相乘。【例如】>>e=b,555'e=1 1152 2253 335>>f=a*ef=141414302020204526262660(3)矩陣的除法矩陣的除法可以有兩種形式:左除“"和右除“/”,在傳統的MATLAB算法中,右除是要先計算矩陣的逆再做矩陣的乘法,而左除則不需要計算矩陣的逆而直接進行除運算。通常右除要快一點,但左除可以避免被除矩陣的奇異性所帶來的麻煩。在MATLAB6.0中兩者的區別不太大。通常用矩陣的除法來求解方程組的解。對于方程組Ax=b,其中
13、A是一個(nxm)階的矩陣,則:當n=m且非奇異時,此方程稱為恰定方程;當n>m時,此方程稱為超定方程;當n<m時,此方程稱為欠定方程。這3種方程都可以用矩陣的除法求解。【例2.9比較用左除和右除法分別求解恰定方程的解。為了比較這兩種方法的區別,先構造一個系數矩陣條件數很大的高階恰定方程。> >rand('seed',12);> >a=rand(100)+1.e8;> >x=ones(100,1);> >b=a*x;其條件數為:> >cond(a)ans=5.0482e+011可見其條件數是足夠大的,病態很
14、嚴重。首先用右除法計算此方程。> >tic;x1=b'/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=toc> 1=切換到長型形式格式:> >tic;x1=ab;t1=toct1=0.05000000000000與真實解之間的誤差為:> >er2=norm(x
15、-x1)er2=5.228819204329127e-005相對殘差為:> >re1=norm(a*x1-b)/norm(b)re1=4.900067335093966e-016從此例可以看出,右除比左除計算的速度要慢,且精度也差很多。但這種情況只是在條件數很大時才表現得如此明顯,對于一般的矩陣,兩者幾乎沒有差別。在MATLAB中求解超定方程是采用最小二乘法來求解的,這也是曲線擬合的基本方法。【例2.10】用矩陣的除法求解超定方程。看下面的方程。10i?=.V若考慮線性方程標準型Ax'=B',則A=(x2,1)可以看成為矩陣的系數,x=(a,b)'是未知數,
16、y=B。這樣建立超定方程如下:> >x=1925313844'> >y=1932.34973.397.8'> >a=x.A2,ones(5,1)a=36116251961114441> >b=y;> >ab=abab=0.050035124219160.97257865690678> >x1=19:0.1:44;> >y1=ab(2)+x1.A2*ab(1);%£y1=polyvar(ab,x1);> >plot(x,y,'o');> >hold
17、;> >plot(x1,y1)> 果如圖2.2。圖2.2解超定方程擬和欠定方程的解是不惟一的,在MATLAB中用除法解方程時所得的解是所有解中范數最小的一個。【例2.11】對例2.10中的矩陣用除法解一個欠定方程。>>a=aa=>>b=1;1;>>x=abx=1.22857142857143000-0.22857142857143用戶若有興趣可以驗證此解的范數約為1.25,任何其他的方程解的范數都比此值大。> .矩陣與常數間運算常數與矩陣的運算即是同此矩陣的各元素之間進行運算,如數加是指每個元素都加上此常數,數乘即是每個元素都與此數相
18、乘。需要注意的是,當進行數除時,常數通常只能做除數。> .矩陣的逆運算矩陣的逆運算是矩陣運算中很重要的一種運算。它在線性代數及計算方法中都有很多的論述。而在MATLAB中,眾多的復雜理論只變成了一個簡單的命令inv0【例2.12】求下面A矩陣的逆。2I31.3107A-124-210-15,解:> >a=21-3-1;3107;-124-2;10-15;> >inv(a)ans=> 0.047058823529410.58823529411765-0.27058823529412-0.941176470588240.38823529411765-0.3529
19、41176470590.482352941176470.76470588235294-0.223529411764710.29411764705882-0.03529411764706-0.47058823529412-0.03529411764706-0.058823529411760.047058823529410.294117647058824 .矩陣的行列式運算矩陣的行列式的值可由det函數計算得出。【例2.13】求上例中的A矩陣及其逆的行列式之積。> >a1=det(a);> >a2=det(inv(a);> >a1*a2ans=15 .矩陣的幕運
20、算矩陣的幕運算的形式同數字的幕運算的形式相同,即用算符“人”來表示。矩陣的幕運算在計算過程中與矩陣的某種分解有關,計算所得值并非是矩陣每個元素的幕值。這一點是值得讀者注意的!6 .矩陣的指數運算矩陣的指數運算的最常用的命令為expm,其他的命令還有expm1、expm2和expm3o其中expm1是由Pade近似計算矩陣指數,expm2是由Taylor級數計算矩陣指數,expm3是由特征值法計算矩陣指數。而expm函數使用的方法與expm1相同。【例2.14】計算矩陣的指數,并比較不同函數的結果。> >b=magic(3);> >expm(b)ans=1.0e+006*
21、1.089758251034651.089595332837401.089663788600041.089622715142451.089717177577071.089677479752571.089636406294981.089704862057631.08967610411948> >expm1(b)ans=1.0e+006*1.089758251034651.089595332837401.089663788600041.089622715142451.089717177577071.089677479752571.089636406294981.089704862057
22、631.08967610411948> >expm2(b)ans=1.0e+006*1.089758251034661.089595332837401.089663788600051.089622715142461.089717177577081.089677479752571.089636406294991.089704862057631.08967610411949> >expm3(b)ans=1.0e+006*1.089758251034681.089595332837421.089663788600071.089622715142481.089717177577
23、101.089677479752591.089636406295011.089704862057651.08967610411951說明expm的計算結果同于expm10幾個函數的計算結果是有差別的,但差別很小。7.矩陣的對數運算矩陣的對數運算由函數10gm實現。【例2.15】對例2.14中的矩陣求其對數。>>10gm(b)ans=Columns1through21.96203467715006+0.08528517857520i0.37300776197608+0.75895105456357i0.37300776197608+0.11767613948263i1.9620346
24、7715005+1.04719755119660i0.37300776197608-0.20296131805783i0.37300776197608-1.80614860576016iColumn30.37300776197608-0.84423623313876i0.37300776197608-1.16487369067923i1.96203467715005+2.00910992381800i8.矩陣的開方運算矩陣的開方運算函數為sqrtm。2.3.3矩陣的基本函數運算矩陣的函數運算是矩陣運算中最實用的部分,它主要包括特征值的計算、奇異值的計算條件數、各類范數、矩陣的秩與跡的計算和矩陣
25、的空間運算等。1.特征信函數矩陣的特征值可以由兩個函數eig和eigs計算得出。其中函數eig可以給出特征值和特征向量的值,而函數eigs則是使用迭代法求解特征值和特征向量的函數,具體調用形式請查看helpeigso這里只用到它的求解特征值的部分。【例2.16】計算如下矩陣的特征值和特征向量。73-2、4=34-1-2-13k/解:> >A=73-2;34-1;-2-13> >x,y=eig(A)x=5.773502691896260e-0019.878369738279814e-002-8.104988882151846e-001> 5.773502691896
26、265e-001-6.525207782419939e-001-4.907986355208505e-0015.773502691896246e-001-7.513044756247937e-0013.197002526943342e-001y=2.000000000000000e+0000002.394448724536010e+0000009.605551275463988e+000說明其中x為特征向量矩陣,y為特征值矩陣。2 .奇異值函數同樣,矩陣的奇異值函數也有兩種形式svd和svds,它們所使用的方法相同,只是計算值略有差別。3 .條件數函數條件數的值是判斷矩陣“病態”程度的量度,因
27、此,它在理論分析中有著重要的應用。在MATLAB中可由如下3個函數實現條件數的計算。cond計算矩陣的條件數的值ocondest計算矩陣的1范數條件數的估計值。rcond計算矩陣的條件數的倒數值。【例2.17】計算9階Hilbert矩陣的各條件數的值。> >h=hilb(9);> >cond(h)ans=4.931532141187868e+011> >rcond(h)ans=1.237264927935885e-012> >condest(h)ans=1.099650993366049e+012可見雖然各條件數的計算數值并不相同,但結論是一致的
28、,即此矩陣是嚴重病態的。> .特征值的條件數在求解矩陣的特征值時也會遇到“病態”問題,此時就需要引入特征值的條件數,其具體求解算法可參見參考資料【3】。在MATLAB中有專門用于求解特征值條件數的函數condeig。其調用形式為:condeig(A)或V,D,s=condeig(A)其中V,D,s=condeig(A)等同于V,D=eig(A)和s=condeig(A)。其中V是特征向量組成的矩陣,其列向量是特征向量,D的對角元素是對應的特征值,s是對應的特征值條件數。【例2.18】計算下面矩陣的特征值條件數。>>a=-149-50-154;537180546;-27-9-2
29、5a=-149-50-154537180546-27-9-25>>V,D,s=condeig(a)V=0.31620.40410.1391-0.9487-0.9091-0.9740D=1.000002.00000003.0000s=603.6390395.2366219.29205.范數函數矩陣(向量)的范數是矩陣(向量)的一種量度,它可分為1范數、2范數、無窮范數和F范數等。其中最常用的是2范數,也即平方和范數。范數的計算可由函數norm和normest實現,其中norm的調用格式為cond(X,P),P的取值可以是1、2、inf或fro;而normest只能計算矩陣2范數的估計
30、值。6 .秩函數矩陣的秩的求解可由函數rank實現。【例如】e=1 1152 2253335>>rank(e)ans=27 .跡函數矩陣所有對角線上元素的和稱為矩陣的跡,在MATLAB中可由trace函數計算得出。【例2.19】求前面例中由M文件建立的矩陣的跡。>>exampleexm=45646887325795521687544888136546568898215>>trace(exm)ans=19188 .零空間函數求一矩陣的零空間矩陣的函數為null,看下面的例子。A=123123123>>null(A)ans=-0.1690-0.948
31、70.84520.0000-0.50710.3162>>null(A,'r')ans=-2-31 0019 .正交空間函數函數orth用來求矩陣的一組正交基。下面求前面的exm矩陣的正交矩陣。>>orth(exm)ans=0.13740.1554-0.03980.9192-0.33220.02410.11560.0910-0.3530-0.92370.10690.67770.7060-0.03790.17170.36020.6180-0.6758-0.15840.08070.9162-0.34840.1869-0.06190.022410 .偽逆函數矩陣
32、的偽逆函數在求解系數矩陣為嚴重“病態”的問題時可避免“偽解”的產生矩陣的偽逆由函數pinv實現【例如】>>a=magic(4)%生成4階的魔方陣a=16131110121514>>inv(a)%常規方法求逆Warning:Matrixisclosetosingularorbadlyscaled.Resultsmaybeinaccurate.RCOND=1.567374e-017.ans=1.0e+014*0.938249922368852.81474976710656-2.81474976710656-0.938249922368852.814749767106568.
33、44424930131968-8.44424930131968-2.81474976710656-2.81474976710656-8.444249301319688.444249301319682.81474976710656-0.93824992236885-2.814749767106562.814749767106560.93824992236885>>pinv(a)%»逆ans=0.10110294117647-0.07389705882353-0.061397058823530.06360294117647-0.036397058823530.03860294
34、1176470.026102941176470.001102941176470.01360294117647-0.01139705882353-0.023897058823530.05110294117647-0.048897058823530.076102941176470.08860294117647-0.08639705882ans=>>pinv(a)*bans=1.000000000000001.000000000000001.0000000000000011 .通用函數形式以上所介紹的針對矩陣的函數形式在實際運算中是遠遠不夠的,對常用的其他運算,如三角函數運算和雙曲函數運
35、算等,需要一種能夠使用這些通用函數的形式。在MATLAB中使用通用函數的格式為funm(A,'funname'),其中A為輸入矩陣變量,funname為調用的函數名。如funm(b,'log'),其作用同于10gm(b),而funm(b,'sqrt')同于sqrtm(b)。因此,需要對常用的函數有個全面的了解,見表2.6和表2.7表2.6基本函數表函數名功能函數名功能Mil正弦acoth反雙曲余切函數sinh雙曲正弦exp指數函數asin反正弦log自然對數函數usinh反雙曲正弦loglO常用以10為底)對數函數COS余弦log2以2為底對數函
36、數cosh雙曲余弦pow2以2為底的輔函數ucos反余弦sqrt平方根函數iiCOsh反雙曲余弦nexipow2求不小于變量的最小2指數Itin正切函數abs模函數函數名功能謂數名功能Icillh雙曲正切函數angle相用函數反正切函數CCJlj復共輒函數ataA2四像取反正切函數imag豆矩陣虛部uiunh反雙曲正切函數real復矩陣實部sec正割函數unwnip打開相知函數secJi雙曲正割函數isrcal實酹判斷函數反正割函數cplxpair調整數為共輯時usech反雙曲正割函數fix朝等方向舍入CSC余割函數floor朝負方向舍入csch雙曲余割函數ceil朝正方向舍入acsc反余割函
37、數round四舍五入函數iifsch反雙曲余割函數mW(帶符號)求余函數cm余切函數rem無符號求余函數culh雙曲余切函數sign符號函數ucol反余切函數表2.7特殊函數表函數名功能函數名功能airyAiry函數clJipke完全橢圓積分btsselj第一類貝賽爾函數erf誤差函數tk?ssely第二類貝賽爾函數erfc補充的誤差函數bessclh第三類貝賽爾函數erfex比例補充誤差函數besseli改進的第一類貝賽爾函數ertinv反誤差函數besselk改進的第二類貝賽爾函數expim幕枳分函數betaBela函數Gamma函數bekiinc不完全的Beta函數gammainc不完全
38、Gainiiia函數heUlnBela函數的對數gammahiGamma函數的對數ellipjJiicobi版圓函數legendre聯合勒讓鐫函數cro>s向吊:叉積2.3,4矩陣分解函數1.特征值分解矩陣的特征值分解也調用函數eig,為了分解,還要在調用時作一些形式上的變化,如:V,D=eig(X)此函數彳#到矩陣X的特征值對角矩陣D和其列為對應特征值的特征向量矩陣V,于是矩陣的特征值分解為XXV=VXDoV,D=eig(X,'nobalance')此形式為關閉平衡算法的求解方法。平衡算法對于某些問題可以得到更高的準確度。V,D=eig(A,B)對夕!陣A和B作廣義特征
39、值分解,即AXV=BXVXD【例2.20矩陣的特征值分解演示。單矩陣的特征值分解>>a=-149-50-154;537180546;-27-9-25>>Md=eig(a)v=0.31620.40410.1391-0.9487-0.9091-0.97400.0000-0.10100.1789d=1.00000002.00000003.0000雙矩陣的廣義特征值分解>>b=2102;105-8;2-811>>Md=eig(a,b)v=0.8211-0.3138-0.0191-0.34520.9495-0.9441-0.4546-0.00440.329
40、0d=12.9030000-0.00450000.07062,復數特征值對角陣與實數塊特征值對角陣的轉化即使是對于實陣,其特征值也可能出現復數。而在實際使用中,常需要把這些共腕復數特征值轉化為實數塊。為此,MATLAB提供了兩個進行此項轉化的函數cdf2rdf和rsf2cs£V,D=cdf2rdf(V,D)將復數對角型轉化成實數塊對角型。U,T=rsf2csf(U,T)將實數塊轉化成復數對角型。【例2.21復實特征值對角陣的轉化演示。> >a=1-3;223;> >Md=eig(a)v=-0.7728+0.0527i-0.7728-0.0527i0+0.632
41、5i0-0.6325id=0.8333+2.4438i0.8333-2.4438i> >vs,ds=cdf2rdf(v,d)vs=-0.77280.052700.6325ds=0.83332.4438-2.44380.8333> >vs*ds/vsans=1.0000-3.00002.00000.6667由此可見此值等于a矩陣。2.4.1基本數組運算為了對比矩陣運算和數組運算的不同,本節完全按照上一節的順序,讀者可以對照來看,這樣更能領會到矩陣運算和數組運算的異同。1.數組的四則運算在舊版本的數組四則運算中,加減運算與矩陣運算中的幾乎完全相同,同樣要求運算雙方維數相同,
42、所得結果為對應元素的加減,只不過是數組運算中的運算符多了一個小圓點,即“.+”和“.-",但在MATLAB的新版本中,這兩個命令不再存在,從而使矩陣的加減法和數組的加減法完全統一。而在乘除法中由于數組的對應元素間的運算的特點,使數組運算中的乘除法與矩陣的乘除法有相當大的區別。數組的乘除法是指兩同維數組間對應元素之間的乘除法,它們的運算符為".*”和“./”或“”【例如】> >a1=123;234;345;> >b1=111;222;333;> >a1.b1ans=1.00000.50000.33331.00000.66670.50001.
43、00000.75000.60002,數組與常數間運算數組與常數之間的數加和數減運算還存在,在算符上可以加“.”,也可以不加但要注意加“.”時要把常數寫在前面。【例如】> >3.+b1ans=4 445 556 66數組與常數之間的數乘運算即為數組元素分別與此常數進行相乘,此時加不加都一樣,看下面的例子:>>3.*a1ans=369691291215在矩陣的運算中,與常數之間的除法是有限制的,常數只能做除數。在數組運算中,由于有了“對應關系”的規定,因此與常數之間進行除法運算時形式上沒有任何限制。【例如】>>b1.9ans=9.00009.00009.0000
44、4.50004.50004.50003.00003.00003.00003.數組的幕運算數組的幕運算算符為“八”,它表示每個數組元素的幕運算,這是同矩陣的幕運算不同的,看下面的例子。【例2.31】>>a=21-3-1;3107;-124-2;10-15;>>aA3ans=32-28-1013499-12-151239-14993851-17-98139>>a.A3ans=81-27-12710343-1864-810-1125可見矩陣的幕運算和數組的幕運算所得的結果有很大的差別!同矩陣運算相比,數組運算中這些運算符都有所簡化,它們分別是exp、10g和sqr
45、t用戶會發現這時的運算符和數字運算時的運算符作用完全相同。有了“對應元素”的規定,數組的運算實質上就是針對于數組內部的每個元素進行的。2.4.2 數組函數運算對于數組運算的通用函數運算,只要把所有運算的數組當數字一樣帶入函數中,不需要做什么變形。其通用形式為funname(A),其中funname為常用函數名,參見函數名表2.5和表2.6。2.4.3 數組邏輯運算邏輯運算是數組運算所特有的一種運算形式,它包括基本邏輯關系運算和邏輯函數運算1.基本邏輯關系運算所謂的基本邏輯關系運算指的是幾乎所有的高級語言所普遍適用的邏輯運算。如大小的比較、邏輯與或非等邏輯關系。在MATLAB中,它們的實現見表2
46、.9。表2.9基本邏輯運算表符號運算符功m函數名=等于四二不等于ne<小于11>大于gt<=小于等于le>=大于等于ge&邏輯與and1邏輯或or邏輯非not說明在關系比較中,若比較的雙方為同維的數組,則比較的結果也是同維的數組。它的元素值由0和1組成。當比較雙方對應位置上的元素值滿足比較關系時,它的對應值為1,否則為00當比較雙方中一方為常數,另一方為一數組,則結果與數組同維,且其值為已知數組與常數依次比較的結果。邏輯與、或、非運算的意義如下:與當運算雙方的對應元素值都為非0時,結果為1,否則為0;或當運算雙方的對應元素值有一非0時,結果為1,否則為0;非當運
47、算數組上的對應位置上的值為0時,結果為1,否則為00在算術運算、比較運算和邏輯與或非運算中,它們的優先級關系先后為:比較運算、算術運算、邏輯與或非運算。【例2.32】數組邏輯運算演示。>>a=1:3;4:6;7:9;>>x=5;>>y=ones(3)*5;xa=011111>>b=010;101;001;>>ab=a&bab=0101 010012 .邏輯關系函數運算邏輯關系的函數運算中,大部分函數是MATLAB所特有的,它們給用戶帶來了很大的方便。因此掌握并運用它們是必要的。主要的邏輯關系函數見下表2.10。表2.10邏輯關
48、系函數表函數名使用說明函數名使用說明any法向展的任意元素不為口則返回真islogical判斷邏輯數組II若向是的所有元素不為0則返回真logical轉換數值為遺輯型xor邏輯或1Ffind尋找非0元素坐標isemply判斷空矩陣判斷不定數isequa判斷相等數組isinf判斷無限大元素Lsnumeric判斷數值矩陣finite判斷有限大元素這里所提供的邏輯關系運算函數并非全部。特殊專業的用戶可以很方便地查找到相應的特殊函數,而對大多數的用戶來說是用不到的,這里不再冗述。【例2.33all和any的使用。>>a=magic(5);>>a(:,3)=zeros(5,1)a
49、=17240815235014164602022101202131118029>>a1=all(a(:,1)<10)al=>>a2=all(a>3)a2=1 1000>>a11=any(a(:,1)>10)all=1 1011【例2.34find函數的用法。>>a=1:5;>>a=1./aa=1.00000.50000.33330.25000.2000>>f1=find(a)f1=1 2345>>f2=find(abs(a)>0.4|abs(a)<0.23)f2=1 252.5多項
50、式運算2.5.1 多項式的表示方法多項式的表達約定:對于多項式''01“I”用以下的行向量表小:P=20通1".,鐮_|,,力這樣就把多項式的問題轉化為向量問題。1 .系數向量的直接輸入法由于在MATLAB中的多項式是以向量形式儲存的,因此,最簡單的多項式輸入即為直接的向量輸入,MATLAB自動將向量元素按降幕順序分配給各系數值。向量可以為行向量,也可以是列向量。【例2.35】輸入多項式工一5廠+6x33>>p=1-56-33;>>poly2sym(p)ans=xA3-5*xA2+6*x-33說明:其中的poly2sym是符號工具箱中的函數,可
51、將多項式向量表示成為符號形2 .特征多項式輸入法多項式創建的另一個途徑是從矩陣求其特征多項式獲得,由函數poly實現。【例2.36】> >a=123;234;345;> >p1=poly(a)pl=1.0000-9.0000-6.00000.0000> >poly2sym(p1)ans=xA3-9*xA2-6*x-1803831259791359/2535301200456458802993406410752說明由特征多項式生成的多項式的首項系數一定是1。n階矩陣一般產生n次多項式。3 .由根創建多項式由給定的根也可產生其對應的多項式,此功能還由函數poly
52、實現。【例2.37】由給定的根向量生成其對應多項式。> >root=-5-3+4i-3-4i;> >p=poly(root)p=11155125> >poly2sym(p)ans=xA3+11*xA2+55*x+125說明若要生成實系數多項式,則根中的復數必定對應共腕。有時生成的多項式向量包含很小的虛部,可用real命令將其濾掉。2 .5.2多項式運算3 .求多項式的值求多項式的值可以有兩種形式,對應著兩種算法:一種在輸入變量值代入多項式計算時是以數組為單元的,此時的計算函數為polyval;另一種是以矩陣為計算單元,進行矩陣式運算,以求得多項式的值,此時的
53、函數為polyvalm。這兩種計算在數值上有很大的差別,這主要源于矩陣計算和數組運算的差別。【例2.38】對同一多項式及變量值分別計算矩陣計算值和數組計算值。> >p=11155125;> >b=11;11;> >polyval(p,b)ans=192192192192> >polyvalm(p,b)ans=2068181206注意當進行矩陣運算時,變量矩陣需為方陣。2 .求多項式的根求多項式的根可以有兩種方法,一種是直接調用MATLAB的函數roots,求解多項式的所有根;另一種是通過建立多項式的伴隨矩陣再求其特征值的方法得到多項式的所有根。【
54、例2.39】用兩種方法求解方程2/-5.1+6廠一t+9=°的所有根。> >p=2-56-19;> >roots(p)ans=1.6024+1.2709i1.6024-1.2709i-0.3524+0.9755i-0.3524-0.9755i>>compan(p)ans=2.5000-3.00000.5000-4.50001.00001.00001.0000> >eig(ans)ans=1.6024+1.2709i1.6024-1.2709i-0.3524+0.9755i-0.3524-0.9755i可見兩種方法求得的值是相等的3 .多
55、項式的乘除法運算多項式的乘法由函數conv來實現,此函數同于向量的卷積;多項式的除法由函數deconv來實現,向量的解卷函數相同。【例2.40】計算兩多項式的乘除法。> >p=2-56-19;> >poly2sym(p)ans=> >2*xA4-5*xA3+6*xA2-x+9> >d=3-90-18;> >poly2sym(d)ans=> >3*xA2-90*x-18> >pd=conv(p,d)pd=6-195432-4539-792-162> >poly2sym(pd)ans=6*xA6-195
56、*xA5+432*xA4-453*xA3+9*xA2-792*x-162> >p1=deconv(pd,d)-1pl=2-5可見pl和p是相等的。4 .多項式微分多項式的微分函數polyder可以用來進行多項式的微分計算。【例2.41】對上例中的多項式p進行微分計算。> >poly2sym(p)ans=2*xA4-5*xA3+6*xA2-x+9> >Dp=polyder(p)Dp=8-1512-1> >poly2sym(Dp)ans=8*xA3-15*xA2+12*x-15 .多項式擬合多項式擬合是多項式運算的一個重要組成部分,在工程及科研工作中都得到了廣泛的應用。其實現一方面可以由矩陣的除法求解超定方程來進行;另一方面在MATLAB中還提供了專用的擬合函數polyfito其調用格式如下:polyfit(X,丫,n)其中X、Y為擬合數據,n為擬合多項式的階數。p,s=polyfit(X,Y,n)其中p為擬合多項式系數向量,s為擬
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色有機食品用地流轉合同
- 二手繪畫資料買賣合同
- 苗木交易合同書
- 水泥管道采購協議
- 2025年意大利語CELIB2考試真題試卷及答案
- 長期合作印刷合同
- 商業合作伙伴戰略合作協議
- 2025春季班主任在線評估工作計劃
- 2025年兒童護理質量提升計劃
- 小學六年級安全疏散演習計劃
- 《物業管理師》三級測試題及參考答案
- 人教版六年級上冊數學百分數應用題專題分類復習(課件)
- 中職高教版(2023)語文職業模塊-第五單元:走近大國工匠(一)展示國家工程-了解工匠貢獻【課件】
- 【MOOC期末】《中國文化傳承與科技創新》(北京郵電大學)中國慕課期末網課答案
- 跨學科實踐活動5基于碳中和理念設計低碳行動方案九年級化學人教版(2024)上冊
- 計算與人工智能概論知到智慧樹章節測試課后答案2024年秋湖南大學
- 隧道工程安全文明施工組織設計方案
- 2024年關于培訓機構退費的協議書模板
- 廠房出租三方協議書范文模板
- 2025年新高考數學選填壓軸好題匯編(一)(解析版)
- 長距離小直徑隧洞TBM施工安全風險評價
評論
0/150
提交評論