第2章基本語法_第1頁
第2章基本語法_第2頁
第2章基本語法_第3頁
第2章基本語法_第4頁
第2章基本語法_第5頁
已閱讀5頁,還剩150頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章MATLAB基本語法2.1.1變量命名規(guī)則變量名由字母、數(shù)字和下劃線組成,字母間不可留空格,而且第一個字符必須為字母。變量名中的英文字母大小寫是有區(qū)別的。(A1B和a1b是有區(qū)別的)變量名的上限是19個字母。第1節(jié)變量及常用函數(shù)變量名意義ans如果用戶沒有定義變量名,系統(tǒng)用于計算結(jié)果存儲的默認變量名。pi圓周率л(=3.1415926…)Inf無窮大∞值,如1/0eps浮點數(shù)的精度,也是系統(tǒng)運算時所確定的極小值(=2.2204e-16)realmin最小浮點數(shù),2.2251e-308matlab7.0realmax最大浮點數(shù),1.7977e+308matlab7.0NaN不定量,如0/0或inf/infi或j虛數(shù)i=j=sqrt(-1)nargin函數(shù)的輸入變量數(shù)目nargout函數(shù)的輸出變量數(shù)目保留特殊變量名變量名的查看與刪除直接鍵入變量名使用who和whos命令可以查看所有定義的變量的情況,其中who命令可以查看當前工作區(qū)內(nèi)的變量,whos用來查看當前工作區(qū)內(nèi)的變量和詳細信息。使用clear命令來刪除所有定義過的變量,如果只是要去除其中的某幾個變量,則應(yīng)在clear命令后面指明要刪除的變量名稱。變量顯示格式(表1-1)MATLAB中所有的數(shù)值量為雙字長浮點數(shù),顯示按下面顯示規(guī)則:在缺省情況下,當結(jié)果為整數(shù),作為整數(shù)顯示;當結(jié)果為實數(shù),以小數(shù)后4位的精度近似顯示。

如果結(jié)果中的有效數(shù)字超出了這一范圍,以科學計數(shù)法顯示結(jié)果。format命令改變顯示格式,常用的的格式有l(wèi)ong(16位)bank(2個十進制位)hex(十六進制)short(缺省)shorte(5位加指數(shù))+(符號)longe(16位加指數(shù))rat(有理數(shù)近似)x=[4/31.2345e–6]formatshort 1.33330.0000

formatshorte 1.3333e+0001.2345e–006

formatshortg1.33331.2345e–006

formatlong 1.33333333333333 0.00000123450000

formatlonge 1.333333333333333e+000 1.234500000000000e–006

formatlongg 1.333333333333331.2345e–006

formatbank 1.330.00

formatrat 4/31/810045

formathex 3ff5555555555555 3eb4b6231abfd2712.1.2基本運算MATLAB基本運算符運算符號范例加+1+2減-1-2乘*1*2除/或\1/2或1\2冪次方^1^22.1.3、常用函數(shù)1、調(diào)用格式:變量名=函數(shù)名(參數(shù))函數(shù)名解釋Matlab函數(shù)命令冪函數(shù)x^asqrt(x)=x^(1/2)指數(shù)函數(shù)a^xexp(x)對數(shù)函數(shù)log(x)log2(x)log10(x)函數(shù)名解釋Matlab函數(shù)命令三角函數(shù)sin(x)cos(x)tan(x)cot(x)sec(x)csc(x)函數(shù)名解釋Matlab函數(shù)命令反三角函數(shù)asin(x)acos(x)atan(x)acot(x)asec(x)acsc(x)絕對值函數(shù)abs(x)2.1.4、其他函數(shù)fix朝零方向取整ceil朝正無窮大取整floor朝負無窮大取整rem除后取余數(shù)round四舍五入angle復數(shù)相角imag復數(shù)虛部lcm(x,y)整數(shù)x和y的最小公倍數(shù)gcd(x,y)整數(shù)x和y的最大公約數(shù)

real復數(shù)實部conj復數(shù)共軛exp指數(shù)sqrt平方根lcm(x,y)整數(shù)x和y的最小公倍數(shù)gcd(x,y)整數(shù)x和y的最大公約數(shù)函數(shù)一定是出現(xiàn)在等式的右邊。每個函數(shù)對其自變量的個數(shù)和格式都有一定的要求,如使用三角函數(shù)時要注意角度的單位是“弧度”而非“度”。例如sin(1)表示的不是sin1°而是sin57.28578°函數(shù)允許嵌套,例如:可使用形如sqrt(abs(sin(225*pi/180)))的形式。2.1.5、使用函數(shù)注意事項例1:設(shè)兩個復數(shù)a=1+2i,b=3-4i,計算a+b,a-b,a×b,a/b。a=1+2i;b=3-4i;a+bans=4.0000-2.0000ia-bans=-2.0000+6.0000ia*bans=11.0000+2.0000ia/bans=-0.2000+0.4000i例2:計算下式的結(jié)果,其中x=-3.5°,y=6.7°。x=pi/180*(-3.5);y=pi/180*6.7;z=sin(abs(x)+abs(y))/sqrt(cos(abs(x+y)))z=1772

例3:我國人口按2000年第五次全國人口普查的結(jié)果為12.9533億,如果年增長率為1.07%,求公元2010年末的人口數(shù)。計算人口的公式為:p1=p0(1+r)n,其中:p1為幾年后的人口,p0為人口初值,r為年增長率,n為年數(shù)。r=0.0107;n=2010-2000;p0=12.9533e8;p1=p0*(1.0+r)^np1=1.4408e+009例4:求解方程ax2+bx+c=0的根,其中a=1,b=2,c=3。a=1;b=2;c=3;d=sqrt(b*b-4*a*c);x1=(-b+d)/(2*a)x1=-1.0000+1.4142ix2=(-b-d)/(2*a)x2=-1.0000-1.4142i2.1.6習題習題1:設(shè)A=1.2,B=-4.6,C=8.0,D=3.5,E=-4.0,計算習題2:設(shè)a=5.67,b=7.811,計算習題3:已知圓的半徑為15,求其直徑,周長及面積。習題4:已知三角形三邊a=8.5,b=14.6,c=18.4,求三角形面積。提示

其中:s=(a+b+c)/2。例5:計算1996/18的結(jié)果例6:計算:例7:已知y=x2,求x=π時的y值。第2、3節(jié)MATLAB的矩陣計算2.2.1、矩陣矩陣的構(gòu)造要用MATLAB做矩陣運算,必須要將矩陣直接輸入到MATLAB中去,其中最方便的是將矩陣直接輸入。須遵循以下規(guī)則:⑴用中括號[]把所有矩陣元素括起來。⑵同一行的不同元素之間數(shù)據(jù)元素用空格或逗號間隔。⑶用分號(;)指定一行結(jié)束。⑷也可分成幾行輸入,用回車代替分號。⑸數(shù)據(jù)元素可是表達式,系統(tǒng)將自動計算。方法1:直接輸入A=[1,2,3,4;5678;9101112;13141516]A=12345678910111213141516注意逗號、分號和空格的用法。方法2:利用表達式輸入B=[1,sqrt(25),9,132,6,10,7*23+sin(pi),7,11,154abs(-8)1216]B=15913261014371115481216注意回車鍵的用法。方法3:利用內(nèi)部函數(shù)產(chǎn)生矩陣內(nèi)部函數(shù)列表如下:函數(shù)功能eye產(chǎn)生單位矩陣zeros產(chǎn)生全部元素為0的矩陣ones產(chǎn)生全部元素為1的矩陣[]產(chǎn)生空矩陣rand產(chǎn)生隨機元素的矩陣linspace產(chǎn)生線性等分的矩陣compan產(chǎn)生伴隨矩陣x=linspace(2,12,6)x=24681012ones(3)ones(3,4)F=5*ones(3)z=zeros(2,4)R=rand(4,4)x=0:0.5:2y=linspace(0,2,7)z=[0x1]u=[y;z]2.2.2、矩陣元素采用下標來表示矩陣元素,同時可用下標對矩陣元素進行修改A=[1,2,3;4,5,6;7,8,9]A=123456789A(1,1)ans=1A(2,3)ans=6A(1,1)=0;A(2,3)=A(1,2)+A(3,2);AA=02345107892.2.3、矩陣運算MATLAB對矩陣的運算類似于線性代數(shù)。矩陣的加減運算運算符+-對應(yīng)元素的加減適用于兩矩陣同階或其一是標量的情況。例:已知矩陣A和B,計算C=A+B,D=A-B和E=A+3。A=[21,2,4;7,13,19;1,8,17];B=[122524;11139;681];C=A+BC=33272818262871618D=A-BD=9-23-20-4010-5016E=A+3E=245710162241120矩陣乘法運算符*適用于前一矩陣的列數(shù)和后一矩陣行數(shù)相同或者其中為標量的情況。例:矩陣A和B同上例,試求C=A*B和D=A*3。C=A*BC=298583526341496304202265113D=A*3D=6361221395732451矩陣除法運算符\左除/右除若A矩陣是非奇異方陣,則A\B和B/A運算均可以實現(xiàn),且左除和右除一般不同,這是因為:A\B=inv(A)*bB/A=B*inv(A)其中inv函數(shù)用來求某一個矩陣的逆陣。例:已知矩陣A和B,試計算A\B和A/B。A\Bans=0.50811.11681.14290.3216-0.61860.28570.17170.6960-0.1429A/Bans=-1.83365.6985-3.28010.55350.7891-1.38710.74960.0478-1.4201矩陣的乘方運算符:^例:已知A是一方陣,P是一個正整數(shù),則A^P表示A自乘P次。A=[1234;5678;9101112;13141516];A^1A^2ans=90100110120202228254280314356398440426484542600A^3矩陣的點運算(元素群運算)為實現(xiàn)與矩陣相關(guān)的標量運算而設(shè)計的。運算符:.與矩陣的常規(guī)運算不同,是針對于矩陣中的元素定義的。分類:點乘.*點乘方.^點除./元素群函數(shù)見書p23例:已知矩陣A和B,試求A*B,A.*B和A.^3.A=[12;34];B=[56;78];C=A*BC=19224350D=A.*BD=E=5121821322764矩陣轉(zhuǎn)置運算符:'例:已知矩陣A,求其轉(zhuǎn)置矩陣。A=[1234;5678;9101112;13141516]A=12345678910111213141516A‘a(chǎn)ns=15913261014371115481216同上例(驗證復數(shù)轉(zhuǎn)置后為它的復共軛)D=A*iD=

0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i0+7.0000i0+8.0000i0+9.0000i0+10.0000i0+11.0000i0+12.0000i0+13.0000i0+14.0000i0+15.0000i0+16.0000iD'ans=

0-1.0000i0-5.0000i0-9.0000i0-13.0000i0-2.0000i0-6.0000i0-10.0000i0-14.0000i0-3.0000i0-7.0000i0-11.0000i0-15.0000i0-4.0000i0-8.0000i0-12.0000i0-16.0000i求逆矩陣矩陣A可逆,則矩陣A的逆矩陣是唯一的。例:求一矩陣的逆矩陣,并驗證所得結(jié)果。G=[120;25-1;410-1];X=inv(G)X=52-2-2-110-21I=inv(G)*GI=100010001求特征值設(shè)A為n階矩陣,λ是一個數(shù),如果方程Ax=λx存在非零解向量,則稱λ為A的一個特征值,相應(yīng)的非零向量x稱為特征值λ對應(yīng)的特征向量。例:已知矩陣G,求其特征值。G=[120;25-1;410-1];eig(G)ans=3.73210.26791.0000求特征多項式MATLAB提供了求特征多項式的函數(shù)poly。例:根據(jù)一向量的值,構(gòu)造一多項式。G=[120;25-1;410-1];poly(G)ans=1.0000-5.00005.0000-1.0000round(poly(G))ans=1-55-1求方陣的行列式若將矩陣看做是行列式,可求相應(yīng)的行列式值,函數(shù)為det。例:已知矩陣G,求其對應(yīng)的行列式值。G=[120;25-1;410-1]G=12025-1410-1det(G)求解線性方程組線性方程組的一般矩陣形式表示如下:AX=B(XA=B)若方程組有解,則X=A\B(X=B/A)。例:求下列線性方程組的根要解上述的聯(lián)立方程式,可以使用“\”,即X=A\B。A=[21-3;3-22;5-3-1];B=[5;5;16];X=A\BX=1-3-2向量矩陣在一定的程度上可以看作是向量的組合,因而,矩陣運算可看作是向量的計算。向量的產(chǎn)生類似于矩陣,也可采用“:”生成。例:x=1:5%初值=1,終值=5,步長=1x=12345y=1:2:9%初值=1,終值=9,步長=2y=13579z=9:-2:1%初值=9,終值=1,步長=-2z=97531常用的矩陣函數(shù)函數(shù)功能det計算矩陣所對應(yīng)的行列式值inv求矩陣的逆矩陣rank求矩陣的秩eig求特征值和特征向量orth正交化poly求特征多項式lu用高斯消元法所得的系數(shù)矩陣qr正交三角矩陣分解2.2.4矩陣的操作在MATLAB命令行中,使用whos命令可以察看到所有變量的大小。為了獲得矩陣或者向量的大小,MATLAB還提供了兩個有用的函數(shù)size和length。size按照下面的形式使用:[m,n]=size(a,x)。一般的,函數(shù)的輸入?yún)⒘縳不是用,這是當只有一個輸出變量時,size返回一個行向量,第一個數(shù)為行數(shù),第二個數(shù)為列數(shù);如果有兩個輸出變量,第一個返回量為行數(shù),第二個返回數(shù)為列數(shù)。當使用x時,x=1返回行數(shù),x=2返回列數(shù),這時只有一個返回值。length返回行數(shù)或者列數(shù)的最大值,即length(a)=max(size(a))。矩陣的大小矩陣旋轉(zhuǎn)MATLAB提供了一組執(zhí)行矩陣操作的函數(shù),例如flipud(a)使得矩陣上下翻轉(zhuǎn),fliplr(a)使得矩陣左右翻轉(zhuǎn),rot90(a)使得矩陣逆時針翻轉(zhuǎn)90°等等。邏輯矩陣概念邏輯矩陣是大小和對應(yīng)矩陣相同,而元素為0或者1的數(shù)組。邏輯數(shù)組一般由關(guān)系算子創(chuàng)建??梢允褂眠壿嬀仃噥砣〉镁仃嚨牟糠衷刂?,得到矩陣中所有大于3的值。使用邏輯矩陣也可以對矩陣的部分賦值。矩陣查找和排序子矩陣的查找使用find命令完成,它返回關(guān)系表達式為真的下標。例如:?a=10:20;?find(a>15)ans=7891011矩陣的排序使用sort函數(shù),它將矩陣按照升序排列。5矩陣的查找和排序子矩陣的查找使用find命令完成,它返回關(guān)系表達式為真的下標。矩陣的排序使用sort函數(shù),它將矩陣按照升序排列。應(yīng)用:去奇異點:a(find(a<std(a)*3))嵌入數(shù)據(jù):在指定大小的數(shù)據(jù)后加入數(shù)據(jù)替換:替換指定大小的數(shù)據(jù)段2.2.5、應(yīng)用舉例例1:矩陣相乘已知求:C=A×B。A=[123;-200;101;-12-3]A=123-200101-12-3B=[-1,3;-22;21]B=-13-2221C=A*BC=1102-614-9-2例2:設(shè)矩陣A和B滿足關(guān)系式AB=A+2B。已知求矩陣B。提示:由AB=A+2B可得(A-2E)B=A,故B=(A-2E)-1AA=[423;110;-123];B=inv(A-2*eye(3))*AB=3.0000-8.0000-6.00002.0000-9.0000-6.0000-2.000012.00009.0000例3:求解線性方程組。提示:將該線性方程組變換為AX=B形式。其中:A=[2-13;31-5;4-11]A=2-1331-54-11B=[5;5;9];X=A\BX=2-102.2.6、習題習題1:已知矩陣A和B求(1)2A+B(2)4A2-3B2(3)AB(4)BA(5)AB-BA習題2:設(shè)三階矩陣A、B,滿足A-1BA=6A+BA其中求矩陣B。習題3:設(shè)(2E-C-1B)AT=C-1,其中E是4階單位矩陣,AT是4階矩陣A的轉(zhuǎn)置。求矩陣A習題4:設(shè)二階矩陣A,B,X,滿足X-2A=B-X其中求矩陣X。習題5:求解線性方程組第4節(jié)邏輯判斷及流程控制2.4.1、關(guān)系運算關(guān)系運算結(jié)果只有兩種可能:0或1它是對矩陣的各個元素進行運算A=magic(6)p=rem(A,3)p=(rem(A,3)==0)[j,k]=find(p)find(p)lp=find(p)<<=>>===~=小于小于等于大于大于等于等于不等于2.4.2、邏輯運算與(&);或(|);非(~); 異或(xor)all(全為真);any(不全為真)輸入量為矩陣,按列進行運算u=p|~pall(p)all(u)any(p)2.4.3、流程控制語句 Matlab提供了三種常用控制結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。由于這些結(jié)構(gòu)經(jīng)常包含大量的Matlab命令,故經(jīng)常出現(xiàn)在命令文件中,而不是直接出現(xiàn)在Matlab提示符后面。做為一名Matlab使用者來說,編程序的一個主要內(nèi)容就是如何解決一個應(yīng)用問題所使用的算法用Matlab的語言和函數(shù)來描述。換句話說,也就是組織Matlab程序的結(jié)構(gòu)。(1)順序結(jié)構(gòu)順序結(jié)構(gòu)是由多個程序結(jié)構(gòu)串聯(lián)而成的,每一個程序模塊可以是一條語句、一段程序、一個函數(shù)等。由順序結(jié)構(gòu)編寫的程序,命令執(zhí)行時是從前至后依次完成的,嚴格遵循一定的規(guī)則:依次執(zhí)行。在用MATLAB編寫程序時,實現(xiàn)順序結(jié)構(gòu)的方法非常簡單:只需將多個要執(zhí)行的命令段(程序模塊)順序即可(2)選擇結(jié)構(gòu) 選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)。在實際編程過程中,并不能僅僅依靠順序結(jié)構(gòu)。在求解實際問題時,常常要根據(jù)輸入數(shù)據(jù)的實際情況進行邏輯叛斷,對不同的結(jié)果分別進行不同的處理;或者需要反復執(zhí)行某些程序段落,以避免重復編寫結(jié)構(gòu)相似的程序段落帶來的程序結(jié)構(gòu)上的臃腫。這就需要在程序中引入選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。所有的程序都是由這三種基本程序結(jié)構(gòu)交替綜合而實現(xiàn)的。很多情況下,命令的序列必須根據(jù)關(guān)系的檢驗有條件地執(zhí)行。在MATLAB語言中,這種判斷主要由If-Else-End結(jié)構(gòu)和Switch-Case-End結(jié)構(gòu)來完成。If-Else-End結(jié)構(gòu)最簡單的If-Else-End結(jié)構(gòu)是:

ifexpression commands… end如果在表達式中的所有元素為真(非零),那么就執(zhí)行if和end語言之間的{commands}。較復雜的If-Else-End結(jié)構(gòu)具體結(jié)構(gòu)如下:

ifexpressioncommandsevaluatedifTrueelsecommandsevaluatedifFalseend如果表達式為真,則執(zhí)行第一組命令;如果表達式是假,則執(zhí)行第二組命令。結(jié)構(gòu)If-Else-End在使用過程中也程序嵌套,具體應(yīng)用格式如下所示:ifexpression1commandsevaluatedifexpression1isTrueelseifexpression2commandsevaluatedifexpression2isTrueelseifexpression3commandsevaluatedifexpression3isTrue

...elsecommandsevaluatedifnootherexpressionisTrueend例:輸入一個數(shù),小于100大于0就打印這個數(shù),否則就打印“n>100”或“n<0”。%Thisprogramcanprintanumber%whenitislesserthan100and%largerthan0.n=input('enteranumber,n=')ifn<=100&n>0nelseifn>100sprintf('n>100')elsesprintf('n<0')endendSwitch-Case-End結(jié)構(gòu)Switch-Case-End結(jié)構(gòu)用于實現(xiàn)多重選擇,其應(yīng)用格式如下:

switch<expression>case<number1>command1case<number2>command2……otherwise……end其中的otherwise模塊可以省略;switch語句的執(zhí)行過程是:首先計算表達式的值,然后將其結(jié)果與每一個case后面的數(shù)值常量依次進行比較,如果相等則執(zhí)行該case模塊中的語句,在執(zhí)行完該case模塊以后就跳出switch語句。如果表達式的值與所有case模塊的進入值無一相同,則執(zhí)行otherwise模塊中的語句。Switch也可以在一個case語句中,處理多值情況,通過將多值用大括號擴起來作為一個單元實現(xiàn)。例:編寫一個函數(shù),將百分制的學生成績轉(zhuǎn)換為五級制的成績。functionf=TranGrade(x)switchfix(x/10)case{10,9}f='A';case8f='B';case7f='C';case6f='D';otherwisef='E';end(3)循環(huán)結(jié)構(gòu)在三種常用的控制結(jié)構(gòu)中,還有一種是循環(huán)結(jié)構(gòu)。與其它高級一樣,循環(huán)結(jié)構(gòu)又分為For語句和While語句兩種,首先介紹一下For結(jié)構(gòu)。For循環(huán)

For循環(huán)允許一組命令以固定的和預定的次數(shù)重復。For循環(huán)的一般形式是: forx=array {commands} end在for和end語句之間的{commands}按數(shù)組中的每一列執(zhí)行一次。在每一次迭代中,x被指定為數(shù)組的下一列,即在第n次循環(huán)中,x=array(:,n)。例:forn=1:10 x(n)=sin(n*pi/10); endx=Columns1through7

0.30900.58780.80900.95111.00000.95110.8090Columns8through10

0.58780.30900.0000分析:換句話,第一語句是說:對n等于1到10,求所有語句的值,直至下一個end語句。第一次通過For循環(huán)n=1,第二次,n=2,如此繼續(xù),直至n=10。在n=10以后,F(xiàn)or循環(huán)結(jié)束,然后求end語句后面的任何命令值,在這種情況下顯示所計算的x的元素。例:求1+2+3+…+100的和。s=0;fori=1:100s=s+i;endsFor

循環(huán)使用過程中的注意事項:For循環(huán)不能用For循環(huán)內(nèi)重新賦值循環(huán)變量n來終止。例:forn=1:10

x(n)=sin(n*pi/10); n=10;Endx=Columns1through70.30900.58780.80900.95111.00000.95110.8090Columns8through100.58780.30900.0000(2)語句1:10是一個標準的MATLAB數(shù)組創(chuàng)建語句。在For循環(huán)內(nèi)接受任何有效的MATLAB數(shù)組。data=[39456;716-15] data= 39456 716-15

forn=data x=n(1)-n(2)Endx=-4 x=-7x=46x=1(3)For循環(huán)可按需要嵌套。forn=1:5 form=5:-1:1 A(n,m)=n^2+m^2; enddisp(n)end

(4)當有一個等效的數(shù)組方法來解給定的問題時,應(yīng)避免用For循環(huán)。例如,上面的第一個例子可被重寫為n=1:10;x=sin(n*pi/10)兩種方法得出同樣的結(jié)果,而后者執(zhí)行更快,更直觀,要求較少的輸入。(5)為了得到最大的速度,在For循環(huán)(While循環(huán))被執(zhí)行之前,應(yīng)預先分配數(shù)組。例如,前面所考慮的第一種情況,在For循環(huán)內(nèi)每執(zhí)行一次命令,變量x的大小增加1。迫使MATLAB每通過一次循環(huán)要花費時間對x分配更多的內(nèi)存。為了消去這個步驟,F(xiàn)or循環(huán)的例子應(yīng)重寫為x=zeros(1,10);%preallocatedmemoryforxforn=1:10x(n)=sin(n*pi/10);end現(xiàn)在,只有x(n)的值需要改變。當循環(huán)(While循環(huán))與For循環(huán)以固定次數(shù)求一組命令的值相反,While循環(huán)以不定的次數(shù)求一組語句的值。While循環(huán)的一般形式是:whileexpression commandsend

只要在表達式里的所有元素為真,就執(zhí)行while和end語句之間的{commands}。通常,表達式的求值給出一個標量值,但數(shù)組值也同樣有效。存在:死循環(huán)問題例:矩陣指數(shù)的冪級數(shù)展開式如下式所示,試利用while循環(huán)求矩陣的指數(shù).functionf=myexpm(a)e=eye(size(a));f=zeros(size(a));k=1;whilenorm(e,1)>0f=f+e;e=a*e/k;k=k+1;end分析:本例的計算結(jié)果可通過MATLAB函數(shù)expm(a)進行驗證。程序思想是逐項求和,直到第n項趨于零為止。例:求1+2+3+…+100的和。i=0;s=0;whilei<100i=i+1;s=s+i;endstry語句語句格式為:try

語句組1catch

語句組2endtry語句先試探性執(zhí)行語句組1,如果語句組1在執(zhí)行過程中出現(xiàn)錯誤,則將錯誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語句組2。try例矩陣乘法運算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,若出錯,則自動轉(zhuǎn)去求兩矩陣的點乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%顯示出錯原因2.4.4、應(yīng)用舉例例1:Fibonacci數(shù)組滿足Fibonacci規(guī)則:ak+2=ak+ak+1,(k=1,2…);且a1=a2=1。要求該數(shù)組中第一個大于10000的元素。a(1)=1;a(2)=1;s=2;whilea(s)<=10000a(s+1)=a(s-1)+a(s);s=s+1;endi,a(i)第5節(jié)基本繪圖方法在科學研究和工程實踐中經(jīng)常會遇到大批量復雜的數(shù)據(jù),如果不借助圖表來表現(xiàn)它們之間的關(guān)系,一般很難看出這些數(shù)據(jù)的意義。因此,數(shù)據(jù)的可視化是進行這方面工作不可缺少的有效手段。但可視化并不像我們想像的那么簡單,如果采用傳統(tǒng)的編程語言,要想在程序中產(chǎn)生一個圖形是相當復雜的過程,完成它不僅需要用戶掌握一定的編程技巧,同時也要耗費大量的時間和精力(這一點對任何使用過C或Fortran編程的人都應(yīng)該有所體會),這必然會影響用戶對數(shù)據(jù)本身的注意力,導致一些不必要的人力資源浪費。一個好的科技應(yīng)用軟件不但能提供給用戶功能完善的數(shù)值計算能力,而且應(yīng)該具備操作簡單、內(nèi)容完善的圖形繪制功能,這樣就能使用戶高效地進行數(shù)據(jù)處理。2.5.0簡介MATLAB正是完全考慮了這方面因素的一個成功的軟件,它不僅在數(shù)值和符號運算方面功能強大,而且在數(shù)據(jù)可視化方面的表現(xiàn)能力也極為突出。它具有對線型、曲面、視角、色彩、光線陰影等豐富的處理能力,并能以二維、三維乃至多維的形式顯示圖形數(shù)據(jù),可以將數(shù)據(jù)的各方面特征表現(xiàn)出來。MATLAB的圖形處理充分考慮了高低不同層次用戶的不同需求。系統(tǒng)具有兩個層次的繪圖指令:一個層次是直接對圖形句柄進行操作的低層繪圖指令,它具有控制和表現(xiàn)數(shù)據(jù)圖形能力強,控制靈活多變等優(yōu)點,對于有較高或特殊需求的用戶而言,該層次能夠完全滿足他們的要求;另一個層次是在底層指令基礎(chǔ)上建立起的高層繪圖指令,它的指令簡單明了,易于掌握,適用于普通用戶。2.5.1二維平面圖形基本圖形函數(shù)繪制二維圖形的最基本函數(shù)是plot,它是針對向量或矩陣的列來繪制曲線的。也就是說,使用plot函數(shù)之前,必須首先定義好曲線上每一點的x及y坐標,常用格式有:⑴plot(x)當x為一向量時,以x元素的值為縱坐標,x的序號為橫坐標值繪制曲線。⑵plot(x,y)以x元素為橫坐標值,y元素為縱坐標值繪制曲線。⑶plot(x,y1,x,y2,…)以公共的x元素為橫坐標值,以y1,y2…等為縱坐標值,繪制多條曲線。例:畫出一條正弦曲線和一條余弦曲線。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2)一般繪制曲線圖形時,人們常常采用多種顏色或線型來區(qū)分不同的數(shù)據(jù)組,MATLAB系統(tǒng)中專門提供了這方面的參數(shù)選項(表2.12)。色彩字符所定顏色線型字符線型格式y(tǒng)黃-實線m紫:點線c青-.點劃線r紅--虛線g綠b藍w白k黑標記符號數(shù)據(jù)點形式標記符號數(shù)據(jù)點形式.點<小于號o圓s正方形x叉號d菱形+加號h六角形*星號p五角星v向下的三角形^向上的三角形>大于號例:x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,‘r+-’,x,y2,‘k*:’)%組1曲線采用紅色實線并用+號顯示數(shù)據(jù)點位置%組2曲線采用黑色點線并用*號顯示數(shù)據(jù)點位置。圖形修飾MATLAB為用戶提供了一些圖形修飾函數(shù),詳細情況見下表。(表2.13)函數(shù)意義gridon(/off)給當前圖形標記添加(取消)網(wǎng)格xlabel(‘string’)標記橫坐標ylabel(‘string’)標記縱坐標title(‘string’)給圖形添加標題text(x,y,‘string’)在圖形的任意位置添加說明性文本gtext(‘string’)利用鼠標添加說明性文本信息axis([xminxmaxyminymax])設(shè)置坐標軸的最小最大值特殊符號的輸入轉(zhuǎn)義符號\ \alpha \Gamma \beta \Delta \gamma \Theta \delta \Lambda \epsilon \Xi \zeta \Pi \eta \omega \theta …

標注的顯示控制

\bf黑體

\it斜體

\rm標準形式

\fontname{fontname}字體名

\fontsize(fontsize)字體大小特殊符號如”\”、”{“、”^“等,用”\”來引導。\bfBoldface\itItalics\rmRestorenormalfont\fontname{fontname}Specifythefontnametouse\fontsize{fontsize}Specifyfontsize_{xxx}Thecharactersinsidethebracesaresubscripts.^{xxx}ThecharactersinsidethebracesaresuperscriptsCharacterSequenceSymbolCharacterSequence

SymbolCharacterSequenceSymbol\alphaα\int∫\betaβ\cong≌\gammaγ\GammaΓ\sim~\deltaδ\DeltaΔ\infty∞\epsilonε\pm±\etaη\leq≤\thetaθ\geq≥\lamdaλ\LamdaΛ\neg≠\muμ\propto∝\nuν\div÷\piπ\(zhòng)PiΠ\circ°\phiφ\leftrightarrow?\rhoρ\leftarrow←\sigmaσ\SigmaΣ\rightarrow→\tauτ\uparrow↑\omegaω\OmegaΩ\downarrow↓

Ifoneofthespecialescapecharacters\,{,},_or^mustbeprinted,precedeitbybackslashcharacter.StringResult\tau_{ind}versus\omega_{\itm}τindversusωm

\thetavariesfrom0\circto90\circθvariesfrom0oto90o

\bf{B}_{\itS}BS

例:x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2)gridon%添加網(wǎng)格xlabel('IndependentVariableX')ylabel('DependentVariableY1&Y2')title('SinandCosineCurve')text(1.5,0.3,'cos(x)')gtext('sin(x)')axis([02*pi-0.90.9])使用了圖形修飾的正弦、余弦曲線設(shè)置坐標軸最大最小值的正弦、余弦曲線圖形屏幕控制默認情況下,MATLAB每一次使用plot函數(shù)進行圖形繪制,將重新產(chǎn)生一個圖形窗口。但有時希望后續(xù)的圖形能夠和前面所繪制的圖形進行比較。MATLAB提供了兩種方法:⑴采用holdon(/off)指令,將新產(chǎn)生的圖形曲線疊加到已有的圖形上。⑵采用subplot(n,m,k)函數(shù),將函數(shù)窗口進行分割,然后在同一個視圖窗口中畫出多個小圖形。(3)figure(n)打開多個窗口(4)clf清除當前窗口內(nèi)容例:在同一窗口中繪制線段。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);y3=x;plot(x,y1,x,y2)holdon%plot(x,y3)plot(x,y2+y1)%holdoff例:在多個窗口中繪制圖形。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);y3=exp(x);y4=y1+y2;subplot(2,2,1)%plot(x,y1)subplot(2,2,2)%plot(x,y2)subplot(2,2,3)%plot(x,y3)subplot(2,2,4)%plot(x,y4)2.5.2三維立體圖形和二維圖形相對應(yīng),MATLAB提供了plot3函數(shù),可以在三維空間中繪制三維曲線,它的格式類似于plot,不過多了z方向的數(shù)據(jù)。llot3使用格式如下:

plot3(x1,y1,z1,x2,y2,z2…)其中x1,y1,z1,x2,y2,z2…等分別為維數(shù)相同的向量,分別存儲著曲線的三個坐標值,該函數(shù)的使用方式和plot類似,也可以采用多種顏色或線型來區(qū)分不同的數(shù)據(jù)組,只需在每組變量后面加上相關(guān)字符串即可實現(xiàn)該功能。例:繪制下面方程在t=[02π]的空間圖形。x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot3(y1,y2,x,'m:p')gridonxlabel('DependentVariableY1')ylabel('DependentVariableY2')zlabel('DependentVariableX')title('SineandCosineCurve')三維曲面圖在MATLAB中要繪制三維曲面,可以使用mesh(x,y,z)或surf(x,y,z)函數(shù)來實現(xiàn)。函數(shù)mesh為數(shù)據(jù)點繪制網(wǎng)格線,圖形中的每一個已知點和其附近的點用直線連接。函數(shù)surf和函數(shù)mesh的用法類似,但它可以著色表面圖,圖形中的每一個已知點和其相鄰點用平面連接。為了方便測試立體繪圖,系統(tǒng)提供了一個peaks函數(shù),它可以產(chǎn)生一個N×N的高斯分布矩陣,其對應(yīng)的圖形是一個凹凸有致的曲面,包含了三個局部極大點及三個局部極小點。利用peaks函數(shù)可以比較mesh和surf的區(qū)別。例:分別用mesh和surf函數(shù)繪制高斯矩陣的曲面。z=peaks(40);mesh(z);%以z矩陣元素和其下標為數(shù)據(jù)點繪制網(wǎng)格線surf(z);%著色表面圖在曲面繪圖中,另外一個重要的函數(shù)是函數(shù)meshgrid,其一般使用格式為:[X,Y]=meshgrid(x,y)其中x和y是向量,通過該函數(shù)可將x和y指定的區(qū)域轉(zhuǎn)換成為矩陣X和Y。這樣我們在繪圖時就可以先用meshgrid函數(shù)產(chǎn)生在x-y平面上的二維的網(wǎng)格數(shù)據(jù),再以一組z軸的數(shù)據(jù)對應(yīng)到這個二維的網(wǎng)格,即可畫出三維的曲面。例:繪制一面方程在x∈[-7.57.5],y∈[-7.57.5]的圖形。x=-7.5:0.5:7.5;y=x;%產(chǎn)生x和y兩個變量

[X,Y]=meshgrid(x,y);%形成二維網(wǎng)格數(shù)據(jù)R=sqrt(X.^2+Y.^2)+eps;%加上eps可避免當R為分母時趨近于零時會無法定義Z=sin(R)./R;%產(chǎn)生z軸數(shù)據(jù)。surf(X,Y,Z)2.5.3其它圖形函數(shù)MATLAB除了提供前面所講的繪圖函數(shù)plot以外,還提供了其它常用的繪圖函數(shù)。常用的繪圖函數(shù)見下表:函數(shù)意義loglog使用對數(shù)坐標系繪圖。semilogx橫坐標軸為對數(shù)坐標軸,縱坐標軸為線性坐標軸。semilogy橫坐標軸為線性坐標軸,縱坐標軸為對數(shù)坐標軸。polar繪制極坐標圖x=0:pi/10:2*pi;y1=sin(x);subplot(2,2,1)plot(x,y1)函數(shù)意義fill繪制實心圖bar繪制直方圖pie繪制餅圖area繪制面積圖quiver繪制向量場圖stairs繪制階梯圖stem繪制火柴桿圖subplot(2,2,2)bar(x,y1)subplot(2,2,3)fill(x,y1,'g')subplot(2,2,4)stairs(x,y1)2.5.4動畫MATLAB支持動畫的制作和放映,其制作過程比單純制作靜態(tài)圖形復雜得多,也需要更多的函數(shù)來支持。只舉一例(通過改變觀察點實現(xiàn))!例:z=peaks(40);surf(z);d=20;[azimuth,elevation]=view;rot=0:1:d;for

i=1:length(rot)view([azimuth+rot(i)elevation])drawnowend2.5.5符號表達式繪圖利用可視化技術(shù),可以將表達式進行圖形顯示,更好的理解表達式含義。MATLAB提供了兩個函數(shù)ezplot和fplot。函數(shù)fplot用來繪制數(shù)學函數(shù),其調(diào)用格式為fplot(fun,lims),其中fun就是所要繪制的函數(shù),可以是定義函數(shù)的M文件名,也可以是以x為變量的可計算字符串;其中的lims如下:lims=[XMINXMAXYMINYMAX]限定了x、y軸上的繪圖空間。例:subplot(2,2,1),fplot('humps',[01])subplot(2,2,2),fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[02*pi])subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-11-11])subplot(2,2,4),fplot('sin(1./x)',[0.010.1],1e-3)函數(shù)ezplot無需數(shù)據(jù)準備,直接畫出函數(shù)圖形,其基本格式為ezplot(f),其中f是字符串或代表數(shù)學函數(shù)的符號表達式,只有一個符號變量,可以是x,缺省情況下x軸的繪圖區(qū)域為[-2*pi,2*pi],但我們可用ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])來明確給出x的范圍,而不使用缺省值[-2*pi,2*pi]。例:y='x^2';ezplot(y)y='sin(x)';ezplot(y,[0,2*pi])2.5.6應(yīng)用舉例例1:畫出下面函數(shù)形成的立體圖。clearx=-2:0.2:2;y=-2:0.2:2;[xx,yy]=meshgrid(x,y);zz=xx.*exp(-xx.^2-yy.^2);surf(xx,yy,zz)例2:已知實驗數(shù)據(jù)如下表所示,試繪圖表示。時間數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)3112.519.8710.11213.5420.548.14315.6032.2114.17415.9240.5010.14520.6448.3140.50624.5364.5139.45730.2472.3260.11850.0085.9870.13936.3489.7740.90cleart=1:9;d1=[12.5113.5415.6015.9220.6424.5330.2450.0036.34];d2=[9.8720.5432.2140.5048.3164.5172.3285.9889.77];d3=[10.118.1414.1710.1440.5039.4560.1170.1340.90];plot(t,d1,'r.-',t,d2,'gx:',t,d3,'m*-');title('time&data');xlabel('time');ylabel('data');axis([0100100]);text(6.5,25.5,'\leftarrowdata1');text(3,43.8,'data2\rightarrow');text(4.8,30.5,'\leftarrowdata3');2.5.7習題習題1:已知向量[1,2,4,0,5,10,11,21,3,1],請繪圖表示。習題2:繪制單位圓提示:使用axis(‘square’)命令保證圖形的縱橫坐標刻度比例相同。習題3:設(shè)R分別為1,5,10和20,試繪制伏安特性曲線,U=RI。習題4:繪制的三維立體圖。習題5:繪制由函數(shù)形成的立體圖。習題6:某地區(qū)一年中每月的平均氣溫和平均降雨量如表所示,試畫出其圖形,要求標注出坐標軸、數(shù)據(jù)點的位置、數(shù)據(jù)點大小等。月份溫度降雨量10.24.622.33.638.72.1418.52.9524.63.0632.12.7736.82.2837.12.5928.34.31017.83.4116.42.112-3.23.7第6節(jié)M文件及程序調(diào)試2.6.0簡介 計算機編程語言和可編程計算器提供許多功能,它允許你根據(jù)決策結(jié)構(gòu)控制命令執(zhí)行流程。與其它高級語言如C,Fortran相比,MATLAB語言更加簡潔,編程效率更高,更加易于移植和維護。MATLAB提供了兩種源程序格式:命令文件和函數(shù)文件。這兩種具有相同的擴展名,均為“.m”又稱M文件。2.6.1命令文件命令文件類似于DOS下的批處理文件,它的執(zhí)行方式很簡單,用戶只需在MATLAB的提示符下鍵入該文件的文件名,這樣MATLAB就會自動執(zhí)行該命令文件中的各條語句。命令文件能對MATLAB空間中的數(shù)據(jù)進行處理,文件中所有語句的執(zhí)行結(jié)果也完全返回到工作中。命令文件格式適用于用戶做的需要立即得到結(jié)果的小規(guī)模運算。需介紹一下MATLAB調(diào)試器的使用方法。MATLABEditor/Debugger命令文件的創(chuàng)建與執(zhí)行(1)在FILE菜單下點擊NEW生成一個新的M文件;(2)點擊OPEN打開已存在的M文件;(3)點擊FILE菜單中的Save將編輯好的M文件保存;(4)在命令窗口中直接輸入待執(zhí)行文件的文件名或點擊FILE菜單中的RunM-file執(zhí)行已編輯好的M文件。例:顯示條形圖的程序Y=[512;837;968;555;423];bar(Y,'stack');gridonset(gca,'Layer','top')2.6.2函數(shù)文件函數(shù)文件是另一種格式的M文件,它是Matlab程序設(shè)計的主流。一般情況下,使用函數(shù)文件格式編程。新建、打開、保存與命令文件相同,在執(zhí)行時需要傳遞參數(shù);函數(shù)文件的第一行書寫格式為:

function變量名=函數(shù)名(輸入變量名和符號表達式)例:計算單變量代數(shù)式對給定自變量的值。

利用命令輸入:

s=‘3*x+2’;y=subs(s,‘x’,2);vpa(y)

程序編寫:functiony=num(s,x,a)ab=subs(s,x,a);y=vpa(ab);從上面的分析過程中,可以知道編制M函數(shù)必須遵循一定的原則,其基本格式如下:

function[返回變量列表]=函數(shù)名(輸入變量列表)注釋說明語句段,由%引導輸入、返回變量格式的檢測函數(shù)體語句例:已知兩個實數(shù)a,b和一個正整數(shù)n,給出k=1,2…n時的所有(a+b)n和(a-b)n。(1)建立函數(shù)文件mypower.mFunction[x,y]=mypower(a,b,n)%mypower.m計算(a+b)n和(a-b)nx=(a+b)^n;y=(a-b)^n;(2)建立調(diào)用上述函數(shù)文件的命令文件abc.mfunction[x,y]=abca=input(‘Pleaseinputa=’);b=input(‘Pleaseinputb=’);x=zeros(1,10);%1*10的矩陣y=zeros(1,10);%1*10的矩陣fork=1:10[x(k),y(k)]=mypower(a,b,k);endx,y運行:abc

分析(1)上例中,命令文件abc對函數(shù)mypower每做一次調(diào)用,就傳入三個參數(shù),送出兩個結(jié)果x和y。(2)返回變量如果多于1個,則應(yīng)該用方括號將它們括起來,否則可以省去方括號。輸入變量和返回

溫馨提示

  • 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

提交評論