Имейте в виду, что sample(x,y)
означает, что образец истинно в x+i*y
где i
начинается с нуля. То есть sample(0, ...)
становится действительным на time=0
.
С j
начинается с 1 и k
предположительно более 1, мне не кажется неожиданным, что sample(0, delta_t) and j<k
должен стать истинным в начале моделирования.
Я подозреваю, что вы хотите:
class abc
import Modelica.SIunits;
parameter SIunits.Time delta_t=0.5;
constant Real a[:]={4,2,6,-1,3,5,7,4,-3,-6};
Real x;
Integer j(start=1);
Integer k=size(a, 1);
algorithm
when {(sample(delta_t, delta_t) and j < k),j == 1} then
x := a[pre(j)];
j := pre(j) + 1;
end when;
end abc;
Я не вижу смысла условия j==1
. Это правда с самого начала, что означает, что оно не «становится» истинным тогда. И так как j
никогда не уменьшается, я не понимаю, почему он должен когда-либо возвращаться к значению 1
, как только он будет увеличиваться в первый раз.
Обратите внимание, что я добавил pre
вокруг значений правой части для j
. Если это было в разделе equation
, я уверен, что потребуется pre
. Поскольку это раздел algorithm
, в основном для документирования намерения кода. Он также делает код надежным для перехода от equation
к разделу algorithm
.
Вы используете вектор '{(sample (0, delta_t) и j
matth
@matth Нет, условие j == 1 не _become_ true в момент времени = 0, это верно, так как «j == 1 и pre (j == 1) = false». – Willi