matlab m函数文件的基本结构
作者&投稿:威向 (若有异议请与网页底部的电邮联系)
m文件可以是脚本,脚本就是一次性帮你输入多条语句,没什么结构可言
m文件也可以是函数,函数就要在第一行写 function [output]=fun(input),然后把m文件的文件名改成函数名fun.m
没有什么不同,执行过程都一样。区别就是命令文件不方便调用,而函数文件保存后可以像matlab提供的函数那样方便的调用。一般主程序用命令文件的方式写,而主程序调用的子程序用函数文件的方式写。
文件与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
2
3
4
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句
2.输入变量和返回变量的个数
这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。
返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。
3.注释语句的使用
注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。
1
2
3
4
假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1)。我们想在编写的函数中实现下面几点:
<em>如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n
在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明
检测输入和返回变量的个数,如果有错误则给出错误信息</em>
如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。
4. 示例程序
采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 命令可以显示出其帮助信息:
1
2
3
4
5
6
7
8
>> 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.
有了函数之后,可以采用下面的各种方法来调用它,并产生出所需的结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> 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
3
在该文件中第 1 行应该给出该工具箱的名称,在第2行中给出该工具箱的版本与修改时间等信息。
然后分类地给出该工具箱中各类函数的最基本功能。
注意,本文件中所有的语句都应该是注释语句,由百分号 % 引导,空行也应该由 % 引导。
6.检查matlab语法错误
另外,因为 MATLAB是一种解释性语言,所以即使在某个或某些函数中存在语法错误,但如果没执行到该语句时可能就不会发现该错误,这在一个成功的程序设计中是不能容许的。要查出某目录中所有的M函数语法错误,首先应该用 cd 命令 进入该目录,然后运行 pcode * 命令进行伪代码转换。因为该命令会将 MATLAB 函数转换成伪代码,而在转换过程中该程序将自动翻译每一条语句,所以一旦发现有语法错误,将会停止翻译,给出错误信息。改正了该语法错误后,再重新执行 pcode 命令,直到没有错误为止。至少这样会保证目录下所有的程序不含有语法错误。
张呼益肝:[答案] function [output1,output2,...] = fun(input1,input2,...) %% 函数声明 %% 函数体,当该函数放在 m文件最上时,作为主函数 end function [output1,output2,...] = sub_fun(input1,input2,...) %% 子函数声明 %% 函数体 end
工布江达县19887526321: matlab中变量和m文件名由什么组成? - ?
张呼益肝: Matlab语言编写的可以在Matlab环境中运行的程序称为 M 文件.M 文件用扩展名.m结尾,可在命令行中执行,也可被其它程序调用,我们可以使用任何文本编辑器编辑M文件. M文件分为两种:命令文件和函数文件,它们有各自的特点. 1.5.1 ...
工布江达县19887526321: matlab常用的两种m文件是命令文件和函数文件,两种文件的执行方式有什么不同,函数文件的结构形式 - ?
张呼益肝: 没有什么不同,执行过程都一样.区别就是命令文件不方便调用,而函数文件保存后可以像matlab提供的函数那样方便的调用.一般主程序用命令文件的方式写,而主程序调用的子程序用函数文件的方式写.
工布江达县19887526321: MATLAB函数的基本结构 - ?
张呼益肝: function [output1, output2, ...] = fun(input1,input2,...) %% 函数声明 %% 函数体,当该函数放在 m文件最上时,作为主函数 endfunction [output1, output2, ...] = sub_fun(input1,input2,...) %% 子函数声明 %% 函数体 end
工布江达县19887526321: Matlab中的.M文件是什么意思 - ?
张呼益肝: 函数文件或者脚本文件,MATLAB的m文件分为两种. 一种为脚本文件,就是由一堆命令构成的,里面第一行不是 function 开头,这种文件比如是myfun.m 就在命令窗口里输入myfun回车就行,matlab会把m文件中的命令都运行一次. 另一种为...
工布江达县19887526321: 如何调用Matlab中Script的库文件 - ?
张呼益肝: m 函数基本结构 . script和function文件的扩展名都是m, 要让matlab明白当前这个m文件是script还是function, 就要遵循Matlab内部规定的函数文件的结构. 一个函数文件大概是这样的.function [输出变量列表]=函数名(输入变量列表)语句块, ...
工布江达县19887526321: matlab简述脚本形式的m文件与函数形式的m文件的异同 - ?
张呼益肝: 1、文件内容方面,函数文件的第一行有效代码必须是以function开头的函数声明,而脚本文件里面就是语句的序列,没有这个要求.2、函数都自己的独立工作区,脚本文件没有独立工作区,使用调用该脚本的宿主工作区.3、函数与其它模块的数据交换通过输入输出参数,而脚本直接使用宿主工作区的变量,结果也直接保存在宿主工作区中.
工布江达县19887526321: matlab中函数m文件怎么看?? - ?
张呼益肝: M文件大致可以理解为由一系列的语句组成的相对独立的一个运行体.分为M脚本文件与M函数文件. M脚本文件没有参数传递功能,但M函数文件有此功能. M函数文件的格式有严格规定,它必须以“ function ”开头,其格式如下:Function ...
工布江达县19887526321: Matlab软件中的M文件和内联函数是什么意思,谢谢 - ?
张呼益肝: m文件就是用于保存matlab源程序的文本文件.后缀名是m,因此叫m文件. 内联函数是用户用来自定义函数的一种形式,一般用于定义一些比较简单的数学函数.用命令inline定义,因此叫内联函数. matalb7.x后的版本中推荐用户使用匿名函数取代内联函数,前者可以实现后者的几乎全部功能而速度和方便性却比后者高很多.
工布江达县19887526321: 什么是函数的基本结构?由MATLAB定义的函数的基本结构是什么? - ?
张呼益肝: 函数的基本结构包括函数名,输入变量,输出变量,函数体等 matlab的函数的基本结构是 function 输出变量=函数名(输入变量) 函数体例如function c=mysum(a,b) c=a+b;