如何使用vpasolve在matlab中编译独立应用程序

tjjdgumg  于 8个月前  发布在  Matlab
关注(0)|答案(2)|浏览(88)

下面是matlab的代码:

function [Y1] = roots_2021a(q)
syms r
Y=airy(1,-r)-q*airy(-r);
x=0:0.1:20;
y=double(subs(Y,r,x));
d=diff(y>0);
k=num2cell(find(d~=0)+1);
X=double(cellfun(@(z)vpasolve(Y==0,r,x(z)),k));
Y1 = unique(X*exp(1j*pi/3));
end

在matlab代码工作完美,但当我编译它在standaolne应用程序我有下一个错误:

“syms,subs,vpasolve”根据MATLAB编译器许可证,不包括在MATLAB编译器环境的打包中。从代码中删除文件或函数,或使用MATLAB函数“isdeployed”确保函数不会在部署的组件中调用。

我做了什么:使用matlabFunction,我得到了y的表达式,然后将q代入其中,我得到了它们的数值。在那之后,我可以找到X轴上y > 0的点。但是,如何将所有这些代入vpasolve并得到一个表达式-我不明白。
y表达式的代码:

syms r q
Y=airy(1,-r)-q*airy(-r);
x=0:0.1:20;
y=subs(Y,r,x);
f = matlabFunction(y)

但是如何为vpasolve获得相同的?

3xiyfsfu

3xiyfsfu1#

报价Walter Robertson in Mathworks Forum
Symbolic编译器中的任何内容都不能编译成exe或应用程序,也不能使用MATLAB Coder生成代码。
官方的解决方案是从符号表达式生成一个Matlab函数,并使用它来创建独立的应用程序。您可以在此处找到文档:Deploy Generated MATLAB Functions from Symbolic Expressions with MATLAB Compiler

vybvopom

vybvopom2#

function Y1 = modified(q)
Y = @(r) airy(1,-r)-q*airy(-r);
x = 0:0.1:20;
y = Y(x);
d = diff(y>0);
k = find(d~=0)+1;
X = arrayfun(@(in) fsolve(@(r) Y(r), in), x(k));
Y1 = unique(X*exp(1j*pi/3));
end

相关问题