Untitled
unknown
plain_text
5 months ago
1.9 kB
5
Indexable
import numpy as np import matplotlib.pyplot as plt # importiamo il modulo pyplot di matplotlib def Ordineh(f, h): n = len(f) der = np.zeros(n) for i in range(0, n - 1): der[i] = (f[i + 1] - f[i]) / h return der def Ordineh2(f, h): n = len(f) der = np.zeros(n) for i in range(1, n - 1): der[i] = (f[i + 1] - f[i - 1]) / (2 * h) return der def Ordineh4(f, h): n = len(f) der = np.zeros(n) for i in range(2, n - 2): der[i] = (-f[i + 2] + 8 * f[i + 1] - 8 * f[i - 1] + f[i - 2]) / (12 * h) return der def main(): # questo programma crea una lista di n numeri equispaziati x_max = float(input('Dammi X massimo: ')) n = int(input('Dammi n: ')) x = [] # lista per i valori di x f = [] # lista per i valori della funzione f fa = [] # lista per i valori della derivata analitica h = x_max / n for i in range(n): x_val = x_max / n * i x.append(x_val) f.append(np.sin(x_val)) fa.append(np.cos(x_val)) foh = Ordineh(f, h) foh2 = Ordineh2(f, h) foh4 = Ordineh4(f, h) # Calcolo dell'errore Errh = foh - fa Errh2 = foh2 - fa Errh4 = foh4 - fa # Creazione del grafico fig, ax = plt.subplots() plt.rcParams.update({'font.size': 14}) ax.set_xlim(0, x_max) ax.set_ylim(np.min(Errh4), np.max(Errh4)) # Usare gli errori di Ordineh4 per i limiti # Grafico degli errori per ciascun metodo ax.plot(x, Errh, label="Errore Ordine h", linestyle='-', marker='o') ax.plot(x, Errh2, label="Errore Ordine h2", linestyle='-', marker='s') ax.plot(x, Errh4, label="Errore Ordine h4", linestyle='-', marker='^') # Mostra legenda correttamente ax.legend() ax.set_xlabel("X") ax.set_ylabel("Errore") plt.show() if __name__ == "__main__": main()
Editor is loading...
Leave a Comment