'''
Implementação do Método de Euler para EDOs

DOWNLOAD

Luã Jaz
04.04.25
'''

import matplotlib.pyplot as plt
import math

def euler(f, t0: float, T: float, y0: float, n: int):
    '''
    Toma uma função f tal que y' = f(t,y), um intervalo
    de interesse [t_0, T], a condição inicial y(t0) = y0 e o número
    de pontos n e realiza o método de Euler neste intervalo discretizado
    em n pontos.
    '''
   
    x_data = []
    y_data = []

    # step
    h = (T - t0)/n

    t = t0
    y = y0

    x_data.append(t)
    y_data.append(y)

    for i in range(1, n):
        y += h * f(t, y)
        x_data.append(t)
        y_data.append(y)

        t = t0 + i*h
   
    return x_data, y_data

def main():
    def f(t, y):
        return y*(1-y)
   
    for i in range(81):
        x, y = euler(f, 0.1, 10, -2 + 0.05*i, 1000)
        plt.plot(x,y)
   

    plt.axis((0, 10, -15, 15))
    plt.show()

if __name__ == "__main__":
    main()