通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 机械电子 >> MATLAB >> Matlab基础 >> 文章正文
M文件函数
责任编辑:admin   更新日期:2005-8-6
   使用MATLAB函数时,例如inv,abs,anglesqrt,MATLAB获取传递给它的变量,利用所给的输入,计算所要求的结果。然后,把这些结果返回。由函数执行的命令,以及由这些命令所创建的中间变量,都是隐含的。所有可见的东西是输入和输出,也就是说函数是一个黑箱。

   这些属性使得函数成为强有力的工具,用以计算命令。这些命令包括在求解一些大的问题时,经常出现的有用的数学函数或命令序列。由于这个强大的功能,MATLAB提供了一个创建用户函数的结构,并以M文件的文本形式存储在计算机上。MATLAB函数fliplr是一个M文件函数良好的例子。

         functiony=fliplr(x)

         % FLIPLRFlipmatrixintheleft/rightdirection.

         %      FLIPLR(X)returnsXwithrowpreservedandcolumnsflipped

         %      intheleft/rightdirection.

         %      

         %      X=1 2 3    becomes 3 2 1

         %         4 5 6             6 5 4

         %

         %      SeealsoFLIPUD,ROT90.

         %      Copyright(c)1984-94byTheMathWorks,Inc.

         [m,n]=size(x);

         y=x(:,n:-1:1);

   一个函数M文件与脚本文件类似之处在于它们都是一个有.m扩展名的文本文件。如同脚本M文件一样,函数M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。一个函数的M文件与脚本文件在通信方面是不同的。函数与MATLAB工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数内中间变量不出现在MATLAB工作空间,或与MATLAB工作空间不交互。正如上面的例子所看到的,一个函数的M文件的第一行把M文件定义为一个函数,并指定它的名字。它与文件名相同,但没有.m扩展名。它也定义了它的输入和输出变量。接下来的注释行是所展示的文本,它与帮助命令:»helpfliplr相对应。第一行帮助行称为H1行,是由lookfor命令所搜索的行。最后,M文件的其余部分包含了MATLAB创建输出变量的命令。

8.1 规则和属性

   M文件函数必须遵循以下特定的规则。除此之外,它们有许多的重要属性。包括:

   1. 函数名和文件名必须相同。例如,函数fliplr存储在名为fliplr.m文件中。

   2. MATLAB头一次执行一个M文件函数时,它打开相应的文本文件并将命令编辑成存储器的内部表示,以加速执行以后所有的调用。如果函数包含了对其它M文件函数的引用,它们也同样被编译到存储器。普通的脚本M文件不被编译,即使它们是从函数M文件内调用;打开脚本M文件,调用一次就逐行进行注释。

   3. 在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,返回该文本。例如,»helpfliplr返回上述前八行注释。

   4. 第一行帮助行,名为H1行,是由lookfor命令搜索的行。

   5. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。

   6. 函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误。

   7. 当函数有一个以上输出变量时,输出变量包含在括号内。例如,[V,D]=eig(A)。不要把这个句法与等号右边的[V,D]相混淆。右边的[V,D]是由数组V和D所组成。

   8. 当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。例如,考虑MATLAB函数linspace

         functiony=linspace(d1,d2,n)

         % LINSPACELinearlyspacedvector.

         %      LINSPACE(x1,x2)generatesarowvectorof100linearly

         %      equallyspacedpointsbetweenx1andx2.

         %      LINSPACE(x1,x2,N)generatesNpointsbetweenx1andx2.

         %

         %      SeealsoLOGSPACE,:.

         %      Copyright(c)1984-94byTheMathWorks,Inc.

         ifnargin==2

            n=100;

         end

         y=[d1+(0:n-2)*(d2-d1)/(n-1)d2];

   这里,如果用户只用两个输入参量调用linspace,例如linspace(0,10)linspace产生100个数据点。相反,如果输入参量的个数是3,例如,linspace(0,10,50),第三个参量决定数据点的个数。

   可用一个或两个输出参量调用的函数的一个例子是MATLAB函数size。尽管这个函数不是一个M文件函数(它是一个内置函数),size函数的帮助文本说明了它的输出参量的选择。

         SIZE Matrixdimensions.

                 D=SIZE(X),forM-by-NmatrixX,returnsthetwo-element

                 rowvectorD=[M,N]containingthenumberofrowsandcolumns

                 inthematrix.

 

                 [M,N]=SIZE(X)returnsthenumberofrowsandcolumns

                 inseparateoutputvariables.

   如果函数仅用一个输出参量调用,就返回一个二元素的行,它包含行数和列数。相反,如果出现两个输出参量,size分别返回行和列。在M文件函数里,变量nargout可用来检验输出参量的个数,并按要求修正输出变量的创建。

   9. 当一个函数说明一个或多个输出变量,但没有要求输出时,就简单地不给输出变量赋任何值。MATLAB函数toc阐明了这个属性。

         functiont=toc

         % TOC     Readthestopwatchtimer.

         %      TOC,byitself,printstheelapsedtimesinceTICwasused.

         %      t=TOC;savestheelapsedtimeint,insteadofprintingitout.

         %

         %      SeealsoTIC,ETIME,CLOCK,CPUTIME.

         %      Copyright(c)1984-94byTheMathWorks,Inc.

         % TOCusesETIMEandthevalueofCLOCKsavedbyTIC.

         globalTICTOC

         ifnargout<1

           elapsed_time=etime(clock,TICTOC)

         else

           t=etime(clock,TICTOC);

         end

   如果用户用不以输出参量调用toc,例如,»toc,就不指定输出变量t的值,函数在命令窗口显示函数工作空间变量elapsed_time,但在MATLAB工作空间里不创建变量。相反,如果toc是以»out=toc调用,则按变量out将消逝的时间返回到命令窗口。

   10. 函数有它们自己的专用工作空间,它与MATLAB的工作空间分开。函数内变量与MATLAB工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在函数执行期间临时存在,以后就消失。因此,从一个调用到下一个调用,在函数工作空间变量存储信息是不可能的。(然而,如下所述,使用全局变量就提供这个特征。)

   11. 如果一个预定的变量,例如,pi在MATLAB工作空间重新定义,它不会延伸到函数的工作空间。逆向有同样的属性,即函数内的重新定义变量不会延伸到MATLAB的工作空间中。

   12. 当调用一个函数时,输入变量不会拷贝到函数的工作空间,但使它们的值在函数内可读。然而,改变输入变量内的任何值,那么数组就拷贝到函数工作空间。进而,按缺省,如果输出变量与输入变量相同,例如,函数x=fun(x,y,z)中的x,那么就将它拷贝到函数的工作空间。因此,为了节约存储和增加速度,最好是从大数组中抽取元素,然后对它们作修正,而不是使整个数组拷贝到函数的工作空间。

   13. 如果变量说明是全局的,函数可以与其它函数、MATLAB工作空间和

[1] [2] [3] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程