Python 3.6 ValueError: установка элемента массива с последовательностью - PullRequest
0 голосов
/ 01 ноября 2018

Я написал следующий код для задания кинетики химической реакции. Проблема на самом деле заключается в том, что кролики рождаются и покидают ферму, а не реакции. Меня попросили разработать программу метода явного Эйлера для моделирования популяции кроликов.

Моя программа работала нормально (т.е. я не получал никаких ошибок, но не получал желаемых результатов) до недавнего времени, когда получал ValueError (ValueError: установка элемента массива с последовательностью.) сообщение. Я не уверен, что я сделал с моим кодом, чтобы вызвать ошибку.

Любая помощь будет оценена.

def explicit_euler(df, x0, h, n):

    # df - ODE that you wish to solve numerically
    # x0 - initials values for ODE
    # h - step size
    # n - number of steps

    for i in range(0, len(x0)):

        N = np.zeros((len(x0), n))
        t = 0
        N[i, 0] = x0[i]

        for j in range(0, n - 1):

            N[i, j + 1] = N[i, j] + h * df(t, N[i, j])
            t += h

    return N

def df(t, N):

    return [(k2 - k5) * t * N, 
            (k3 - k4) * t * N, 
            (k1 - k2 - k3 - (k6 * N)) * t * N]


N0 = [2., 10., 0.]       # initial number of rabbits [Male, Female, Baby]

# "Reaction rate" coefficients
k1 = 3.5          # [events/rabbits month]
k2 = k3 = 0.15    # [events/rabbits month]
k4 = 0.1          # [events/rabbits month]
k5 = 0.5          # [events/rabbits month]
k6 = 0.1          # [events/rabbits^2 month]

h = 1   # time steps [month]
tspan = 120   # length of time [month]
n = int(tspan / h)   # number of time steps

N = explicit_euler(df, N0, h, n)
t = np.linspace(0, tspan, n)

plot1, = plt.plot(t, N[0, :])
plot2, = plt.plot(t, N[1, :])
plot3, = plt.plot(t, N[2, :])
plt.xlabel('Time [months]')
plt.ylabel('Rabbits')
plt.legend((plot1, plot2, plot3), ('Male', 'Female', 'Babies'))
plt.show()

print(N)

РЕДАКТИРОВАТЬ: Забыл включить трассировку ошибки.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-d31ce8d859bf> in <module>()
     39 n = int(tspan / h)   # number of time steps
     40 
---> 41 N = explicit_euler(df, N0, h, n)
     42 t = np.linspace(0, tspan, n)
     43 

<ipython-input-4-d31ce8d859bf> in explicit_euler(df, x0, h, n)
     14         for j in range(0, n - 1):
     15 
---> 16             N[i, j + 1] = N[i, j] + h * df(t, N[i, j])
     17             t += h
     18 

ValueError: setting an array element with a sequence.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...