logistic_solve_ivp.py

logistic_solve_ivp.py

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()