matlab函数定义方法
- 格式:doc
- 大小:42.50 KB
- 文档页数:3
matlab函数定义方法
一、内联函数(inline function)
在matlab命令窗口、程序或函数中创建局部函数时,可通过inline构造函数。优点是不必将其储存为一个单独文件,同时又可以像使用一般函数那样调用它。
在运用中有几点限制:不能调用另一个inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,显然不允许[u,v]这种形式。因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline。除这些限制,在许多情况下使用该函数非常方便。
Inline函数的一般形式为:
FunctionName=inline('任何有效的matlab表达式','p1','p2' ,…) ,其中'p1', 'p2' ,…是出现在表达式中的所有变量的名字。
***************************************************
例1:求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量
在命令窗口输入:
Fofx=inline('x .^2.*cos(a*x)-b','x','a','b');
g= Fofx([pi/3 pi/3.5],4,1)
系统输出为:
g =
-1.5483 -1.7259
*****************************************************
例2:
fks=inline('sin(k*x).*x.^2','x','k');
i=1;
for k=0:0.1:5
fk(i)=quad(@(x)fks(x,k),0,5);
i=i+1;
end
k=[0:0.1:5];
plot(k,fk)
*****************************************************
在线函数从字符串表达式创建函数,不能直接利用工作区变量,例如:
a=2;
f=inline('a*x.^2','x');
f(2) %计算时会出现不识别参数a的提示。
还可以创建多元函数,例如:
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3
*****************************************************
二、匿名函数(Anonymous Function)
变量不仅可以用来表示数值(如: 1, 0.2, -5), 用来表示字符串(如: 't', 'casino'), 也可以用来表示函数. 当然, 你也看到了前面我们提到的函数都是一个一个的文件, 直接塞到一个变量里面似乎太大, 不过我们可以'提纲挈领', 抓住函数的handle(句柄), 就可以.
将函数句柄赋值给变量要用到@符号, 语法: 变量名=@函数名, 此处地函数名可以是当前Matlab中可以使用的任意函数例如: mysin=@sin, 此后mysin就和sin同样地使用, mysin(pi)和sin(pi)的含义相同.
匿名函数(anonymous function)是MA TLAB 7.0版提出的一种全新的函数描述形式,和内联函数类似,可以让用户编写简单的函数而不需要创建M文件,因此,匿名函数具有inline函数的所有优点,并且效率比inline函数高,同时还具有一些独有的特点。
定义一个匿名函数很简单,语法是:
fhandle=@(arglist)expression
其中fhandle就是调用该函数的函数句柄(function handle),相当于C语言中的函数指针,arglist是参数列表,多个参数使用逗号分隔,Expression则是该函数的表达式。
***************************************
例1:
f=@(x) x.^2;%定义了函数f(x)=x^2
f(2) %计算在x=2处的f(x)值。
***************************************
匿名函数可以使用工作空间的变量,例如创建函数f(x,y)=x^2+y^3
例2:
p=2;q=3; %在工作空间中定义参数
f=@(x,y)x^p+y^q %定义函数
f(2,3) %计算f(2,3) 的值。
ans=
31
如果修改p或者q的值,例如将q改为2,计算结果并没有改变,这是因为,该函数句柄保存的是函数在创建时的快照,而不是动态的访问其中的变量,如果希望获取新值,需要改变参数值后,重新创建一次该函数。
***************************************
匿名函数也可以由Matlab的内置函数或M文件函数创建
例3:
f=@sin %f(x)=sin(x)
f(pi/2) %sin(pi/2)
functions(f) %可查看函数信息
***************************************
利用单元数组可以创建多个函数的句柄
例4:
f={@sin @cos}
f{1}(pi/2) %计算sin(pi/2)
f{2}(pi) %计算cos(pi)
***********************************************
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。如第一节,例2。通过将参数传递给多元函数,从而完成对多元函数的调用。
Matlab 7以后,建议以匿名函数取代在线函数!!!
在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab 不再进行搜索,而是立即执行该函数,极大提高了效率。它可以提高运行速度。因为matlab 对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。
inline函数通常译成内联函数,适用于函数体是一个表达式的场合,可以避免function定义M文件函数的麻烦。这种语法特性在早期的MATLAB版本中就已引入。
从MA TLAB 7.0(R14)开始,引入了一种新的形式——匿名函数(anonymous functions),这种形式比起inline更为简洁强大,所以,在后续的版本中其使用逐步代替了inline,MA TLAB 从2013a开始建议用匿名函数替换inline,并表示将来可能会停止对inline的支持。
匿名函数与inline相比,最大的好处是可以直接使用工作区中的变量,例如:
1 2 a=1;b=2;
f=@(x)a*x+b;
这种情况如果用inline就会比较麻烦,需要把变量a、b转换成字符串才行,既繁琐有可能损失精度,一般会这样写:
1 2 a=1;b=2;
f=inline([num2str(a) '*x+' num2str(b)],'x');
了解了上面这些情况,相信题主应该知道那个提示是什么意思了。至于使用在线函数还是匿名函数定义,可以根据自己的情况选择:
如果只是临时用的代码,用什么都无所谓;
如果考虑代码有可能在早期的MATLAB版本中使用,那么只能用inline;
如果对代码质量有要求,那么最好改用匿名函数。