數(shù)學(xué)實(shí)驗(yàn)課件:MATLAB程序設(shè)計(jì)_第1頁(yè)
數(shù)學(xué)實(shí)驗(yàn)課件:MATLAB程序設(shè)計(jì)_第2頁(yè)
數(shù)學(xué)實(shí)驗(yàn)課件:MATLAB程序設(shè)計(jì)_第3頁(yè)
數(shù)學(xué)實(shí)驗(yàn)課件:MATLAB程序設(shè)計(jì)_第4頁(yè)
數(shù)學(xué)實(shí)驗(yàn)課件:MATLAB程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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)介

MATLAB程序設(shè)計(jì)

MATLAB語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性強(qiáng),而且調(diào)試十分容易.它提供了兩種運(yùn)行方式:

(1)命令行方式直接在命令窗口輸入命令來(lái)實(shí)現(xiàn)計(jì)算或繪圖功能;

(2)M文件方式作為高級(jí)語(yǔ)言,它可以進(jìn)行控制流的程序設(shè)計(jì),把程序?qū)懗梢粋€(gè)由多行命令組成的程序文件,即程序擴(kuò)展名為.m的M文件,文件形式是存儲(chǔ)的,可調(diào)試,重復(fù)運(yùn)行,適合求解復(fù)雜問(wèn)題.本章介紹MATLAB程序設(shè)計(jì)功能.5.1M文件5.1.1腳本文件5.1.2函數(shù)文件5.1.3匿名函數(shù)contents5.2數(shù)據(jù)的輸入與輸出5.2.1數(shù)據(jù)的輸入5.2.2數(shù)據(jù)的輸出5.3程序結(jié)構(gòu)5.3.1順序結(jié)構(gòu)5.3.2分支結(jié)構(gòu)5.3.3循環(huán)結(jié)構(gòu)5.3.4程序優(yōu)化技術(shù)5.1M文件

簡(jiǎn)單的命令可以在MATLAB命令窗口中輸入運(yùn)行,直接得到運(yùn)算結(jié)果.在進(jìn)行復(fù)雜運(yùn)算時(shí),在命令行窗口調(diào)試程序或修改指令是不方便的.MATLAB提供了M文件編輯器,將代碼寫在M文件中,然后運(yùn)行文件即可.

M文件根據(jù)調(diào)用方式的不同分為腳本(Script)文件(也稱為命令文件)和函數(shù)(Function)文件,都是以.m為擴(kuò)展名,并且創(chuàng)建的M文件名要避免與MATLAB的內(nèi)置函數(shù)和工具箱中的函數(shù)重名.

新建M文件有以下幾種方法:

(1)在工具欄中單擊“新建腳本”,即可創(chuàng)建一個(gè)新的M文件;

(2)依次選擇“主頁(yè)”|“新建”菜單命令,然后選擇“腳本”或“函數(shù)”,即可創(chuàng)建腳本文件或函數(shù)文件;

(3)在命令窗口中執(zhí)行“edit”命令,即可創(chuàng)建一個(gè)新的M文件.

代碼編寫完畢后,可以單擊工具欄中的“運(yùn)行”按鈕,或按F5快捷鍵,可執(zhí)行整個(gè)M文件MATLAB語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性強(qiáng),而且調(diào)試十分容易.5.1.1腳本文件

腳本文件是一系列命令的集合,實(shí)際上就是將在命令窗口中逐行輸入的命令放在M文件中,MATLAB會(huì)按文件中命令的順序依次執(zhí)行.

MATLAB語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性強(qiáng),而且調(diào)試十分容易.腳本文件在運(yùn)行過(guò)程中可以調(diào)用MATLAB工作域內(nèi)所有的數(shù)據(jù),且所產(chǎn)生的所有變量均為全局變量例5.1編寫一個(gè)腳本文件將華氏溫度轉(zhuǎn)化為攝氏溫度.解

MATLAB命令如下:

clear;

f=input('PleaseinputFahrenheittemperature:');

c=5*(f-32)/9;

fprintf('Thecentigradetemperatureis%g\n',c);運(yùn)行結(jié)果為:

>>f51

PleaseinputFahrenheittemperature:95

Thecentigradetemperatureis355.1.2函數(shù)文件

為了實(shí)現(xiàn)計(jì)算中的參數(shù)傳遞,需要用到函數(shù)文件.與腳本文件不同,函數(shù)文件有一定的格式.函數(shù)文件是以第一行function語(yǔ)句為標(biāo)志的.格式為:function輸出變量=函數(shù)名(輸入變量)

函數(shù)體語(yǔ)句

當(dāng)函數(shù)具有多個(gè)輸出變量時(shí),則以方括號(hào)括起;當(dāng)函數(shù)具有多個(gè)輸入變量時(shí),則直接用圓括號(hào)括起.例如,function[xx,yy,zz]=sphere(varargin).當(dāng)函數(shù)不含輸出變量時(shí),則直接略去輸出部分或采用方括號(hào)表示MATLAB語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性強(qiáng),而且調(diào)試十分容易.例如functionlimit(f)或者function[]=limit(f)MATLAB語(yǔ)言稱為第四代編程語(yǔ)言,程序簡(jiǎn)潔、可讀性強(qiáng),而且調(diào)試十分容易.下面以MATLAB的函數(shù)文件rank.m為例,來(lái)說(shuō)明函數(shù)文件的各個(gè)部分.在命令行窗口輸入:>>typerank命令行窗口將顯示函數(shù)文件rank的內(nèi)容為:functionr=rank(A,tol)%函數(shù)定義行%RANKMatrixrank.%H1行%RANK(A)providesanestimateofthenumberoflinearly%函數(shù)幫助文本%independentrowsorcolumnsofamatrixA.%注釋行%RANK(A,TOL)isthenumberofsingularvaluesofA%thatarelargerthanTOL.Bydefault,TOL=max(size(A))*eps(norm(A)).%ClasssupportforinputA:%float:double,single%Copyright1984-2015TheMathWorks,Inc.s=svd(A);%函數(shù)體語(yǔ)句ifnargin==1tol=max(size(A))*eps(max(s));endr=sum(s>tol);

rank.m是MATLAB自帶的函數(shù),我們也可以根據(jù)自己的需要編寫一些函數(shù).函數(shù)文件必須遵循以下規(guī)則:

(1)由function開(kāi)頭;

(2)函數(shù)名必須與文件名相同;

(3)在命令行窗口調(diào)用函數(shù),調(diào)用函數(shù)時(shí)需要給輸入變量賦值.

在函數(shù)文件中,除了函數(shù)定義行和函數(shù)體語(yǔ)句外,其他部分都是可以省略的,不是必須有的.但作為一個(gè)函數(shù),為了提高函數(shù)的可用性,應(yīng)加上H1行和函數(shù)幫助文本,當(dāng)在MATLAB命令行窗口執(zhí)行“help函數(shù)文件名”時(shí),可顯示出H1行和函數(shù)幫助文本;為了提高函數(shù)的可讀性,加上適當(dāng)?shù)淖⑨專?/p>

需要注意:M文件最好直接放在MATLAB的默認(rèn)搜索路徑下,這樣就不用設(shè)置M文件的路徑了,否則應(yīng)當(dāng)重新設(shè)置路徑.另外,M文件名不應(yīng)該與MATLAB的內(nèi)置函數(shù)名以及工具箱中的函數(shù)重名,以免發(fā)生執(zhí)行錯(cuò)誤命令的現(xiàn)象.例5.2計(jì)算函數(shù)

在(1,3)處的值.解MATLAB命令如下:functionz=f52(x,y)z=5*(y-x)^2+(1-x)^3;運(yùn)行結(jié)果為:>>z=f52(2,1)z=4可得函數(shù)

在(1,3)處的值為4.例5.3計(jì)算第n個(gè)Fibonnaci數(shù).解新建函數(shù)文件fib.m,在文件中輸入以下命令:functionf=fib(n)ifn>2f=fib(n-1)+fib(n-2);elsef=1;end在命令行窗口調(diào)用函數(shù),>>f=fib(10)f=

55

可得第n個(gè)Fibonnaci數(shù)是55.5.1.3匿名函數(shù)

匿名函數(shù)是快速建立簡(jiǎn)單函數(shù)的方法,它只包含一個(gè)MATLAB表達(dá)式,可以有多個(gè)輸入和輸出.如果不需要將函數(shù)寫成函數(shù)文件,可以建立匿名函數(shù).

匿名函數(shù)的定義格式為:handle=@(inarglist)expr

匿名函數(shù)的調(diào)用格式為:

var=handle(inarglist)

其中handle是調(diào)用匿名函數(shù)時(shí)使用的函數(shù)名;inarglist是輸入?yún)?shù)列表,各參數(shù)間用逗號(hào)“,”隔開(kāi);expr是一個(gè)變量表達(dá)式.例5.4創(chuàng)建用于計(jì)算平方數(shù)的匿名函數(shù)的句柄.解>>sqr=@(x)x.^2;

>>sqr(3)

ans=

9

變量sqr是一個(gè)函數(shù)句柄.@運(yùn)算符創(chuàng)建句柄,@運(yùn)算符后面的圓括號(hào)()包括函數(shù)的輸入?yún)?shù).該匿名函數(shù)接受單個(gè)輸入x,并顯式返回單個(gè)輸出,即大小與包含平方值的x相同的數(shù)組.例5.5創(chuàng)建帶有多個(gè)輸入或輸出的函數(shù).解>>myfunction=@(x,y)(x^2+y^2+x*y);

>>z=myfunction(10,3)

z=

1395.2數(shù)據(jù)的輸入與輸出

5.2.1數(shù)據(jù)的輸入

MATLAB中在“主頁(yè)”選項(xiàng)卡中點(diǎn)擊“導(dǎo)入數(shù)據(jù)”,可以讀取數(shù)據(jù)文件.可以得到如下類型:

將所選數(shù)據(jù)導(dǎo)入為表.

列向量

將所選數(shù)據(jù)的每一列導(dǎo)入為單個(gè)m×1向量

數(shù)值矩陣

將所選數(shù)據(jù)導(dǎo)入為m×n數(shù)值數(shù)組

字符串?dāng)?shù)組

將所選數(shù)據(jù)導(dǎo)入為m×n字符串?dāng)?shù)組

元胞數(shù)組

將所選數(shù)據(jù)導(dǎo)入為可包含多種數(shù)據(jù)類型的元胞數(shù)組,例如數(shù)值數(shù)據(jù)和文本

在編寫程序時(shí),為使程序更具靈活性,有時(shí)需要程序提示用戶輸入滿足某種條件的數(shù)值或字符串,這時(shí)可以使用input函數(shù)實(shí)現(xiàn);在實(shí)際問(wèn)題中會(huì)碰到大量的數(shù)據(jù),利用load函數(shù)輸入數(shù)據(jù)文件可以方便操作,提高上機(jī)效率.函數(shù)的調(diào)用格式如下:

x=input(prompt)提示輸入數(shù)值,prompt是提示信息

str=input(prompt,'s')提示輸入字符串,prompt是提示信息,'s'指定輸入內(nèi)容為字符串例5.6請(qǐng)求一個(gè)數(shù)值輸入,然后將該輸入乘以10.解prompt='Whatistheoriginalvalue?';

x=input(prompt)

y=x*10在提示下,輸入一個(gè)數(shù)值或數(shù)組(如10)

x=

10

y=

1005.2.2數(shù)據(jù)的輸出

MATLAB提供的命令行窗口輸出函數(shù)有disp和fprintf.其中,disp函數(shù)用于輸出變量值到命令行窗口,而fprintf函數(shù)輸出指定格式的數(shù)據(jù)到命令行窗口或指定的文件中,它們的調(diào)用格式如下:disp(X)輸出變量X的值到命令窗口;fileID=fopen(filename,permission)將打開(kāi)由permission指定訪問(wèn)類型的文件(見(jiàn)表5-1);fprintf(fileID,formatSpec,A1,...,An)將指定格式的數(shù)組A1,...An按列順序?qū)懭氲絝ileID中.當(dāng)fileID缺省時(shí),寫入數(shù)據(jù)到命令窗口.其中,fileID是文件標(biāo)識(shí)符,formatSpec是輸出字段的格式(見(jiàn)表5-2),A1,...,An是數(shù)值數(shù)組或字符數(shù)組;fclose(fileID)關(guān)閉打開(kāi)的文件.類型描述類型描述'r'打開(kāi)要讀取的文件'r+'打開(kāi)要讀寫的文件'w'打開(kāi)或創(chuàng)建要寫入的新文件,放棄現(xiàn)有內(nèi)容(如果有)'w+'打開(kāi)或創(chuàng)建要讀寫的新文件,放棄現(xiàn)有內(nèi)容(如果有)'a'打開(kāi)或創(chuàng)建要寫入的新文件,追加數(shù)據(jù)到文件末尾'a+'打開(kāi)或創(chuàng)建要讀寫的新文件,追加數(shù)據(jù)到文件末尾表5-1fopen函數(shù)中文件訪問(wèn)類型permission格式碼描述格式碼描述%d整數(shù)格式%g更緊湊的%e或%f%e帶小寫字母e的科學(xué)記數(shù)格式%s輸出字符串%E帶大寫字母E的科學(xué)記數(shù)格式\n開(kāi)始新的一行%f小數(shù)格式\t制表符表5-2fprintf函數(shù)中的格式碼formatSpec例5.7輸出數(shù)據(jù)到命令行窗口.解>>A=[15150];>>S='HelloWorld.';>>disp(A)15150>>disp(S)HelloWorld.>>a=[1.023.045.06];>>fprintf('%d\n',round(a));135例5.8計(jì)算一個(gè)球的體積.解

r=input('Typeradius輸入半徑:');

Area=pi*r^2;

volume=(4/3)*pi*r^3;

fprintf('半徑Theradiusis%12.5f\n',r)

fprintf('面積Theareaofacircleis%12.5f\n',Area)

fprintf('體積Thevolumeofasphereis%12.5f\n',volume)例5.9將指數(shù)函數(shù)的短表寫入到名為exp.txt的文本文件.解x=0:.1:1;

A=[x;exp(x)];

fileID=fopen('exp.txt','w');

%創(chuàng)建并打開(kāi)文本文件exp.txt

fprintf(fileID,'%6s%12s\n','x','exp(x)');%輸出標(biāo)題文本

x

exp(x)到exp.txt

fprintf(fileID,'%6.2f%12.8f\n',A);%輸出變量A的值到exp.txt

fclose(fileID);

%關(guān)閉文本文件exp.txt運(yùn)行該文件后,可以在命令行窗口通過(guò)type命令查看文件的內(nèi)容.>>typeexp.txtxexp(x)0.001.000000000.101.105170920.201.221402760.301.349858810.401.491824700.501.648721270.601.822118800.702.013752710.802.225540930.902.459603111.002.718281835.3程序結(jié)構(gòu)

MATLAB語(yǔ)言的程序結(jié)構(gòu)與其他高級(jí)語(yǔ)言是一致的,分為順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu).5.3.1順序結(jié)構(gòu)

順序結(jié)構(gòu)是最簡(jiǎn)單的程序結(jié)構(gòu),在編寫好程序后,系統(tǒng)依次按照程序的物理位置順序執(zhí)行程序的各條語(yǔ)句,因此,這種程序比較容易編寫.但是,由于程序結(jié)構(gòu)比較單一,實(shí)現(xiàn)的功能也比較有限.例5.10輸入x,y的值,并將它們的值互換后輸出.解clear

x=input('pleaseinputx:')

y=input('pleaseinputy:')

z=x;x=y;y=z;

disp(x)

disp(y)5.3.2分支結(jié)構(gòu)

分支結(jié)構(gòu)是根據(jù)一定條件選擇執(zhí)行不同的語(yǔ)句,有if分支結(jié)構(gòu)和switch分支結(jié)構(gòu).

1if分支結(jié)構(gòu)

分為以下三種情況.

格式一:?jiǎn)畏种дZ(yǔ)句

if邏輯表達(dá)式

執(zhí)行語(yǔ)句

end

這種程序結(jié)構(gòu)比較簡(jiǎn)單,它只有一個(gè)判斷語(yǔ)句,當(dāng)表達(dá)式為真時(shí)就執(zhí)行if和end之間的語(yǔ)句,否則不執(zhí)行.格式二:雙分支語(yǔ)句if邏輯表達(dá)式

執(zhí)行語(yǔ)句1else

執(zhí)行語(yǔ)句2end如果邏輯表達(dá)式為真,就執(zhí)行語(yǔ)句1;否則,系統(tǒng)就執(zhí)行語(yǔ)句2.格式三:多分支語(yǔ)句if邏輯表達(dá)式1

執(zhí)行語(yǔ)句1elseif邏輯表達(dá)式2

執(zhí)行語(yǔ)句2elseif邏輯表達(dá)式3

執(zhí)行語(yǔ)句3……else

執(zhí)行語(yǔ)句nend

在這種形式中,當(dāng)運(yùn)行到程序的某一邏輯表達(dá)式為真時(shí),則執(zhí)行與之有關(guān)的語(yǔ)句,此時(shí)系統(tǒng)將不再檢驗(yàn)其他的邏輯表達(dá)式,即系統(tǒng)跳過(guò)其余的if-else-end結(jié)構(gòu).例5.11輸入一個(gè)百分制成績(jī),要求輸出成績(jī)等級(jí)A、B、C、D、E.其中90分~100分為A,80分~89分為B,70分~79分為C,60分~69分以下為E.解命令如下:clears=input('pleaseinputthescore:')ifs>=90&s<=100rank='A';elseifs>=80&s<=89

rank='B';elseifs>=70&s<=79rank='C';elseifs>=60&s<=69rank='D';elseifs>0&s<=59rank='E';elserank='wrongscore'endrank例5.12已知函數(shù),求.解新建函數(shù)文件f.m文件,命令如下:functiony=f(x)ifx<0y=x^2;elseifx>=0&&x<2y=exp(x);elsey=log(x);end在命令行窗口分別運(yùn)行y=f(-1),y=f(1),y=f(4),>>y=f(-1)y=1>>y=f(1)y=2.7183>>y=f(4)y=1.3863得到2switch分支結(jié)構(gòu)switch語(yǔ)句根據(jù)變量或表達(dá)式的取值不同,分別執(zhí)行不同的語(yǔ)句.格式為:switch表達(dá)式case值1

語(yǔ)句組1case值2

語(yǔ)句組2……case值m

語(yǔ)句組motherwise

語(yǔ)句組m+1end

其中分支條件可以是一個(gè)函數(shù)、變量或表達(dá)式.如果條件1與分支條件匹配就執(zhí)行語(yǔ)句1,退出循環(huán);否則,檢驗(yàn)條件2,如果條件2與分支條件匹配執(zhí)行語(yǔ)句2,退出循環(huán);否則,檢驗(yàn)條件3,…,當(dāng)所有條件都不與分支條件匹配時(shí)就執(zhí)行最后的語(yǔ)句.注意otherwise是可以省略的.例5.13從鍵盤輸入一個(gè)數(shù)字,判斷它能否被5整除.解MATLAB命令如下:n=input('請(qǐng)輸入一個(gè)數(shù)字n=')switchmod(n,5)case0fprintf('n是5的倍數(shù)',n)otherwisefprintf('n不是5的倍數(shù)',n)end運(yùn)行結(jié)果為:

請(qǐng)輸入一個(gè)數(shù)字n=36

n=

36

n不是5的倍數(shù)例5.14某商場(chǎng)對(duì)顧客所購(gòu)買的商品實(shí)行打折銷售,標(biāo)準(zhǔn)如下(商品價(jià)格用x來(lái)表示):輸入所售商品的價(jià)格,求其實(shí)際銷售價(jià)格.解MATLAB命令如下:clearprice=input('請(qǐng)輸入商品價(jià)格:');switchfix(price/100)case{0,1}

rate=0;case{2,3,4}rate=3/100;case{5:20}rate=5/100;otherwiserate=10/100;endprice=price*(1-rate)運(yùn)行結(jié)果為:請(qǐng)輸入商品價(jià)格:1800price=16205.3.3循環(huán)結(jié)構(gòu)

循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行一組語(yǔ)句,是計(jì)算機(jī)解決問(wèn)題的主要手段.1.for循環(huán)

for循環(huán)變量=初值:步長(zhǎng):終值

循環(huán)體

end例5.15求20!.解MATLAB命令如下:clear;r=1;fork=1:20r=r*k;endr運(yùn)行結(jié)果為:r=2.4329e+18可得

例5.16作出分段函數(shù)

的圖形解MATLAB命令如下:y=[];forx=-4:0.1:4ifx<=0y=[y,sin(x)];endifx>0y=[y,exp(x)-1];endendx=-4:0.1:4;plot(x,y)運(yùn)行后得到圖5-1.圖5-1分段函數(shù)圖形

2.while循環(huán)while(條件)循環(huán)體end注:while語(yǔ)句一般用于事先不能確定循環(huán)次數(shù)的情況.

例5.17求Fibonacci數(shù)列前100項(xiàng)和S.解MATLAB命令如下:clearF=[];F(1)=1;F(2)=1;i=3;s=F(1)+F(2); whilei<=100F(i)=F(i-1)+F(i-2);s=s+F(i);i=i+1;ends

運(yùn)行結(jié)果為:s=9.2737e+20可得S=9.2737×1020.

例5.18計(jì)算.解MATLAB命令如下:clear

s=0;

forn=1:500

s=s+1/n;

end

s運(yùn)行結(jié)果為:

s=

6.7928也可以利用while循環(huán)語(yǔ)句得到,命令如下:clear;s=0;n=1;whilen<=500s=s+1/n;n=n+1;ends可得

=6.7928.注:在使用循環(huán)語(yǔ)句時(shí),如果不小心陷入了死循環(huán),可以使用快捷鍵Ctrl+C強(qiáng)行中斷.5.3.4程序優(yōu)化技術(shù)

MATLAB是解釋型語(yǔ)言,計(jì)算速度較慢,所以在編程時(shí)如何提高程序的運(yùn)行速度是需要考慮的問(wèn)題.優(yōu)化程序運(yùn)行可采用以下辦法1.循環(huán)向量化

MATLAB是以矩陣為基礎(chǔ)的算法,因此有些循環(huán)可直接轉(zhuǎn)換成向量或

溫馨提示

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