首页 文章

如何在Simulink Matlab功能块中使用syms

提问于
浏览
3

我想解决 ab+tau 之间 expm(A*s) 的积分,其中 tau 是时变延迟 .

我在Simulink中创建了一个带有 tau 作为输入的Matlab功能块,如下所示:

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');

但它不起作用 .

谢谢你的任何建议!!

1 回答

  • 1

    最有用的方式:

    我们不能在Simulink中使用符号变量和匿名函数 . 但是我们可以为out函数创建另一个.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);
    

    它有效:
    enter image description here

    附:顺便说一下 - 我试过了

    syms s1
    

    并且这里没有错误,但Simulink仍然无法使用此 s1 变量:

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

相关问题