Я пытаюсь решить дифференциальное уравнение с помощью питона пакета PyDDE:Решить дифференциальное уравнение с помощью 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
Ниже питон код для решения этого уравнения
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
я получаю следующее ошибка:
DDE Ошибка: что-то не так: возможно, одна из поставляемых переменных имеет неправильный тип?
DDE Ошибка: инициализация проблемы не удалась!
DDE Ошибка: DDE не был правильно инициализирован!
Ни
Ваш код выглядит правильно, какая версия Python вы используете? Единственное, что я могу думать, это проблема в том, что либо odecons, odeist, либо odestsc на самом деле не массив или вам может понадобиться вернуть только тету в функцию ode grad. Пройдите через код и напечатайте типы всех переменных. –
@JaredReeves Я использую Python 2.7.8 и установил PyDDE с https://github.com/hensing/PyDDE, так как у меня возникла проблема установки с текущей версией PyDDE. Я пробовал все возможные вещи, однако я сделаю это снова, как вы упомянули. – ADK
Я бы просто использовал sympy. –