EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab自定义函数的六种方法8 R0 W. t' k7 V
n2、函数文件+子函数:定义一个具有多个自定义函数的M文件; n4、匿名函数; n6、字符串+subs:无需M文件,直接定义。 1、函数文件+调用函数文件:定义多个M文件 clear for t=1:10 fprintf(‘M^(1/3)=%6.4f\n’,t,y); %自定义函数文件: mylfg.m Y=x^(1/3); %命令文件:funtry2.m for t=1:10 fprintf(‘M^(1/3)=%6.4f\n’); function y=lfg2(x) %注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。 %inline命令用来定义一个内联函数:f=inline(‘函数表达式’, ‘变量1’,’变量2’,……)。 例如: z=f(2,3) 注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。 Clear f=’x^2’; g=x^2; 使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。例如: >> fh={@cos,@sin}; 用syms定义一个符号表达式,用subs调用: f=1/(1+x^2); %定义符号表达式 注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。 Syms f x subs(f, ‘x’,’y^2’) 1/(1+(y^2)^2) 直接定义一个字符串,用subs命令调用。例如: z=subs(f,’x’,2) 注:优点是,占用内存最少,定义格式方面自由。 当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).例如: x=2;y=3; ans=12 详细:Matlab中同一文件定义子函数的方法 在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同 ... ... ... function mainFunc() a = myfunc1(); end function myfunc1() end 在第二种情况中,myfunc1和主函数就是两个独立的函数,和把它们写在两个独立的文件 果不是故意为之,就不合适了。 对于嵌套函数,函数定义中的end必不可少。 例子: % %----------------------------------------------------------------------- %子函数举例 max2=find_max(7,3,9) if (a>=b)&(a>=c) elseif (b>=a)&(b>=c) else end 注意: 如将上程序中的第一行屏蔽掉,即 会出现下面的错误 下面一段文字是摘自matlab帮助中的一段文字:end在function中的使用 尽管大多数情况下,end在function的用法是可选的,但也可以用它标记一个M文件函数的结束。end语句仅在使用一个或多个嵌套函数的情况下才是要求的。在诸如此类嵌套函数的M-文件中,每一个函数(包括主调函数,嵌套函数,私有函数和子函数)必须以一个end语句来结束。可以使用end结束任一函数类型,但这样做除了M-文件包含一个嵌套函数其他情况并非必要的。 2 }/ I1 |# Q' Q1 H [
7 [1 ? y' s6 n' B4 H* a( q& `0 \6 M
|