ADK*_*ADK 6 python differential-equations
我试图使用python包PyDDE解决以下微分方程:
dy[i]/dt = w[i] + K/N * \sum{j=1toN} sin(y[j] -y[i]), where i = 1,2,3,4...N=50
Run Code Online (Sandbox Code Playgroud)
下面是解决这个等式的python代码
from numpy import random, sin, arange, pi, array, zeros
import PyDDE.pydde as p
def odegrad(s, c, t):
global N
K = c[0]
theta = s[0]
w = random.standard_cauchy(N)
for i in range(N):
coup_sum = 0.0
for j in range(N):
coup_sum += sin(theta[j] - theta[i])
theta[i] = w[i] + (K*coup_sum)/(float (N))
return array([theta])
# constant parameters
global N
N = 50
K = 1.0
# initial values for state theta
theta0 = zeros(N, float)
for i in range(N):
theta0[i] = random.uniform(0, 2*pi)
odecons = array([K])
odeist = array([theta0])
odestsc = array([0.0])
ode_eg = p.dde()
ode_eg.dde(y=odeist, times=arange(0.0, 300.0, 1.0),
func=odegrad, parms=odecons,
tol=0.000005, dt=1.0, hbsize=0, nlag=0, ssc=odestsc)
ode_eg.solve()
print ode_eg.data
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
DDE错误:有些问题:提供的变量之一可能是错误的类型?
DDE错误:问题初始化失败!
DDE错误:DDE未正确初始化!
没有
所以我查看了内部发生的情况,并且两个错误
DDE Error: Something is wrong: perhaps one of the supplied variables has the wrong type?
DDE Error: Problem initialisation failed!
Run Code Online (Sandbox Code Playgroud)
来自以下操作失败:map(float,initstate)(请参阅源代码,第 162 行)。这是因为 Y 和其他变量都是向量。大多数情况下,这意味着您不应该使用array([theta]),但您应该使用theta
完整脚本:
from numpy import random, sin, arange, pi, array, zeros
import PyDDE.pydde as p
def odegrad(s, c, t):
global N
K = c[0]
#Change here
theta = s
w = random.standard_cauchy(N)
for i in range(N):
coup_sum = 0.0
for j in range(N):
coup_sum += sin(theta[j] - theta[i])
theta[i] = w[i] + (K*coup_sum)/(float (N))
#Change here
return theta
# constant parameters
global N
N = 50
K = 1.0
# initial values for state theta
theta0 = zeros(N, float)
for i in range(N):
theta0[i] = random.uniform(0, 2*pi)
odecons = array([K])
#Change here
odeist = theta0
odestsc = array([0.0])
ode_eg = p.dde()
ode_eg.dde(y=odeist, times=arange(0.0, 300.0, 1.0),
func=odegrad, parms=odecons,
tol=0.000005, dt=1.0, hbsize=0, nlag=0, ssc=odestsc)
#You should not use this line, as the last step in ode_eg.dde() is solve.
#ode_eg.solve()
print ode_eg.data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |