|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:
; ~4 E% o- ~ e+ W- j: V7 mM文件函数(M file function)6 F4 O" A w X
在线函数(Inline Function)/ O. L* t% x% T3 i7 T# U6 {
匿名函数(Anonymous Function)7 h3 h) c/ W+ S0 p$ s+ e' e
1.M文件函数4 j- C2 Z; U) K% k! p
范例
& c4 X6 x. W* ofunction c=myadd(a,b)
7 B; `$ u6 D! \. Z3 D%这里可以写函数的使用说明,前面以%开头
, p' j. ~# Y/ {8 W! e" ^+ e%在工作区中,help myadd将显示此处的说明+ S: ~5 ]2 C0 v' Z
c=a+b;0 W% ^8 R4 q! S1 c! n4 H
%end %非必须的
6 x; L: D7 `; r; P7 s) I( _第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。
+ j4 E5 h7 s& f m: V6 `调用方式:- u6 F# f4 f/ N! z: ~5 K# f0 ~
在Matlab命令符后输入
% o% P! \# a! U* a w. T" T( Da=1;b=2;
5 W6 l3 J9 b. M: n/ @4 ^4 H+ a; @c=myadd(a,b)
5 z- d) y7 e6 H! U0 M# a9 q关于m文件定义函数还有许多的说明,暂时略去。。。
* q: Y8 ~: N& D; [2.在线函数(Inline Function)0 k. ]6 w/ ~8 s
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。
0 e6 b3 S0 Y$ b& H O7 ]9 k在线函数从字符串表达式创建函数,例如:
" I+ H: v. R( h! c9 Ef=inline('x.^2','x');
_( P, P! C$ o( f f, ]7 w B" p创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
4 `& r6 Q5 K( o' q, G% c+ rf=inline('x+y','x','y')$ T& G4 M K8 [0 q1 S$ Y
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。2 I' T& @) T% E
3.匿名函数(Anonymous Function)% X/ o: e; M* }3 ?
匿名函数使用函数句柄来表示匿名函数,定义形式为; U+ O" X* S( k- p
函数句柄=@(变量名) 函数表达式- x# H0 h" F* s/ ^- r: H
例如:- S& B7 K3 w2 ^, p8 n
f=@(x) x.^2: _& j& u3 t* T
定义了函数f(x)=x^2,f(2)计算在x=2处的值。
3 p. I' B, U+ }/ G1 q匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
/ s& N: V4 R7 _/ Ya=2;$ V* L3 d( k7 X* \9 |
f=@(x) x.^2+a
5 V8 P+ q( s1 L! Bf(2) %计算时引用了变量a
- ?+ n* r* v" B& v+ _a=0;
& i' G' Z2 Z9 M4 N- S8 R( T" }# U' {f(2) %仍然引用的是a=2" N' a) f$ ?" g* U, I; E" U5 w
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如: k* t' W% `' A# D% T i
f=@sin %f(x)=sin(x)* d) c3 ]! ?! _. U6 @
f(pi/2) %sin(pi/2)
( s1 F H, D$ n8 M m6 R: Q5 qfunctions(f) %查看函数信息2 G/ `" t: p+ V. ?! d4 n
利用单元数组可以创建多个函数的句柄,例如
9 K D) t" N* j! S; if={@sin @cos}
+ x% |2 _1 @7 d; f# L7 of{1}(pi/2) %计算sin(pi/2)" b) {3 @1 P. @& T; v
f{2}(pi) %计算cos(pi)/ ~, h5 c2 k! Y
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。) n: B$ h7 H1 x
Matlab 7以后,建议以匿名函数取代在线函数!!!
. B% F/ ]2 s; r, f3 Z* T" O在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。
; f# j8 a" Y* c4 {& _6 G% g9 ~ |
|