我正在尝试使用pydelay解决大型DDE系统,如下所示:
我的方法看起来很傻。我试图将方程式写成字符串,然后将不同的部分连接在一起。这是我的尝试:
def funcE(n,C,D):
'''
n is 0 .. N number of nodes in connectome
'''
En = ['Exc'+str(i) for i in range(n)]
In = ['Inh'+str(i) for i in range(n)]
E_str = ['' for i in range(n)]
coffE = ['' for i in range(n)]
sE = ['' for i in range(n)]
Se = ['' for i in range(n)]
Ip = ['P' for i in range(n)]
#Ip = ['P'+str(i) for i in range(n)]
for k in range(n):
coffE[k] = str(1./tauE)+'*(-'+En[k]+'+('+str(kE-rE)+'*'+En[k]+')'
print coffE
exit(0)
for k in range(n):
temp2 = []
temp1 = []
for l in range(n):
if (k==l):
continue
else:
temp1.append( str(C[k,l])+'*'+En[l]+'(t-'+str(D[k,l])+')')
temp2 = '+'.join(temp1)
sE[k] = str(c1)+'*'+En[k]+'-'+str(c2)+'*'+In[k]+'+'+Ip[k]+'+'+str(eta)+'/'+str(float(n))+'*('+temp2+')'
for k in range(n):
Se[k] = '(1./(1+ exp(-'+str(aE)+'*('+sE[k]+'-'+str(thetaE)+')))-'+str(1./(1.+exp(aE*thetaE)))
E_str[k] = coffE[k]+'*'+Se[k]+')'
return E_str
#---------------------------------------------------------#
def funcI(n):
'''
n is 0 .. N number of nodes in connectome
'''
En = ['Exc'+str(i) for i in range(n)]
In = ['Inh'+str(i) for i in range(n)]
I_str = ['' for i in range(n)]
coffI = ['' for i in range(n)]
sI = ['' for i in range(n)]
Si = ['' for i in range(n)]
Iq = ['Q' for i in range(n)]
for k in range(n):
coffI[k] = str(1./tauI)+'*(-'+In[k]+'+('+str(kI-rI)+'*'+In[k]+')'
for k in range(n):
sI[k] = str(c3)+'*'+En[k]+'-'+str(c4)+'*'+In[k]+'+'+Iq[k]
for k in range(n):
Si[k] = '(1./(1+ exp(-'+str(aI)+'*('+sI[k]+'-'+str(thetaI)+')))-'+str(1./(1.+exp(aI*thetaI)))
I_str[k] = coffI[k]+'*'+Si[k]+')'
return I_str
#---------------------------------------------------------#
其中C
中的ckl
和D
中的\tau
是等式中的N
。
这里的问题是使方程非常长的求和部分。
它适用于小N
但对大group by factory_id
无用,并且可以快速填充内存。感谢您的任何指导或评论。
修改 f或g是这样的函数: