import numpy as np
import matplotlib.pyplot as plt


# énoncé : y'(t)+3y(t) = sin(t), sous la forme y'(t) = f(t,y)
def f1(t, y):
    return -3*y + np.sin(t)


# énoncé : y''(t)+2y'(t)+2y(t) = sin(t)
def f2(t, y):
    A = np.array([[0, 1], [-2, -2]])
    b = np.array([0, np.sin(t)])
    return A @ y + b


def euler(fct, a, b, y0, h):
    t = np.arange(a, b, h)
    y = np.zeros((len(y0), len(t)))
    y[:, 0] = y0

    for i in range(1, len(t)):
        y[:, i] = y[:, i-1] + h*fct(t[i-1], y[:, i-1])

    return t, y