我在simulink中有一个闭环,如下所示:
{"@odata.context":"https://test.crm.dynamics.com/api/data/v9.0/$metadata#Microsoft.Dynamics.CRM.QueryScheduleResponse","TimeInfos":[{"Start":"2019-01-15T00:00:00Z","End":"2019-01-16T00:00:00Z","TimeCode":"Available","SubCode":"Schedulable","SourceId":"15f40c32-1609-46db-93da-1bbb8eb19c9d","CalendarId":"69b0ee2b-bad7-4b8e-9bcc-d03e76b45a03","SourceTypeCode":4004,"IsActivity":false,"ActivityStatusCode":-1,"Effort":1.0,"DisplayText":""}]}
块(用红色标记)是matlab函数,该函数基本上计算多项式根,并返回最大的实根,如下所示:
Tgo
在这个方框中,我不得不使用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
因此,据我了解,基本上可以有两种解决方案:
1)以某种方式避免使用持久变量,而仍然从Tgo块中获取一个值,这将不是我必须预先定义的值。
2)以允许持久变量的其他方式确定if条件。
我俩都尝试了几次而没有成功。
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:2)
根据您显示的代码,现在还不清楚为什么根本需要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));