Я моделирую динамическую систему, описываемую тремя нелинейными дифференциальными уравнениями второго порядка. К счастью, у меня есть решение в закрытой форме для системы, которая представляет собой набор из четырех связанных нелинейных уравнений (sigm
является самоопределенной функцией для сигмоида):
y = Yprev(1); y0 = Yprev(2); y1 = Yprev(3); y2 = Yprev(4);
for (i=1:N)
y0 = aa*sigm(y1-y0,parsigm);
y1 = aa*(p+c2*sigm(c1*y0,parsigm));
y2 = bb*c4*sigm(c3*y0,parsigm);
y = aa*p + aa*c2*sigm(aa*c1*sigm(y,parsigm),parsigm) -bb*c4*sigm(aa*c3*sigm(y,parsigm),parsigm);
end
Yperv
- это вектор значений различных y
с предыдущей итерации. Фактически, я не поместил их в цикл for, так как планирую вызывать модель с разными кодами. В конце дня мне нужно смоделировать временные ряды, произведенные моделью.
Здесь есть как минимум две проблемы:
- Значения
y0
взяты из предыдущей итерации, а остальные - из той же итерации. Другими словами, на итерации i
, y0
вычисляется на основе y1
и y0
итерации i-1
, но в следующей строке y1
рассчитывается с y0
итерации i
, Лично мне это не нравится.
- Как уже говорилось ранее, мне нужно повторно использовать модель и запускать ее с произвольными значениями, и ведение учета предыдущих значений и передача их в функцию не являются лучшей практикой.
Есть ли хороший способ реализовать это?