,按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,#,撰寫,MATLAB,程式,第,3,章,撰寫,MATLAB,程式,章節目標,1,學習如何在編輯視窗中建立具清晰註解的,M,檔,並且在命令視窗中啟動。,了解腳本和函數檔案的不同。,了解如何合併幫助,(help),註解到函數中。,了解如何設定,M,檔,使其能夠與使用者互動且提供資訊,並在命令視窗顯示結果。,了解子函數的規則及如何能存取子函數。,了解如何創造及擷取資料檔案。,章節目標,2,學習如何利用結構化的程式來撰寫清晰註解的,M,檔,並完成邏輯執行以及反覆執行。,明瞭,ifelseif,與,switch,架構的不同。,明瞭,forend,與,while,架構的不同。,了解向量化及其優點。,了解如何將函數傳遞至,M,檔。,M,檔,一個用來執行,MATLAB,的最普遍方式,就是在命令視窗中一次輸入一個指令。,M,檔提供另一條進行運算的途徑,可以擴展,MATLAB,解決問題的能力。一個,M,檔,(M-file),包括一系列可以在同一時間執行的敘述。,M,檔有兩種內涵:,腳本檔案,(script file),函數檔案,(function file),腳本檔案,所謂,腳本檔案,(script file),,是指一系列儲存於檔案中的,MATLAB,指令。,腳本檔案最常被用來保留一連串的命令,做重複的使用。,這些腳本可以在命令視窗中輸入檔案名稱來執行,或者可以利用編輯視窗中的選單,下拉後選取,Debug,及,Run,執行。,腳本檔案,(,範例,),函數檔案,所謂,函數檔案,(function file),就是以,function,這個文字起頭的,M,檔。,和腳本檔案不同,函數檔案可以接受引數並且傳回輸出值。,函數的基本架構,function,輸出變數,=,函數名稱,(,引數,1,引數,2,),%H1,列,此行可以用來,簡述,函數的功用,%,此區是函數的說明文字,可用來註解,%,函數的語法、注意事項等,函數的主體,函數定義列,H1,列,函數說明文字區,函數的主體,函數檔案,(,範例,),子函數,函數可以呼叫其他的函數,雖然這樣的函數可以以不同的,M,檔儲存,但也能以單一個,M,檔儲存。,一個,M,檔可儲存為,freefallsubfunc.m,,在此例中,第一個函數稱為,主函數,(main function or primary function),,它是唯一能在命令視窗中存取其他腳本和函數檔案的函數,其他的函數只能被視為,子,函數,(subfunctions),。,子函數檔案,(,範例,),建立與存取檔案,1,MATLAB,能讀寫資料檔,最簡單的方法是一個稱為,MAT,檔,的二進位檔案,它能以,save,和,load,的指令在,MATLAB,中執行建立與存取檔案。,建立與存取檔案,2,save,指,令被用來在工作或選擇的變數中產生,MAT,檔。其語法為:,save,filename var1 var2 varn,此指令建立一個包含,var1,到,varn,變數且名為,filename,.mat,的,MAT,檔案,假如變數被省略,所有的工作變數都會被儲存。,load,指令被用來擷取此檔案:,load,filename var1 var2 varn,此指令被用來由,filename,.mat,的,MAT,檔案中擷取,var1,到,varn,的變數,和,save,指令一樣,假如變數被省略,所有的工作變數都會被儲存。,結構化的程式,結構化的程式,M,檔會循序地執行每一個指令,也就是從函數檔案的最上面一行開始,逐行執行程式的敘述直到最後一行。因為僵化的順序會限制住功能,所有的電腦程式語言一定都包括讓程式使用非循序途徑的敘述(指令)。這些可以分類成:,決策,(Decisions),或稱,選擇,(Selection),。根據決策決定流程的分支。,迴圈,(Loop),或稱,反覆執行,(Repetition),。流程的迴圈可以讓敘述反覆地被執行。,關係運算子,邏輯運算子,(,Not,),(反相)。將表示式取邏輯上的負值。,expression,如果,expression,為真,則結果為假。相反地,如果,expression,為假,則結果為真。,&,(,And,),(以及)。用來將兩個表示式做,邏輯連接,expression,1,&,expression,2,如果兩個,expression,都為真,則結果為真。任何一個或者兩個,expression,為假,則結果為假。,|,(,Or,),(或者)。用來執行兩個表示式的,不連接,expression,1,|,expression,2,如果任何一個或者兩個,expression,為真,則結果為真。,真值表,決策,if,結構,這個結構可以讓你在邏輯條件為真時執行一組敘述。一般的語法如下:,if condition,statements,end,其中,condition,是一個邏輯表示式,不是真就是假。,決策,(,範例,),%script8_1.m,if,53,disp(5,大於,3),end,function func8_1(num),if,mod(num,2)=0,fprintf(%g,是偶數,n,num),else,fprintf(%g,是奇數,n,num),end,選擇,1,switch,結構,switch,結構和,ifelseif,結構非常相似,然而並非測試個別情況,任一分支都是基於單一測試表示式的值,方塊的程式碼會因應值的不同而執行。此外,一個選項方塊會被執行,是因為該表示式的值符合方塊的設定值。,選擇,2,switch,結構一般性的語法為:,switch,testexpression,case,value,1,statements,1,case,value,2,statements,2,.,.,.,otherwise,statements,otherwise,end,選擇,(,範例,),function test=func8_5(num),n=mod(num,2);,switch n,case 1,test=logical(0);,case 0,test=logical(1);,otherwise,disp(not a positive integer),test=logical(0);,end,迴圈,和字面上的意義一樣,迴圈可以將一個運算不斷地重複。,for,迴圈,(for loop),在進行指定次數的重複動作之後停止。,while,迴圈,(while loop),則在某一個邏輯條件成立時終止。,for,迴圈,forend,結構,一個,for,迴圈會重複執行敘述直到指定次數。一般的語法如下:,for,index,=,start,:,step,:,finish,statements,end,for,迴圈,(,範例,),%script8_2.m,total=0;,for num=2:100,if isprime(num),total=total+num;,end,end,fprintf(sum=%dn,total),while,迴圈,while,結構,while,迴圈只要某一邏輯條件仍為真,就會不停地重複執行。一般的語法如下:,while,condition,statements,end,在,while,到,end,之間的,statements,會一直重複執行,只要,condition,為真。,while,迴圈,(,範例,),%script8_5.m,total=0;,num=2;,while num f=(x)sin(2*x).*exp(-x/2),f=,(x)sin(2*x).*exp(-x/2),f(2.3),ans=,-0.3146,