|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:9 r# T4 }+ H0 Y) f8 b
M文件函数(M file function)" p: c; T% | X' D% R
在线函数(Inline Function)% Q- L* F: m1 I7 y1 ?( ~7 L
匿名函数(Anonymous Function)
: f% v' Q1 j' F: \0 Z5 Q1.M文件函数
2 |$ n/ q$ k5 j1 A3 D范例
: o+ l: {1 y* v0 ]function c=myadd(a,b)
t' x) p5 @( m8 ^5 [% u%这里可以写函数的使用说明,前面以%开头" H2 S* ]0 T1 U2 d; ~5 Y; W
%在工作区中,help myadd将显示此处的说明
7 Q" D$ v$ s4 z, }+ v8 F$ `' ec=a+b;
0 `+ ~" \( ?- z' B%end %非必须的' ?( C5 I$ G8 y G5 P- b: s9 c
第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
& n& i% U4 v5 \3 L& ]7 Q调用方式:4 _ w/ K8 E6 i3 N# M- e0 B6 N
在Matlab命令符后输入
& [9 [+ h" X" |9 { ra=1;b=2;: j7 d5 A: ~/ i6 e- N. s
c=myadd(a,b)3 { L, }+ t' Z+ O9 C$ m% v
关于m文件定义函数还有许多的说明,暂时略去。。。. E# h6 R4 I! D) Z3 x K1 t y( \- c
2.在线函数(Inline Function)6 k% }) u6 `1 Z
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
) b; x5 Z! W' d O6 j A在线函数从字符串表达式创建函数,例如:6 \8 |9 i+ `% w1 X6 w
f=inline('x.^2','x');
6 p' ^. O' K0 m, t2 Y* g创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
7 k6 A; q3 f; b% _) k: s8 _f=inline('x+y','x','y'). x8 J" _( O: }; T& n: S
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。. [' U( H# x+ [/ q" I% }
3.匿名函数(Anonymous Function)
" i. f8 N+ c3 Q& w/ G" ]匿名函数使用函数句柄来表示匿名函数,定义形式为
, f1 ]& G8 K% O" M函数句柄=@(变量名) 函数表达式
4 T7 N6 ?6 y; s p4 n; {& I例如:0 g( u$ `' ]6 W+ |; I; A
f=@(x) x.^21 t8 J* ^5 p. c
定义了函数f(x)=x^2,f(2)计算在x=2处的值。% F K Z7 z4 f
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
) B Y- x; |; Ka=2;2 X, r0 M6 o' s$ A" Y* D! g1 [
f=@(x) x.^2+a
5 c7 n$ k8 C+ l, S( ff(2) %计算时引用了变量a
7 N/ }+ T" a9 V6 E9 M8 O3 J. l9 }a=0; R ^( V# `! f! S6 R- N* r: S
f(2) %仍然引用的是a=2
3 J4 O1 b6 D, J: ~匿名函数也可以由Matlab的内置函数或M文件函数创建,例如
# G; \ E/ M4 \( I. Kf=@sin %f(x)=sin(x)0 n8 `. }6 ^- S3 l1 a5 S
f(pi/2) %sin(pi/2)
+ W, k9 E5 B. L8 C2 Kfunctions(f) %查看函数信息6 K0 `. g* r0 W5 A( a9 ^0 j; H
利用单元数组可以创建多个函数的句柄,例如
" L$ C I; |+ W6 h7 o7 O: if={@sin @cos}3 L; w. n$ n3 U* k2 ?0 K7 S5 m
f{1}(pi/2) %计算sin(pi/2)4 L' u3 v, Y0 i4 I( ?3 F" t
f{2}(pi) %计算cos(pi)
2 u! S' B, {/ v3 H函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。4 L; y* ]' \% F4 d* _
Matlab 7以后,建议以匿名函数取代在线函数!!!* V- V$ ?8 I+ ] y5 s+ o/ ?
在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。) S! m# P; Q4 u1 r
|
|