如何在Simulink中使用syms Matlab的功能块
我想解决a
和b+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;
与A
,a
和b
被之前定义的。这里有一个问题,但:功能syms
不SIMULINK支持。
任何想法如何处理积分?我试着用
coder.extrinsic('syms');
,但它不工作。
感谢您的任何建议!
最有用的方法:
我们不能用符号变量和匿名函数在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);
PS顺便说一句 - 我试图
syms s1
,并没有错误在这里,但仍然Simulink的不能使用此s1
变量:
未定义的函数或变量“S1”。
谢谢,它使用积分! – Betelgeuse
我刚刚发现,另一种计算积分的方法可能是块“解释的matlab fnc” – Betelgeuse
也有[连续积分](https://www.mathworks.com/help/simulink/slref/integrator。 HTML)和[离散积分](https://www.mathworks.com/help/simulink/slref/discretetimeintegrator.html)块。他们可能是有用的呢! –
您可以尝试使用'integral'将其整合为数字形式 –