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

时间:2017-02-16 10:25:53

标签: matlab simulink anonymous-function symbolic-math

我想在expm(A*s)a之间解决b+tau的积分,其中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 个答案:

答案 0 :(得分: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

P.S。顺便说一句 - 我试过

syms s1

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

  

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