我想解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;
与
A
, a
和 b
之前被定义。但是有一个问题:函数syms
simulink 不支持。关于如何处理积分的任何想法?我试过
coder.extrinsic('syms');
但它不起作用。
感谢您的任何建议!
最佳答案
最有用的方法:
我们不能在 Simulink 中使用符号变量和匿名函数。但是我们可以为 out 函数创建另一个 .m 文件并将其加载到 Simulink 中的 Matlab Function Block 中:
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
多变的:Undefined function or variable 's1'.
关于matlab - 如何在 Simulink Matlab 功能 block 中使用 syms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271181/