如何在Simulink Matlab函数块中使用syms

4
我希望解决 expm(A*s)ab+tau 之间的积分问题,其中 tau 是时间变化的延迟。
我在 Simulink 中创建了一个 Matlab 函数块,并将 tau 作为输入,如下所示:
function y = compute_int(u, tau)
syms s
gamma=double(int(expm(A*s),s,a,b+tau)); 
B = [gamma; 1]
y = B*u;

已经定义了Aab,但存在一个问题:Simulink不支持函数syms

有没有什么想法来处理积分?我已经尝试使用

coder.extrinsic('syms');

但它不起作用。

感谢任何建议!


你可以尝试使用“integral”进行数值积分集成。 - Ander Biguri
1个回答

2

最有用的方法:

在Simulink中,我们无法使用符号变量和匿名函数。但是,我们可以创建另一个.m文件来定义我们的函数,并将其加载到Simulink中的Matlab函数块中:

myIntegral.m

    function out = myIntegral(in)
    A = [1 2 3; 4 5 6; 7 8 9];
    myfun = @(s) expm(A.*s);
    out = integral(myfun,0,in,'ArrayValued',true);
    end

Matlab函数块代码:

function y = fcn(u)
%#codegen
coder.extrinsic('myIntegral');
y = zeros(3);
y = myIntegral(u);

它可行: 在此输入图像描述 补充:顺便说一句 - 我试过了
syms s1

这里没有错误,但是Simulink仍然无法使用这个s1变量:

未定义的函数或变量's1'。


我刚刚发现计算积分的另一种方法可能是“解释的Matlab函数”块。 - Betelgeuse
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Mikhail_Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接