高等教育實(shí)驗(yàn)2-M文件的編寫、函數(shù)_第1頁
高等教育實(shí)驗(yàn)2-M文件的編寫、函數(shù)_第2頁
高等教育實(shí)驗(yàn)2-M文件的編寫、函數(shù)_第3頁
高等教育實(shí)驗(yàn)2-M文件的編寫、函數(shù)_第4頁
高等教育實(shí)驗(yàn)2-M文件的編寫、函數(shù)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)2M文件及函數(shù)的編寫MATLAB語言特點(diǎn):高度簡潔,封裝化一種解釋型的編程語言“讀一句,執(zhí)行一句”效率不高,特別在遇到循環(huán)語句時(shí)程序運(yùn)行時(shí)離不開MATLAB環(huán)境M文件及函數(shù)的編寫M文件其實(shí)是一個(gè)像命令集一樣的ASCII(純文本)碼文件。正是M文件的這個(gè)特點(diǎn)造就了MATLAB強(qiáng)大的可開發(fā)性和可擴(kuò)展性。M文件的兩種形式命令式(M_Script)函數(shù)式(Function)。命令式文件就是命令行的簡單疊加,MATLAB會(huì)自動(dòng)按順序執(zhí)行文件中的命令。函數(shù)式文件主要用以解決參數(shù)傳遞和函數(shù)調(diào)用的問題。M文件及函數(shù)的編寫1.M-script文件的編寫新建M文件編寫指令調(diào)試運(yùn)行一般過程用戶在編制此類文件時(shí),只需把所要執(zhí)行的命令按行編輯到指定的文件中,程序運(yùn)行時(shí),MATLAB按行執(zhí)行這些指令。M文件及函數(shù)的編寫幾點(diǎn)規(guī)則:●建立好的書寫風(fēng)格,保持程序的可讀性?!駇為文件的擴(kuò)展名,在低版本的MATLAB中還要注意文件名不超過8位,文件名和變量的命名規(guī)則相同。●以符號(hào)%引導(dǎo)的行是注釋行、不可執(zhí)行,可供heIp命令查詢;●不需要用end語句作為M文件的結(jié)束標(biāo)志;M文件及函數(shù)的編寫●在運(yùn)行此函數(shù)之前,需要把它所在目錄加到MATLAB的搜索路徑上去或?qū)⑽募谀夸浽O(shè)為當(dāng)前日錄。新版本會(huì)提示,老版本則出錯(cuò)?!襁\(yùn)行一個(gè)程序,有多種方式。M文件及函數(shù)的編寫●強(qiáng)烈要求:從本節(jié)課開始,所有的程序和代碼,都在m文件中寫,運(yùn)行。以便儲(chǔ)存、修改、重復(fù)運(yùn)行!??!MATLAB控制流

forv=expression(表達(dá)式)

commands(執(zhí)行語勾)endfor循環(huán)語句的一般格式如下:(1)for循環(huán)結(jié)構(gòu)循環(huán)變量一般為數(shù)組循環(huán)體成對(duì)出現(xiàn)M文件及函數(shù)的編寫Whileexpression(條件式)

statementsEnd(2)while循環(huán)結(jié)構(gòu)成對(duì)出現(xiàn)M文件及函數(shù)的編寫【例1】用循環(huán)求解s=0;fori=1:100s=s+i;ends=0;i=1;whilei<=100s=s+i;i=i+1;end不用循環(huán)的方法:M文件及函數(shù)的編寫s=sum(1:100)函數(shù)名:example1_1.m【例2】用循環(huán)求解求最小的m,在這種情況下,最好用while.s=0;i=0;whiles<=10000i=i+1;s=s+i;end[s,i]判斷條件是什么?和小于10000時(shí)則一直累加M文件及函數(shù)的編寫函數(shù)名:example2_2.miflogicalexpressionstatementsendiflogicalexpressionstatements1elsestatements2endiflogicalexpression1statements1elseif

logicalexpression2statements2elsestatements3end(3)if-else-end結(jié)構(gòu)M文件及函數(shù)的編寫為何要將第三種情況放在最后?【例3】編寫M文件求>>A=[];fork=1:5forj=1:5ifk==jA(k,k)=5;

elseifabs(k-j)==1A(k,j)=1;elseA(k,j)=0;endendendM文件及函數(shù)的編寫函數(shù)名:example2_3.mSwitchexpressioncasecase_1(commands1)casecase_2(commands2)……casecase_k(commandsk)otherwise,(commands)end(4)分支語句switch-case-otherwise注意在執(zhí)行過程中,只執(zhí)行一個(gè)case后面的命令并跳出開關(guān),程序在end后繼續(xù)執(zhí)行。

M文件及函數(shù)的編寫如下兩個(gè)方法都能生成相同的數(shù)組y,但方法2的效率要高.

方法1:按循環(huán)生成數(shù)組yfort=1:5000y(t)=sin(2*pi*t/10);end方法2:利用數(shù)組運(yùn)算生成數(shù)組y,效率比方法1要優(yōu).t=1:10000;y=sin(2*pi*t/10);score=input('Pleaseinputyourscore:');ifscore>=0&score<60

disp('Youmustworkharder!');elseifscore>=60&score<80

disp('Notbad!');elseifscore>=80&score<90

disp('Great!');elseifscore>=90&score<=100

disp('Excellent!');else

disp('Areyoukidding?');end

【例4】演示if的程序,檢測(cè)輸入數(shù)據(jù).函數(shù)名:example2_4.mM文件及函數(shù)的編寫【例5】生成一個(gè)在[0,6]上的隨機(jī)數(shù),以此作為擲骰子出現(xiàn)的點(diǎn)數(shù),出現(xiàn)1,3,5顯示奇數(shù),出現(xiàn)2,4,6顯示偶數(shù),出現(xiàn)0則顯示錯(cuò)誤.disp('Play

dice,please!')%提示輸入信息Num=round(6*rand)%利用round函數(shù)產(chǎn)生在[0,6]上服從均勻分布的隨機(jī)數(shù)switchNumcase{1,3,5},

disp('Odd')case{2,4,6},

disp('Even')otherwise,

disp('Youareout!')end函數(shù)名:example2_5.m分支語句和C語言的區(qū)別:case語句中條件不能重復(fù),否則列在后面的條件將不能執(zhí)行當(dāng)開關(guān)表達(dá)式的值等于某表達(dá)式,執(zhí)行該語句后結(jié)束該結(jié)構(gòu),不用breakotherwise語句,不是default程序的執(zhí)行結(jié)果和各個(gè)case順序無關(guān)M文件及函數(shù)的編寫(5)try-catch結(jié)構(gòu)try

(commands1)catch(commands2)end該命令總被執(zhí)行,若正確,則跳出此結(jié)構(gòu)僅當(dāng)組命令1出現(xiàn)執(zhí)行錯(cuò)誤,才執(zhí)行該命令。M文件及函數(shù)的編寫3.交互式輸入(1)用戶輸入提示命令inputinput命令用來接收用戶從鍵盤輸入數(shù)據(jù)、字符串或表達(dá)式,并接收輸入值。其常用格式:運(yùn)行此命今后,將給出文字提示,并等待鍵盤輸入。>>R=input(‘whatisyourname?’,’s’)運(yùn)行此命令后,MATLAB將等待輸入,并把輸入當(dāng)做字符串,賦給變量R。>>R=input(‘Howmanyapples’)M文件及函數(shù)的編寫Pause

暫停程序等待回應(yīng);Pause(n)

程序運(yùn)行中等待n秒后繼續(xù)運(yùn)行;Pauseon

顯示其后的Pause命令,并且執(zhí)行pause命令;Pauseoff

顯示其后的pause命令,但不執(zhí)行該命令。(2)等待用戶反應(yīng)命令pause此命令用于使程序暫時(shí)終止運(yùn)行,等待用戶按任意鍵后繼續(xù)運(yùn)行。此函數(shù)的調(diào)用形式如下:M文件及函數(shù)的編寫(3)中斷命令breakbreak語句常常用在循環(huán)語句中。通過使用break語句,可不必等待循環(huán)的自然結(jié)束,而根據(jù)循環(huán)只設(shè)的條件來判斷是否跳出循環(huán)。(4)等待鍵盤輸入keyboard

使程序進(jìn)入暫時(shí)等待狀態(tài),但并沒退出執(zhí)行,可以修改參數(shù),和運(yùn)行其他指令等。(5)顯示文字或數(shù)組disp

M文件及函數(shù)的編寫4.MATLAB

函數(shù)的編寫【例5】若最大值不為10000,需修改程序?qū)和10000值的設(shè)置,不適合于M-script.函數(shù)是MATLAB編程的主流方法除了函數(shù)外,還可以采用M-script文件M-script適合于小規(guī)模M文件及函數(shù)的編寫(1)MATLAB語言的函數(shù)的基本結(jié)構(gòu)若一個(gè)function作為一個(gè)M文件存儲(chǔ),切記其存儲(chǔ)文件名應(yīng)和函數(shù)名一樣?。?)函數(shù)定義行(關(guān)鍵字function)function[out1,out2,..]=funcname(in1,in2,..)

注釋段輸入返回變量的檢測(cè)函數(shù)體語句輸入和輸出(返回)的參數(shù)個(gè)數(shù)分別由nargin和nargout兩個(gè)MATLAB保留的變量來給出。(2)第一行幫助行,以(%)開頭,作為lookfor指令搜索的行M文件及函數(shù)的編寫(3)函數(shù)體說明及有關(guān)注解以(%)開頭,用以說明函數(shù)的作用及有關(guān)內(nèi)容(4)函數(shù)體語句函數(shù)體內(nèi)使用的除返回和輸入變量這些在function語句中直接引用的變量以外的所有變量都是局部變量,即在該函數(shù)返回之后,這些變量會(huì)自動(dòng)在MATLAB的工作空間中清除掉。如果希望這些中間變量成為在整個(gè)程序中都起作用的變量,則可以將它們?cè)O(shè)置為全局變量。M文件及函數(shù)的編寫【例6】前面的要求,m,10000無需修改程序1.寫好程序,存成findsum.m文件function[s,m]=findsum(k)s=0;m=0;while(s<=k)m=m+1;s=s+m;end2.在commandwindow中調(diào)用:[s,m]=findsum(10000)M文件及函數(shù)的編寫【例8】函數(shù)的遞歸調(diào)用:階乘MATLAB函數(shù)為:functionk=my_fact(n)ifn>1k=n*my_fact(n-1);elseifn==0|n==1k=1;elseerror('Uinputawrongparameter!')end2.在commandwindow中調(diào)用:num=my_fact(11)M文件及函數(shù)的編寫1.寫好程序,存成my_fact.m文件prod(1:1000)使用tic和toc函數(shù),測(cè)試一下該函數(shù)的運(yùn)行效率。顯式程序運(yùn)行的時(shí)間。tic;num=my_fact(500);toctic;num=prod(1:1000);toc函數(shù)的函數(shù)名與存儲(chǔ)名要一致。函數(shù)名首字符必須為字母。其后可為字母數(shù)字下劃線等。長度小于31個(gè)字符。不推薦在同一文件中,寫多個(gè)函數(shù)。建議每個(gè)函數(shù)單獨(dú)寫成一個(gè)文件,由主程序調(diào)用,主程序不要寫成函數(shù)形式。函數(shù)編寫注意事項(xiàng):M文件及函數(shù)的編寫5程序設(shè)計(jì)的優(yōu)化雖然MATLAB程序語言高度集成,但由于MATLAB屬于解釋型語言,在執(zhí)行效率方面還是存在一些不足,因此,如何優(yōu)化程序,特別是在大型的運(yùn)算與仿真中,是一個(gè)很重要的話題。M文件及函數(shù)的編寫(1)以矩陣作為操作主體循環(huán)運(yùn)算是MATLAB語言的最大弱點(diǎn)。在程序設(shè)計(jì)時(shí)應(yīng)當(dāng)盡可能避免循環(huán)運(yùn)算,盡量用向量化的運(yùn)算來代替循環(huán)操作多重循環(huán),將執(zhí)行次數(shù)少循環(huán)的放在外環(huán);在MATLAB編程過程中應(yīng)當(dāng)強(qiáng)調(diào)對(duì)矩陣本身整體的運(yùn)算,避免對(duì)矩陣元素的操作。絕大多數(shù)的循環(huán)運(yùn)算是可以轉(zhuǎn)換為向量運(yùn)算;盡量使用內(nèi)部函數(shù);M文件及函數(shù)的編寫舉些簡單的例子,說明c語言和matlab的區(qū)別:例1找出數(shù)組A=[2578;47-19;3501;210113;7968]中,所有大于6的元素及其下標(biāo)[X,Y]=find(A>6);%找出下標(biāo),X存儲(chǔ)行,Y存儲(chǔ)列;B=A(A>6);%找出所有大于6的元素;高效程序:低效程序:[X,Y]=size(A);num=0;fori=1:Xforj=1:YifA(i,j)>6num=num+1;

XX(num)=i;

YY(num)=j;

data(num)=A(i,j);endendend例2找出一個(gè)數(shù)組中為素?cái)?shù)的元素isprime(A)雖然在MATLAB語言中沒有規(guī)定變雖使用時(shí)必須預(yù)先定義,但是對(duì)于未定義的變量,如果操作過程中出現(xiàn)越界賦值時(shí),系統(tǒng)將不得不對(duì)變量進(jìn)行擴(kuò)充,這樣的操作大大降低了程序運(yùn)行的效率,所以,對(duì)于可能出現(xiàn)變量維數(shù)不斷擴(kuò)大的問題,應(yīng)當(dāng)預(yù)先估計(jì)變量可能出現(xiàn)的最大維數(shù),進(jìn)行預(yù)定義。

(2)數(shù)據(jù)的預(yù)定義M文件及函數(shù)的編寫

(3)充分利用matlab中已經(jīng)集成的函數(shù)對(duì)存儲(chǔ)的合理操作及管理也會(huì)提高程序運(yùn)行的效率。MATLAB語言提供了一系列的函數(shù)用以管理內(nèi)存。函數(shù)名說明clear從內(nèi)存中清除所有變量及函數(shù)pack重新分配內(nèi)存quit退出MATLAB環(huán)境,釋放所有內(nèi)存save把指定變量存儲(chǔ)至磁盤load從磁盤中調(diào)出指定變量

(3)內(nèi)存的管理M文件及函數(shù)的編寫●執(zhí)行錯(cuò)誤的發(fā)生是由于在程序運(yùn)行過程中,出現(xiàn)溢

溫馨提示

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