matlab函數文件和腳本文件_第1頁
matlab函數文件和腳本文件_第2頁
matlab函數文件和腳本文件_第3頁
matlab函數文件和腳本文件_第4頁
matlab函數文件和腳本文件_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第五章腳本文件和函數文件編輯課件本節內容掌握腳本文件和函數文件的區別掌握函數文件的編寫和調用掌握M文件的調試方法掌握文件的翻開和關閉編輯課件§1M文件-腳本文件腳本文件只是一串按照用戶意圖排列而成的MATLAB指令集合,即只是簡單命令的疊加。它沒有輸入參數,也沒有輸出參數。它運行后產生的變量都是全局變量,均駐留在workspace中。只要用戶不使用指令clear加以去除,或MATLAB指令窗不關閉,這些變量將一直保存在根本工作空間中。編輯課件例:計算小于任意自然數n的fibonnaci數。運行文件(F5/Debug|Run〕編輯課件函數文件

函數文件是一種特殊類型的運行在自己獨立的工作空間的M文件,通過輸入形參表接收數據,通過輸出形參返回結果到調用文件。function[輸出形參表]=fname(輸入形參表)%H1注釋行%其他注釋行……〔可執行代碼〕……(return)編輯課件以function開頭的一行為引導行,是函數定義語句,表示該M文件是一個函數文件。幫助文本的首行〔H1行〕:用于help幫助使用和lookfor搜索幫助文本:指H1行之后到函數體之前的注釋行。包括函數的意義、各參數的意義、調用格式以及程序的作者、日期等。函數體是函數的執行代碼,是文件主要局部。注釋:以%開頭,可出現在程序中任意一行,用綠色表示。編譯時會被忽略,不會影響程序運行速度。編輯課件例:編寫函數計算兩點之間的距離。編輯課件當函數的輸出參數多于一個時,應該用方括號括起來,并以逗號隔開;傳遞給函數的變量不必與函數定義行中的參數同名;函數和文件的命名規那么與變量命名規那么相同;假設保存的文件名與函數名不同,那么在調用時必須使用文件名。建議:函數名與文件名應一致(系統默認)本卷須知編輯課件函數文件運行時,MATLAB會專門為其開辟一臨時工作空間〔函數空間〕,所有變量都存放于此。文件運行完畢后,該臨時空間以及所有中間變量就立即被去除;函數空間隨函數文件的調用而產生,隨調用而結束;函數文件的變量除特別聲明外均是局部變量編輯課件函數運行-調用注:1〕函數調用時,先將實參傳遞給相應的形參,實現參數傳遞,然后再執行函數的功能。2〕各實參出現的順序、個數應與形參定義的順序和個數一致,否那么會出錯。函數文件運行不能選中菜單Run,而是調用。[輸出實參表]=函數名〔輸入實參表〕

函數調用的一般格式編輯課件編輯課件腳本文件和函數文件的區別相同:擴展名都是.m,可用文件編輯器編寫不同:1〕腳本文件無輸入、輸出參數;2〕函數文件與指令空間只能通過輸入參數和輸出參數通信,中間變量不出現;3〕腳本文件產生的變量都是全局變量,存放在根本工作空間中;而函數文件產生的中間變量存放在臨時工作空間中,它隨函數的調用結束而刪除;4〕運行方式不同。編輯課件1)以ffib.m為名存盤2)MATLAB命令窗口輸入命令:>>ffib(1000)即可求小于1000的Fibonacci數。例:編寫函數求小于任意自然數n的fibonnaci數。編輯課件遞歸調用:函數調用其本身functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*nendfori=1:10fac(i)=factor(i);endfac翻開文本編輯器編寫函數文件factor.m新翻開一文件編輯器,在編寫的腳本文件中調用該函數文件factor.m編輯課件§2函數操作參數值的傳遞編輯課件編輯課件函數參數數目的可調性nargin/nargout:用于檢查被調用函數的輸入/輸出參數的數目-nargin:實際輸入參數的個數-nargout:實際輸出參數的個數在函數體內確定輸入輸出參數后可以用條件語句確定需要執行的操作編輯課件編輯課件輸入/輸出參數的可變性varagin/varargout:輸入/輸出參數列表,參數是以單元數組的形式進行傳輸functiontest(varargin)disp(['narginis'num2str(nargin)]);forv=1:numel(varargin)disp(['varargin{'num2str(v)'}is'class(varargin{v})]);endtest(1,'a',uint8(32));narginis3varargin{1}isdoublevarargin{2}ischarvarargin{3}isuint8編輯課件錯誤處理error:中斷函數并顯示出錯誤信息;warning:錯誤不是致命的,故繼續執行函數并顯示出警示信息lasterror:返回最后發生的錯誤的相關信息lastwarning:返回最后發生的錯誤的警告信息編輯課件編輯課件編輯課件局部變量和全局變量局部變量:僅存在于函數空間內部的中間變量,影響范圍僅限于函數本身;全局變量:在腳本文件或根本工作空間中定義,它可作用于整個MATLAB工作空間,所有函數都可以對其進行修改和存取;在函數內訪問全局變量,必須首先在函數內用global定義,而后才可以使用編輯課件其他函數類型匿名函數的格式:

fhandle=@(逗號分隔的參數列表)表達式內聯函數的格式:

f=inline(表達式)創立內聯表達式,假設不指出變量,用x作為自變量查看內聯函數的內容

formula(f)編輯課件函數句柄定義方法-利用@符號-利用轉換函數str2func作用-使函數調用像變量調用一樣方便-可迅速獲得同名重載函數的位置、類型-可以更大范圍內調用子函數和私有函數-提高軟件征用性和函數調用速度編輯課件[y1,y2,…]=feval(FH,arg1,arg2,…)

-執行函數句柄FH指定的計算編輯課件§3文件操作文件的翻開fid=fopen(文件名,‘翻開方式’〕其中:fid是存儲的文件句柄,它是該數據文件的唯一標識,其值大于0表示文件翻開成功;文件名名用字符串形式表示;翻開方式有r(只讀)、w(只寫)、a(追加)和r+(可讀可寫)。編輯課件文件的關閉sta=fclose(fid〕其中:sta表示關閉文件操作的返回值,假設關閉成功,返回0;否那么返回1。假設要關閉所有已翻開的文件,用fclose(‘all’).‘r’只讀方式翻開,表示該文件已存在;’r+’讀寫方式翻開文件,翻開后先讀后寫;‘w’翻開后寫入數據,更新文件;’a’在翻開的文件末端添加數據;’b’以二進制格式翻開,系統的默認形式編輯課件文件的讀和寫

fwrite是按照指定的數據精度將矩陣中的元素寫入到文件中;fread用于讀取二進制文件的數據,并將數據存入矩陣中。編輯課件

fwrite按照指定的數據精度將矩陣中的元素寫入到文件中A:用來存放寫入文件的數據;

precision:數據精度,char/int/double/float等;

count:返回所讀取的數據元素個數;

size:數據A的尺寸,N表示讀N個元素到一個列向量,inf表示讀取整個文件,[M,N]表示讀數據到M×N矩陣中,數據按列存放;

count=fwrite(fp,A,precision)[A,count]=fread(fp,size,precision)編輯課件a=[123456789];fp=fopen(‘d:\test.bin’,’wb’)%以二進制數據寫入方式翻開文件%fp=3其值大于0,表示翻開成功fwrite(fp,a,’double’)%ans=9表示寫入了9個數據fclose(fp)%ans=0表示關閉成功編輯課件

fprintf將數據按照指定的格式寫入到文件fp中

count:數據元素個數

format:數據格式。%d整數,%f浮點數,%s字符串詳情請見MATLAB幫助文件a='string'fp=fopen('d:\char1.txt','w')fprintf(fp,'%s',a)fclose(fp)fp1=fopen('d:\char1.txt','rt')b=fscanf(fp1,'%s')[A,count]=fscanf(fp,format,size)count=fprintf(fp,format,A)編輯課件§4程序的調試語法錯誤:包括詞法或文法的錯誤,如函數名的拼寫錯誤、數據不匹配、表達式書寫錯等。運行時的錯誤:根源在算法。發生錯誤時程序不會停止執行,也不會顯示錯誤位置。只有程序執行結束或出錯而返回到根本工作空間時,才知道發生了運行錯誤。但此時局部工作空間已關閉,致使錯誤很難跟蹤。應用程序的錯誤一般有兩種:編輯課件將可能出錯的語句后面的分號去掉,顯示中間結果;利用disp函數顯示中間變量的值在程序的適當位置添加keyboard語句。當程序運行至此時將暫停〔在指令窗中顯示k>>提示符〕,用戶可以查看工作區中的變量,也可改變變量的值。當輸入return指令時返回程序,繼續運行。調試方法編輯課件程序的暫停:采用pause函數可以暫停程序,直到用戶按任一鍵程序才繼續執行。假設要強行中止程序的運行,可用ctrl+c。return:結束所在函數的執行,把控制權轉至主調函數或指令窗。否那么,只有待整個被調函數執行完后,才會轉出。

keyboard:將控制權交給鍵盤,用于程序的調試及在程序運行中修改變量。編輯課件調試一個單獨的函數時,可將函數改寫為腳本文件,此時可直接對輸入參數賦值,然后以腳本方式運行該M文件;使用調試器可以準確地找到運行錯誤。通過設置斷點可使程序運行到某行暫停,查看和修改工作空間中的變量;也可以逐行運行程序,對執行流程進行完全監控。編輯課件調試器Debug

它可幫助用戶正確地找到程序出錯的位置,其常和端點breakpoint配合使用。即:通過設置斷點使程序運行到某行暫停,此時可通過觀察程序變量、表達式、調試輸出信息等來了解程序的運行情況;也可以逐行運行程序,對執行流程進行完全監控。

調試手段有:設置斷點、跟蹤和觀察變量編輯課件Debug菜單項Step〔F10〕:單步執行語句,對于函數調用可將此函數一次執行完畢StepIn〔F11〕:單步執行語句,遇到函數時那么進入函數體內單步執行StepOut〔shift+F11〕:從函數體內運行到函數體外,即從當前位置運行到調用函數語句的下一條語句編輯課件Run〔F5〕:從頭開始執行程序,直到遇到一個端點或程序結束;RuntoCursor:從當前位置運行到光標處;ExitDebugMode:退出調試工具,同時結束調試過程和程序運行過程。Set/ClearBreakpoints〔F12〕:設置或去除光標所在行的斷點ClearallBreakpoints:去除所有斷點編輯課件調試方法步驟

設置斷點:選中要設置的語句,用快捷鍵F12或用工具條上的大紅點或點擊菜單setbreakpoint注:斷點設置后,在窗口左邊框上的大紅圓點表示,非常醒目。設置斷點后,點擊菜單Debug|Run,程序便處在調試狀態。而后程序會自動在斷點處暫停,此時左邊框上的對應位置會出現一個綠色箭頭指示被中斷的語句。編輯課件單步執行各語句:此時可查看各變量的內容,以判斷程序流程是否正確。查看變量內容:可以點擊工作空間的變量,或者用鼠標指向變量名,變量的值將自動顯示。退出調試工具:選中菜單exitdebugmode去除斷點:與設置方法相同。編輯課件因collatz.m程序需要輸入參數n,故查看輸出結果不能用Run命令,而需在指令窗中輸入>>collatz(5)編輯課件§6.5程序的優化防止使用循環〔向量化編程〕要盡可能地使用向量或矩陣編程,而不是像在其他語言中對向量或矩陣的元素編程。這樣,不僅可以使程序較短,而且能大大提高運行速度。要求:編程者須熟悉數組運算和MATLAB的指令數組的預定義數組空間預配置可提高運行速度〔對高階矩陣的影響尤為明顯〕以及內存的利用率,否那么數組屢次擴維會增加內存的碎片。編輯課件

clearvr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299

溫馨提示

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

評論

0/150

提交評論