matlab中m文件與m函數的學習與理解


1. m文件與m函數的區別

所謂 MATLAB 程序,大致分為兩類:

M 腳本文件 (M-Script) 和 M 函數 (M-function), 它們均是普通的 ASCII 碼構成的文件。

  M 腳本文件中包含一族由 MATLAB 語言所支持的語句,它類似於 DOS 下的批處理文件,它的執行方式很簡單,用戶只需在 MATLAB 的提示符 >> 下鍵入該 M 文件的文件名,這樣 MATLAB 就會自動執行該 M 文件中的各條語句,並將結果直接返回到 MATLAB 的工作空間。

  M 函數格式是 MATLAB 程序設計的主流,一般情況下, 不建議您使用 M 腳本文件格式編程。

  MATLAB 的 M 函數是由 function 語句引導的,其基本格式如下:

function [返回變量列表] = 函數名 (輸入變量列表) 
注釋說明語句段, 由 % 引導 
輸入、返回變量格式的檢測
函數體語句 

2.輸入變量和返回變量的個數

  這里輸入和返回變量的實際個數分別由 nargin nargout 兩個 MATLAB 保留變量來給出,只要進入該函數,MATLAB 就將自動生成這兩個變量,不論您是否直接使用這兩個變量。

  返回變量如果多於 1 個,則應該用方括號將它們括起來,否則可以省去方括號。輸入變量和返回變量之間用逗號來分割。

3.注釋語句的使用

  注釋語句段的每行語句都應該由百分號 % 引導,百分號后面的內容不執行,只起注釋作用。用戶采用 help 命令則可以顯示出來注釋語句段的內容。此外,正規的變量個數檢測也是必要的。如果輸入或返回變量格式不正確,則應該給出相應的提示。我們將通過下面的例子來演示函數編程的格式與方法。

假設我們想生成一個 nxm 階的 Hilbert 矩陣, 它的第 i 行第 j 列的元素值為 1/(i+j-1)。我們想在編寫的函數中實現下面幾點:
如果只給出一個輸入參數,則會自動生成一個方陣,即令 m=n
在函數中給出合適的幫助信息,包括基本功能、調用方式和參數說明
檢測輸入和返回變量的個數,如果有錯誤則給出錯誤信息 

  如果調用時不要求返回變量,則將顯示結果矩陣。其實在編寫程序時養成一個好的習慣,無論對程序設計者還是對程序的維護者、使用者都是大有裨益的。


4. 示例程序


  采用 MATLAB 函數編寫格式和上述要求,我們可以編寫出一個函數

function A=myhilb(n, m)
%MYHILB a demonstrative M-function.
% A=MYHILB(N, M) generates an N by M Hilbert matrix A.
% A=MYHILB(N) generates an N by N square Hilbert matrix.
% MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
% matrix back to the calling function.
%
%See also: HILB.

% Designed by Professor Dingyu XUE, Northeastern University, PRC
% 5 April, 1995, Last modified by DYX at 21 March, 2000
if nargout>1, error('Too many output arguments.'); end
if nargin==1, m=n;
elseif nargin==0 | nargin>2
error('Wrong number of iutput arguments.');
end
A1=zeros(n,m);
for i=1: n
for j=1:m
A1(i,j)=1/(i+j-1);
end, end
if nargout==1, A=A1; elseif nargout==0, disp(A1); end

這樣規范編寫的函數用 help 命令可以顯示出其幫助信息:

>> help myhilb
MYHILB a demonstrative M-function.
A=MYHILB(N, M) generates an N by M Hilbert matrix A.
A=MYHILB(N) generates an N by N square Hilbert matrix.
MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
matrix back to the calling function.

See also: HILB.

  有了函數之后,可以采用下面的各種方法來調用它,並產生出所需的結果。

>> A=myhilb(3,4)
A =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
>> A=myhilb(4)
A =
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429
>> myhilb(4)
1.0000 0.5000 0.3333 0.2500
0.5000 0.3333 0.2500 0.2000
0.3333 0.2500 0.2000 0.1667
0.2500 0.2000 0.1667 0.1429

5.MATLAB 工具箱編寫技巧

  放入一個目錄中的為某種目的專門編寫的一組 MATLAB 函數就可以組成一個工具箱。 從某種意義上說,任何一個 MATLAB 語言的使用者都可以是工具箱的作者。在一個工具箱中,應該有一個名為 Contents.m 的文件,用來描述工具箱中所有 MATLAB 函數的名稱和意義。

  

在該文件中第 1 行應該給出該工具箱的名稱,在第2行中給出該工具箱的版本與修改時間等信息。
然后分類地給出該工具箱中各類函數的最基本功能。
注意,本文件中所有的語句都應該是注釋語句,由百分號 % 引導,空行也應該由 % 引導。

  

6.檢查matlab語法錯誤

  另外,因為 MATLAB是一種解釋性語言,所以即使在某個或某些函數中存在語法錯誤,但如果沒執行到該語句時可能就不會發現該錯誤,這在一個成功的程序設計中是不能容許的。要查出某目錄中所有的M函數語法錯誤,首先應該用 cd 命令 進入該目錄,然后運行 pcode * 命令進行偽代碼轉換。因為該命令會將 MATLAB 函數轉換成偽代碼,而在轉換過程中該程序將自動翻譯每一條語句,所以一旦發現有語法錯誤,將會停止翻譯,給出錯誤信息。改正了該語法錯誤后,再重新執行 pcode 命令,直到沒有錯誤為止。至少這樣會保證目錄下所有的程序不含有語法錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM