Matlab中的向量運(yùn)算_第1頁
Matlab中的向量運(yùn)算_第2頁
Matlab中的向量運(yùn)算_第3頁
Matlab中的向量運(yùn)算_第4頁
Matlab中的向量運(yùn)算_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2.利用冒號(hào)表達(dá)式生成向量冒號(hào)表達(dá)式的基本形式為x=x0:step:xn,其中x0、step、xn分別為給定數(shù)值,x0表示向量的首元素?cái)?shù)值,xn表示向量尾元素?cái)?shù)值限,step表示從第二個(gè)元素開始,元素?cái)?shù)值大小與前一個(gè)元素值大小的差值。注意:這里強(qiáng)調(diào)xn為尾元素?cái)?shù)值限,而非尾元素值,當(dāng)xn-x0恰為step值的整數(shù)倍時(shí),xn才能成為尾值。若x0<xn,則需step>0;若x0>xn則需step<0;若x0=xn,則向量只有一個(gè)元素。若step=1,則可省略此項(xiàng)的輸入,直接寫成x=x0:xn。此時(shí)可以不用“”?!纠纭?gt;>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中提供了線性等分功能函數(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?!纠纭縜1=linspace(1,100,6)al=1.000020.800040.60

3、0060.400080.2000100.0000說明線性等分函數(shù)和冒號(hào)表達(dá)式都可生成等分向量。但前者是設(shè)定了向量的維數(shù)去生成等間隔向量,而后者是通過設(shè)定間隔來生成維數(shù)隨之確定的等間隔向量。4,對(duì)數(shù)等分向量的生成在自動(dòng)控制,數(shù)字信號(hào)處理中常常需要對(duì)數(shù)刻度坐標(biāo),MATLAB中還提供了對(duì)數(shù)等分功能函數(shù),具體格式如下:y=logspace(x1,x2)生成50維對(duì)數(shù)等分向量,使得y(1)=10x1,y(50)=10x2;y=logspace(x1,x2,n)生成n維對(duì)數(shù)等分向量,使得y(1)=10x1,y(n)=10x2;【例如】>>a2=logspace(0,5,6)a2=1101001

4、00010000100000另外,向量還可以從矩陣中提取,還可以把向量看成1xn階(行向量)或nX1階(列向量)的矩陣,以矩陣形式生成。由于在MATLAB中矩陣比向量重要得多,止匕類函數(shù)將在下節(jié)矩陣中詳細(xì)介紹,專門對(duì)向量運(yùn)算感興趣的讀者可參考下一節(jié)。2.2.2向量的基本運(yùn)算1.加(減)與數(shù)加(減)【例如】>>a1-1%這里的a1即上頁中生成的a1ans=019.800039.600059.400079.200099.00002.數(shù)乘【例如】>>a1*2ans=2.000041.600081.2000120.8000160.4000200.00002.2.3點(diǎn)積、叉積及混

5、合積的實(shí)現(xiàn)1點(diǎn)積計(jì)算在高等數(shù)學(xué)中,向量的點(diǎn)積是指兩個(gè)向量在其中某一個(gè)向量方向上的投影的乘積,通??梢杂脕硪甓x向量的模。在MATLAB中,向量的點(diǎn)積可由函數(shù)dot來實(shí)現(xiàn)。dot向量點(diǎn)積函數(shù)dot(a,b)返回向量a和b的數(shù)量點(diǎn)積。a和b必須同維。當(dāng)a和b都為列向量時(shí),dot(a,b)同于a.*bodot(a,b,dim)返回a和b在維數(shù)為dim的點(diǎn)積?!纠?.4】試計(jì)算向量a=(1,2,3)和向量b=(3,4,5)的點(diǎn)積。> >a=123;> >b=3,4,5;> >dot(a,b)ans=26還可以用另一種方法計(jì)算向量的點(diǎn)積。>>sum(a.

6、*b)ans=262,叉積在數(shù)學(xué)上,向量的叉積表示過兩相交向量的交點(diǎn)的垂直于兩向量所在平面的向量。在MATLAB中,向量的叉積由函數(shù)cross來實(shí)現(xiàn)。cross向量叉積函數(shù)c=cross(a,b)返回向量a和b的叉積向量。即C=axb。a和b必須為三維向量。c=cross(a,b)返回向量a和b的前3位的叉積。c=cross(a,b,dim)當(dāng)a和b為n維數(shù)組時(shí),則返回a和b的dim維向量的叉積。a和b必須有相同的維數(shù)。且size(a,dim)和size(a,dim)必須為3?!纠?.5】計(jì)算垂直于向量a=(1,2,3)和b=(3,4,5)的向量。a=123;b=3,4,5;c=cross(a

7、,b)c=-24-2得到同時(shí)垂直a、b的向量為土(-2,4,-2)向量的混合積由以上兩個(gè)函數(shù)實(shí)現(xiàn)?!纠?.6計(jì)算上面向量a、b、c的混合積。>>dot(a,cross(b,c)ans=24注意函數(shù)的順序不可顛倒,否則將出錯(cuò)。2.3矩陣及其運(yùn)算MATLAB原意為矩陣實(shí)驗(yàn)室,而且MATLAB的所有的數(shù)值功能都是以(復(fù))矩陣為基本單元進(jìn)行的,因此,MATLAB中矩陣的運(yùn)算功能可謂最全面、最強(qiáng)大。本節(jié)將對(duì)矩陣及其運(yùn)算進(jìn)行詳細(xì)的闡述。2.3.1 矩陣的生成1.直接輸入小矩陣從鍵盤上直接輸入矩陣是最方便、最常用和最好的創(chuàng)建數(shù)值矩陣的方法,尤其適合較小的簡單矩陣。在用此方法創(chuàng)建矩陣時(shí),應(yīng)當(dāng)注意以

8、下幾點(diǎn)。輸入矩陣時(shí)要以“”為其標(biāo)識(shí),即矩陣的元素應(yīng)在“”內(nèi)部,止匕時(shí)MATLAB才將其識(shí)別為矩陣。矩陣的同行元素之間可由空格或“,”分隔,行與行之間要用“;”或回車符分隔。矩陣大小可不預(yù)先定義。矩陣元素可為運(yùn)算表達(dá)式。若不想獲得中間結(jié)果,可以“結(jié)束。無任何元素的空矩陣亦合法?!纠?.7】創(chuàng)建一簡單數(shù)值矩陣。>>a=123;111;456a=123111456【例2.8創(chuàng)建一帶有運(yùn)算表達(dá)式的矩陣。>>b=sin(pi/3),cos(pi/4);log(9),tanh(6);此時(shí)矩陣已經(jīng)建立并存儲(chǔ)在內(nèi)存中,只是沒有顯示在屏幕上而已。若用戶想查看此矩陣,只需鍵入矩陣名。2.創(chuàng)

9、建M文件輸入大矩陣M文件是一種可以在MATLAB環(huán)境下運(yùn)行的文本文件。它可以分為命令式文件和函數(shù)式文件兩種。在此處主要用到的是命令式M文件,用它的最簡單形式來創(chuàng)建大型矩陣。更加詳細(xì)的內(nèi)容將在第5章中討論。當(dāng)矩陣的規(guī)模比較大,直接輸入法就顯得笨拙,出現(xiàn)差錯(cuò)也不易修改。為了解決此問題,可以利用M文件的特點(diǎn)將所要輸入的矩陣按格式先寫入一文本文件中,并將此文件以m為其擴(kuò)展名,即為M文件。在MATLAB命令窗中輸入此M文件名,則所要輸入的大型矩陣就被輸入到內(nèi)存中。【例如】編制一名為example.m的M文件,內(nèi)容如下。%example.m%創(chuàng)建一M文件輸入矩陣的示例文件exm=4564688732579

10、5521,687,544888136546568898021547568,45966545987548810963377在MATLAB命令窗中輸入:>>example;>>size(exm)ans=56說明在M文件中符號(hào)后面的內(nèi)容只起注釋作用,將不被執(zhí)行。例中的size函數(shù)為求矩陣的維數(shù)函數(shù),結(jié)果表明矩陣為5X6階的矩陣。在實(shí)際應(yīng)用中,用來輸入矩陣的M文件通常是用C語言或其他高級(jí)語言生成的已存在的數(shù)據(jù)文件。在通常的使用中,上例中的矩陣還不算是“大型”矩陣,此處只是借例說明而已。矩陣的輸入方式還有很多種,其他的方法將在后面的章節(jié)中逐步介紹。2.3.2矩陣的基本數(shù)學(xué)運(yùn)算矩陣

11、的基本數(shù)學(xué)運(yùn)算包括矩陣的四則運(yùn)算、與常數(shù)的運(yùn)算、逆運(yùn)算、行列式運(yùn)算、幕運(yùn)算、指數(shù)運(yùn)算、對(duì)數(shù)運(yùn)算和開方運(yùn)算等。下面將一一進(jìn)行討論。1.矩陣的四則運(yùn)算在前面介紹過,MATLAB是以(復(fù))矩陣為基本運(yùn)算單元的,因此,矩陣的四則運(yùn)算格式與2.1節(jié)中講的數(shù)字的運(yùn)算是相同的,不過對(duì)具體的運(yùn)算還有一些具體的要求。(1)矩陣的加和減矩陣的加減法使用“+”、“-”運(yùn)算符,格式與數(shù)字運(yùn)算完全相同,但要求加減的兩矩陣是同階的。【例如】> >a=123;234;345;> >b=111;222;333;> >c=a+bc=2 344 566 78(2)矩陣的乘法矩陣的乘法使用運(yùn)算符

12、“*”,要求相乘的雙方要有相鄰公共維,即若A為iXj階,則B必須為jXk階時(shí),A和B才可以相乘?!纠纭?gt;>e=b,555'e=1 1152 2253 335>>f=a*ef=141414302020204526262660(3)矩陣的除法矩陣的除法可以有兩種形式:左除“"和右除“/”,在傳統(tǒng)的MATLAB算法中,右除是要先計(jì)算矩陣的逆再做矩陣的乘法,而左除則不需要計(jì)算矩陣的逆而直接進(jìn)行除運(yùn)算。通常右除要快一點(diǎn),但左除可以避免被除矩陣的奇異性所帶來的麻煩。在MATLAB6.0中兩者的區(qū)別不太大。通常用矩陣的除法來求解方程組的解。對(duì)于方程組Ax=b,其中

13、A是一個(gè)(nxm)階的矩陣,則:當(dāng)n=m且非奇異時(shí),此方程稱為恰定方程;當(dāng)n>m時(shí),此方程稱為超定方程;當(dāng)n<m時(shí),此方程稱為欠定方程。這3種方程都可以用矩陣的除法求解?!纠?.9比較用左除和右除法分別求解恰定方程的解。為了比較這兩種方法的區(qū)別,先構(gòu)造一個(gè)系數(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)很

14、嚴(yán)重。首先用右除法計(jì)算此方程。> >tic;x1=b'/a;t1=toc計(jì)算時(shí)間為:t1=0.1100計(jì)算解與精確解之間的誤差為:> >er1=norm(x-x1')er1=139.8326解的相對(duì)殘差為:> >re1=norm(a*x1'-b)/norm(b)re1=4.3095e-009用左除法解方程:> >tic;x1=ab;t1=toc> 1=切換到長型形式格式:> >tic;x1=ab;t1=toct1=0.05000000000000與真實(shí)解之間的誤差為:> >er2=norm(x

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

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中用除法解方程時(shí)所得的解是所有解中范數(shù)最小的一個(gè)?!纠?.11】對(duì)例2.10中的矩陣用除法解一個(gè)欠定方程。>>a=aa=>>b=1;1;>>x=abx=1.22857142857143000-0.22857142857143用戶若有興趣可以驗(yàn)證此解的范數(shù)約為1.25,任何其他的方程解的范數(shù)都比此值大。> .矩陣與常數(shù)間運(yùn)算常數(shù)與矩陣的運(yùn)算即是同此矩陣的各元素之間進(jìn)行運(yùn)算,如數(shù)加是指每個(gè)元素都加上此常數(shù),數(shù)乘即是每個(gè)元素都與此數(shù)相

18、乘。需要注意的是,當(dāng)進(jìn)行數(shù)除時(shí),常數(shù)通常只能做除數(shù)。> .矩陣的逆運(yùn)算矩陣的逆運(yùn)算是矩陣運(yùn)算中很重要的一種運(yùn)算。它在線性代數(shù)及計(jì)算方法中都有很多的論述。而在MATLAB中,眾多的復(fù)雜理論只變成了一個(gè)簡單的命令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 .矩陣的行列式運(yùn)算矩陣的行列式的值可由det函數(shù)計(jì)算得出?!纠?.13】求上例中的A矩陣及其逆的行列式之積。> >a1=det(a);> >a2=det(inv(a);> >a1*a2ans=15 .矩陣的幕運(yùn)

20、算矩陣的幕運(yùn)算的形式同數(shù)字的幕運(yùn)算的形式相同,即用算符“人”來表示。矩陣的幕運(yùn)算在計(jì)算過程中與矩陣的某種分解有關(guān),計(jì)算所得值并非是矩陣每個(gè)元素的幕值。這一點(diǎn)是值得讀者注意的!6 .矩陣的指數(shù)運(yùn)算矩陣的指數(shù)運(yùn)算的最常用的命令為expm,其他的命令還有expm1、expm2和expm3o其中expm1是由Pade近似計(jì)算矩陣指數(shù),expm2是由Taylor級(jí)數(shù)計(jì)算矩陣指數(shù),expm3是由特征值法計(jì)算矩陣指數(shù)。而expm函數(shù)使用的方法與expm1相同?!纠?.14】計(jì)算矩陣的指數(shù),并比較不同函數(shù)的結(jié)果。> >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的計(jì)算結(jié)果同于expm10幾個(gè)函數(shù)的計(jì)算結(jié)果是有差別的,但差別很小。7.矩陣的對(duì)數(shù)運(yùn)算矩陣的對(duì)數(shù)運(yùn)算由函數(shù)10gm實(shí)現(xiàn)。【例2.15】對(duì)例2.14中的矩陣求其對(duì)數(shù)。>>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.矩陣的開方運(yùn)算矩陣的開方運(yùn)算函數(shù)為sqrtm。2.3.3矩陣的基本函數(shù)運(yùn)算矩陣的函數(shù)運(yùn)算是矩陣運(yùn)算中最實(shí)用的部分,它主要包括特征值的計(jì)算、奇異值的計(jì)算條件數(shù)、各類范數(shù)、矩陣的秩與跡的計(jì)算和矩陣

25、的空間運(yùn)算等。1.特征信函數(shù)矩陣的特征值可以由兩個(gè)函數(shù)eig和eigs計(jì)算得出。其中函數(shù)eig可以給出特征值和特征向量的值,而函數(shù)eigs則是使用迭代法求解特征值和特征向量的函數(shù),具體調(diào)用形式請(qǐng)查看helpeigso這里只用到它的求解特征值的部分?!纠?.16】計(jì)算如下矩陣的特征值和特征向量。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 .奇異值函數(shù)同樣,矩陣的奇異值函數(shù)也有兩種形式svd和svds,它們所使用的方法相同,只是計(jì)算值略有差別。3 .條件數(shù)函數(shù)條件數(shù)的值是判斷矩陣“病態(tài)”程度的量度,因

27、此,它在理論分析中有著重要的應(yīng)用。在MATLAB中可由如下3個(gè)函數(shù)實(shí)現(xiàn)條件數(shù)的計(jì)算。cond計(jì)算矩陣的條件數(shù)的值ocondest計(jì)算矩陣的1范數(shù)條件數(shù)的估計(jì)值。rcond計(jì)算矩陣的條件數(shù)的倒數(shù)值?!纠?.17】計(jì)算9階Hilbert矩陣的各條件數(shù)的值。> >h=hilb(9);> >cond(h)ans=4.931532141187868e+011> >rcond(h)ans=1.237264927935885e-012> >condest(h)ans=1.099650993366049e+012可見雖然各條件數(shù)的計(jì)算數(shù)值并不相同,但結(jié)論是一致的

28、,即此矩陣是嚴(yán)重病態(tài)的。> .特征值的條件數(shù)在求解矩陣的特征值時(shí)也會(huì)遇到“病態(tài)”問題,此時(shí)就需要引入特征值的條件數(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(A)。其中V是特征向量組成的矩陣,其列向量是特征向量,D的對(duì)角元素是對(duì)應(yīng)的特征值,s是對(duì)應(yīng)的特征值條件數(shù)?!纠?.18】計(jì)算下面矩陣的特征值條件數(shù)。>>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.范數(shù)函數(shù)矩陣(向量)的范數(shù)是矩陣(向量)的一種量度,它可分為1范數(shù)、2范數(shù)、無窮范數(shù)和F范數(shù)等。其中最常用的是2范數(shù),也即平方和范數(shù)。范數(shù)的計(jì)算可由函數(shù)norm和normest實(shí)現(xiàn),其中norm的調(diào)用格式為cond(X,P),P的取值可以是1、2、inf或fro;而normest只能計(jì)算矩陣2范數(shù)的估計(jì)

30、值。6 .秩函數(shù)矩陣的秩的求解可由函數(shù)rank實(shí)現(xiàn)?!纠纭縠=1 1152 2253335>>rank(e)ans=27 .跡函數(shù)矩陣所有對(duì)角線上元素的和稱為矩陣的跡,在MATLAB中可由trace函數(shù)計(jì)算得出?!纠?.19】求前面例中由M文件建立的矩陣的跡。>>exampleexm=45646887325795521687544888136546568898215>>trace(exm)ans=19188 .零空間函數(shù)求一矩陣的零空間矩陣的函數(shù)為null,看下面的例子。A=123123123>>null(A)ans=-0.1690-0.948

31、70.84520.0000-0.50710.3162>>null(A,'r')ans=-2-31 0019 .正交空間函數(shù)函數(shù)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 .偽逆函數(shù)矩陣

32、的偽逆函數(shù)在求解系數(shù)矩陣為嚴(yán)重“病態(tài)”的問題時(shí)可避免“偽解”的產(chǎn)生矩陣的偽逆由函數(shù)pinv實(shí)現(xiàn)【例如】>>a=magic(4)%生成4階的魔方陣a=16131110121514>>inv(a)%常規(guī)方法求逆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 .通用函數(shù)形式以上所介紹的針對(duì)矩陣的函數(shù)形式在實(shí)際運(yùn)算中是遠(yuǎn)遠(yuǎn)不夠的,對(duì)常用的其他運(yùn)算,如三角函數(shù)運(yùn)算和雙曲函數(shù)運(yùn)

35、算等,需要一種能夠使用這些通用函數(shù)的形式。在MATLAB中使用通用函數(shù)的格式為funm(A,'funname'),其中A為輸入矩陣變量,funname為調(diào)用的函數(shù)名。如funm(b,'log'),其作用同于10gm(b),而funm(b,'sqrt')同于sqrtm(b)。因此,需要對(duì)常用的函數(shù)有個(gè)全面的了解,見表2.6和表2.7表2.6基本函數(shù)表函數(shù)名功能函數(shù)名功能Mil正弦acoth反雙曲余切函數(shù)sinh雙曲正弦exp指數(shù)函數(shù)asin反正弦log自然對(duì)數(shù)函數(shù)usinh反雙曲正弦loglO常用以10為底)對(duì)數(shù)函數(shù)COS余弦log2以2為底對(duì)數(shù)函

36、數(shù)cosh雙曲余弦pow2以2為底的輔函數(shù)ucos反余弦sqrt平方根函數(shù)iiCOsh反雙曲余弦nexipow2求不小于變量的最小2指數(shù)Itin正切函數(shù)abs模函數(shù)函數(shù)名功能謂數(shù)名功能Icillh雙曲正切函數(shù)angle相用函數(shù)反正切函數(shù)CCJlj復(fù)共輒函數(shù)ataA2四像取反正切函數(shù)imag豆矩陣虛部uiunh反雙曲正切函數(shù)real復(fù)矩陣實(shí)部sec正割函數(shù)unwnip打開相知函數(shù)secJi雙曲正割函數(shù)isrcal實(shí)酹判斷函數(shù)反正割函數(shù)cplxpair調(diào)整數(shù)為共輯時(shí)usech反雙曲正割函數(shù)fix朝等方向舍入CSC余割函數(shù)floor朝負(fù)方向舍入csch雙曲余割函數(shù)ceil朝正方向舍入acsc反余割函

37、數(shù)round四舍五入函數(shù)iifsch反雙曲余割函數(shù)mW(帶符號(hào))求余函數(shù)cm余切函數(shù)rem無符號(hào)求余函數(shù)culh雙曲余切函數(shù)sign符號(hào)函數(shù)ucol反余切函數(shù)表2.7特殊函數(shù)表函數(shù)名功能函數(shù)名功能airyAiry函數(shù)clJipke完全橢圓積分btsselj第一類貝賽爾函數(shù)erf誤差函數(shù)tk?ssely第二類貝賽爾函數(shù)erfc補(bǔ)充的誤差函數(shù)bessclh第三類貝賽爾函數(shù)erfex比例補(bǔ)充誤差函數(shù)besseli改進(jìn)的第一類貝賽爾函數(shù)ertinv反誤差函數(shù)besselk改進(jìn)的第二類貝賽爾函數(shù)expim幕枳分函數(shù)betaBela函數(shù)Gamma函數(shù)bekiinc不完全的Beta函數(shù)gammainc不完全

38、Gainiiia函數(shù)heUlnBela函數(shù)的對(duì)數(shù)gammahiGamma函數(shù)的對(duì)數(shù)ellipjJiicobi版圓函數(shù)legendre聯(lián)合勒讓鐫函數(shù)cro>s向吊:叉積2.3,4矩陣分解函數(shù)1.特征值分解矩陣的特征值分解也調(diào)用函數(shù)eig,為了分解,還要在調(diào)用時(shí)作一些形式上的變化,如:V,D=eig(X)此函數(shù)彳#到矩陣X的特征值對(duì)角矩陣D和其列為對(duì)應(yīng)特征值的特征向量矩陣V,于是矩陣的特征值分解為XXV=VXDoV,D=eig(X,'nobalance')此形式為關(guān)閉平衡算法的求解方法。平衡算法對(duì)于某些問題可以得到更高的準(zhǔn)確度。V,D=eig(A,B)對(duì)夕!陣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,復(fù)數(shù)特征值對(duì)角陣與實(shí)數(shù)塊特征值對(duì)角陣的轉(zhuǎn)化即使是對(duì)于實(shí)陣,其特征值也可能出現(xiàn)復(fù)數(shù)。而在實(shí)際使用中,常需要把這些共腕復(fù)數(shù)特征值轉(zhuǎn)化為實(shí)數(shù)塊。為此,MATLAB提供了兩個(gè)進(jìn)行此項(xiàng)轉(zhuǎn)化的函數(shù)cdf2rdf和rsf2cs£V,D=cdf2rdf(V,D)將復(fù)數(shù)對(duì)角型轉(zhuǎn)化成實(shí)數(shù)塊對(duì)角型。U,T=rsf2csf(U,T)將實(shí)數(shù)塊轉(zhuǎn)化成復(fù)數(shù)對(duì)角型。【例2.21復(fù)實(shí)特征值對(duì)角陣的轉(zhuǎn)化演示。> >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基本數(shù)組運(yùn)算為了對(duì)比矩陣運(yùn)算和數(shù)組運(yùn)算的不同,本節(jié)完全按照上一節(jié)的順序,讀者可以對(duì)照來看,這樣更能領(lǐng)會(huì)到矩陣運(yùn)算和數(shù)組運(yùn)算的異同。1.數(shù)組的四則運(yùn)算在舊版本的數(shù)組四則運(yùn)算中,加減運(yùn)算與矩陣運(yùn)算中的幾乎完全相同,同樣要求運(yùn)算雙方維數(shù)相同,

42、所得結(jié)果為對(duì)應(yīng)元素的加減,只不過是數(shù)組運(yùn)算中的運(yùn)算符多了一個(gè)小圓點(diǎn),即“.+”和“.-",但在MATLAB的新版本中,這兩個(gè)命令不再存在,從而使矩陣的加減法和數(shù)組的加減法完全統(tǒng)一。而在乘除法中由于數(shù)組的對(duì)應(yīng)元素間的運(yùn)算的特點(diǎn),使數(shù)組運(yùn)算中的乘除法與矩陣的乘除法有相當(dāng)大的區(qū)別。數(shù)組的乘除法是指兩同維數(shù)組間對(duì)應(yīng)元素之間的乘除法,它們的運(yùn)算符為".*”和“./”或“”【例如】> >a1=123;234;345;> >b1=111;222;333;> >a1.b1ans=1.00000.50000.33331.00000.66670.50001.

43、00000.75000.60002,數(shù)組與常數(shù)間運(yùn)算數(shù)組與常數(shù)之間的數(shù)加和數(shù)減運(yùn)算還存在,在算符上可以加“.”,也可以不加但要注意加“.”時(shí)要把常數(shù)寫在前面?!纠纭?gt; >3.+b1ans=4 445 556 66數(shù)組與常數(shù)之間的數(shù)乘運(yùn)算即為數(shù)組元素分別與此常數(shù)進(jìn)行相乘,此時(shí)加不加都一樣,看下面的例子:>>3.*a1ans=369691291215在矩陣的運(yùn)算中,與常數(shù)之間的除法是有限制的,常數(shù)只能做除數(shù)。在數(shù)組運(yùn)算中,由于有了“對(duì)應(yīng)關(guān)系”的規(guī)定,因此與常數(shù)之間進(jìn)行除法運(yùn)算時(shí)形式上沒有任何限制。【例如】>>b1.9ans=9.00009.00009.0000

44、4.50004.50004.50003.00003.00003.00003.數(shù)組的幕運(yùn)算數(shù)組的幕運(yùn)算算符為“八”,它表示每個(gè)數(shù)組元素的幕運(yùn)算,這是同矩陣的幕運(yùn)算不同的,看下面的例子?!纠?.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可見矩陣的幕運(yùn)算和數(shù)組的幕運(yùn)算所得的結(jié)果有很大的差別!同矩陣運(yùn)算相比,數(shù)組運(yùn)算中這些運(yùn)算符都有所簡化,它們分別是exp、10g和sqr

45、t用戶會(huì)發(fā)現(xiàn)這時(shí)的運(yùn)算符和數(shù)字運(yùn)算時(shí)的運(yùn)算符作用完全相同。有了“對(duì)應(yīng)元素”的規(guī)定,數(shù)組的運(yùn)算實(shí)質(zhì)上就是針對(duì)于數(shù)組內(nèi)部的每個(gè)元素進(jìn)行的。2.4.2 數(shù)組函數(shù)運(yùn)算對(duì)于數(shù)組運(yùn)算的通用函數(shù)運(yùn)算,只要把所有運(yùn)算的數(shù)組當(dāng)數(shù)字一樣帶入函數(shù)中,不需要做什么變形。其通用形式為funname(A),其中funname為常用函數(shù)名,參見函數(shù)名表2.5和表2.6。2.4.3 數(shù)組邏輯運(yùn)算邏輯運(yùn)算是數(shù)組運(yùn)算所特有的一種運(yùn)算形式,它包括基本邏輯關(guān)系運(yùn)算和邏輯函數(shù)運(yùn)算1.基本邏輯關(guān)系運(yùn)算所謂的基本邏輯關(guān)系運(yùn)算指的是幾乎所有的高級(jí)語言所普遍適用的邏輯運(yùn)算。如大小的比較、邏輯與或非等邏輯關(guān)系。在MATLAB中,它們的實(shí)現(xiàn)見表2

46、.9。表2.9基本邏輯運(yùn)算表符號(hào)運(yùn)算符功m函數(shù)名=等于四二不等于ne<小于11>大于gt<=小于等于le>=大于等于ge&邏輯與and1邏輯或or邏輯非not說明在關(guān)系比較中,若比較的雙方為同維的數(shù)組,則比較的結(jié)果也是同維的數(shù)組。它的元素值由0和1組成。當(dāng)比較雙方對(duì)應(yīng)位置上的元素值滿足比較關(guān)系時(shí),它的對(duì)應(yīng)值為1,否則為00當(dāng)比較雙方中一方為常數(shù),另一方為一數(shù)組,則結(jié)果與數(shù)組同維,且其值為已知數(shù)組與常數(shù)依次比較的結(jié)果。邏輯與、或、非運(yùn)算的意義如下:與當(dāng)運(yùn)算雙方的對(duì)應(yīng)元素值都為非0時(shí),結(jié)果為1,否則為0;或當(dāng)運(yùn)算雙方的對(duì)應(yīng)元素值有一非0時(shí),結(jié)果為1,否則為0;非當(dāng)運(yùn)

47、算數(shù)組上的對(duì)應(yīng)位置上的值為0時(shí),結(jié)果為1,否則為00在算術(shù)運(yùn)算、比較運(yùn)算和邏輯與或非運(yùn)算中,它們的優(yōu)先級(jí)關(guān)系先后為:比較運(yùn)算、算術(shù)運(yùn)算、邏輯與或非運(yùn)算。【例2.32】數(shù)組邏輯運(yùn)算演示。>>a=1:3;4:6;7:9;>>x=5;>>y=ones(3)*5;xa=011111>>b=010;101;001;>>ab=a&bab=0101 010012 .邏輯關(guān)系函數(shù)運(yùn)算邏輯關(guān)系的函數(shù)運(yùn)算中,大部分函數(shù)是MATLAB所特有的,它們給用戶帶來了很大的方便。因此掌握并運(yùn)用它們是必要的。主要的邏輯關(guān)系函數(shù)見下表2.10。表2.10邏輯關(guān)

48、系函數(shù)表函數(shù)名使用說明函數(shù)名使用說明any法向展的任意元素不為口則返回真islogical判斷邏輯數(shù)組II若向是的所有元素不為0則返回真logical轉(zhuǎn)換數(shù)值為遺輯型xor邏輯或1Ffind尋找非0元素坐標(biāo)isemply判斷空矩陣判斷不定數(shù)isequa判斷相等數(shù)組isinf判斷無限大元素Lsnumeric判斷數(shù)值矩陣finite判斷有限大元素這里所提供的邏輯關(guān)系運(yùn)算函數(shù)并非全部。特殊專業(yè)的用戶可以很方便地查找到相應(yīng)的特殊函數(shù),而對(duì)大多數(shù)的用戶來說是用不到的,這里不再冗述?!纠?.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函數(shù)的用法。>>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多項(xiàng)

50、式運(yùn)算2.5.1 多項(xiàng)式的表示方法多項(xiàng)式的表達(dá)約定:對(duì)于多項(xiàng)式''01“I”用以下的行向量表?。篜=20通1".,鐮_|,,力這樣就把多項(xiàng)式的問題轉(zhuǎn)化為向量問題。1 .系數(shù)向量的直接輸入法由于在MATLAB中的多項(xiàng)式是以向量形式儲(chǔ)存的,因此,最簡單的多項(xiàng)式輸入即為直接的向量輸入,MATLAB自動(dòng)將向量元素按降幕順序分配給各系數(shù)值。向量可以為行向量,也可以是列向量?!纠?.35】輸入多項(xiàng)式工一5廠+6x33>>p=1-56-33;>>poly2sym(p)ans=xA3-5*xA2+6*x-33說明:其中的poly2sym是符號(hào)工具箱中的函數(shù),可

51、將多項(xiàng)式向量表示成為符號(hào)形2 .特征多項(xiàng)式輸入法多項(xiàng)式創(chuàng)建的另一個(gè)途徑是從矩陣求其特征多項(xiàng)式獲得,由函數(shù)poly實(shí)現(xiàn)?!纠?.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說明由特征多項(xiàng)式生成的多項(xiàng)式的首項(xiàng)系數(shù)一定是1。n階矩陣一般產(chǎn)生n次多項(xiàng)式。3 .由根創(chuàng)建多項(xiàng)式由給定的根也可產(chǎn)生其對(duì)應(yīng)的多項(xiàng)式,此功能還由函數(shù)poly

52、實(shí)現(xiàn)?!纠?.37】由給定的根向量生成其對(duì)應(yīng)多項(xiàng)式。> >root=-5-3+4i-3-4i;> >p=poly(root)p=11155125> >poly2sym(p)ans=xA3+11*xA2+55*x+125說明若要生成實(shí)系數(shù)多項(xiàng)式,則根中的復(fù)數(shù)必定對(duì)應(yīng)共腕。有時(shí)生成的多項(xiàng)式向量包含很小的虛部,可用real命令將其濾掉。2 .5.2多項(xiàng)式運(yùn)算3 .求多項(xiàng)式的值求多項(xiàng)式的值可以有兩種形式,對(duì)應(yīng)著兩種算法:一種在輸入變量值代入多項(xiàng)式計(jì)算時(shí)是以數(shù)組為單元的,此時(shí)的計(jì)算函數(shù)為polyval;另一種是以矩陣為計(jì)算單元,進(jìn)行矩陣式運(yùn)算,以求得多項(xiàng)式的值,此時(shí)的

53、函數(shù)為polyvalm。這兩種計(jì)算在數(shù)值上有很大的差別,這主要源于矩陣計(jì)算和數(shù)組運(yùn)算的差別?!纠?.38】對(duì)同一多項(xiàng)式及變量值分別計(jì)算矩陣計(jì)算值和數(shù)組計(jì)算值。> >p=11155125;> >b=11;11;> >polyval(p,b)ans=192192192192> >polyvalm(p,b)ans=2068181206注意當(dāng)進(jìn)行矩陣運(yùn)算時(shí),變量矩陣需為方陣。2 .求多項(xiàng)式的根求多項(xiàng)式的根可以有兩種方法,一種是直接調(diào)用MATLAB的函數(shù)roots,求解多項(xiàng)式的所有根;另一種是通過建立多項(xiàng)式的伴隨矩陣再求其特征值的方法得到多項(xiàng)式的所有根?!?/p>

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、項(xiàng)式的乘除法運(yùn)算多項(xiàng)式的乘法由函數(shù)conv來實(shí)現(xiàn),此函數(shù)同于向量的卷積;多項(xiàng)式的除法由函數(shù)deconv來實(shí)現(xiàn),向量的解卷函數(shù)相同。【例2.40】計(jì)算兩多項(xiàng)式的乘除法。> >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 .多項(xiàng)式微分多項(xiàng)式的微分函數(shù)polyder可以用來進(jìn)行多項(xiàng)式的微分計(jì)算?!纠?.41】對(duì)上例中的多項(xiàng)式p進(jìn)行微分計(jì)算。> >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 .多項(xiàng)式擬合多項(xiàng)式擬合是多項(xiàng)式運(yùn)算的一個(gè)重要組成部分,在工程及科研工作中都得到了廣泛的應(yīng)用。其實(shí)現(xiàn)一方面可以由矩陣的除法求解超定方程來進(jìn)行;另一方面在MATLAB中還提供了專用的擬合函數(shù)polyfito其調(diào)用格式如下:polyfit(X,丫,n)其中X、Y為擬合數(shù)據(jù),n為擬合多項(xiàng)式的階數(shù)。p,s=polyfit(X,Y,n)其中p為擬合多項(xiàng)式系數(shù)向量,s為擬

溫馨提示

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

評(píng)論

0/150

提交評(píng)論