|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自定义函数的途径:
' m' d1 P( B/ b& }6 |0 dM文件函数(M file function)8 Q* x2 h _4 p) P4 ]! n1 t5 E
在线函数(Inline Function)
/ y' e% o0 f1 I: c: B4 ^$ `( ?匿名函数(Anonymous Function)
/ A4 w% i/ B* C7 x0 Q1.M文件函数
I8 v2 u, c1 b) F- ]) X范例
' v$ G9 F. B. e8 W) k8 Cfunction c=myadd(a,b)- z& W# O& ], E1 T. c5 R' ~& R6 ]+ b
%这里可以写函数的使用说明,前面以%开头
3 \; @5 A5 g1 d6 S%在工作区中,help myadd将显示此处的说明! l0 z9 \1 d6 `! V! ?- W0 N
c=a+b;" w4 ~% F! S6 T) Q& q
%end %非必须的
: n J) {- A0 N2 C# u第一行function告诉Matlab这是一个函数,a,b是输入,c是输出,myadd是函数名。以m文件定义的函数必须保存为函数名的形式,上例中,函数应保存为myadd.m。要使用myadd函数,该函数必须在Matlab的搜索路径中。5 H% t9 y' h% b2 S
调用方式:& g% G7 k- ^6 W7 s4 l
在Matlab命令符后输入
) U* ^1 T) v* d# v# fa=1;b=2;, K5 }4 H& Y$ F2 E
c=myadd(a,b) v& G- W1 S1 u
关于m文件定义函数还有许多的说明,暂时略去。。。
. f# P6 A1 R0 e; B( p; \2.在线函数(Inline Function). Q( P5 k1 i7 i$ k p
通常作为参数传递给另外一个函数。比如fminsearch,lsqcurvefit等函数需要以函数作为参数。3 O4 C. V/ p- R
在线函数从字符串表达式创建函数,例如:
. p7 s/ @5 a/ [0 \& s' Xf=inline('x.^2','x');0 X: d+ K" d' b( s. K, \7 \6 `" T
创建了函数f(x)=x^2。要计算f(3),在工作区输入f(3)即可。f([2 3 4])计算在x=2 3 4时的值
) A$ B2 R1 m* t4 a( g, Hf=inline('x+y','x','y')3 J# K$ c' S, V+ N2 ?$ J
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。: X% I' H( w; Y8 R" R- a8 u* r
3.匿名函数(Anonymous Function)
! \% F7 q. t2 r) @- _9 J4 k匿名函数使用函数句柄来表示匿名函数,定义形式为
5 R6 X3 A% @6 g- a. w函数句柄=@(变量名) 函数表达式
9 Z" f# i7 D+ N3 j! ^例如:2 {/ I B1 O2 h) v$ \, H; G4 S1 }3 p
f=@(x) x.^2
& ?7 ]- u; v6 q, D% @! J定义了函数f(x)=x^2,f(2)计算在x=2处的值。! [" u3 Z1 U* Z& O; L8 U
匿名函数可以调用Matlab函数,也可以使用工作区中存在的变量,例如
: w* }, U( T/ Ra=2;5 i2 Q+ Q9 ~6 A4 @& [; {- g3 j3 {
f=@(x) x.^2+a
' V3 C4 ^2 {! {7 \5 Lf(2) %计算时引用了变量a2 n' b7 e, }6 t8 O( ]
a=0;
. C2 e( q, | zf(2) %仍然引用的是a=2/ {! E/ G. Z D6 \# @0 I% n8 z
匿名函数也可以由Matlab的内置函数或M文件函数创建,例如
. E+ Y6 {% q8 Y' V* K6 z$ i* _f=@sin %f(x)=sin(x)
b: q8 D0 B, v: l% T# `0 d' Hf(pi/2) %sin(pi/2)
% m0 V# |' O6 r5 m+ j% p% dfunctions(f) %查看函数信息
3 v7 b1 d( x$ P4 I- U利用单元数组可以创建多个函数的句柄,例如
; i* Y* i* `7 B8 {# P, E! p) Tf={@sin @cos}
" N) S4 `6 ~- _f{1}(pi/2) %计算sin(pi/2)
% ^+ i, `$ p! O9 Z3 k* ]0 A \f{2}(pi) %计算cos(pi)! M3 y" s0 g( r2 P1 `
函数句柄的另一个重要特征是可以用来表示子函数、私有函数和嵌套函数。7 \: G7 s5 j7 Q! G
Matlab 7以后,建议以匿名函数取代在线函数!!!
7 ~; A/ V% t' Z8 l- I在创建匿名函数时,Matlab记录了关于函数的信息,当使用句柄调用该函数的时候,Matlab不再进行搜索,而是立即执行该函数,极大提高了效率。 r; r1 s' h+ D7 t
|
|