在Matlab中用非线性方程组描述的时间序列建模

时间:2018-07-02 13:59:34

标签: matlab differential-equations

我正在建模一个由三个非线性二阶微分方程描述的动态系统。幸运的是,我对系统有一个封闭形式的解决方案,该系统是一组四个耦合的非线性方程组(sigm是S形的自定义函数):

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的{​​{1}}和y1计算y0,但在下一行{{1} }是使用迭代i-1的{​​{1}}计算出来的。就我个人而言,这看起来并不好。
  2. 如前所述,我需要重用模型并以任意值开始,将以前的值进行簿记并将它们传递给函数并不是最佳实践。

是否有实现此目的的好方法?

0 个答案:

没有答案