Моделирование временных рядов, описываемых нелинейной системой уравнений в Matlab - PullRequest
0 голосов
/ 02 июля 2018

Я моделирую динамическую систему, описываемую тремя нелинейными дифференциальными уравнениями второго порядка. К счастью, у меня есть решение в закрытой форме для системы, которая представляет собой набор из четырех связанных нелинейных уравнений (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, так как планирую вызывать модель с разными кодами. В конце дня мне нужно смоделировать временные ряды, произведенные моделью.

Здесь есть как минимум две проблемы:

  1. Значения y0 взяты из предыдущей итерации, а остальные - из той же итерации. Другими словами, на итерации i, y0 вычисляется на основе y1 и y0 итерации i-1, но в следующей строке y1 рассчитывается с y0 итерации i , Лично мне это не нравится.
  2. Как уже говорилось ранее, мне нужно повторно использовать модель и запускать ее с произвольными значениями, и ведение учета предыдущих значений и передача их в функцию не являются лучшей практикой.

Есть ли хороший способ реализовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...