Понимание результатов odeint - несогласие с аналитическим решением - PullRequest
0 голосов
/ 12 сентября 2018

Несколько дней назад я играл с odeint и думал, что некоторые результаты были любопытны. Итак, я хотел запустить что-то действительно простое, чтобы протестировать мой код (показано ниже).

Если (dy / dt) = -x, его интеграция должна дать (-x ^ 2) / 2 + C. График, который я получил, определенно не показывает этого. Понятно, что я делаю что-то не так, но не могу понять, чего не хватает. Кто-нибудь может дать мне указатели?

Код следует -

import scipy.integrate as scint
import numpy as np
import matplotlib.pyplot as plt

def odefunc(y0, t):
    x = y0
    dxdt = -1*x
    return dxdt

plt.close('all')

t = np.arange(0, 5, 0.02)
y0 = 1

soln = scint.odeint(odefunc, y0, t)

fig1 = plt.figure(1, figsize = (9, 6))
plt.grid(color = 'grey', linestyle = ':', linewidth = 1)
plt.plot(t, soln, marker = 'd', linestyle = 'none', color = 'black')

plt.xlabel('Time')
plt.ylabel('Event')
plt.tight_layout()

Вот сюжет -

Участок решения

Я довольно новичок в использовании python. Это не домашнее задание или что-то еще. Я изучаю Python для удовольствия больше всего на свете.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы написали "Если (dy / dt) = -x, его интеграция должна дать (-x ^ 2) / 2 + C", но я думаю, что вы имеете в виду "If (dy / dt) = -t, интегрируя его должен дать (-t ^ 2) / 2 + C ". И это не то уравнение, которое вы реализовали в коде Python.

Ваша реализация odefunc,

def odefunc(y0, t):
    x = y0
    dxdt = -1*x
    return dxdt

соответствует дифференциальному уравнению dy / dt = -y. Решение для это уравнение y (t) = y (0) * exp (-t). То, что - это функция, которая отображается на вашем графике.

Если вы хотите решить dy / dt = -t с помощью odeint, тогда odefunc должно быть

def odefunc(y, t):
    return -t
...