第1章MATLAB程序設(shè)計(jì)_第1頁(yè)
第1章MATLAB程序設(shè)計(jì)_第2頁(yè)
第1章MATLAB程序設(shè)計(jì)_第3頁(yè)
第1章MATLAB程序設(shè)計(jì)_第4頁(yè)
第1章MATLAB程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(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章MATLAB程序設(shè)計(jì)1.1M文件1.2程序控制結(jié)構(gòu)1.3函數(shù)文件1.1M文件用Matlab

語(yǔ)言編寫的程序稱為M文件。

M

文件以.m

為擴(kuò)展名。

M文件是由若干Matlab

命令組合在一起構(gòu)成的,它可以完成某些操作,也可以實(shí)現(xiàn)某種算法。事實(shí)上,Matlab

提供的內(nèi)部函數(shù)以及各種工具箱,都是利用Matlab

語(yǔ)言開發(fā)的M文件。用戶也可以結(jié)合自己的工作需要,開發(fā)自己的程序或工具箱。M文件可以根據(jù)調(diào)用方式的不同分為兩類:命令文件(ScriptFile)

函數(shù)文件(FunctionFile)。M文件的建立與打開

M

文件是一個(gè)文本文件,可以用任何文本編輯器來(lái)建立和編輯,通常使用Matlab

自帶的M

文件編輯器。新建一個(gè)M文件菜單操作(FileNewM-File

)

命令操作

(edit

M文件名)

命令按鈕

(

快捷鍵

)打開已有的M文件菜單操作

(FileOpen

)

命令操作(edit

M文件名)

命令按鈕

(

快捷鍵

)

雙擊M

文件在命令窗口中輸入f2cs,即可執(zhí)行該M

文件。例:編寫一個(gè)腳本文件將華氏溫度轉(zhuǎn)化為攝氏溫度命令文件舉例clear;%清除當(dāng)前工作空間中的變量f=input('PleaseinputFahrenheittemperature:');c=5*(f-32)/9;fprintf('Thecentigradetemperatureis%g\n',c);新建一個(gè)M

文件

f2cs.m,內(nèi)容如下:腳本文件運(yùn)行后,文件中所產(chǎn)生的所有變量都駐留在Matlab

當(dāng)前工作空間,可以用whos

查看。例1.1建立一個(gè)函數(shù)文件將變量a,b的值互換,然后在命令窗口調(diào)用函數(shù)文件。

首先建立函數(shù)文件fexch.m:

function[a,b]=exch(a,b)c=a;a=b;b=c;

然后在MATLAB的命令窗口調(diào)用該函數(shù)文件:

clear;x=1:10;y=[11,12,13,14;15,16,17,18];[x,y]=fexch(x,y)isfinite元素為有限值,返回真值1isinf元素為無(wú)窮大,返回真值1isnan元素為不定值,返回真值1isreal參量無(wú)虛部,返回真值1isstr參量為一個(gè)字符串,返回真值1isempty參量為空,返回真值1一些測(cè)試函數(shù)括號(hào)冪,點(diǎn)冪正號(hào),符號(hào),邏輯非乘,除,點(diǎn)乘,點(diǎn)除加,減冒號(hào)運(yùn)算關(guān)系運(yùn)算&|&&||運(yùn)算優(yōu)先級(jí)高低程序控制結(jié)構(gòu)有三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。任何復(fù)雜的程序都由這三種基本結(jié)構(gòu)組成。順序結(jié)構(gòu)1.2程序控制結(jié)構(gòu)按排列順序依次執(zhí)行各條語(yǔ)句,直到程序的最后。這是最簡(jiǎn)單的一種程序結(jié)構(gòu),一般涉及數(shù)據(jù)的輸入輸出、數(shù)據(jù)的計(jì)算或處理等。例:A=input('PleaseinputA:')數(shù)據(jù)的輸入:inputA=input(提示信息)其中提示信息為字符串,該命令要求用戶輸入A

的值(可以是數(shù)或字符串)name=input('What''syourname?')例:

輸入字符串時(shí)必須帶單引號(hào)disp(X)輸出變量X的值,可以是數(shù)值矩陣或字符串>>

B=[123;456;789];>>

disp(B)數(shù)據(jù)的輸出:disp>>

A='Hello,Tom!';>>

disp(A)例:fprintf(fid,format,variables)按指定的格式將變量的值輸出到指定的文件數(shù)據(jù)的輸出:fprintf

fid

為文件句柄,若缺省,則將變量的值輸出到屏幕上

format

用來(lái)指定數(shù)據(jù)輸出時(shí)采用的格式,常見的有

%d(整數(shù))%e(實(shí)數(shù):采用科學(xué)計(jì)數(shù)法形式)%f(實(shí)數(shù):采用浮點(diǎn)數(shù)形式)%g(由系統(tǒng)自動(dòng)選取上述兩種格式之一)

%s(輸出字符串)

format

中還可以使用一些特殊格式,如:\n

(換行)\t

(制表符)\b

(退格)

\\

(反斜桿)

%%

(百分號(hào))

>>

a='Hello';b=2.4;c=100*pi;>>

fprintf('a=%s,b=%f,c=%e\n',a,b,c)例:

format

中的輸出格式要與輸出變量一一對(duì)應(yīng)

可以沒(méi)有輸出變量>>

fprintf('TodayisMonday\n')例:

程序的暫停:pausepause或

pause(n)若想強(qiáng)行終止程序的運(yùn)行,可以使用Ctrl+c其中n

是延遲時(shí)間,以秒為單位;若缺省,則將暫停程序,直到用戶按任意鍵后繼續(xù)

pauseoff

屏蔽程序中所有

pause

的作用

pauseon

打開

pause

的作用例1.2求一元二次方程ax2+bx+c=0的根。程序如下:

a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);選擇結(jié)構(gòu)是根據(jù)給定的條件成立或不成立,分別執(zhí)行不同的語(yǔ)句。Matlab

用于實(shí)現(xiàn)選擇結(jié)構(gòu)的語(yǔ)句有if

語(yǔ)句和switch

語(yǔ)句。選擇結(jié)構(gòu)if條件語(yǔ)句單分支結(jié)構(gòu)ifexpression

(條件)

statements(語(yǔ)句組)endifexpression(條件)

statements1(語(yǔ)句組1)else

statements2(語(yǔ)句組2)end雙分支結(jié)構(gòu)if條件語(yǔ)句例1.3計(jì)算分段函數(shù)。程序如下:

x=input('請(qǐng)輸入x的值:');ifx==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));endyifexpression1(條件1)

statements1(語(yǔ)句組1)elseif

expression2(條件2)

statements2(語(yǔ)句組2)

......

elseif

expressionm

(條件m)

statementsm(語(yǔ)句組m)else

statements(語(yǔ)句組)end多分支結(jié)構(gòu)if條件語(yǔ)句例1.4輸入一個(gè)字符,若為大寫字母,則輸出其對(duì)應(yīng)的小寫字母;若為小寫字母,則輸出其對(duì)應(yīng)的大寫字母;若為數(shù)字字符則輸出其對(duì)應(yīng)的數(shù)值,若為其他字符則原樣輸出。

c=input('請(qǐng)輸入一個(gè)字符','s');ifc>='A'&c<='Z'

disp(setstr(abs(c)+abs('a')-abs('A')));

elseifc>='a'&c<='z'

disp(setstr(abs(c)-abs('a')+abs('A')));

elseifc>='0'&c<='9'disp(abs(c)-abs('0'));else

disp(c);end根據(jù)表達(dá)式的不同取值,分別執(zhí)行不同的語(yǔ)句。switchexpression(表達(dá)式)

casevalue1(表達(dá)式1)

statement1(語(yǔ)句組1)

casevalue2(表達(dá)式2)

statement2(語(yǔ)句組2)

......casevaluem

(表達(dá)式m)

statementm(語(yǔ)句組m)

otherwise

statement(語(yǔ)句組)endswitch語(yǔ)句

Matlab

首先計(jì)算expression

的值,然后將它依次與各個(gè)case

指令后的檢測(cè)值進(jìn)行比較,當(dāng)比較結(jié)果為真時(shí),就執(zhí)行相應(yīng)的語(yǔ)句組,然后跳出switch

結(jié)構(gòu)。

switch

后面的表達(dá)式expression

的值可以是一個(gè)標(biāo)量或字符串。

otherwise

指令可以不出現(xiàn)。如果所有的比較結(jié)果都為假,則執(zhí)行otherwise

后面的語(yǔ)句組,然后跳出switch

結(jié)構(gòu)。switch語(yǔ)句例1.5某商場(chǎng)對(duì)顧客所購(gòu)買的商品實(shí)行打折銷售,標(biāo)準(zhǔn)如下(商品價(jià)格用price來(lái)表示):

price<200沒(méi)有折扣

200≤price<5003%折扣

500≤price<10005%折扣

1000≤price<25008%折扣

2500≤price<500010%折扣

5000≤price14%折扣輸入所售商品的價(jià)格,求其實(shí)際銷售價(jià)格。程序如下:price=input('請(qǐng)輸入商品價(jià)格');switchfix(price/100)case{0,1}%價(jià)格小于200rate=0;case{2,3,4}%價(jià)格大于等于200但小于500rate=3/100;casenum2cell(5:9)%價(jià)格大于等于500但小于1000rate=5/100;casenum2cell(10:24)%價(jià)格大于等于1000但小于2500rate=8/100;casenum2cell(25:49)%價(jià)格大于等于2500但小于5000rate=10/100;otherwise%價(jià)格大于等于5000rate=14/100;endprice=price*(1-rate)%輸出商品實(shí)際銷售價(jià)格語(yǔ)句格式為:

try

語(yǔ)句組1catch

語(yǔ)句組2endtry語(yǔ)句先試探性執(zhí)行語(yǔ)句組1,如果語(yǔ)句組1在執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr變量,并轉(zhuǎn)去執(zhí)行語(yǔ)句組2。try語(yǔ)句例1.6矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會(huì)出錯(cuò)。先求兩矩陣的乘積,若出錯(cuò),則自動(dòng)轉(zhuǎn)去求兩矩陣的點(diǎn)乘。程序如下:

A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endC

lasterr%顯示出錯(cuò)原因循環(huán)結(jié)構(gòu)是按照給定的條件,重復(fù)執(zhí)行指定的語(yǔ)句。Matlab

用于實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語(yǔ)句有for語(yǔ)句和while語(yǔ)句循環(huán)結(jié)構(gòu)for循環(huán)forvariable=expression

statement(循環(huán)體)end循環(huán)變量

表達(dá)式expression

可以是行向量,也可以是矩陣?yán)?.7一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。程序如下:

form=100:999m1=fix(m/100);%求m的百位數(shù)字

m2=rem(fix(m/10),10);%求m的十位數(shù)字

m3=rem(m,10);%求m的個(gè)位數(shù)字

ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3

disp(m)endend例1.8已知y,當(dāng)n=100時(shí),求y的值。程序如下:

y=0;n=100;fori=1:ny=y+1/i/i;endy

例1.9求定積分。以梯形法為例,程序如下:

a=0;b=3*pi;n=1000;h=(b-a)/n;x=a;s=0;f0=exp(-0.5*x)*sin(x+pi/6);fori=1:nx=x+h;f1=exp(-0.5*x)*sin(x+pi/6);s=s+(f0+f1)*h/2;f0=f1;ends循環(huán)語(yǔ)句可以嵌套使用while循環(huán)whileexpression(條件)

statement(循環(huán)體)end不能在for

循環(huán)體內(nèi)改變循環(huán)變量的值為了提高代碼的運(yùn)行效率,應(yīng)盡可能提高代碼的向量化程度,避免

for

循環(huán)的使用如果預(yù)先就知道循環(huán)的次數(shù),則可以采用for

循環(huán);否則,如果預(yù)先無(wú)法確定循環(huán)的次數(shù),則可以使用while

循環(huán)。例1.10從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,求這些數(shù)的平均值和它們之和。程序如下:

sum=0;n=0;

val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;n=n+1;

val=input('Enteranumber(endin0):');endif(n>0)summean=sum/nend例1.11根據(jù)矩陣指數(shù)的冪級(jí)數(shù)展開式求矩陣指數(shù)。程序如下:

X=input('EnterX:');E=zeros(size(X));F=eye(size(X));n=1;whilenorm(F,1)>0E=E+F;F=F*X/n;n=n+1;endE

expm(X)

break

continue

break

語(yǔ)句用于終止循環(huán)的執(zhí)行,即跳出最內(nèi)層循環(huán)

continue

語(yǔ)句用于結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)

break

和continue

一般與if

語(yǔ)句配合使用其它流控制語(yǔ)句

return

return

語(yǔ)句用于退出正在運(yùn)行的腳本或函數(shù),通常用在函數(shù)文件中。例1.12求[100,200]之間第一個(gè)能被21整除的整數(shù)。程序如下:

forn=100:200ifrem(n,21)~=0continueendbreakendn如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu)就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。例1.13若一個(gè)數(shù)等于它的各個(gè)真因子之和,則稱該數(shù)為完數(shù),如6=1+2+3,所以6是完數(shù)。求[1,500]之間的全部完數(shù)。循環(huán)的嵌套form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==s

disp(m);endendfunction

輸出形參列表=函數(shù)名(輸入形參列表)%注釋說(shuō)明部分(可選)函數(shù)體語(yǔ)句(必須)

第一行為引導(dǎo)行,表示該M文件是函數(shù)文件函數(shù)名的命名規(guī)則與變量名相同(必須以字母開頭

)

當(dāng)輸出形參多于一個(gè)時(shí),用方括號(hào)括起來(lái)函數(shù)必須是一個(gè)單獨(dú)的M文件函數(shù)文件名必須與函數(shù)名一致以百分號(hào)開始的語(yǔ)句為注釋語(yǔ)句函數(shù)文件由function

語(yǔ)句引導(dǎo)4.3函數(shù)文件例1.14編寫函數(shù)文件求半徑為r的圓的面積和周長(zhǎng)。函數(shù)文件如下:

function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圓半徑

%s圓面積

%p圓周長(zhǎng)

%2006年2月30日編

s=pi*r*r;p=2*pi*r;函數(shù)調(diào)用的一般格式輸出實(shí)參列表=函數(shù)名(輸入實(shí)參列表)函數(shù)調(diào)用時(shí),實(shí)參的順序應(yīng)與函數(shù)定義時(shí)的形參的順序一致。函數(shù)可以嵌套調(diào)用,即一個(gè)函數(shù)可以被其它函數(shù)調(diào)用,甚至可以被它自身調(diào)用,此時(shí)稱為遞歸調(diào)用。函數(shù)所傳遞的參數(shù)具有可調(diào)性,Matlab

用兩個(gè)永久變量nargin

和nargout

分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出實(shí)參的個(gè)數(shù)。函數(shù)調(diào)用例1.15利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)(ρ,θ)之間的轉(zhuǎn)換。函數(shù)文件tran.m:

function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);調(diào)用tran.m的命令文件main1.m:

x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe%

函數(shù)文件myfactor.mfunctionf=myfactor(n)if(n<=1)f=1;elsef=n*myfactor(n-1);end%main.m%計(jì)算

s=1!+2!+3!+4!+5!%clear;s=0;fori=1:5s=s+myfactor(i);endfprintf('s=%g\n',s)例1.16

:利用函數(shù)的遞歸調(diào)用計(jì)算n!函數(shù)通過(guò)輸入和輸出參數(shù)與其它M文件進(jìn)行數(shù)據(jù)傳遞。當(dāng)函數(shù)調(diào)用完畢后,該函數(shù)文件中定義的所有局部變量都將被釋放,即全部被清除。如果在若干個(gè)M文件中,都把某個(gè)變量定義為全局變量,則這些函數(shù)將公共使用這一變量。所有函數(shù)都可以對(duì)它進(jìn)行存取和修改操作。函數(shù)文件中的變量都是局部的,即一個(gè)函數(shù)文件中定義的變量不能被另一個(gè)函數(shù)文件或其它M文件使用。全局變量與局部變量定義全局變量是M文件間傳遞信息的一種手段。變量名列表中的各個(gè)變量用空格隔開,不能用逗號(hào)!全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來(lái)了方便,但卻破壞了函數(shù)對(duì)變量的封裝,降低了程序的可讀性,因而在結(jié)構(gòu)化程序設(shè)計(jì)中,全局變量是不受歡迎的。特別是當(dāng)程序較大,子程序較多時(shí),全局變量將個(gè)程序調(diào)試和維護(hù)帶來(lái)不便,故不提倡使用全局變量。global

變量名列表全局變量的定義在使用全局變量的所有M文件中,都要對(duì)其所使用的全局變量進(jìn)行定義。例1.17全局變量應(yīng)用示例。先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。

functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;在命令窗口中輸入:

globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)子函數(shù)函數(shù)文件中可以含有一個(gè)或多個(gè)子函數(shù)

子函數(shù)由function

語(yǔ)句引導(dǎo)主函數(shù)必須位于最前面,子函數(shù)出現(xiàn)的次序任意子函數(shù)只能被主函數(shù)和位于同一個(gè)函數(shù)文件中的其它子函數(shù)調(diào)用除了用global

定義的全局變量外,子函數(shù)中的變量都是局部變量,子函數(shù)與主函數(shù)及其它子函數(shù)之間通過(guò)輸入、輸出參數(shù)進(jìn)行數(shù)據(jù)傳遞調(diào)用一個(gè)函數(shù)時(shí),Matlab

會(huì)首先檢查該函數(shù)是否為一個(gè)子函數(shù)。

Matlab

自定義函數(shù)的五種方式命令文件/函數(shù)文件+函數(shù)文件

-多個(gè)M文件自定義函數(shù)的五種方式函數(shù)文件+子函數(shù)

一個(gè)M文件

inline

-無(wú)需M文件

符號(hào)表達(dá)式

+subs

方式-無(wú)需M文件字符串+

subs

方式-無(wú)需M文件%命令/函數(shù)文件:myfile1.mclearfort=1:10;y=mylfg(t);fprintf('%4d^(1/3)=%6.4f\n',t,y);end%函數(shù)文件:mylfg.mfunctiony=mylfg(x)y=x^(1/3);函數(shù)必須單獨(dú)寫一個(gè)文件!

不能與命令文件寫在同一個(gè)文件中!函數(shù)名與文件名必須一致!調(diào)用函數(shù)時(shí)要注意實(shí)參與形參的匹配!方式(1):命令文件/函數(shù)文件+函數(shù)文件%函數(shù)文件:funtry2.mfunction

溫馨提示

  • 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)論