中科院-matlab在科學(xué)計算中的應(yīng)用2_第1頁
中科院-matlab在科學(xué)計算中的應(yīng)用2_第2頁
中科院-matlab在科學(xué)計算中的應(yīng)用2_第3頁
中科院-matlab在科學(xué)計算中的應(yīng)用2_第4頁
中科院-matlab在科學(xué)計算中的應(yīng)用2_第5頁
已閱讀5頁,還剩127頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章MATLAB語言程序設(shè)計根底MATLAB語言的簡潔高效性MATLAB語言的科學(xué)運算功能MATLAB語言的繪圖功能MATLAB龐大的工具箱與模塊集MATLAB強大的動態(tài)系統(tǒng)仿真功能MATLAB語言是當(dāng)前國際上自動控制領(lǐng)域的首選計算機語言,也是很多理工科專業(yè)最適合的計算機數(shù)學(xué)語言。通過學(xué)習(xí)可更深入理解和掌握數(shù)學(xué)問題的求解思想,提高求解數(shù)學(xué)問題的能力,為今后其他專業(yè)課程的學(xué)習(xí)提供幫助。MATLAB語言的優(yōu)勢:1本章主要內(nèi)容MATLAB根本命令簡介MATLAB程序設(shè)計語言根底根本數(shù)學(xué)運算MATLAB語言流程控制MATLAB函數(shù)的編寫二維圖形繪制三維圖形繪制20初識MATLAB

例1-1繪制正弦曲線和余弦曲線。

x=[0:0.5:360]*pi/180;

plot(x,sin(x),x,cos(x));

例1-2求方程3x4+7x3+9x2-23=0的全部根。

p=[3,7,9,0,-23];

%建立多項式系數(shù)向量

x=roots(p)

%求根345例1-3求積分

quad('x.*log(1+x)',0,1)

例1-4求解線性方程組。

a=[2,-3,1;8,3,2;45,1,-9];

b=[4;2;17];

x=inv(a)*b67Mathematica的計算結(jié)果-〔比較〕8Mathematica的計算結(jié)果-29Mathematica的計算結(jié)果-3、410Matlab工作環(huán)境界面包含一行標(biāo)題欄、一行菜單欄、一行工具欄、五個工作窗口和一行注釋欄。五個工作窗口分別為:發(fā)射臺〔LaunchPad〕、工作區(qū)〔Workspace〕、命令歷史〔CommandHistory〕、當(dāng)前路徑〔CurrentDirectory〕和命令窗口〔CommandWindows〕。歷史命令發(fā)射臺命令窗口

標(biāo)題欄

菜單欄

常用工具欄

工作區(qū)當(dāng)前路徑112.1MATLAB根本命令簡介MATLAB通用命令12Matlab常用的窗口幫助命令13help命令直接輸入help,MATLAB將列出所有的幫助主題,每個幫助主題對應(yīng)于MATLAB搜索路徑中的一個目錄;help后加幫助主題,可獲得指定幫助主題的幫助信息;help后加函數(shù)名;help后加命令名,將得到指定命令的用法;14demo命令15helpwin命令用于翻開MATLAB的幫助文件窗16lookfor命令允許用戶通過完整的或局部關(guān)鍵字來搜索要查找的內(nèi)容who和whos的作用是列出在MATLAB工作內(nèi)存中駐留的變量名exist命令用來查找或檢查變量和函數(shù)的存在性171819怎樣獲得詳盡的幫助信息〔總結(jié)〕首先是MATLAB窗口中的help命令,它最常用、最快,往往也是最有效的。給出關(guān)鍵字就能找到相應(yīng)的說明。Help命令簡單易用,但是它要求準(zhǔn)確給出關(guān)鍵字,如果記憶不準(zhǔn),就很難找到。這時就應(yīng)該用第二種方案。HelpDesk:這是MATLAB的HTML格式的幫助文檔,有著很好的組織??梢栽诿钚墟I入helpdesk,進入“MatlabHelpDesk〞。HelpDesk的搜索可以使用不完全關(guān)鍵字,這樣即使遇到記憶模糊的情況也可以很快查到。前面兩種方法所得到的幫助信息常常是不夠細致的,需要用第三種途徑來補充,這就是電子版的使用手冊。MATLAB里包含了大量關(guān)于MATLAB安裝、使用、編程以及各種工具箱等的電子版手冊,全部為PDF格式,具有搜索功能,因此也可以在指定的手冊中搜索關(guān)鍵字,使用非常方便。20遠程幫助系統(tǒng)

在MathWorks公司的主頁(://)上可以找到很多有用的信息,國內(nèi)的一些網(wǎng)站也有豐富的信息資源。212.2MATLAB程序設(shè)計語言根底MATLAB語言的變量命名規(guī)那么是:〔1〕變量名必須是不含空格的單個詞;〔2〕變量名區(qū)分大小寫;〔3〕變量名最多不超過19個字符;〔4〕變量名必須以字母打頭,之后可以是任意字母、數(shù)字或下劃線,變量名中不允許使用標(biāo)點符號22變量分類:局部變量和全局變量永久變量〔保存常量〕只能在某一函數(shù)體內(nèi)使用,而不能從其他函數(shù)和Matlab工作空間訪問的變量,就是局部變量。在幾個函數(shù)及Matlab函數(shù)中都能使用的變量就是全局變量。〔全局變量名應(yīng)盡可能大寫,并由globe聲明〕23Matlab內(nèi)部的每一個數(shù)據(jù)元素都是用雙精度數(shù)〔double〕來表示和存儲的。變量輸出時用戶可以用format命令設(shè)置或改變輸出格式。短格式(Short):1.33330.0000短格式e方式(Shorte):1.3333e+001.2345e-06短格式g方式(Shortg):1.33330.0長格式(Long):1.333333333333330.00000123450000長格式e方式(Longe):1.33333333333333e+001.2345000000000e-06長格式g方式(Longg):1.333333333333330.0000012345銀行格式(Bank):1.330.00十六進制格式(Hex):3ff5555555553eb46231abfd71+格式(+):++有理數(shù)〔Rational〕:1/32469/200000000024MATLAB的保存常量25數(shù)學(xué)運算符號及標(biāo)點符號26〔1〕MATLAB的每條命令后,假設(shè)為逗號或無標(biāo)點符號,那么顯示命令的結(jié)果;假設(shè)命令后為分號,那么禁止顯示結(jié)果.〔2〕“%〞后面所有文字為注釋.〔3〕“...〞表示續(xù)行.數(shù)學(xué)運算符號及標(biāo)點符號27雙精度數(shù)值變量IEEE標(biāo)準(zhǔn),64位(占8字節(jié)),11指數(shù)位,53數(shù)值位和一個符號位

double()函數(shù)的轉(zhuǎn)換其他數(shù)據(jù)類型uint8(),無符號8位整形數(shù)據(jù)類型,值域為0至255,常用于圖像表示和處理?!补?jié)省存儲空間,提高處理速度〕int8(),int16(),int32(),uint16(),uint32()數(shù)值型數(shù)據(jù)結(jié)構(gòu)28所謂符號計算是指在運算時,無須事先對變量賦值,而將所得到結(jié)果以標(biāo)準(zhǔn)的符號形式來表示。MathWorks公司以Maple的內(nèi)核作為符號計算引擎〔Engine〕,依賴Maple已有的函數(shù)庫,開發(fā)了實現(xiàn)符號計算的兩個工具箱:根本符號工具箱和擴展符號工具箱。符號型變量數(shù)據(jù)類型291、sym函數(shù)sym函數(shù)的主要功能是創(chuàng)立符號變量,以便進行符號運算,也可以用于創(chuàng)立符號表達式或符號矩陣。用sym函數(shù)創(chuàng)立符號變量的一般格式為:x=sym(‘x’)其目的是將’x’創(chuàng)立為符號變量,以x作為輸出變量名。每次調(diào)用該函數(shù),可以定義一個符號變量?!惨弧扯x符號變量30【例】作符號計算:a,b,x,y均為符號運算量。在符號運算前,應(yīng)先將a,b,x,y定義為符號運算量31a=sym('a');

%定義‘a(chǎn)’為符號運算量,輸出變量名為ab=sym('b');x=sym('x');y=sym('y');[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)

%以a,b為符號常數(shù),x,y為符號變量即可得到方程組的解:x=3/ay=2/b322、syms函數(shù)syms函數(shù)的功能與sym函數(shù)類似。syms函數(shù)可以在一個語句中同時定義多個符號變量,其一般格式為:

symsvar_listvar_props例:symsabreal

symscpositive33符號型數(shù)值可采用變精度函數(shù)求值

vpa(A),或vpa(A,n)>>vpa(pi)ans=>>vpa(pi,60)34字符串型數(shù)據(jù):用單引號括起來。多維數(shù)組:是矩陣的直接擴展,多個下標(biāo)。單元數(shù)組:將不同類型數(shù)據(jù)集成到一個變量名下面,用{}表示;例:用A{i,j}可表示單元數(shù)組A的第i行,第j列的內(nèi)容。類與對象:允許用戶自己編寫包含各種復(fù)雜詳細的變量,可以定義傳遞函數(shù)。MATLAB支持的其它數(shù)據(jù)結(jié)構(gòu)35ans=36直接賦值語句

賦值變量=賦值表達式例:>>a=pi^2a=9.8696例:表示矩陣>>B=[1+9i,2+8i,3+7j;4+6j5+5i,6+4i;7+3i,8+2j1i]B=1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i7.0000+3.0000i8.0000+2.0000i0+1.0000iMATLAB的根本語句結(jié)構(gòu)37函數(shù)調(diào)用語句[返回變量列表]=函數(shù)名〔輸入變量列表〕例:[a,b,c]=my_fun(d,e,f,c)冒號表達式v=s1:s2:s3該函數(shù)生成一個行向量v,其中s1是起始值,s2是步長〔假設(shè)省略步長為1〕,s3是最大值。例:用不同的步距生成(0,p)間向量。>>v1=0:0.2:piv1=Columns1through900.20000.40000.60000.80001.00001.20001.40001.6000Columns10through161.80002.00002.20002.40002.60002.80003.000038>>v2=0:-0.1:pi%步距為負,不能生成向量,得出空矩陣v2=Emptymatrix:1-by-0>>v3=0:piv3=0123>>v4=pi:-1:0%逆序排列構(gòu)成新向量v4=3.14162.14161.14160.1416>>v5=[0:0.4:pi,pi]v5=00.40000.80001.20001.60002.00002.40002.80003.141639MATLAB以矩陣為根本的運算單元,向量和標(biāo)量作為特殊的矩陣處理:向量看作只有一行或一列的矩陣;標(biāo)量看作只有一個元素的矩陣。1、矩陣的構(gòu)造a.直接輸入b.利用內(nèi)部函數(shù)產(chǎn)生矩陣c.利用M文件產(chǎn)生矩陣d.從外部數(shù)據(jù)文件調(diào)入矩陣40A=[1,2,3;4,5,6];a.

直接輸入直接輸入需遵循以下根本規(guī)那么:整個矩陣應(yīng)以“[]〞為首尾,即整個輸入矩陣必須包含在方括號中;矩陣中,行與行之間必須用分號“;〞或Enter鍵〔按Enter鍵〕符分隔;每行中的元素用逗號“,〞或空格分隔;矩陣中的元素可以是數(shù)字或表達式,但表達式中不可包含未知的變量,MATLAB用表達式的值為該位置的矩陣元素賦值。當(dāng)矩陣中沒有任何元素時,該矩陣被稱作“空陣〞〔EmptyMatrix〕。41>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]

A=

12345678910111213141516利用表達式輸入>>B=[1,sqrt(25),9,132,6,10,7*23+sin(pi),7,11,154,abs(-8),12,16]B=1591326101437111548121642由向量構(gòu)成矩陣向量是組成矩陣的根本元素之一。向量元素需要用方括號括起來。元素之間用空格和逗號分隔生成行向量,用分號隔開生成列向量??梢园研邢蛄靠闯?n階矩陣,把列向量看成n1階矩陣。向量的構(gòu)造方法:直接輸入向量利用冒號生成向量利用linspace/logspace生成向量>>a=[1,2,3,4];>>x=0:0.5:2;%x=logspace(a,b,n)生成有n個元素的行向量x,其元素起點x(1)=10a,終點x(n)=10b。>>b=logspace(0,2,4)b=1.00004.641621.5443100.000043>>xx=00.50001.00001.50002.0000%x=linspace(a,b,n)生成有n個元素的行向量x,其元素值在a、b之間線性分布。>>y=linspace(0,2,7)

y=

00.33330.66671.00001.33331.66672.0000>>z=[-1x3]z=-1.000000.50001.00001.50002.00003.0000>>u=[y;z]u=00.33330.66671.00001.33331.66672.0000-1.000000.50001.00001.50002.00003.000044b.利用內(nèi)部函數(shù)產(chǎn)生矩陣%compan生成x向量的伴隨矩陣>>x=[2,4,6,8,10]x=

246810>>compan(x)ans=-2-3-4-51000010000100001%eye生成單位陣>>S=eye(6)S=

100000010000001000000100000010000001%ones生成全部元素為1的矩陣>>ones(3,4)ans=111111111111>>F=5*ones(3)F=555555555%zeros生成全部元素為0的矩陣>>Z=zeros(2,4)Z=00000000%rand生成均勻分布的隨機矩陣>>R=rand(4)

R=

0.95010.89130.82140.92180.23110.76210.44470.73820.60680.45650.61540.17630.48600.01850.79190.4057%生成空陣>>K=[]

K=

[]45c.利用M文件產(chǎn)生矩陣A=[1,2,3,4,56,7,8,9,1011,12,13,14,1516,17,18,19,2021,22,23,24,25]46d.從外部數(shù)據(jù)文件調(diào)入矩陣用load命令輸入用Import菜單輸入47根本語句格式B=A(v1,v2)v1、v2分別表示提取行〔列〕號構(gòu)成的向量。例:>>A=[1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0]A=1234345656787890>>B1=A(1:2:end,:)%提取全部奇數(shù)行、所有列。B1=12345678子矩陣提取48>>B2=A([3,2,1],[2,3,4])%提取3,2,1行、2,3,4列構(gòu)成子矩陣。A=B2=1234

678345645656782347890>>B3=A(:,end:-1:1)%將A矩陣左右翻轉(zhuǎn),即最后一列排在最前面。B3=432165438765098749矩陣拆分&子矩陣的提取

(1)利用冒號表達式獲得子矩陣

①A(:,j)表示取A矩陣的第j列全部元素;A(i,:)表示A矩陣第i行的全部元素;A(i,j)表示取A矩陣第i行、第j列的元素。

A(i:i+m,:)表示取A矩陣第i~i+m行的全部元素;A(:,k:k+m)表示取A矩陣第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩陣第i~i+m行內(nèi),并在第k~k+m列中的所有元素。

5051矩陣表示矩陣轉(zhuǎn)置數(shù)學(xué)表示(假設(shè)A有復(fù)數(shù)元素,先轉(zhuǎn)置再取各元素共軛復(fù)數(shù)值,Hermit轉(zhuǎn)置〕MATLAB求解B=A.’C=A’2.3根本數(shù)學(xué)運算矩陣的代數(shù)運算52矩陣加減法

C=A+BD=A-B注意維數(shù)是否相等注意其一為標(biāo)量的情形矩陣乘法數(shù)學(xué)表示MATLAB表示

C=A*B注意兩個矩陣維數(shù)相容性

53矩陣除法矩陣左除:AX=B,求XMATLAB求解:X=A\B假設(shè)A為非奇異方陣,那么X=A-1B最小二乘解〔假設(shè)A不是方陣〕矩陣右除:XA=B,求XMATLAB求解:X=B/A假設(shè)A為非奇異方陣,那么X=BA-1最小二乘解〔假設(shè)A不是方陣〕54矩陣翻轉(zhuǎn)左右翻轉(zhuǎn)B=fliplr(A)上下翻轉(zhuǎn)C=flipud(A)旋轉(zhuǎn)90o(逆時針〕D=rot90(A)如何旋轉(zhuǎn)180o?>>D=rot180(A)???Undefinedfunctionorvariable'rot180'.>>D=rot90(rot90(A))矩陣乘方A為方陣,求MATLAB實現(xiàn):F=A^x55點運算--矩陣對應(yīng)元素的直接運算數(shù)學(xué)表示:MATLAB實現(xiàn):C=A.*B例:>>A=[1,2,3;4,5,6;7,8,0];>>B=A.^AB=1427256312546656823543167772161>>C=A.*AC=1491625364964056邏輯變量:當(dāng)前版本有邏輯變量對double變量來說,非0表示邏輯1邏輯運算〔相應(yīng)元素間的運算〕與運算A&C或運算A|C非運算~A異或運算xor(A,C)矩陣的邏輯運算57各種允許的比較關(guān)系>,>=,<,<=,==,~=,find(),all(),any()例:>>AA=123456780>>find(A>=5),%大于或等于5元素的下標(biāo)ans=3568矩陣的比較運算58>>[i,j]=find(A>=5);[i,j]%顯示行標(biāo),列標(biāo)ans=A=31123224563278023>>all(A>=5)%某列元素全大于或等于5時,相應(yīng)元素為1,否那么為0。ans=000>>any(A>=5)%某列元素中含有大于或等于5時,相應(yīng)元素為1,否那么為0。ans=11159解析結(jié)果的化簡與變換MATLAB實現(xiàn):s1=simple(s)從各種方法中自動選擇最簡格式[s1,how]=simple(s)化簡并返回實際采用的化簡方法其中,s為原始表達式,s1為化簡后表達式,how為采用的化簡方法。其他常用化簡函數(shù)〔信息與格式可用help命令得出〕collect()合并同類項expand()展開多項式factor()因式分解numden()提取多項式的分子和分母sincos()三角函數(shù)的化簡60例:>>symss;>>P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)>>simple(P)%一系列化簡嘗試,得出計算機認為的最簡形式ans=(s+3)^2*(s+2)*(s+1)*(s+4)^3

61>>[a,m]=simple(P)%返回化簡方法為因式分解方法,用factor()函數(shù)將得同樣結(jié)果a=

(s+3)^2*(s+4)^3*(s^2+3*s+2)

??m=simplify??>>expand(P)ans=s^7+21*s^6+185*s^5+883*s^4+2454*s^3+3944*s^2+3360*s+115262變量替換

其中,f為原表達式,用x1*替換x1得出新的。例:求其Taylor冪級數(shù)展開>>symsabcdt;%假設(shè)這些變量均為符號變量>>f=cos(a*t+b)+sin(c*t)*sin(d*t);%定義給定函數(shù)f(t)>>f1=subs(f,{a,b,c,d,t},{0.5*pi,pi,0.25*pi,0.125*pi,4})f1=-1.000063根本數(shù)論運算下取整、上取整、四舍五入、離0近方向取整、最簡有理數(shù)、求模的余數(shù)、最大公約數(shù)、最小公倍數(shù)、質(zhì)因數(shù)分解、判定是否為質(zhì)數(shù)64例:對下面的數(shù)據(jù)進行取整運算-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187>>A=[-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187];>>floor(A)%向-inf方向取整ans=-10121-2>>ceil(A)%向+inf方向取整ans=01232-1>>round(A)%取最近的整數(shù)ans=01121-2>>fix(A)%向0的方向取整ans=00121-165例:3x3Hilbert矩陣,試用rat()函數(shù)變換>>A=hilb(3);[n,d]=rat(A)%將元素變換成最小有理數(shù),n,d分別為分子、分母矩陣。n=111111111d=12323434566例:1856120,1483720,最大公約數(shù)、最小公倍數(shù),質(zhì)因數(shù)分解。>>formatlong>>m=1856120;n=1483720;[gcd(m,n),lcm(m,n)]%求m,n的最大公約數(shù)、最小公倍數(shù)。ans=1.0e+009*0.000001960000001.40508284000000>>factor(lcm(n,m))%對lcm(n,m)進行質(zhì)因數(shù)分解。ans=22257775794767例:1-100間質(zhì)數(shù)>>A=1:10;isprime(A)%假設(shè)向量A中某個整數(shù)值為質(zhì)數(shù),那么相應(yīng)位置為1,其他為零。ans=0110101000>>A=1:100;B=A(isprime(A))B=Columns1through162357111317192329313741434753Columns17through25596167717379838997rem(A,C)%A中元素對C中元素求模得出的余數(shù)。682.4.1循環(huán)結(jié)構(gòu)for結(jié)構(gòu)while結(jié)構(gòu)2.4MATLAB語言流程控制69例:用循環(huán)求解>>s=0;fori=1:100s=s+i;end>>s=0;i=1;while(i<=100)s=s+i;

i=i+1;end>>sum(1:100)ans=5050例:用循環(huán)求解求最小的m>>s=0;m=0;while(s<=10000),m=m+1;s=s+m;end,[s,m]%求出的m即是所求ans=1001114170例:求>>tic,s=0;fori=1:100000,s=s+1/2^i+1/3^i;end;tocelapsed_time=1.1820>>tic,i=1:100000;s=sum(1./2.^i+1./3.^i);toc%向量化所需時間少elapsed_time=0.3010>>i=1:10;s=1./2.^i+1./3.^i,ss=sum(1./2.^i+1./3.^i)s=0.83330.36110.16200.07480.03540.01700.00830.00410.00200.0010ss=1.4990712.4.2轉(zhuǎn)移結(jié)構(gòu)7273例:用循環(huán)求解求最大的m>>s=0;fori=1:10000s=s+i;ifs>10000,break;endend>>ii=141742.4.3開關(guān)結(jié)構(gòu)7576和C語言的區(qū)別當(dāng)開關(guān)表達式的值等于某表達式,執(zhí)行該語句后結(jié)束該結(jié)構(gòu),不用break當(dāng)需要在開關(guān)表達式滿足假設(shè)干個表達式之一時執(zhí)行某一程序段,那么用單元形式〔用大括號把這些表達式括起來,用逗號分隔〕otherwise語句,不是C語言中的default〔但與之等價〕程序的執(zhí)行結(jié)果和各個case順序無關(guān)case語句中條件不能重復(fù),否那么列在后面的條件將不能執(zhí)行77全新結(jié)構(gòu)〔首先試探性執(zhí)行語句1,假設(shè)執(zhí)行過程中有錯,將錯誤信息賦給保存的lasterr變量,并終止這段語句的執(zhí)行,轉(zhuǎn)而執(zhí)行語句2?!硲?yīng)將不保險但快的算法放在語句1,保險的放在語句2;或語句2說明語句1失效原因。2.4.4試探結(jié)構(gòu)78函數(shù)是MATLAB編程的主流方法除了函數(shù)外,還可以采用M-script〔M-腳本文件〕文件M-script適合于小規(guī)模運算例:假設(shè)最大值不為10000,需修改程序?qū)和10000值的設(shè)置,不適合于M-script2.5MATLAB函數(shù)的編寫792.5.1MATLAB語言的函數(shù)的根本結(jié)構(gòu)nargin,nargout分別表示輸入和返回變量的實際個數(shù),此為MATLAB保存變量,只要進入該函數(shù),MATLAB就將自動生成這兩個變量。varargin,varargout輸入、輸出變量列表〔可變輸入輸出個數(shù)〕。80例:前面的要求,m,10000

function[m,s]=findsum(k)s=0;m=0;while(s<=k),m=m+1;s=s+m;end>>[m1,s1]=findsum(145323)m1=539s1=145530無需修改程序>>s=0;m=0;while(s<=10000),m=m+1;s=s+m;end,[s,m]ans=1001114181例:假設(shè)只給出一個輸入?yún)?shù),那么會自動生成一個方陣在函數(shù)中給出適宜的幫助信息檢測輸入和返回變量的個數(shù)editmyhilb82functionA=myhilb(n,m)%產(chǎn)生A=MYHILB(N,M)或A=MYHILB(N);ifnargout>1,error('Toomanyoutputarguments.');endifnargin==1,m=n;elseifnargin==0|nargin>2

error('Wrongnumberofinputarguments.');endA1=zeros(n,m);fori=1:nforj=1:mA1(i,j)=1/(i+j-1);end,endifnargout==1,A=A1;elseifnargout==0,disp(A1);end83>>helpmyhilb產(chǎn)生A=MYHILB(N,M)或A=MYHILB(N);>>A=myhilb(3,4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.1667>>A=myhilb(4)A=1.00000.50000.33330.25000.50000.33330.25000.20000.33330.25000.20000.16670.25000.20000.16670.1429>>A=myhilb(3,4,5)???Errorusing==>myhilbToomanyinputarguments.84例:函數(shù)的遞歸調(diào)用:階乘functionk=my_fact(n)ifnargin~=1,error('輸入變量個數(shù)錯誤,只能有一個輸入變量');endifnargout>1,error('輸出變量個數(shù)過多');endifabs(n-floor(n))>eps|n<0%判定n是否為整數(shù)error('n應(yīng)該為非負整數(shù)');endifn>1%如果n>1,進行遞歸調(diào)用k=n*my_fact(n-1);elseifany([01]==n)%0!=1!=1k=1;end85>>my_fact(11)ans=39916800其實MATLAB提供了求取階乘的函數(shù)factorial(),其核心算法為prod(1:n),元素乘積,從結(jié)構(gòu)上更簡單、直觀,速度也更快。>>prod(1:11)ans=39916800>>prod(1:3:11)ans=28086例:conv()可以計算兩個多項式的積用varargin實現(xiàn)任意多個多項式的積functiona=convs(varargin)a=1;fori=1:length(varargin),a=conv(a,varargin{i});end>>P=[12405];Q=[12];F=[123];D=convs(P,Q,F)D=16193645443530>>poly2sym(D)ans=x^7+6*x^6+19*x^5+36*x^4+45*x^3+44*x^2+35*x+302.5.2可變輸入輸出個數(shù)87>>E=conv(conv(P,Q),F)%假設(shè)采用conv()函數(shù),那么需要嵌套調(diào)用E=16193645443530>>poly2sym(E)ans=x^7+6*x^6+19*x^5+36*x^4+45*x^3+44*x^2+35*x+30>>G=convs(P,Q,F,[1,1],[1,3],[1,1])G=1115617637657867864852731590882.5.3inline函數(shù)和匿名函數(shù)inline函數(shù),可以免去文件f=inline(‘sin(x.^2+y.^2)’,’x’,’y’)MATLAB7.0(匿名函數(shù)〕892.6二維圖形繪制2.6.1二維圖形繪制根本語句構(gòu)造向量:9091例:選項為紅色點劃線且每個轉(zhuǎn)折點用五角星表示‘r-.pentagram’92例:>>x=[-pi:0.05:pi];%以0.05為步距構(gòu)造自變量向量>>y=sin(tan(x))-tan(sin(x));%求出各個點上的函數(shù)值>>plot(x,y)>>plot(x,y,'r-.pentagram')93>>x=[-pi:0.05:-1.8,-1.801:.001:-1.2,-1.2:0.05:1.2,...1.201:0.001:1.8,1.81:0.05:pi];%以變步距方式構(gòu)造自變量向量>>y=sin(tan(x))-tan(sin(x));%求出各個點上的函數(shù)值>>plot(x,y)%繪制曲線94例:>>x=[-2:0.02:2];%生成自變量向量>>y=1.1*sign(x).*(abs(x)>1.1)+x.*(abs(x)<=1.1);plot(x,y)>>plot([-2,-1.1,1.1,2],[-1.1,-1.1,1.1,1.1])95圖形元素屬性獲取與修改圖形中,每條曲線、坐標(biāo)軸、圖形窗口分別是一個對象??捎胹et()函數(shù)設(shè)置對象的屬性,用get()函數(shù)獲得對象的某個屬性。這兩個語句在界面編程中特別有用。96繪制多根二維曲線1.plot函數(shù)的輸入?yún)?shù)是矩陣形式(1)當(dāng)x是向量,y是有一維與x同維的矩陣時,那么繪制出多根不同顏色的曲線。曲線條數(shù)等于y矩陣的另一維數(shù),x被作為這些曲線共同的橫坐標(biāo)。(2)當(dāng)x,y是同維矩陣時,那么以x,y對應(yīng)列元素為橫、縱坐標(biāo)分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。97(3)對只包含一個輸入?yún)?shù)的plot函數(shù),當(dāng)輸入?yún)?shù)是實矩陣時,那么按列繪制每列元素值相對其下標(biāo)的曲線,曲線條數(shù)等于輸入?yún)?shù)矩陣的列數(shù)。當(dāng)輸入?yún)?shù)是復(fù)數(shù)矩陣時,那么按列分別以元素實部和虛部為橫、縱坐標(biāo)繪制多條曲線。982.含多個輸入?yún)?shù)的plot函數(shù)調(diào)用格式為:plot(x1,y1,x2,y2,…,xn,yn)〔1〕當(dāng)輸入?yún)?shù)都為向量時,x1和y1,x2和y2,…,xn和yn分別組成一組向量對,每一組向量對的長度可以不同。每一向量對可以繪制出一條曲線,這樣可以在同一坐標(biāo)內(nèi)繪制出多條曲線?!?〕當(dāng)輸入?yún)?shù)有矩陣形式時,配對的x,y按對應(yīng)列元素為橫、縱坐標(biāo)分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。99例分析以下程序繪制的曲線。x1=linspace(0,2*pi,100);x2=linspace(0,3*pi,100);x3=linspace(0,4*pi,100);y1=sin(x1);y2=1+sin(x2);y3=2+sin(x3);x=[x1;x2;x3]';y=[y1;y2;y3]';plot(x,y,x1,y1-1)1003.具有兩個縱坐標(biāo)標(biāo)度的圖形在MATLAB中,如果需要繪制出具有不同縱坐標(biāo)標(biāo)度的兩個圖形,可以使用plotyy繪圖函數(shù)。調(diào)用格式為:plotyy(x1,y1,x2,y2)其中x1,y1對應(yīng)一條曲線,x2,y2對應(yīng)另一條曲線。橫坐標(biāo)的標(biāo)度相同,縱坐標(biāo)有兩個,左縱坐標(biāo)用于x1,y1數(shù)據(jù)對,右縱坐標(biāo)用于x2,y2數(shù)據(jù)對。101例用不同標(biāo)度在同一坐標(biāo)內(nèi)繪制曲線y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);1024.圖形保持

holdon/off命令控制是保持原有圖形還是刷新原有圖形,不帶參數(shù)的hold命令在兩種狀態(tài)之間進行切換。例采用圖形保持,在同一坐標(biāo)內(nèi)繪制曲線y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)holdony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2);holdoff103例在同一坐標(biāo)內(nèi),分別用不同線型和顏色繪制曲線y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx),標(biāo)記兩曲線交叉點。程序如下:x=linspace(0,2*pi,1000);y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);k=find(abs(y1-y2)<1e-2);

%查找y1與y2相等點(近似相等)的下標(biāo)x1=x(k);

%取y1與y2相等點的x坐標(biāo)y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);

%求y1與y2值相等點的y坐標(biāo)plot(x,y1,x,y2,'k:',x1,y3,'bp');104

圖形標(biāo)注與坐標(biāo)控制1.圖形標(biāo)注有關(guān)圖形標(biāo)注函數(shù)的調(diào)用格式為:title(圖形名稱)xlabel(x軸說明)ylabel(y軸說明)text(x,y,圖形說明)legend(圖例1,圖例2,…)函數(shù)中的說明文字,除使用標(biāo)準(zhǔn)的ASCII字符外,還可使用LaTeX格式的控制字符,這樣就可以在圖形上添加希臘字母、數(shù)學(xué)符號及公式等內(nèi)容。例如,text(0.3,0.5,‘sin({\omega}t+{\beta})’)將得到標(biāo)注效果sin(ωt+β)。105例3-7在0≤x≤2

區(qū)間內(nèi),繪制曲線y1=2e-0.5x和y2=cos(4πx),并給圖形添加圖形標(biāo)注。程序如下:x=0:pi/100:2*pi;y1=2*exp(-0.5*x);y2=cos(4*pi*x);plot(x,y1,x,y2)title('xfrom0to2{\pi}');%加圖形標(biāo)題xlabel('VariableX');%加X軸說明ylabel('VariableY');%加Y軸說明text(0.8,1.5,'曲線y1=2e^{-0.5x}');%在指定位置添加圖形說明text(2.5,1.1,'曲線y2=cos(4{\pi}x)');legend(‘y1’,‘y2’)%加圖例106對函數(shù)自適應(yīng)采樣的繪圖函數(shù)fplot函數(shù)的調(diào)用格式為:fplot(fname,lims,tol,選項)其中fname為函數(shù)名,以字符串形式出現(xiàn),lims為x,y的取值范圍,tol為相對允許誤差,其系統(tǒng)默認值為2e-3。選項定義與plot函數(shù)相同。例用fplot函數(shù)繪制f(x)=cos(tan(πx))的曲線。命令如下:fplot('cos(tan(pi*x))',[0,1],1e-4)107圖形窗口的分割subplot函數(shù)的調(diào)用格式為:subplot(m,n,p)該函數(shù)將當(dāng)前圖形窗口分成m×n個繪圖區(qū),即每行n個,共m行,區(qū)號按行優(yōu)先編號,且選定第p個區(qū)為當(dāng)前活動區(qū)。在每一個繪圖區(qū)允許以不同的坐標(biāo)系單獨繪制圖形。例在圖形窗口中,以子圖形式同時繪制多根曲線。(練習(xí)做兩個圖,左側(cè)是Sin(x),右側(cè)為Cos(x))108x=0:0.05:2*piy=sin(x)z=cos(x)subplot(1,2,1);plot(x,y)subplot(1,2,2)plot(x,z)109110例:繪制極坐標(biāo)曲線>>theta=0:0.01:6*pi;rho=5*sin(4*theta/3);polar(theta,rho)>>rho=5*sin(theta/3);polar(theta,rho)周期確定,可以采用試湊方法1111122.6.3隱函數(shù)繪制及應(yīng)用隱函數(shù)例:>>ezplot(‘x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)’)%x自選

>>ezplot('x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)',[-1010])1132.7三維圖形繪制114例繪制三維曲線。程序如下:t=0:pi/100:20*pi;x=sin(t);y=cos(t);z=t.*sin(t).*cos(t);plot3(x,y,z);title('Linein3-DSpace');xlabel('X');ylabel('Y');zlabel('Z');gridon;115例:參數(shù)方程>>t=0:.1:2*pi;%構(gòu)造t向量,注意下面的點運算>>x=t.^3.*sin(3*t).*exp(-t);y=t.^3.*cos(3*t).*exp(-t);z=t.^2;>>plot3(x,y,z),grid%三維曲線繪制>>stem3(x,y,z);holdon;plot3(x,y,z),grid1162.7.2三維曲面繪制一般曲面繪制mesh()繪制網(wǎng)格圖,surf()繪制外表圖。其它函數(shù),光照下surfl(),等高線surfc(),瀑布型waterfall()等高線繪制contour(),contour3()117產(chǎn)生三維數(shù)據(jù)——Matlab實現(xiàn)說明在MATLAB中,利用meshgrid函數(shù)產(chǎn)生平面區(qū)域內(nèi)的網(wǎng)格坐標(biāo)矩陣。其格式為:x=a:d1:b;y=c:d2:d;[X,Y]=meshgrid(x,y);語句執(zhí)行后,矩陣X的每一行都是向量x,行數(shù)等于向量y的元素的個數(shù),矩陣Y的每一列都是向量y,列數(shù)等于向量x的元素的個數(shù)。118例繪制三維曲面圖z=sin(x+sin(y))-x/10。程序如下:[x,y]=meshgrid(0:0.25:4*pi);z=sin(x+sin(y))-x/10;mesh(x,y,z);axis([04*pi04*pi-2.51]);119例:Butterworth濾波器>>[x,y]=meshgrid(0:31);n=2;D0=200;>>D=sqrt((x-16).^2+(y-16).^2);%求距離>>z=1./(1+D.^(2*n)/D0);mesh(x,y,z),%計算并繪制濾波器>>axis([0,31,0,31,0,1])%重新設(shè)置坐標(biāo)系,增大可讀性>>s

溫馨提示

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

評論

0/150

提交評論