from matplotlib import cm import numpy as np import matplotlib.pyplot as plt eps = 0.25 L = 500 N = 8 x0 = 1.0 t = np.linspace(0, eps, L) def F(t, x): return x**2 y = np.zeros((N+1, L)) y[0, :] = x0 for n in range(N): for k in range(L): integrando = F(t[:k+1], y[n, :k+1]) y[n+1, k] = x0 + np.trapezoid(integrando, t[:k+1]) def x_exata(t): return 1.0 / (1.0 - t) x_ref = x_exata(t) print(f"{'n':<4} {'trapézio':>12}") print("-" * 30) for n in range(N+1): erro_tp = np.max(np.abs(y[n] - x_ref)) print(f"{n:<4} {erro_tp:>12.2e}") fig, ax1 = plt.subplots(1, 1, figsize=(7, 5)) cores = cm.viridis(np.linspace(0, 1, N+1)) for n in range(1, N+1): ax1.plot(t, y[n], color=cores[n]) ax1.plot(t, x_ref, linestyle='--', color='red', linewidth=2, label='solução exata') ax1.set_xlabel("$t$") ax1.set_ylabel("$x$") ax1.set_xlim(0, eps) ax1.set_ylim(0, 2) ax1.grid(True) sm = plt.cm.ScalarMappable(cmap='viridis', norm=plt.Normalize(vmin=1, vmax=N)) plt.colorbar(sm, ax=ax1, label='iterado $n$') ax1.legend() plt.tight_layout() plt.show()