adabb922 发表于 2006-4-2 11:21

MATLAB 函数编写方法与应用

<STRONG>MATLAB 函数编写方法与应用<BR><!----><BR></STRONG><FONT size=2>所谓 MATLAB 程序,大致分为两类:M 脚本文件 (M-Script) 和 M 函数 (M-function), 它们均是普通的 ASCII 码构成的文件。M 脚本文件中包含一族由 MATLAB 语言所支持的语句,它类似于 DOS 下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 &gt;&gt; 下键入该 M 文件的文件名,这样 MATLAB 就会自动执行该 M 文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。M 函数格式是 MATLAB 程序设计的主流,一般情况下, 不建议您使用 M 脚本文件格式编程。<BR>MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下: <BR><BR>function [返回变量列表] = 函数名 (输入变量列表)<BR>注释说明语句段, 由 % 引导 <BR>输入、返回变量格式的检测<BR>函数体语句 <BR><BR>这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。<BR><BR><BR>[例子]:假设我们想生成一个 n*m 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1)。我们想在编写的函数中实现下面几点: <BR><BR>1)、如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n <BR>2)、在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明 <BR>3)、检测输入和返回变量的个数,如果有错误则给出错误信息 <BR>如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。<BR><BR>采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数<BR><BR>function A=myhilb(n, m)<BR>%MYHILB a demonstrative M-function.<BR>% A=MYHILB(N, M) generates an N by M Hilbert matrix A.<BR>% A=MYHILB(N) generates an N by N square Hilbert matrix.<BR>% MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any<BR>% matrix back to the calling function.<BR>%<BR>%See als HILB.<BR><BR>% Designed by Professor Dingyu XUE, Northeastern University, PRC<BR>% 5 April, 1995, Last modified by DYX at 21 March, 2000<BR>if nargout&gt;1, error('Too many output arguments.'); end<BR>if nargin==1, m=n;<BR>elseif nargin==0 | nargin&gt;2<BR>error('Wrong number of iutput arguments.');<BR>end<BR>A1=zeros(n,m);<BR>for i=1: n<BR>for j=1:m<BR>A1(i,j)=1/(i+j-1);<BR>end, end<BR>if nargout==1, A=A1; elseif nargout==0, disp(A1); end<BR><BR><BR>这样规范编写的函数用 help 命令可以显示出其帮助信息:<BR><BR>&gt;&gt; help myhilb<BR>MYHILB a demonstrative M-function.<BR>A=MYHILB(N, M) generates an N by M Hilbert matrix A.<BR>A=MYHILB(N) generates an N by N square Hilbert matrix.<BR>MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any<BR>matrix back to the calling function.<BR><BR>See als HILB.<BR><BR><BR>有了函数之后,可以采用下面的各种方法来调用它,并产生出所需的结果。<BR><BR>&gt;&gt; A=myhilb(3,4)<BR>A =<BR>1.0000 0.5000 0.3333 0.2500<BR>0.5000 0.3333 0.2500 0.2000<BR>0.3333 0.2500 0.2000 0.1667<BR>&gt;&gt; A=myhilb(4)<BR>A =<BR>1.0000 0.5000 0.3333 0.2500<BR>0.5000 0.3333 0.2500 0.2000<BR>0.3333 0.2500 0.2000 0.1667<BR>0.2500 0.2000 0.1667 0.1429<BR>&gt;&gt; myhilb(4)<BR>1.0000 0.5000 0.3333 0.2500<BR>0.5000 0.3333 0.2500 0.2000<BR>0.3333 0.2500 0.2000 0.1667<BR>0.2500 0.2000 0.1667 0.1429<BR><BR>    另外,因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。</FONT><BR><!---->

chenxiao 发表于 2006-4-3 12:32

回复:(adabb922)MATLAB 函数编写方法与应用

顶之,写的不错

coolzn 发表于 2006-4-5 19:09

<P>不错,对matlab认识又进了一大步,这步是质量的飞跃<br>不过还有一个问题,就是这个M函数保存的时候文件名要不要和函数名一样</P>
[此贴子已经被作者于2006-4-5 19:11:56编辑过]

yuanchili 发表于 2008-11-3 00:26

顶下,看了很有启发
页: [1]
查看完整版本: MATLAB 函数编写方法与应用