|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:) Q/ Z* E3 ?: T% V- k7 d. i7 L
M文件函数(M file function)3 `$ H; B! {0 E6 R9 b9 M3 p1 z
在线函数(Inline Function)' Y, f+ Q" E" F7 o- S
匿名函数(Anonymous Function) z# D$ o. Q( J
1.M文件函数- B' N6 t9 ^; X
范例% ?7 m: C* |% d
function c=myadd(a,b)1 o* ^/ j" ~: X% k, j/ M
%这里可以写函数的使用说明,前面以%开头
8 J$ q2 @8 G0 x9 ]& j%在工作区中,help myadd将显示此处的说明3 u& X- u: C( ^/ s1 D5 Q
c=a+b;% g. T- E3 M+ ~ L4 j, }
%end %非必须的
- e7 P5 i# D: [第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
_9 f5 @9 U* Z3 m调用方式:- { X! y' V4 K5 U9 G, W1 a9 Q
在Matlab命令符后输入% ^0 g9 J- L# _+ ~
a=1;b=2;: O$ @9 l& K4 q
c=myadd(a,b)( w4 C. G# ~" U; @2 h
关于m文件定义函数还有许多的说明,暂时略去。。。
0 _/ E+ y/ E, o; h( Y4 G5 |2.在线函数(Inline Function)
! f% U0 o! L4 N- y7 y- ^通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。0 S- b3 \6 s/ `+ d& |$ V
在线函数从字符串表达式创建函数,例如:
3 [9 u, V( y4 b if=inline('x.^2','x');
% L i! O/ F5 K创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值 D1 R! m+ C9 e& Q
f=inline('x+y','x','y')$ z' e" v2 ]5 s r( B
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
4 B" ]9 o, X5 Z p" S _3.匿名函数(Anonymous Function)1 o" P- r( E J! |7 a7 s. ?
匿名函数使用函数句柄来表示匿名函数,定义形式为
( W& a5 `1 z' @7 [& q; W, G. H函数句柄=@(变量名) 函数表达式
+ M% @3 H3 ?' b( [6 d例如:
7 w9 r( S1 G2 I0 q% H- C4 Hf=@(x) x.^22 R& k: l& ~4 G. Y3 Z2 ?
定义了函数f(x)=x^2,f(2)计算在x=2处的值。
, C9 k- Y$ p$ Y匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如& E! Z3 Q8 {& {& o4 ]
a=2;
( k0 q7 h1 e+ `$ ^+ _9 L jf=@(x) x.^2+a
/ c5 m6 Z$ y4 F+ r9 Wf(2) %计算时引用了变量a1 M& z4 e1 K! ^3 P% I
a=0;5 X% G6 {, V) E# t
f(2) %仍然引用的是a=2
4 V1 v, U- d* @3 k* N7 U) `& S匿名函数也可以由Matlab的内置函数或M文件函数创建,例如 T# U: v- S4 O: a) ?& ^9 D: i
f=@sin %f(x)=sin(x)/ Q" k4 `6 n8 N# C8 f
f(pi/2) %sin(pi/2)" \+ K& t5 W5 h
functions(f) %查看函数信息
% E9 g9 X6 C t利用单元数组可以创建多个函数的句柄,例如
0 U5 _* j6 s8 T' L: K g/ ~f={@sin @cos}
( I' Y$ j% E0 b; _: K& _" g9 R3 tf{1}(pi/2) %计算sin(pi/2)
0 Y* K6 m, V0 [2 o( V2 qf{2}(pi) %计算cos(pi)
/ X5 d5 {4 _7 u) l. ]函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。
* ~! w* K, a2 uMatlab 7以后,建议以匿名函数取代在线函数!!!
/ r3 d' K; D. b在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。8 o% O9 s( }0 H1 x; P' o+ V. f3 k
|
|