如何在Simulink Matlab功能块中使用syms
How to use syms in Simulink Matlab function block
我想求解expm(A*s)
在a
和b+tau
之间的积分,其中tau
是时变延迟。
我在 Simulink 中创建了一个以 tau
作为输入的 Matlab Function 模块,如下所示:
function y = compute_int(u, tau)
syms s
gamma=double(int(expm(A*s),s,a,b+tau));
B = [gamma; 1]
y = B*u;
with A
, a
和 b
是之前定义的。但是有一个问题:simulink 不支持函数 syms
。
对如何处理积分有什么想法吗?我试过
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);
有效:
P.S。顺便说一下 - 我试过了
syms s1
而且这里没有报错,但是Simulink还是不能使用这个s1
变量:
Undefined function or variable 's1'.
我想求解expm(A*s)
在a
和b+tau
之间的积分,其中tau
是时变延迟。
我在 Simulink 中创建了一个以 tau
作为输入的 Matlab Function 模块,如下所示:
function y = compute_int(u, tau)
syms s
gamma=double(int(expm(A*s),s,a,b+tau));
B = [gamma; 1]
y = B*u;
with A
, a
和 b
是之前定义的。但是有一个问题:simulink 不支持函数 syms
。
对如何处理积分有什么想法吗?我试过
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);
有效:
P.S。顺便说一下 - 我试过了
syms s1
而且这里没有报错,但是Simulink还是不能使用这个s1
变量:
Undefined function or variable 's1'.