我在simulink中有一个闭环,如下所示:

块Tgo (用红色标记)是matlab函数,它基本上计算多项式根并返回最大实根,如下所示:
function Tgo = fcn(g,r,v,vw,rho_u,rho,a,cd,m)
persistent Tgo2
Real_tgo = [0 + 0i,0 + 0i,0 + 0i,0 + 0i];
more lines for polynomial...
rr = roots(poly);
for k = 1:4
if abs(imag(rr(k))) < 0.001
Real_tgo(k) = rr(k);
else
Real_tgo(k) = 0;
end
end
Tgo2 = real(max(Real_tgo));
Tgo = Tgo2;在这个块中,我不得不使用persistent variable,因为它不会让我得到真正的答案。(它一直说我需要确定输出的类型和大小,只有持久变量为我解决了这个问题)。
然而,当我想使用一个使用if block/ if action subsystem的闭环时,我得到了以下错误:
updates persistent or state variables while computing outputs, therefore it cannot be used in an algebraic loop. However, it is in a loop with the following blocks.据我所知,基本上可以有两种解决方案:
1)以某种方式避免使用持久变量,并仍然从Tgo块中获取一个值,这将不是我必须预定义的值。
2)以其他方式创建if条件,以允许持久变量。
这两个我都试过几次,但都没有成功。
任何帮助都将不胜感激。
谢谢。
发布于 2019-01-16 12:15:53
从您所展示的代码中,根本不清楚为什么需要Tgo2。看起来下面的方法应该是可行的。
function Tgo = fcn(g,r,v,vw,rho_u,rho,a,cd,m)
Tgo = 0;
Real_tgo = [0 + 0i,0 + 0i,0 + 0i,0 + 0i];
more lines for polynomial...
rr = roots(poly);
for k = 1:4
if abs(imag(rr(k))) < 0.001
Real_tgo(k) = rr(k);
else
Real_tgo(k) = 0;
end
end
Tgo = max(real((Real_tgo));https://stackoverflow.com/questions/54205715
复制相似问题