|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:
! X9 r# W# I( Q* P' D) |M文件函数(M file function)% v1 \; X* b' H) p9 k
在线函数(Inline Function)
/ k5 ^' q( A: k9 S4 J/ Y" F' x4 r; K4 h匿名函数(Anonymous Function)$ \6 c8 I7 {* u$ p7 k/ S
1.M文件函数
* V' q/ p0 y( I; S G1 h4 L范例
: |. Y# L! i5 R+ Q' a: ?, k8 Qfunction c=myadd(a,b)
+ q3 D h4 j$ G7 \/ M%这里可以写函数的使用说明,前面以%开头
4 R: r5 ^% v1 F( a%在工作区中,help myadd将显示此处的说明; @0 S M: Y$ a
c=a+b;/ P/ K3 e$ O* B7 p; [) l4 r
%end %非必须的
: [1 z8 a: ^2 e$ {3 l* F F) m- f& y5 x第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
( v) c$ h3 g8 ]) @1 L/ a调用方式:
4 F; y2 a# M* V, K& U9 D+ M在Matlab命令符后输入) D: ~ {+ u0 K/ g# {
a=1;b=2;
# B+ D' c9 R: W% i3 @- W+ |c=myadd(a,b)9 j- _+ P5 v: Q$ U+ K
关于m文件定义函数还有许多的说明,暂时略去。。。
+ [( ^7 M" C$ ], U2 j9 N2.在线函数(Inline Function) f7 T" K+ E8 W/ k
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
9 ]; ] I: Q/ \6 O在线函数从字符串表达式创建函数,例如:$ m8 h; d$ D U {+ c# h, i
f=inline('x.^2','x');
! x& L1 {0 L6 M7 b+ Y2 J创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
' R7 _# l, {- O! R3 M6 T- of=inline('x+y','x','y')
( H, [' i$ W' q/ \1 h' j2 }; @创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。" T# {4 L" M4 V, a# ]! n; m
3.匿名函数(Anonymous Function)" H7 d5 i8 T+ B. ~, m; f' R! v# S
匿名函数使用函数句柄来表示匿名函数,定义形式为& t$ N1 R7 U2 F& g
函数句柄=@(变量名) 函数表达式
# D5 C2 m+ _/ Z例如:
8 [4 [& @% p3 \* k- q$ af=@(x) x.^2
) K2 L2 v5 i& p' V$ Q定义了函数f(x)=x^2,f(2)计算在x=2处的值。) u3 L* U5 p% ~6 x, ~
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
( X$ n$ j W- \& ^! @! _# [a=2;
5 ^8 O- Z. v& k8 |f=@(x) x.^2+a; W D6 M6 [9 b
f(2) %计算时引用了变量a
: K. L& O& J. d; ya=0;0 ?2 n0 {0 i/ c; B9 p
f(2) %仍然引用的是a=2
' R6 R% P- @9 x6 C9 K g/ P% c& k6 ?- X匿名函数也可以由Matlab的内置函数或M文件函数创建,例如! m; _4 }. a; M: [- Y% o
f=@sin %f(x)=sin(x)9 h6 o; l4 ~' Q1 P$ O3 v7 L
f(pi/2) %sin(pi/2)
+ D* m* Z2 p" ?0 E1 _+ dfunctions(f) %查看函数信息
! y: [$ _* f. ~7 {, F利用单元数组可以创建多个函数的句柄,例如6 B! S! v& d* T* s* S
f={@sin @cos}, c/ L8 A M# p/ k/ i& `
f{1}(pi/2) %计算sin(pi/2); I1 ]4 s+ g* A9 J- }
f{2}(pi) %计算cos(pi)/ f; T/ p/ r) K6 H
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。2 w+ @7 {6 a9 |; V `$ O. W
Matlab 7以后,建议以匿名函数取代在线函数!!!
0 I0 _3 e6 P; p# Y q在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。2 v- J J9 l! ~$ i. e- l5 ^% z
|
|