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

问题描述:

我想解决ab+tau之间的expm(A*s)积分,其中tau是时变时延。如何在Simulink中使用syms Matlab的功能块

我在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被之前定义的。这里有一个问题,但:功能syms不SIMULINK支持。

任何想法如何处理积分?我试着用

coder.extrinsic('syms'); 

,但它不工作。

感谢您的任何建议!

+0

您可以尝试使用'integral'将其整合为数字形式 –

最有用的方法:

我们不能用符号变量和匿名函数在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); 

它的工作原理: enter image description here

PS顺便说一句 - 我试图

syms s1 

,并没有错误在这里,但仍然Simulink的不能使用此s1变量:

未定义的函数或变量“S1”。

+0

谢谢,它使用积分! – Betelgeuse

+0

我刚刚发现,另一种计算积分的方法可能是块“解释的matlab fnc” – Betelgeuse

+0

也有[连续积分](https://www.mathworks.com/help/simulink/slref/integrator。 HTML)和[离散积分](https://www.mathworks.com/help/simulink/slref/discretetimeintegrator.html)块。他们可能是有用的呢! –