matlab舉例復(fù)習(xí)課程_第1頁(yè)
matlab舉例復(fù)習(xí)課程_第2頁(yè)
matlab舉例復(fù)習(xí)課程_第3頁(yè)
matlab舉例復(fù)習(xí)課程_第4頁(yè)
matlab舉例復(fù)習(xí)課程_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Good is good, but better carries it.精益求精,善益求善。matlab舉例-Matlab特色舉例(2009-03-1116:05:31)標(biāo)簽:HYPERLINK/c.php?t=blog&k=%D4%D3%CC%B8&ts=bpost&stype=tagt_blank雜談分類(lèi):HYPERLINK/s/articlelist_1392698302_2_1.html科學(xué)研究考慮兩個(gè)矩陣A和B的乘積問(wèn)題,在C語(yǔ)言中要實(shí)現(xiàn)兩個(gè)矩陣的乘積并不僅僅是一組雙重循環(huán)的問(wèn)題。雙重循環(huán)當(dāng)然是矩陣乘積所必需的,除此之外要考慮的問(wèn)題很多。例如:A和B有一個(gè)是復(fù)數(shù)矩陣怎么考慮;其中一個(gè)

2、是復(fù)數(shù)矩陣時(shí)怎么考慮;全部是實(shí)系數(shù)矩陣時(shí)又怎么管理;這樣就要在一個(gè)程序中有4個(gè)分支,分別考慮這4種情況。然后還得判斷這兩個(gè)矩陣是否可乘。而考慮兩個(gè)矩陣是否可乘也并不僅僅是判斷A的列數(shù)是否等于B的行數(shù)這么簡(jiǎn)單。其中一個(gè)若為標(biāo)量,則它們可以無(wú)條件地相乘。其中有標(biāo)量時(shí)又得考慮實(shí)數(shù)與復(fù)數(shù)的問(wèn)題等。所以說(shuō),沒(méi)有幾十分鐘的時(shí)間,用C語(yǔ)言并不可能編寫(xiě)出考慮各種情況的子程序。有了MATLAB這樣的工具,A和B矩陣的乘積用A*B這樣簡(jiǎn)單的算式就能表示了。例1-1矩陣生成與運(yùn)算??紤]金庸作品中經(jīng)常提及的一個(gè)“數(shù)學(xué)問(wèn)題”,該問(wèn)題用半數(shù)學(xué)語(yǔ)言描述就是:如何生成一個(gè)3x3矩陣,并將自然數(shù)1,2,.,9分別置成這9個(gè)矩陣

3、元素,才能使得每一行、每一列、且主、反對(duì)角線上元素相加都等于一個(gè)相同的數(shù)。這樣的矩陣稱(chēng)為“魔方矩陣”。用MATLAB的magic()函數(shù),我們可以由下面的命令立即生成這樣的矩陣:A=magic(3)A=816357492還可以由B=magic(10)一次生成10 x10的魔方矩陣。如果想求出矩陣的行列式和特征值,可以分別由det(B)與eig(B)立即得出結(jié)果,而同樣的工作在C下并不是很簡(jiǎn)單就可以得出的,算法選擇不好,還可能得出錯(cuò)誤的結(jié)果。例1-2考慮一個(gè)二元函數(shù)如何用三維圖形的方式表現(xiàn)出這個(gè)曲面?用C這類(lèi)語(yǔ)言,繪制圖形是一個(gè)難點(diǎn),且從一個(gè)機(jī)器移植程序到另一個(gè)機(jī)器,大部分調(diào)試程序時(shí)間都花在這上

4、。但使用MATLAB這類(lèi)高級(jí)語(yǔ)言,完成這樣的工作就是幾個(gè)直觀語(yǔ)句的事。且得出的圖形美觀準(zhǔn)確、可以將語(yǔ)句毫不變化地移植到另外的機(jī)器上,得出完全一致的結(jié)果,如下所示。x,y=meshgrid(-3:1/8:3);z=3*(1-x).2.*exp(-(x.2)-(y+1).2)-10*(x/5-x.3-y.5).*exp(-x.2-y.2)-1/3*exp(-(x+1).2-y.2);surf(x,y,z),shadinginterp;colorbar例1-3微分方程的數(shù)值解法是在科學(xué)與工程計(jì)算中經(jīng)常遇到的問(wèn)題。假設(shè)著名的Lorenz模型的狀態(tài)方程表示為:若令且初值為,為一個(gè)小常數(shù),假設(shè)則我們可以由

5、下面的幾個(gè)語(yǔ)句就可以描述微分方程:functionxdot=lorenzeq(t,x)xdot=-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);-x(1)*x(2)+28*x(2)-x(3);這樣下面幾個(gè)語(yǔ)句就能求解該微分方程,繪制出時(shí)間曲線與相空間曲線,如下所示。t_final=100;x0=0;0;1e-10;t,x=ode45(lorenzeq,0,t_final,x0);plot(t,x),figure;plot3(x(:,1),x(:,2),x(:,3);axis(1040-2020-2020);例1-5(注,這里的編號(hào)采用作者書(shū)中的序號(hào))設(shè)有解析函數(shù),利用

6、MATLAB的符號(hào)運(yùn)算工具箱可以對(duì)該函數(shù)進(jìn)行解析推導(dǎo),得出諸如高階導(dǎo)數(shù)、積分、Taylor冪級(jí)數(shù)展開(kāi)等。symsx;f=x2*(sin(x)2;diff(f);f1=simple(ans)f1=x-x*cos(2*x)+x2*sin(2*x)diff(f,x,2);f2=simple(ans)f2=1-cos(2*x)+4*x*sin(2*x)+2*x2*cos(2*x)diff(f,x,3);f3=simple(ans)f3=6*sin(2*x)+12*x*cos(2*x)-4*x2*sin(2*x)diff(f,x,4);f4=simple(ans)f4=24*cos(2*x)-32*x*

7、sin(2*x)-8*x2*cos(2*x)int(f4,x)ans=6*sin(2*x)+12*x*cos(2*x)-4*x2*sin(2*x)taylor(x2*(sin(x)2,15,x)ans=x4-1/3*x6+2/45*x8-1/315*x10+2/14175*x12-2/467775*x14Matlab支持的數(shù)據(jù)結(jié)構(gòu)MATLAB語(yǔ)言的賦值語(yǔ)句有兩種:變量名=運(yùn)算表達(dá)式返回變量列表=函數(shù)名(輸入變量列表)MATLAB支持變量和常量,其中pi為圓周率,更重要的,MATLAB支持IEEE標(biāo)準(zhǔn)的運(yùn)算符號(hào),如Inf表示無(wú)窮大,NaN(NotaNumber)為0/0,0*Inf或Inf/In

8、f等運(yùn)算結(jié)果。MATLAB變量名應(yīng)該由字母引導(dǎo),后面可以跟數(shù)字、字母或下劃線等符號(hào)。MATLAB是區(qū)分變量名字母大小寫(xiě)的。(1)矩陣MATLAB最基本的數(shù)據(jù)結(jié)構(gòu)是復(fù)數(shù)矩陣。輸入一個(gè)復(fù)數(shù)矩陣是很簡(jiǎn)單的事。例如可以給出下面的語(yǔ)句:B=1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1i其中為MATLAB的提示符。矩陣各行元素由分號(hào)分隔,而同行不同元素由逗號(hào)或空格分隔。給出了上面的命令,則可以給出下面的結(jié)果。B=1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i4.0000+6.0000i5.0000+5.0000i6.0000+4.00

9、00i7.0000+3.0000i8.0000+2.0000i0+1.0000i其中,元素1+9i表示復(fù)數(shù)項(xiàng)。有這樣的表述方法,實(shí)矩陣、向量或標(biāo)量均可以更容易地輸入了。如果賦值表達(dá)式末尾有分號(hào),則其結(jié)構(gòu)將不顯示,否則將顯示出全部結(jié)果。MATLAB和其他語(yǔ)言不同,它無(wú)需事先聲明矩陣的維數(shù)。下面的語(yǔ)句可以建立一個(gè)更大的矩陣B(2,5)=1B=1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i004.0000+6.0000i5.0000+5.0000i6.0000+4.0000i01.00007.0000+3.0000i8.0000+2.0000i0+1.0000i

10、00冒號(hào)表達(dá)式是MATLAB里最具特色的表示方法。其調(diào)用格式為a=s1:s2:s3;這一語(yǔ)句可以生成一個(gè)行向量,其中s1為向量的起始值,s2為步距,而s3為向量的終止值。例如S=0:.1:2*pi;將產(chǎn)生一個(gè)起始于0,步距為0.1,而終止于6.2的向量(pi為MATLAB保留常量),而不是終止于2。如果寫(xiě)成S=0:-0.1:2*pi;則不出現(xiàn)錯(cuò)誤,而返回一個(gè)空向量。冒號(hào)表達(dá)式可以用來(lái)提取矩陣元素,例如B(:,1)將提取B矩陣的第1列而B(niǎo)(1:2,1:2:3)將提取B的前2行與1,3,5列組成的子矩陣。在矩陣提取時(shí)還可以采用end這樣的算符。如B(2:end,:)將提取B矩陣的后2列構(gòu)成的子矩陣

11、。(2)多維數(shù)組多維數(shù)組是MATLAB在其5.0版本開(kāi)始提供的。假設(shè)有2個(gè)3x3矩陣A1,A23,則可以由下面的命令建立起一個(gè)3x3x2的數(shù)組:A=cat(3,A1,A2)。試驗(yàn)A1=cat(2,A1,A2)和A2=cat(1,A1A2)將得到什么結(jié)果。對(duì)矩陣或多維數(shù)組A可以使用size(A)來(lái)測(cè)其大小,也可以使用reshape()函數(shù)重新按列排列。對(duì)向量來(lái)說(shuō),還可以用length(A)來(lái)測(cè)其長(zhǎng)度。不論原數(shù)組A是多少維的,A(:)將返回列向量。(3)字符串與字符串矩陣MATLAB的字符串是由單引號(hào)括起來(lái)的。如可以使用下面的命令賦值strA=Thisisastring.多個(gè)字符串可以用str2m

12、at()函數(shù)構(gòu)造出字符串矩陣。如B=str2mat(strA,ksasaj,aa);字符串變量可以由下表中的命令進(jìn)行操作:命令意義命令意義strcmp(A,B)比較A和B字符串是否相同。findstr(A,B)測(cè)試A是否為B的子字符串,或反過(guò)來(lái)strrep(A,s1,s2)在A中用s2替換s1length(A)字符串A的長(zhǎng)度deblank(A)刪除A字符串尾部的空格double(A)字符串轉(zhuǎn)換雙精度數(shù)據(jù)(4)單元數(shù)據(jù)結(jié)構(gòu)用類(lèi)似矩陣的記號(hào)將給復(fù)雜的數(shù)據(jù)結(jié)構(gòu)納入一個(gè)變量之下。和矩陣中的圓括號(hào)表示下標(biāo)類(lèi)似,單元數(shù)組由大括號(hào)表示下標(biāo)。B=1,AlanShearer,180,100,80,75;77,6

13、0,92;67,28,90;100,89,78B=1AlanShearer1804x3double訪問(wèn)單元數(shù)組應(yīng)該由大括號(hào)進(jìn)行,如第4單元中的元素可以由下面的語(yǔ)句得出B4ans=10080757760926728901008978(5)結(jié)構(gòu)體MATLAB的結(jié)構(gòu)體有點(diǎn)象C語(yǔ)言的結(jié)構(gòu)體數(shù)據(jù)結(jié)構(gòu)。每個(gè)成員變量用點(diǎn)號(hào)表示,如A.p表示A變量的p成員變量。獲得該成員比C更直觀,仍用A.p訪問(wèn),而不用A-p。用下面的語(yǔ)句可以建立一個(gè)小型的數(shù)據(jù)庫(kù)。student_rec.number=1;student_=AlanShearer;student_rec.height=180;student_rec.test

14、=100,80,75;77,60,92;67,28,90;100,89,78;student_recstudent_rec=number:1name:AlanShearerheight:180test:4x3double其中test成員為單元型數(shù)據(jù)。刪除成員變量可以由rmfield()函數(shù)進(jìn)行,添加成員變量可以直接由賦值語(yǔ)句即可。另外數(shù)據(jù)讀取還可以由setfield和getfield函數(shù)完成。(6)類(lèi)與對(duì)象類(lèi)與對(duì)象是MATLAB5.*開(kāi)始引入的數(shù)據(jù)結(jié)構(gòu)。在MATLAB手冊(cè)中定義了一各很好的類(lèi)-多項(xiàng)式類(lèi)。該例子值得細(xì)讀,去體會(huì)類(lèi)和對(duì)象的定義,重載函數(shù)編寫(xiě)等信息。事實(shí)上,在實(shí)際工具箱設(shè)計(jì)中,用到了

15、很多的類(lèi),例如在控制系統(tǒng)工具箱中定義了LTI(線性時(shí)不變系統(tǒng))類(lèi),并在此基礎(chǔ)上定義了其子類(lèi):傳遞函數(shù)類(lèi)TF,狀態(tài)方程類(lèi)SS,零極點(diǎn)類(lèi)ZPK和頻率響應(yīng)類(lèi)FR。舉例:我們將通過(guò)一個(gè)例子來(lái)介紹類(lèi)的構(gòu)造。在MATLAB語(yǔ)言使用手冊(cè)中給出了一個(gè)很有代表性的例子:多項(xiàng)式類(lèi)的建立問(wèn)題。假設(shè)我們想為多項(xiàng)式建立一個(gè)單獨(dú)的類(lèi),重新定義加、減、乘及乘方等運(yùn)算,并定義其顯示方式。那么建立一個(gè)類(lèi)至少應(yīng)該執(zhí)行下面的步驟:(這個(gè)例子更詳細(xì)的情況請(qǐng)參考MATLAB手冊(cè))首先應(yīng)該選定一個(gè)恰當(dāng)?shù)拿郑邕@里的多項(xiàng)式類(lèi)可選擇為polynom。以這個(gè)名字建立一個(gè)子目錄,目錄的名字前加。對(duì)本例來(lái)說(shuō),即應(yīng)該在當(dāng)前的工作目錄下建立pol

16、ynom子目錄,而這個(gè)目錄無(wú)需在MATLAB路徑下再指定。編寫(xiě)一個(gè)引導(dǎo)函數(shù),函數(shù)名應(yīng)該和類(lèi)同名。定義類(lèi)的使用方法:functionp=polynom(a)ifnargin=0p.c=;p=class(p,polynom);elseifisa(a,polynom),p=a;else,p.c=a(:).;p=class(p,polynom);end可以看出,本函數(shù)分三種情況加以考慮:如果不給輸入變量,則建立一個(gè)空的多項(xiàng)式;如果輸入變量a已經(jīng)為多項(xiàng)式類(lèi),則將它直接傳送給輸出變量p;如果a為向量,則將此向量變換成行向量,再構(gòu)造成一個(gè)多項(xiàng)式對(duì)象。如果想正確地顯示新定義的類(lèi),則必需首先定義display(

17、)函數(shù),并對(duì)新定義的類(lèi)重新定義其基本運(yùn)算。對(duì)多項(xiàng)式來(lái)說(shuō),我們可以如下定義有關(guān)的函數(shù):要改變顯示函數(shù)的定義,則需在此目錄下重新建立一個(gè)新函數(shù)display()。這種重新定義函數(shù)的方法又稱(chēng)為函數(shù)的重載。顯示函數(shù)可以如下地重載定義。functiondisplay(p)disp();disp(inputname(1),=)disp();disp(char(p);disp();注意,這里應(yīng)該定義的是display()而不是disp()。從上面的定義可見(jiàn),顯示函數(shù)要求重載定義char()函數(shù),用于把多項(xiàng)式轉(zhuǎn)換成可顯示的字符串。該函數(shù)的定義為functions=char(p)ifall(p.c=0),s=0

18、;elsed=length(p.c)-1;s=;fora=p.c;ifa=0;ifisempty(s)ifa0,s=s,+;else,s=s,-;a=-a;endendifa=1|d=0,s=s,num2str(a);ifd0,s=s,*;endendifd=2,s=s,x,int2str(d);elseifd=1,s=sx;endendd=d-1;end,end仔細(xì)研究此函數(shù),可以發(fā)現(xiàn),該函數(shù)能自動(dòng)地按照多項(xiàng)式顯示的格式構(gòu)造字符串。比如,多項(xiàng)式各項(xiàng)用加減號(hào)連接,系數(shù)與算子之間用乘號(hào)連接,而算子的指數(shù)由表示。再配以顯示函數(shù),則可以將此多項(xiàng)式以字符串的形式顯示出來(lái)。雙精度處理:雙精度轉(zhuǎn)換函數(shù)的重

19、載定義是很簡(jiǎn)單的。functionc=double(p)c=p.c;加運(yùn)算:兩個(gè)多項(xiàng)式相加,只需將其對(duì)應(yīng)項(xiàng)系數(shù)相加即可。這樣,加法運(yùn)算的重載定義可由下面的函數(shù)實(shí)現(xiàn)。注意,這里要對(duì)plus()函數(shù)進(jìn)行重載定義。functionp=plus(a,b)a=polynom(a);b=polynom(b);k=length(b.c)-length(a.c);p=polynom(zeros(1,k)a.c+zeros(1,-k)b.c);同理,還可以重載定義多項(xiàng)式的減法運(yùn)算:functionp=minus(a,b)a=polynom(a);b=polynom(b);k=length(b.c)-length

20、(a.c);p=polynom(zeros(1,k)a.c-zeros(1,-k)b.c);乘法運(yùn)算:多項(xiàng)式的乘法實(shí)際上可以表示為系數(shù)向量的卷積,可以由conv()函數(shù)直接獲得。故可以如下重載定義多項(xiàng)式的乘法運(yùn)算。functionp=mtimes(a,b)a=polynom(a);b=polynom(b);p=polynom(conv(a.c,b.c);乘方運(yùn)算:多項(xiàng)式的乘方運(yùn)算只限于正整數(shù)乘方的運(yùn)算,其n次方相當(dāng)于將該多項(xiàng)式自乘n次。若n=0,則結(jié)果為1。這樣我們就可以重載定義多項(xiàng)式的乘方運(yùn)算為:functionp=mpower(a,n)ifn=0,n=floor(n);a=polynom(

21、a);p=1;ifn=1,fori=1:n,p=p*a;endendelse,error(Powershouldbeanon-negativeinteger.)end多項(xiàng)式求值問(wèn)題:可以對(duì)多項(xiàng)式求值函數(shù)polyval()進(jìn)行重載定義。functiony=polyval(a,x)a=polynom(a);y=polyval(a.c,x);定義了此類(lèi)之后,我們就可以方便地進(jìn)行多項(xiàng)式處理了。例如我們可以建立兩個(gè)多項(xiàng)式對(duì)象P(s)=x3+4x2-7和Q(s)=5x4+3x3-1.5x2+7x+8其相應(yīng)的MATLAB語(yǔ)句為P=polynom(1,4,0,-7),Q=polynom(5,3,-1.5,7,

22、8)P=x3+4*x2-7Q=5*x4+3*x3-1.5*x2+7*x+8然后調(diào)用下面函數(shù)就可以得出相應(yīng)的計(jì)算結(jié)果P+Qans=5*x4+4*x3+2.5*x2+7*x+1P-Qans=-5*x4-2*x3+5.5*x2-7*x-15P*Qans=5*x7+23*x6+10.5*x5-34*x4+15*x3+42.5*x2-49*x-56X=P3X=x9+12*x8+48*x7+43*x6-168*x5-336*x4+147*x3+588*x2-343y=polyval(X,123456)y=-8491317561617715611036023243986977由于前面的重載定義,下面的表達(dá)式

23、也能得出期望的結(jié)果P+123ans=x3+5*x2+2*x-4使用methods()函數(shù)可以列出一個(gè)新的類(lèi)已經(jīng)定義的方法函數(shù)名。methods(polynom)Methodsforclasspolynom:chardoublempowerpluspolyvaldisplayminusmtimespolynom變量的運(yùn)算(1)MATLAB變量的代數(shù)運(yùn)算如果給定兩個(gè)矩陣A和B,則我們可以用A+B,A-B,A*B可以立即得出其加、減和乘運(yùn)算的結(jié)果。若這兩個(gè)矩陣數(shù)學(xué)上不可以這樣運(yùn)算,則將得出錯(cuò)誤信息,并終止正在運(yùn)行的程序。在MATLAB下,如果A和B中有一個(gè)是標(biāo)量,則可以無(wú)條件地進(jìn)行這樣的運(yùn)算。MAT

24、LAB不介意這些變量是純實(shí)數(shù)還是含有虛部的復(fù)數(shù)。矩陣的除法實(shí)際上就是線性方程的求解,如Ax=B這一線性方程的解即為x=inv(A)*B,或更簡(jiǎn)單地x=AB。這又稱(chēng)為矩陣的左除,而x=B/A稱(chēng)為矩陣的右除。方陣的乘方可以由算符直接得出,如An。用MATLKAB這樣的語(yǔ)言,你可以輕易地算出A0.1,亦即A矩陣開(kāi)10次方得出的主根。矩陣的點(diǎn)運(yùn)算也是相當(dāng)重要的。所謂點(diǎn)運(yùn)算即兩個(gè)矩陣相應(yīng)元素的元素,如A.*B得出的是A和B對(duì)應(yīng)元素的積,故一般情況下A*B不等于A.*B。矩陣的點(diǎn)乘又稱(chēng)為其Hadamard積。點(diǎn)運(yùn)算的概念又可以容易地用到點(diǎn)乘方上,例如A.2,A.A等都是可以接受的運(yùn)算式子。Kronecke

25、r乘積是MATLAB在矩陣運(yùn)算中的另一個(gè)有意義的問(wèn)題,用kron(A,B)立即可以得出兩個(gè)矩陣的Kronecker乘積。(2)邏輯運(yùn)算MATLAB并沒(méi)有單獨(dú)定義邏輯變量。在MATLAB中,數(shù)值只有0和“非0”的區(qū)分。非0往往被認(rèn)為是邏輯真,或邏輯1。除了單獨(dú)兩個(gè)數(shù)值的邏輯運(yùn)算外,還支持矩陣的邏輯運(yùn)算,如A&B,A|B,和A分別表示邏輯與、或、非的運(yùn)算。例如,下面的A和B矩陣與運(yùn)算將得出如下結(jié)果A=0234;1350;B=1053;1505;A&Bans=00111100(3)關(guān)系表達(dá)式與表達(dá)式函數(shù)MATLAB的大于、小于和等于等關(guān)系分別由、A=0234;1350;B=1053;1505;A=B

26、ans=00001000確實(shí)使得A和B對(duì)應(yīng)元素相等的位將返回1,否則返回0。MATLAB還可以用=和mysum=0;fori=1:1:100,mysum=mysum+i;end;mysummysum=5050在上面的式子中,可以看到for循環(huán)語(yǔ)句中s3的值為1。在MATLAB實(shí)際編程中,如果s3的值為1,則可以在該語(yǔ)句中省略,故該語(yǔ)句可以簡(jiǎn)化成fori=1:100。在實(shí)際編程中,在MATLAB下采用循環(huán)語(yǔ)句會(huì)降低其執(zhí)行速度,所以前面的程序可以由下面的命令來(lái)代替:i=1:100;mysum=sum(i)。在這一語(yǔ)句中,首先生成了一個(gè)向量i,然后用內(nèi)部函數(shù)sum()求出i向量的各個(gè)元素之和,或更簡(jiǎn)

27、單地,該語(yǔ)句還可以寫(xiě)成sum(1:100)。如果前面的100改成10000,再運(yùn)行這一程序,則可以明顯地看出,后一種方法編寫(xiě)的程序比前一種方法快得多。MATLAB并不要求循環(huán)點(diǎn)等間距,假設(shè)V為任意一個(gè)向量,則可以用fori=V來(lái)表示循環(huán)。同樣的問(wèn)題在while循環(huán)結(jié)構(gòu)下可以表示為mysum=0;i=1;while(i下鍵入該M文件的文件名,這樣MATLAB就會(huì)自動(dòng)執(zhí)行該M文件中的各條語(yǔ)句,并將結(jié)果直接返回到MATLAB的工作空間。M函數(shù)格式是MATLAB程序設(shè)計(jì)的主流,一般情況下,不建議您使用M腳本文件格式編程。MATLAB的M函數(shù)是由function語(yǔ)句引導(dǎo)的,其基本格式如下:functio

28、n返回變量列表=函數(shù)名(輸入變量列表)注釋說(shuō)明語(yǔ)句段,由%引導(dǎo)輸入、返回變量格式的檢測(cè)函數(shù)體語(yǔ)句這里輸入和返回變量的實(shí)際個(gè)數(shù)分別由nargin和nargout兩個(gè)MATLAB保留變量來(lái)給出,只要進(jìn)入該函數(shù),MATLAB就將自動(dòng)生成這兩個(gè)變量,不論您是否直接使用這兩個(gè)變量。返回變量如果多于1個(gè),則應(yīng)該用方括號(hào)將它們括起來(lái),否則可以省去方括號(hào)。輸入變量和返回變量之間用逗號(hào)來(lái)分割。注釋語(yǔ)句段的每行語(yǔ)句都應(yīng)該由百分號(hào)%引導(dǎo),百分號(hào)后面的內(nèi)容不執(zhí)行,只起注釋作用。用戶采用help命令則可以顯示出來(lái)注釋語(yǔ)句段的內(nèi)容。此外,正規(guī)的變量個(gè)數(shù)檢測(cè)也是必要的。如果輸入或返回變量格式不正確,則應(yīng)該給出相應(yīng)的提示。我

29、們將通過(guò)下面的例子來(lái)演示函數(shù)編程的格式與方法。例3-假設(shè)我們想生成一個(gè)nxm階的Hilbert矩陣,它的第i行第j列的元素值為1/(i+j-1)。我們想在編寫(xiě)的函數(shù)中實(shí)現(xiàn)下面幾點(diǎn):如果只給出一個(gè)輸入?yún)?shù),則會(huì)自動(dòng)生成一個(gè)方陣,即令m=n在函數(shù)中給出合適的幫助信息,包括基本功能、調(diào)用方式和參數(shù)說(shuō)明檢測(cè)輸入和返回變量的個(gè)數(shù),如果有錯(cuò)誤則給出錯(cuò)誤信息如果調(diào)用時(shí)不要求返回變量,則將顯示結(jié)果矩陣。其實(shí)在編寫(xiě)程序時(shí)養(yǎng)成一個(gè)好的習(xí)慣,無(wú)論對(duì)程序設(shè)計(jì)者還是對(duì)程序的維護(hù)者、使用者都是大有裨益的。采用MATLAB函數(shù)編寫(xiě)格式和上述要求,我們可以編寫(xiě)出一個(gè)函數(shù)functionA=myhilb(n,m)%MYHILB

30、ademonstrativeM-function.%A=MYHILB(N,M)generatesanNbyMHilbertmatrixA.%A=MYHILB(N)generatesanNbyNsquareHilbertmatrix.%MYHILB(N,M)displaysONLYtheHilbertmatrix,butdonotreturnany%matrixbacktothecallingfunction.%Seealso:HILB.%DesignedbyProfessorDingyuXUE,NortheasternUniversity,PRC%5April,1995,Lastmodifie

31、dbyDYXat21March,2000ifnargout1,error(Toomanyoutputarguments.);endifnargin=1,m=n;elseifnargin=0|nargin2error(Wrongnumberofiutputarguments.);endA1=zeros(n,m);fori=1:nforj=1:mA1(i,j)=1/(i+j-1);end,endifnargout=1,A=A1;elseifnargout=0,disp(A1);end這樣規(guī)范編寫(xiě)的函數(shù)用help命令可以顯示出其幫助信息:helpmyhilbMYHILBademonstrativeM-func

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論