查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中使用符号表达式创建函数?

如何从符号表达式中创建函数?例如,我有以下内容:

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 +)或更高版本Symbolic Toolbox ,则可以使用matlabFunction函数将符号表达式转换为匿名函数或函数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函数:

zeroValues = solve(f,'beta');

更多&回答...
poster 当前离线   回复时引用此帖