Почему мой Python BZ Oregonator не компилируется? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь смоделировать изменение цвета в решении реакции Белоусова-Жаботинского, решая ОДУ, и построить график, который продемонстрирует колебания с помощью odeint. -1 находится за пределами массива размерности 0 ', и я не знаю, почему это происходит, я очень новичок в Python, и я борюсь.

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


# Dimensionless parameters
c1 = 10
c2 = 0.15
c3 = 0.005
c4 = 0.02

#pack 3 initial conditions with state of x,y,z into y0
y0 = [1,0,0]
k = 1


def Oregonator (t,Y):
  x = Y[0]
  y = Y[1]
  z = Y[2]
 dxdt = c1 + c2*x - x - x*y**2
 dydt = (x + x*y**2 - y)/c3
 dzdt = (y-z)/c4
 return [dxdt,dydt,dzdt]


t = np.linspace(0, 10,100)

Y = odeint(y0,t,Oregonator)

plt.plot(t,Y)
plt.xlabel('time')
plt.ylabel('other side')

plt.show()

Я использую Spyder для обработки код Python. Я ценю любую помощь, которую могут оказать, спасибо.

1 Ответ

0 голосов
/ 08 мая 2020

Вам нужно исправить вызов odeint, чтобы соответствовать его документации, здесь как минимум

Y = odeint(Oregonator,y0,t, tfirst=True)

И вам нужно выровнять отступ в функции Oregonator. Тогда вы получите осциллирующий график.

Также увеличьте разрешение дисплея, 100 точек в интервале с более чем 100 колебаниями - это слишком мало. Поскольку есть острые пики, вам нужно как минимум 20 точек за колебание, лучше больше, поэтому

t = np.linspace(0, 10,5000)
...