Python中的动力系统:绕过刚度

Python中的动力系统:绕过刚度,python,simulation,ode,Python,Simulation,Ode,我一直在学习如何使用Python(仍然是一个初学者),并试图绘制一个四维动态系统(和它的随机等价物)。对于一些参数,我观察到了我期望的动力学行为。然而,对于某些参数(如下面代码中的参数),我遇到了有人描述为“刚度”的情况。曲线图似乎停留在某个固定的值上,并一直停留在那里(从分析角度看,它们应该在0和1之间循环)。我想知道是否有办法解决这个问题。我对python的了解非常有限。现在我正在使用四阶龙格库塔积分,虽然我在使用odeint时遇到了同样的问题,随机版本是使用Euler Maruyama积分

我一直在学习如何使用Python(仍然是一个初学者),并试图绘制一个四维动态系统(和它的随机等价物)。对于一些参数,我观察到了我期望的动力学行为。然而,对于某些参数(如下面代码中的参数),我遇到了有人描述为“刚度”的情况。曲线图似乎停留在某个固定的值上,并一直停留在那里(从分析角度看,它们应该在0和1之间循环)。我想知道是否有办法解决这个问题。我对python的了解非常有限。现在我正在使用四阶龙格库塔积分,虽然我在使用odeint时遇到了同样的问题,随机版本是使用Euler Maruyama积分的(这是我唯一熟悉的,似乎是最常用的)。我不知道有没有简单的方法来解决这个问题?我一直在尝试在线阅读,但老实说,我正在阅读的很多东西远远超出了我对python的理解水平

import scipy as sp
import pylab as plt
import matplotlib.pyplot
import numpy as np
from scipy.integrate import odeint
import scipy.integrate as spi

#Constants
c13 = 6.2
c14 = 4.2
c21 = 7.3
c32 = 2.4
c34 = 12.7
c42 = 5.7
c43 = 5.0

e12 = 0.5
e23 = 2.5
e24 = 2.0
e31 = 2.0
e41 = 4.8

b = np.array([1, 1, 1,1])
n=len(b)

A = A = np.array([[1, 1+c21, 1-e31, 1-e41], 
                  [1-e12, 1, 1+c32, 1+c42],
                  [c13+1, 1-e23, 1, 1+c43],
                  [c14+1, 1-e24, 1+c34, 1]])


#Time
T = 1000
dt = 0.01
t = sp.arange(0.0, T, dt)
N = t.size
sqrtdt = np.sqrt(dt)

#Initial Condition
ic = [0.5,0.5,0.6,0.7]

def model(m,t):
    dmdt = np.dot(np.diag(m), b.T-np.dot(A,np.dot(np.diag(m),m)))
    return dmdt

Y = odeint(model, ic, t)

y1 =  Y[:,0]
y2 =  Y[:,1]
y3 =  Y[:,2]
y4 =  Y[:,3]

plt.subplot(4, 1, 1)
plt.plot(t, y1, 'b')
plt.ylim([0,1.2])

plt.subplot(4, 1, 2)
plt.plot(t, y2, 'r')
plt.ylim([0,1.2])

plt.subplot(4, 1, 3)
plt.plot(t, y3, 'g')
plt.ylim([0,1.2])

plt.subplot(4, 1, 4)
plt.plot(t, y4, 'purple')
plt.xlim([0,T])
plt.ylim([0,1.2])
plt.xlabel('Time')

plt.show()

你的问题到底是什么?@user3791372如果有一种方法可以解决这个僵硬的问题,初学者会明白,你的代码不是一个简短的自包含的可执行示例()。例如,“r4k”不是您发布的代码示例中定义的方法。你能提供一个吗?此外,如果您可以发布模型的示例图片,它可以帮助您更快地获得答案-从代码中解释系统动力学模型是非常困难的。最后,我认为你的帖子应该被标记为“模拟”。你的问题仍然不是很清楚,因为Stackoverflow是关于编码问题的,可能被认为是离题的,也不清楚@抱歉,我很少在这里发帖,因为我做的分析数学比编程多得多。我已经做了建议的编辑。问题是红线(x2(t))似乎被锁定在1,而其他所有东西都被锁定在0。在每个x_i循环的开始,这是应该一直发生的事情,但似乎不是这样