1. m文件与m函数的区别

所谓 MATLAB 程序,大致分为两类:

  1. M 脚本文件 (M-Script) M 函数 (M-function), 它们均是普通的 ASCII 码构成的文件。

  M 脚本文件中包含一族由 MATLAB 语言所支持的语句,它类似于 DOS 下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 >> 下键入该 M 文件的文件名,这样 MATLAB 就会自动执行该 M 文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。

  M 函数格式是 MATLAB 程序设计的主流,一般情况下, 不建议您使用 M 脚本文件格式编程。

MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:

  1. function [返回变量列表] = 函数名 (输入变量列表)
  2. 注释说明语句段, % 引导
  3. 输入、返回变量格式的检测
  4. 函数体语句

2.输入变量和返回变量的个数

  这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。

  返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。

3.注释语句的使用

  注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。

  1. 假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1)。我们想在编写的函数中实现下面几点:
  2. 如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n
  3. 在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明
  4. 检测输入和返回变量的个数,如果有错误则给出错误信息 

如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。

4. 示例程序

采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数

  1. function A=myhilb(n, m)
  2. %MYHILB a demonstrative M-function.
  3. % A=MYHILB(N, M) generates an N by M Hilbert matrix A.
  4. % A=MYHILB(N) generates an N by N square Hilbert matrix.
  5. % MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
  6. % matrix back to the calling function.
  7. %
  8. %See also: HILB.
  9.  
  10. % Designed by Professor Dingyu XUE, Northeastern University, PRC
  11. % 5 April, 1995, Last modified by DYX at 21 March, 2000
  12. if nargout>1, error('Too many output arguments.'); end
  13. if nargin==1, m=n;
  14. elseif nargin==0 | nargin>2
  15. error('Wrong number of iutput arguments.');
  16. end
  17. A1=zeros(n,m);
  18. for i=1: n
  19. for j=1:m
  20. A1(i,j)=1/(i+j-1);
  21. end, end
  22. if nargout==1, A=A1; elseif nargout==0, disp(A1); end

这样规范编写的函数用 help 命令可以显示出其帮助信息:

  1. >> help myhilb
  2. MYHILB a demonstrative M-function.
  3. A=MYHILB(N, M) generates an N by M Hilbert matrix A.
  4. A=MYHILB(N) generates an N by N square Hilbert matrix.
  5. MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
  6. matrix back to the calling function.
  7.  
  8. See also: HILB.

有了函数之后,可以采用下面的各种方法来调用它,并产生出所需的结果。

  1. >> A=myhilb(3,4)
  2. A =
  3. 1.0000 0.5000 0.3333 0.2500
  4. 0.5000 0.3333 0.2500 0.2000
  5. 0.3333 0.2500 0.2000 0.1667
  6. >> A=myhilb(4)
  7. A =
  8. 1.0000 0.5000 0.3333 0.2500
  9. 0.5000 0.3333 0.2500 0.2000
  10. 0.3333 0.2500 0.2000 0.1667
  11. 0.2500 0.2000 0.1667 0.1429
  12. >> myhilb(4)
  13. 1.0000 0.5000 0.3333 0.2500
  14. 0.5000 0.3333 0.2500 0.2000
  15. 0.3333 0.2500 0.2000 0.1667
  16. 0.2500 0.2000 0.1667 0.1429

5.MATLAB 工具箱编写技巧

  放入一个目录中的为某种目的专门编写的一组 MATLAB 函数就可以组成一个工具箱。 从某种意义上说,任何一个 MATLAB 语言的使用者都可以是工具箱的作者。在一个工具箱中,应该有一个名为 Contents.m 的文件,用来描述工具箱中所有 MATLAB 函数的名称和意义。

  

  1. 在该文件中第 1 行应该给出该工具箱的名称,在第2行中给出该工具箱的版本与修改时间等信息。
  2. 然后分类地给出该工具箱中各类函数的最基本功能。
  3. 注意,本文件中所有的语句都应该是注释语句,由百分号 % 引导,空行也应该由 % 引导。

  

6.检查matlab语法错误

  另外,因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。

matlab中m文件与m函数的学习与理解的更多相关文章

  1. Matlab中常见的神经网络训练函数和学习函数

    一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a networ ...

  2. matlab 中txt文件(含字符及数值)处理

    matlab 中txt文件(含字符及数值)处理 (2008-08-02 09:45:12) 转载▼ 标签: 杂谈 分类: matlab及C学习 Matlab文件操作及读txt文件ZZ 2008-07- ...

  3. MATLAB中提高fwrite和fprintf函数的I/O性能

    提高fwrite和fprintf函数的I/O性能 http://www.matlabsky.com/thread-34861-1-1.html     今天我们将讨论下著名的fwrite(fprint ...

  4. matlab中求解线性方程组的rref函数

    摘自:http://www.maybe520.net/blog/987/ matlab中怎么求解线性方程组呢? matlab中求解线性方程组可应用克拉默法则(Cramer's Rule)即通过det( ...

  5. 获得MATLAB中FIG文件的矩阵

    在拓扑优化中,经常使用imagesc函数来显示最终的结果,往往会保存了Fig文件,却忘记保存mat文件. 根据已有的Fig文件,是可以找到其所显示矩阵.这个是我从fig数据结构中一层一层找到的,记录一 ...

  6. MATLAB中.m文件生成.dll

    1.配置编译环境 在命令行窗口输入: mbuild -setup 如果出现以下提示信息说明成功: 如果提示信息为: 错误使用mbuild(line 164) Unable to complete su ...

  7. MATLAB中导入数据:importdata函数

    用load函数导入mat文件大家都会.可是今天我拿到一个数据,文件后缀名竟然是'.data'.该怎么读呢? 我仅仅好用matlab界面Workspace区域的"import data&quo ...

  8. c语言中的文件格式化读写函数fscanf和fprintf函数

    很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...

  9. MATLAB中的文件类型总结

    %   ***.m文件 : 脚本文件或者函数文件或者:%   ***.mat文件:数据存储文件(二进制文件,可以ASCII码形式保存和加载,%                类似于单行EXCEL表格) ...

随机推荐

  1. Merge k Sorted Lists——分治与堆排序(需要好好看)

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 1 ...

  2. python开发学习-day06(模块拾忆、面向对象)

    s12-20160130-day06 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  3. [实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板

    写在前面 上篇文章更新了网盘的登录界面,以及用户头像的等比例压缩功能.今天折腾一下页面的样式,将从网上找的一个模板套用在项目中. 系列文章 [EF]vs15+ef6+mysql code first方 ...

  4. vscode vue配置和一些其它辅助【工具篇】

    后续有补充就经常更新

  5. loadrunner 三种post函数区别

    web_custom_request方法可以发送POST和GET类型的请求 web_submit_data只能发送POST类型的请求,提供了所有的数据,不管Cache存在不存在Web_submit_d ...

  6. UIViewController的基本概念与生命周期

    UIViewController是iOS顶层视图的载体及控制器,用户与程序界面的交互都是由UIViewController来控制的,UIViewController管理UIView的生命周期及资源的加 ...

  7. pair 对组

    pair 对组 c++ 基础 2016-05-10 19:42 154人阅读 评论(0) 收藏 举报  分类: 头文件的函数精粹(12)  版权声明:本文为博主原创文章,未经博主允许不得转载. 与关联 ...

  8. SRPG Studio 教程(一) 创建游戏及引用素材

    儿时玩红白机的时候,火纹和机器人大战这类战棋类的游戏就是博主的最爱,恰逢最近steam上上架了一款SRPG Studio用于制作火纹,趁这个机会学习一下,顺便记录下来. 秉承着一个程序猿的自我修养,以 ...

  9. sort大法好———自定义的注意事项!!!!!!

    众所周知,在c++中,sort是一个非常好用的排序函数,方便使用.可自定义的特性,让众多oier如我不能自拔.但是在自定义时也有一些大坑需要注意(敲黑板),下面就是oi入门的第不知道多少课,大家认真听 ...

  10. [BZOJ4542] [JZYZOJ2014][Hnoi2016] 大数(莫队+离散化)

    正经题解在最下面 http://blog.csdn.net/qq_32739495/article/details/51286548 写的时候看了大神的题解[就是上面那个网址],看到下面这段话 观察题 ...