(Python newb ie здесь) В качестве обучающего упражнения я пытаюсь решить и построить решение очень простого ODE: dy / dt = y с y (0) = 1. Я считаю, что мой код решить ODE правильно, но границы графика по оси x очень странные. Я сделал 50 равноудаленных значений x в диапазоне от 0 до 5, но похоже, что plt.plot()
рисует только первые две точки, в результате чего график выглядит как линия, а не кривая y = e ^ x. Я пробовал поиграть с аргументами «scalex» и «scaley» plt.plot()
, а также plt.xlim = (0,5)
и их вариациями, но безрезультатно. Мой код ниже (я использую Python 3.7.6):
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
def f(t,y):
return(y)
t0 = np.linspace(0,5,50)
y0 = np.array([1])
#solve_ivp(fun, t_span, y0, args = None)
out = solve_ivp(f, t0, y0)
t_vals = out.t
y_vals = out.y[0,:]
plt.plot(t_vals,y_vals)
Вот график, который я получаю:
Я попытался установить y = np.exp(t0)
, а затем построить график t0 vs y0, который отлично работает (т.е. со значениями x от 0 до 5). Поэтому я не уверен, почему мой исходный код не дает мне такой же тип графика. Возможно, моя попытка подмножества переменной out
как-то неверна? ... Любая помощь приветствуется!