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(len(f)) 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(len(f)) 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(len(f)) 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 #tra 0 x_max e x_max=float(input('Dammi X massimo :')) n=int(input('Dammi n :')) x=[]#crea una lista per ora vuota f=[] fa=[] h=x_max/n for i in range(n):#range crea interi da 0 a n-1 compresi x.append(x_max/n*i)#aggiunge un elemento alla lista f.append(np.sin(x[i]))#x[i] dà l'elemento i-esimo della lista fa.append(np.cos(x[i])) foh=Ordineh(f,h) foh2=Ordineh2(f,h) foh4=Ordineh4(f,h) Errh=foh-fa Errh2=foh2-fa Errh4=foh4-fa fig, ax = plt.subplots()#definiamo un grafico plt.rcParams.update({'font.size': 14})#cambiamo il font ax.set_xlim(0,x_max)#definiamo gli intervalli #ax.set_ylim(-1,1) ax.set_ylim(np.min(Errh[4:n-5]),np.max(Errh[4:n-5])) plt.plot(x[4:n-5],Errh[4:n-5], ls='-', label="Ordine h")#grafico plt.plot(x[4:n-5],Errh2[4:n-5], ls='-', label="Ordine h**2")#grafico plt.plot(x[4:n-5],Errh4[4:n-5], ls='-', label="Ordine h**4")#grafico ax.legend() ax.set_xlabel("X") ax.set_ylabel("Y") plt.show(block=True) if __name__ == "__main__": main()