matlab函数

∥☆過路亽.° 提交于 2020-03-11 10:02:34

一,函数文件

在matlab中,M文件分为脚本文件和函数文件。如果M文件的第一个可执行语句以function开头,那这个M文件就是函数文件。函数文件内定义的变量为局部变量,只在函数文件内部起作用,当函数文件执行完后,这些内部变量将被清除。

本文介绍如何规范地编写一个函数文件。

通常,函数文件由函数声明行、H1行、在线帮助文本区、编写和修改记录、函数主体等几个部分组成。格式如下:

function 输出形参表 = 函数名(输入形参表)

在线帮助文本区,其中第一行为H1行

编写和修改记录

函数主体

函数声明行

由关键字function引导,指明这是一个函数文件,并定义函数名、输入参数和输出参数。
函数名应当与文件名一致(保存函数文件时会默认以函数名作为文件名予以保存),如果两者不一致,MATLAB将以文件名为准,以后调用时使用文件名调用该函数。
在脚本文件中编写函数时,需以end结尾;独立的函数文件不需以end结尾。
MATLAB中的函数文件名必须以字母开头,可以是字母、下划线、数字的任意组合,但不可以超过31个字符。
H1行

紧随函数声明行之后的以“%”开头的第一注释行。
H1行包括大写的函数名和函数功能简要描述,采用lookfor命令可在命令行窗口显示H1行的信息。
建议在编写H1注释行时,尽量采用英文表述,这是为了之后的使用过程中关键词检索的方便。
在线帮助文本区

包括H1行以及H1行之后的连续的以“%”开头的注释行。
通常包括函数输入变量和输出变量的含义以及调用说明。
采用help命令可在命令行窗口显示在线帮助文本区的信息。
编写和修改记录

与在线帮助文本区以一个空行相隔。
该行以“%”开头,记录了编写及修改函数文件的作者、日期、版本等内容,以方便后来的使用查询或修改。
函数主体

应与编写和修改记录以一个空行相隔。
这部分内容包括了所有实现该函数文件功能的MATLAB指令。
例:完整的函数文件示范。

function spir_len = spirallength(d, n, lcolor)
% SPIRALLENGTH plot a circle of radius as r in the provided color and calculate its area 
% 输入参数: 
% d: 螺旋的旋距
% n: 螺旋的圈数
% lcolor:画图线的颜色
% 输出参数:
% spir_len:螺旋的周长
% 调用说明:
% spirallength(d,n):以参数d,n画螺旋线,螺旋线默认为蓝色
% spirallength(d,n,lcolor):以参数d,n,lcolor画螺旋线
% spir_len = spirallength(d,n):计算螺旋线的周长,并以蓝色填充螺旋线
% spir_len = spirallength(d,n,lcolor):计算螺旋线的周长,并以lcolor颜色填充螺旋线

% 版本号V1.0,编写于1999年9月9号,修改于1999年9月10号,作者:亚索

if nargin > 3
error('输入变量过多!');
elseif nargin == 2
lcolor = 'b'; % 默认情况下为蓝色
end

j = sqrt(-1); 
phi = 0 : pi/1000 : n*2*pi; 
amp = 0 : d/2000 : n*d; 
spir = amp .* exp(j*phi); 

if nargout == 1
spir_len = sum(abs(diff(spir))); 
fill(real(spir), imag(spir), lcolor); 
elseif nargout == 0
plot(spir, lcolor); 
else
error('输出变量过多!'); 
end

axis('square'); 
在命令行窗口中输入:

spirallength(0.25,4)
输出结果如图:

 

 

 

在命令行窗口输入:

spir_len = spirallength(0.25,4)
输出的结果不仅包括上图,而且还在命令行窗口显示spir_len=12.6542。

函数参数指令集

varargin,varargout 定义任意输入输出参数个数

nargin,nargout 得到实际输入,输出参数个数

nargin:表示一个变量,指定调用函数所带参数的个数
nargout:表示一个变量,指定调用函数所返回的参数的个数

function varargout=ssum(varargin)
n=nargin;
disp(n);
if n==1
    varargout{1}=varargin{1}
end
if n==2
    varargout{1}=varargin{1}+varargin{2}
    varargout{2}=varargin{1}-varargin{2}
end
end

结果

[y,z]=ssum(2 ,5)
2

varargout =

[7]

varargout =

[7] [-3]

y =

7

z =

-3

有四种情况,无输入无输出,有输入无输出,无输入有输出,有输入有输出

%无输入无输出
function ff1
disp(‘hello’);

二,脚本文件

脚本和函数

函数文件和脚本文件必须在同一个目录下才能调运。

两种程序文件:

脚本,不接受输入参数或返回输出参数。它们处理工作区中的数据。
函数,可接受输入参数,并返回输出参数。内部变量是函数的局部变量。
如果您是新 MATLAB 程序员,您只需在当前文件夹中创建您希望尝试的程序文件。当您创建的文件越来越多时,您可能希望将这些文件组织到其他文件夹和个人工具箱,以便将其添加到您的 MATLAB 搜索路径

脚本
当调用脚本时,MATLAB 仅执行在文件中找到的命令。脚本可以处理工作区中的现有数据,也可以创建要在其中运行脚本的新数据。尽管脚本不会返回输出参数,其创建的任何变量都会保留在工作区中,以便在后续计算中使用。此外,脚本可以使用 plot 等函数生成图形输出。

函数
函数是可接受输入参数并返回输出参数的文件。文件名和函数名称应当相同,函数处理其自己的工作区中的变量,此工作区不同于您在 MATLAB 命令提示符下访问的工作区。
三,匿名函数(句柄函数)

创建用于计算平方数的匿名函数的句柄:

sqr = @(x) x.^2;

变量 sqr 是一个函数句柄。@ 运算符创建句柄,@ 运算符后面的圆括号 () 包括函数的输入参数。该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组。

a = sqr(5) a = 25许多 MATLAB® 函数接受将函数句柄用作输入,这样您可以在特定值范围内计算函数。您可以为匿名函数或程序文件中的函数创建句柄。使用匿名函数的好处是不必为仅需要简短定义的函数编辑和维护文件。

 

 g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));多个匿名函数

myfunction = @(x,y) (x^2 + y^2 + x*y)带多个输入的匿名函数

四 、子函数

matlab中同一文件定义子函数的方法有时子函数可能很短,就几行,可能希望将多个函数定义放在同一个.m文件中,这里就存在一个子函数的定义问题。

在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同,子函数可以互相调用使用。

在一个m文件中通常有两种定义子函数的方法:

1.嵌套定义(可以共享变量)

function mainFunc()
...
a = myfunc1();
...
function myfunc1()
...
end

end

2. 非嵌套定义
function mainFunc()
...
a = myfunc1();
...
end

function myfunc1()
...
end

在第二种情况中,myfunc1和主函数就是两个独立的函数,和把它们写在两个独立的文件
中没有差别。变量名想怎么起怎么起,不会有任何冲突。


而第一种情况中,myfunc1会和主函数共享变量名。这种情况下,使用相同的变量名,如
果不是故意为之,就不合适了。

五、符合函数

syms f      % 定义符号变量f。

syms x y   % 定义符号变量x和y。

f = 2*x + y^2    %创建符号表达式。

subs(f, 'x', 4)     % 用数值4替换掉f'函数中的变量x,返回值为 f = 8+ y^2  

                         % 若要同时替换变量x和y,则需用一维元胞数组subs(f, {'x',‘y’}, {4,5}) ,返回值为33.

eval('2*3+4')     % 计算文本代数式'2*3+4'的值,返回值为10.

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!