PDA

查看完整版本 : 如何在MATLAB中使用符号表达式创建函数?


poster
2019-12-10, 20:30
如何从符号表达式中创建函数?例如,我有以下内容:

syms beta n1,n2,m,aa= Constants u = sqrt(n2-beta^2); w = sqrt(beta^2-n1); a = tan(u)/w+tanh(w)/u; b = tanh(u)/w; f = (a+b)*cos(aa*u+m*pi)+ab*sin(aa*u+m*pi); %# The main expression 如果要在特殊程序中使用f来查找其零,如何将f转换为函数?或者,我应该怎么做才能找到f和此类嵌套表达式的零?



回答:

您有几种选择...

选项1:自动生成函数

如果您使用的是4.9版(R2007b +)或更高版本 (http://www.mathworks.com/access/helpdesk/help/toolbox/symbolic/rn/brqy13y-1.html)的Symbolic Toolbox (http://www.mathworks.com/products/symbolic/) ,则可以使用matlabFunction (http://www.mathworks.com/access/helpdesk/help/toolbox/symbolic/matlabfunction.html)函数将符号表达式转换为匿名函数或函数M文件。文档中的示例:

>> syms xy >> r = sqrt(x^2 + y^2); >> ht = matlabFunction(sin(r)/r) ht = @(x,y)sin(sqrt(x.^2+y.^2)).*1./sqrt(x.^2+y.^2) 选项2:手动生成函数

由于您已经编写了一组符号方程式,因此只需将部分代码剪切并粘贴到函数中即可。这是您上面的示例所示:

function output = f(beta,n1,n2,m,aa) u = sqrt(n2-beta.^2); w = sqrt(beta.^2-n1); a = tan(u)./w+tanh(w)./u; b = tanh(u)./w; output = (a+b).*cos(aa.*u+m.*pi)+(ab).*sin(aa.*u+m.*pi); end 调用此函数f您必须输入beta值和4个常量,它将返回评估主表达式的结果。

注意:由于您还提到要查找f零,因此可以尝试在符号方程式上使用SOLVE (http://www.mathworks.com/access/helpdesk/help/toolbox/symbolic/solve.html)函数:

zeroValues = solve(f,'beta');

更多&回答... (https://stackoverflow.com/questions/1995486)