如何从MATLAB中的符号表达式创建函数?

Ali*_*eza 7 matlab symbolic-math

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

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)+a-b*sin(aa*u+m*pi);  %# The main expression
Run Code Online (Sandbox Code Playgroud)

如果我想f在特殊程序中使用它来查找它的零,我该如何转换f为函数?或者,我该怎么做才能找到f这些嵌套表达式的零?

gno*_*ice 11

你有几个选择......

选项#1:自动生成一个功能

如果您有符号工具箱的4.9(R2007b +)或更高版本,您可以使用matlabFunction函数将符号表达式转换为匿名函数或函数M文件.文档中的一个示例:

>> syms x y
>> 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)
Run Code Online (Sandbox Code Playgroud)

选项#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)+(a-b).*sin(aa.*u+m.*pi);
end
Run Code Online (Sandbox Code Playgroud)

调用此函数时,f您必须输入beta4个常量的值,并返回评估主表达式的结果.


注意:由于您还提到要查找零f,您可以尝试在符号方程中使用SOLVE函数:

zeroValues = solve(f,'beta');
Run Code Online (Sandbox Code Playgroud)