我在AnyLogic中有一个系统动力学模型,我试图模拟Fibonacci序列。然而,出于某种原因,我的结果与预期结果不同:
而不是
1,1,2,3,5,8,13 ......
我得到了
1,21337954153,4.021788196,7.471205823,13.86070806 ...
我跟着these (spanish) instructions建立了我的简单模型。
我认为这对所有软件都不常见,因为在VenSim中,这个例子看起来效果很好......
有人可以向我解释为什么在我的AnyLogic程序中会发生这种情况吗?
答案 0 :(得分:0)
之所以发生这种情况,是因为在每个软件中处理微分方程的方式。
你在vensim获得斐波纳契序列的原因是你在时间步骤1中使用欧拉方法(检查模型设置)
如果在Vensim中将集成类型更改为RK45,或者如果使用euler方法减少时间步长,则可能会得到与AnyLogic获得的相同结果... Runge-Kutta方法,即使它以固定步骤开始1,它后来根据模型动力学的要求改变时间步长。
现在,让我们明白在任何实际应用中使用时间步长为1都是荒谬的......但是这就是为什么你在vensim中得到确切的值...因为那些确切的值对于模型真正的非常不准确。我甚至会说你链接上的模型是一个糟糕的模型,不应该向公众展示。
幸运的是,AnyLogic不允许您这样做。您可以在模型属性中设置1的时间步长,但它会立即发现不准确性并将时间步长更改为更小的值(可能为0.01)...因为它只允许在混合方程中使用Euler + Newton选项,但不仅仅是欧拉。