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