simulink中使用s-function,程序里自己定义@(x)函数 10
,但是报错anonymousfunctionsarenotsupportedforcodegeneration,是什么原因...
,但是报错anonymous functions are not supported for code generation,是什么原因
展开
1个回答
展开全部
Matlab自定义函数的几种方法1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件;2、函数文件+子函数:定义一个具有多个自定义函数的M文件;3、Inline:无需M文件,直接定义;4、匿名函数;5、Syms+subs:无需M文件,直接定义;6、字符串+subs:无需M文件,直接定义;7、直接通过@符号定义.1、函数文件+调用函数文件:定义多个M文件:%调用函数文件:myfile.mclearclcfort=1:10y=mylfg(t);fprintf(‘M^(1/3)=%6.4f\n’,t,y);end%自定义函数文件:mylfg.mfunctiony=mylfg(x)%注意:函数名(mylfg)必须与文件名(mylfg.m)一致Y=x^(1/3);注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。2、函数文件+子函数:定义一个具有多个子函数的M文件%命令文件:funtry2.mfunction[]=funtry2()fort=1:10y=lfg2(t)fprintf(‘M^(1/3)=%6.4f\n’);Endfunctiony=lfg2(x)Y=x^(1/3);%注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。3、Inline:无需M文件,直接定义;%inline命令用来定义一个内联函数:f=inline(‘函数表达式’,‘变量1’,’变量2’,……)。调用方式:y=f(数值列表)%注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。例如:f=inline(‘x^2+y’,’x’,’y’);z=f(2,3)Ans=7注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。例:ClearClcf=’x^2’;Symsxg;g=x^2;h=inline(‘x^2’,’x’);4.匿名函数使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。例如:>>x=-pi:0.1:pi;>>fh={@cos,@sin};fh=@cos@sin>>plot(fh{2}(x))5、Syms+subs:无需M文件,直接定义;用syms定义一个符号表达式,用subs调用:Symsfx%定义符号f=1/(1+x^2);%定义符号表达式subs(f,‘x’,代替x的数值或符号)注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。这种函数定义方法的特点是,可以用符号进行替换Symsfxf=1/(1+x^2);subs(f,‘x’,’y^2’)ans=1/(1+(y^2)^2)注:该方法的缺点是,由于使用符号运算内核,运算速度会大大降低。6、字符串+subs:无需M文件,直接定义;直接定义一个字符串,用subs命令调用。例如:f=’1/(1+x^2)’%定义字符串z=subs(f,’x’,2)g=subs(f,’x’,’y^2’)注:优点是,占用内存最少,定义格式方面自由。缺点是,无法对字符进行符号转化。当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).例如:f=’x^2*y’;x=2;y=3;subs(f)ans=127、直接通过@符号定义.示例如下:>>f=@(x,y)(x.^2-sin(y))f=@(x,y)(x.^2-sin(y))>>f(2,3)ans=3.8589
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询