from __future__ import print_function
import numpy as np
from scipy.integrate import solve_ivp
# scipy.integrate.solve_ivp
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html
# logistic equation
def f_logistic(t, y):
return y * (1.0 - y)
def main():
y0 = np.array([1e-3, ], dtype=float)
t_start = 0
t_end = 20.0
# Solve ODE
sol = solve_ivp(f_logistic, (t_start, t_end), y0, dense_output=True)
print(sol.message)
print("t.shape =", sol.t.shape) # (n_points,)
print("y.shape =", sol.y.shape) # (1, n_points)
# Save results at selected time points
filename = "result_original.dat"
np.savetxt(filename, np.hstack([sol.t[:, None], sol.y.T]))
print("'{}' generated".format(filename))
# Save dense output for plot
nt = 101
t = np.linspace(t_start, t_end, nt) # shape (nt,)
y = sol.sol(t) # shape (1, nt)
filename = "result_dense.dat"
np.savetxt(filename, np.hstack([t[:, None], y.T]))
print("'{}' generated".format(filename))
if __name__ == '__main__':
main()