我想使用Python的odeINT来集成一个循环生成的多组方程。这些方程都是耦合的,因此必须通过一次调用odeINT同时进行积分。问题是初始条件(“y0”)必须是列表或矩阵的列表(而不是简单的列表)。odeINT给出了这个错误:“初始条件y0必须是一维的”。我想知道如何解决这个问题。下面是一个代码示例;非常感谢您的建议。你知道吗
class network:
def __init__(self):
self.i_range = 3
## INITIAL CONDITIONS WILL BE A LIST OF LISTS.
## THIS IS THE SOURCE OF odeINT's ERROR.
self.init = [[] for i in range(self.i_range)]
for i in range(0,self.i_range):
self.init[i].append(-50.+0.1*(random.random()))
self.init[i].append(1.+1.*(random.random()))
self.Tfinal = 10 # final time
self.dt = 1. # time step
def eqns(self, x, t):
a, b = x
dadt = zeros_like(a)
dbdt = zeros_like(b)
for i in range (0,i_range):
dadt[i] = np.cos(b[i])
dbdt[i] = np.sin(a[i])
return dadt, dbdt
def run(self):
self.times = sp.arange(0,self.Tfinal,self.dt)
self.sim = odeint(self.eqns,self.init,self.times)
使用
拆分平面向量
把它们重新组合成一个平面阵列。见https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html
更具体地说,和python的一些列表功能一起玩,在初始化的时候做
ode函数变成
这应该足以得到一些结果。您可能希望将
self.sim
转换为一组列表以重新获得问题的结构,但是您必须在那里工作,因为现在需要提供两个“大”维度。你知道吗可以作为第一步。。你知道吗
相关问题 更多 >
编程相关推荐