| 
一、        创建函数:(这章我觉得实践性较强,大家一起来多动手,多看例子)
x
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有账号?我要加入 
  1、        一般形式:  Function [outputvariable1, outputvariable2,……]=FunctionName(inputvariable1, inputvariable2,….)
 %注释1
 %注释2
 ……..表达式
 如:
 Function [x,y]=ComputeXY(t,a,b,c)
 %x=cos(at)+b
 %y=|x |+c
 %常量:a,b,c
 %变量:t,x,y
 x=cos(a*t)+b;
 y=abs(x)+c;
 
 (几点说明:1:它不用end来表结束;2:请注意,输出变量是用[ ], 而输入变量用())
 2、        三种特殊情况的特殊形式:
 (1)        当函数仅用于绘图,在命令窗口中显示标志数据或将数据写到文件中。
 Function  FunctionName(inputvariable1, inputvariable2,….)
 %注释1
 %注释2
 ……..表达式
 如:
 Function  Fabs(x)
 %求绝对值的函数,不知道这里做例子否
 If x>=0
 Fabs(x)=x
 Else
 Fabs(x)=-x
 End
 (2)        当函数仅用来以指定的方式存储数据。
 Function  Outputvariables= FunctionName(inputvariable1, inputvariable2,….)
 %注释1
 %注释2
 ……..表达式
 如:
 Function  zanswer=ComputeXY(t, a,b,c)
 %对第一个例子改下,用一个向量变量zanswer表示[x,y]
 %zanswer(1)=cos(at)+b
 %zanswer(2)=|x |+c
 %常量:a,b,c
 %变量:t, zanswer
 x=cos(a*t)+b;
 zanswer=[x , abs(x)+c];
 
 
 (3)        当以普通方式创建的M文件数量很多时,可以将程序文件转化为一个主函数以减少M文件的数量。
 Function  FunctionName
 一般用一个主函数包含好几个子函数,而且这个主函数的名字要和要转化的程序文件名字一样。
 如:
 Function [m,s]=MeanStdDev(dat)
 %主函数为MeanStdDev,计算m的子函数为mean,计算标准偏差的子函数为stdev。函数和子函数存在于文件%MeanStdDev.m中。
 n=length(dat);
 m=mean(dat,n);
 function m=mean(v,n)
 m=sum(v)/n;
 function sd=stdev(v,n)
 m=mean(v,n);
 %call a sub functiom
 Sd=sqrt((sum(v.^2)-n*m^2)/(n-1));
 调试一下:调用函数和子函数的程序为:
 v=[1,2,3,4];
 [m,s]=MeanStdDev(v)
 得到:
 m=2.5000  ; s=1.2910
 3、        inline的使用
 在matlab命令窗口、程序或函数中创建局部函数时,可用inline。优点是不必将其储存为一个单独文件。在运用中有几点限制:不能调用另一个inline函数,只能由一个matlab表达式组成,并且只能返回一个变量---显然不允许[u,v]这种形式。因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline。除了这些限制,在许多情况下使用该函数非常方便。
 Inline函数的一般形式为:
 FunctionName=inline(‘任何有效的matlab表达式’, ‘p1’,’p2’ ,….) ,其中‘p1’,’p2’ ,…是出现在表达式中的所有变量的名字。
 如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量 )
 在命令窗口输入:
 Fofx=inline(‘x .^2*cos(a*x)-b’ , ‘x’,’a’,’b’);
 g= Fofx([pi/3  pi/3.5],4,1)
 系统输出为:g=-1.5483    -1.7259
 
 4、        子函数:
 如果在一个函数文件中出现多个function关键字,则在第一个function之后定义的所有函数都称为子函数。含有第一个function关键字的表达式叫做主函数,主函数是由命令窗口、程序和其他函数调用的唯一函数。子函数仅能由主函数和同个主函数的其他子函数调用。(也差不多说子函数是个局部变量,例子同2.(3))
 5、        用户自定义函数、函数句柄和feval
 有许多matlab内置函数要求用户通过它们创建特定形式的用户自定义函数。这类函数使用matlab函数:
 Feval(FunctionHandle,p1,p2,…pn), 其中FunctionHandle是函数句柄,p1…pn是传递给FunctionHandle所指函数的参数。
 (1)        函数句柄:是一种引用函数的方法,可以作为函数参数被传递,及使用feval计算。函数句柄由@和函数名构成。举几个例子来演示其基本用法吧:
 
 <1>
 fhandle=str2func('sin');
 ys=sin(pi/4)
 yfold=feval('sin',pi/4)
 yfnew=feval(fhandle,pi/4)
 ys =
 0.7071
 yfold =
 0.7071
 yfnew =
 0.7071
 <2>
 Alpha=sym('pi/4');
 yss=sin(Alpha)
 yfold=feval('sin',Alpha)
 ynews=feval('sin',Alpha)
 yss =
 1/2*2^(1/2)
 yfold =
 1/2*2^(1/2)
 ynews =
 1/2*2^(1/2)
 <3>如何避免创建“无效函数句柄“问题
 (1)
 Hy2=@fhzzy %fhzzy.m 是随书光盘mfiles 文件夹上的一个函数文件。
 Hy2 =
 @fhzzy
 (2)
 class(Hy2)
 size(Hy2)
 ans =
 function_handle
 ans =
 1 1
 (3)
 feval(Hy2,'line');
 ??? Error using ==> feval
 Undefined function 'fhzzy'.
 
 
 
 <4>自建函数及其句柄的使用。(1)
 [fhzzy.m]
 function Hr=fhzzy(flag )
 % fhzzy
 %
 %
 t=(0:100)/100*2*pi;
 x=sin(t);
 y=cos(t);
 Hr=@cirline;
 feval(Hr,flag,x,y,t)
 % -------------subfunction---------------------------
 function cirline(wd,x,y,t)
 %
 %
 switch wd
 case 'line'
 plot(t,x,'b' ,t,y,'r','LineWidth',2)
 case 'circle'
 plot(x,y,'g.','MarkerSize',30),
 axis square off
 13
 otherwise
 error('输入宗量只能取 ''line'' 或 ''circle'' ! ')
 end
 shg
 (2)
 Hy3=@fhzzy
 fhzzy('line');
 Hy3 =
 @fhzzy
 fhzzy('line')
 feval('fhzzy','line')
 ??? Undefined function or variable 'fhzzy'.(5)
 feval(Hy3,'line');
 
 <5>子函数句柄的创建与使用。
 (1)
 HCL=fhzzy('circle')
 HCL =
 
 @cirline
 (2)
 tt=(0:100)/100*2*pi;
 xx=sin(tt);
 yy=cos(tt);
 cirline('circle',xx,yy,tt);
 feval('circle',xx,yy,tt)
 ??? Undefined function or variable 'cirline'.
 (3)
 feval(HCL,'circle',xx,yy,tt)
 (2)feval
 〈1〉feval 的FN 绝对不能是表达式。:feval 的FN 只接受函数名。如:
 Vf=feval('1+sin(x)',x)
 ??? Error using ==> feval
 Invalid function name '1+sin(x)'.
 但是可以调用内联函数,就持平了,呵呵
 如:
 Z2=inline('P1*x*sin(x^2+P2)',2)
 Z2 =
 Inline function:
 Z2(x,P1,P2) = P1*x*sin(x^2+P2)
 z2=Z2(2,2,3)
 fz2=feval(Z2,2,2,3)
 z2 =
 2.6279
 fz2 =
 2.6279
 ——————————******end*****————————
 这章的后面就讲matlab的内置函数,作者把它分成两大组,一组数组为输入参数,另一组需要用户自定义函数。我想做个大大的表格来归纳常用函数(函数名,参数,用途,怎么用,适用范围),就是一个人做不来,不有人和我合作,或者有什么指导的,这里先谢谢啦!
 |