特殊形式的函数
除了最常用的通过函数文件定义一个函数,MATLAB 还可以使用子函数,此外还可以通过内联函数和匿名函数自定义函数。
一、子函数
在 MATLAB 的函数定义中,如果函数较长,往往可以将多个函数分别写在不同的函数文件中,但有时函数可能很短,可能希望将多个函数定义放在同一个函数文件中,这就存在子函数的定义问题。
在MATLAB 中,可以在一个函数文件中同时定义多个函数,其中函数文件中出现的第一个函数称为主函数(Primary Function),其他函数称为子函数(Subfunction),但需要注意的是子函数只能由同一函数文件中的函数调用。
在保存函数文件时,函数文件名一般和主函数名相同,外部程序只能对主函数进行调用。
例如建立func.m文件,程序如下:
function d=func(a,b,c) %主函数
d=subfunc(a,b)+c;
function c=subfunc(a,b) %子函数
c=a*b;
在命令行窗口调用主函数,结果如下:
>>func(3,4,5)
ans =
17
注意:同一函数文件中主函数和子函数的工作区是彼此独立的,各个函数间的信息传递可以通过输入输出参数、全局变量来实现。
二、内联函数★★
以字符串形式存在的函数表达式可以通过 inline 函数转化成内联函数。
例如'a=(x+y)^2'
, 可以通过f=inline(a)
生成内联函数f(x,y)=(x+y)^2
。
>>a='(x+y)^2';
>>f=inline(a)
>>f(3,4)
ans =
49
三、 匿名函数★★★
匿名函数的基本格式如下:
函数句柄变量=@(匿名函数输入参数) 匿名函数表达式
其中,
-
函数句柄变量相当于函数的别名,利用它可以间接调用函数;
-
“@”是创建函数句柄的运算符;
-
“@”后面定义了一个匿名函数,包括函数输入参数和函数表达式;
-
函数有多个输入参数时,参数间用逗号分隔。
>>sqr=@(x)x.^2 %定义匿名函数 sqr = @(x)x.^2 >>sqr([1,2,3]) % 调用匿名函数 ans = 1 4 9 >>f=@(x,y)x^2+y^2; >>f(3,4) ans = 25
也可以通过下列语句给已存在的函数定义函数句柄,并利用函数句柄来调用函数。
函数句柄变量=@函数名
其中,函数名可以是MATLAB 提供的内部函数,也可以是用户定义的函数文件。
>>h=@sin %取正弦函数句柄
h =
@sin
>>h(pi/2) %通过函数句柄变量h 来调用正弦函数
ans =
1
匿名函数的执行效率要明显高于内联函数,在参数传递方面也要比内联函数方便、高效。
内联函数在将来的 MATLAB 版本中将被删除,取而代之的是匿名函数,内联函数能实现的, 匿名函数完全可以更好地实现,并且调用效率要比内联函数高得多。
Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编