|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:5 p4 _0 g2 }& A1 N5 F: B! o+ _
M文件函数(M file function). }+ F) G7 _' |/ z
在线函数(Inline Function)
' m) H1 G0 {5 i5 {% I2 I匿名函数(Anonymous Function)
- g3 Y1 V5 u- k$ F; r' }( d2 A) _1.M文件函数' N G' T( w! U1 t& Q% z% z
范例
/ H( u2 J- ?& R& i/ Qfunction c=myadd(a,b)
4 z& L) Q* X$ w, e9 D%这里可以写函数的使用说明,前面以%开头
4 a4 S$ B- n2 Y%在工作区中,help myadd将显示此处的说明
6 S( M2 a) F1 L% |3 H( dc=a+b;
- m! J* d& r; ]& l2 c%end %非必须的
8 H3 _ V* t5 R$ y第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
1 o( E0 i/ c# O& d) T+ Z调用方式:0 u; [5 r+ Q! P9 x$ H# i6 J
在Matlab命令符后输入0 e( k3 |) h; A0 L* B4 a- E' ~, V
a=1;b=2;5 _5 D; M' m! s! U" x* T6 t
c=myadd(a,b)
2 p% ?& E, S; n4 L# f/ \7 A) s关于m文件定义函数还有许多的说明,暂时略去。。。' `' }" X8 P. W& e g; c
2.在线函数(Inline Function)- U, L5 _9 J6 J" Y
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。, c; }) V" ~* r5 v3 }4 v1 q
在线函数从字符串表达式创建函数,例如: @! Y1 w8 N6 O8 D0 P4 b( l3 b
f=inline('x.^2','x');4 G! M9 Z4 ?- g) _1 K' {
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值4 e! {4 |0 O) [# ?+ F
f=inline('x+y','x','y'): c1 ~& j9 n+ A# V1 b% O# D }
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。& U+ _! \/ ^( t! \$ P
3.匿名函数(Anonymous Function)( t" G5 f% w' U/ p
匿名函数使用函数句柄来表示匿名函数,定义形式为
* Q. l( r( T* ^. Y) M0 f0 u3 I5 |函数句柄=@(变量名) 函数表达式
) j6 y7 K9 O5 ~7 @( l2 Z例如:+ k7 T4 g* T$ p5 n B8 b
f=@(x) x.^2
5 U& s7 V5 i- w$ n定义了函数f(x)=x^2,f(2)计算在x=2处的值。
0 f% h! S8 u7 ~! ^' ^+ S7 [匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
! R4 d. k8 R- T, w+ \ Ja=2;6 x, [+ F4 u3 N$ y/ E& J
f=@(x) x.^2+a
. P! u" ` T6 a! N v4 C$ lf(2) %计算时引用了变量a# O- p$ ^; ~, p( m& q6 d
a=0;+ d. `! `/ g: D) ]
f(2) %仍然引用的是a=25 b0 Q% e$ B9 K$ L
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如6 O7 r4 C: ` w
f=@sin %f(x)=sin(x)
1 S" d+ Y' u# B* Of(pi/2) %sin(pi/2)
$ E9 I. A* R/ E. ?functions(f) %查看函数信息
2 L! O0 q1 J+ I8 _; _, ~利用单元数组可以创建多个函数的句柄,例如3 d2 u) ^/ T z, L6 H5 x: ~
f={@sin @cos}
U2 _* O E3 e, lf{1}(pi/2) %计算sin(pi/2)
% q; n, t& z4 k7 n1 of{2}(pi) %计算cos(pi); i7 @2 a* p( E1 u, K
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
8 r% ?1 T* A9 V0 TMatlab 7以后,建议以匿名函数取代在线函数!!!5 {* P& f7 s0 r0 r0 t
在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。
' c6 |* X- o2 E' G, G |
|