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

Matlab中非线性方程组描述的时间序列建模,matlab,differential-equations,Matlab,Differential Equations,我正在建模一个由三个非线性二阶微分方程描述的动态系统。幸运的是,我得到了系统的闭式解,它是一组四个耦合非线性方程组(sigm的sigm是sigmoid的自定义函数): Yperv是上一次迭代中不同ys值的向量,事实上,我没有将它们放在for循环中,因为我计划以不同的代码调用模型。在一天结束时,我需要模拟模型生成的时间序列 这里至少有两个问题: y0的值来自上一次迭代,而其他值来自同一次迭代。换句话说,在迭代i时,基于迭代i-1的y1和y0计算y0,但在下一行中,使用迭代i的y0计算y1。就我个人

我正在建模一个由三个非线性二阶微分方程描述的动态系统。幸运的是,我得到了系统的闭式解,它是一组四个耦合非线性方程组(sigm的
sigm
是sigmoid的自定义函数):

Yperv
是上一次迭代中不同
y
s值的向量,事实上,我没有将它们放在for循环中,因为我计划以不同的代码调用模型。在一天结束时,我需要模拟模型生成的时间序列

这里至少有两个问题:

  • y0
    的值来自上一次迭代,而其他值来自同一次迭代。换句话说,在迭代
    i
    时,基于迭代
    i-1
    y1
    y0
    计算
    y0
    ,但在下一行中,使用迭代
    i
    y0
    计算
    y1
    。就我个人而言,这看起来不太好
  • 如前所述,我需要重用模型并以任意值启动它,而记录以前的值并将其传递给函数并不是最佳做法

  • 有没有一种很好的方法来实现这一点?

    更新
    y0
    是否对您最后有效?这样您就可以使用来自同一迭代的所有值。我不理解你的第二点,它需要一个@AnderBiguri,我忘了添加初始化
    y=Yprev(1);y0=Yprev(2);y1=Yprev(3);y2=Yprev(4)然后是for循环:
    for(i=1:N){…}end
    第一个问题是,在迭代i,y0是基于i-1的
    y1
    y0
    计算的,但是在下一行中,
    y1
    是通过迭代i的
    y0
    计算的。这是我认为需要解决的问题。对于第二个问题,由于我需要多次重用此系统,我尝试将其放入一个函数中,该函数可以在第二个脚本的For循环中调用,但随后需要在第二个脚本的循环之前实例化。请在文章中提供任何相关信息和完整代码。更新。谢谢你的评论@AnderBiguri。只要把
    y0
    的计算放在循环的最后,就可以解决你的第一个问题。至于第二个,我还是不明白。只返回值?干什么?
    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