Untitled
unknown
plain_text
a year ago
1.9 kB
6
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