matlab函数定义方法

  • 格式:doc
  • 大小:42.50 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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;

如果对代码质量有要求,那么最好改用匿名函数。