除了最常用的通过函数文件定义一个函数,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 =
内联函数:
f(x,y) = (x + y) ^ 2
>> f(3,4)
ans =
49
匿名函数的基本格式:
函数句柄变量 = @(匿名函数输入参数) 匿名函数表达式
其中,函数句柄变量相当于函数的别名,利用它可以间接调用函数:“@”是创建函数句柄的运算符;“@”后面定义了一个匿名函数,包括函数输入参数和函数表达式;函数有多个输入参数时,参数间用逗号分隔。
>> sqr = @(x) x.^2 %定义匿名函数
sqr =
包含以下值的 function_handle:
@(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 =
包含以下值的 function_handle:
@sin
>> h(pi / 2)
ans =
1
匿名函数的执行效率要明显高于内联函数,在参数传递方面也要比内联函数方便、高效。内联函数在将来的 MATLAB版本中将被删除,取而代之的是匿名函数,内联函数能实现的,匿名函数完全可以更好地实现,并且调用效率要比内联函数高得多。