我要解决的积分expm(A*s)
之间的a
和b+tau
,其中tau
是时变的延迟。
我在Simulink中创建了一个Matlab Function模块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中使用符号变量和匿名函数。但是我们可以为out函数创建另一个.m文件,并将其加载到Simulink中的Matlab Function模块中:
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”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句