#!/usr/bin/python3 import numpy as np from scipy import interpolate def ecdf(x): data = np.array(x) sorted_data = np.sort(data) # Calculer les probabilités cumulées n = len(sorted_data) y = np.arange(1, n+1) / n return y def gendata(): # Générer des données suivant une distribution normale mean = 0 # Moyenne de la distribution normale std_dev = 1 # Écart-type de la distribution normale num_samples = 100 # Nombre d'échantillons à générer return np.random.normal(mean, std_dev, num_samples) data1 = gendata() data2 = gendata() x1 = sorted(data1) y1 = ecdf(data1) x2 = sorted(data2) y2 = ecdf(data2) absmin = max(min(x1), min(x2)) absmax = min(max(x1), max(x2)) # Créer une fonction d'interpolation linéaire f1 = interpolate.interp1d(x1, y1, kind='linear') # Générer des points pour l'interpolation x_interp = np.linspace(absmin, absmax, 1000) y_interp1 = f1(x_interp) # Créer une fonction d'interpolation linéaire f2 = interpolate.interp1d(x2, y2, kind='linear') # Générer des points pour l'interpolation y_interp2 = f2(x_interp) # Calculer l'erreur quadratique moyenne (RMSE) rmse = np.sqrt(np.mean((y_interp1 - y_interp2) ** 2)) # Calculer l'erreur quadratique moyenne (MAE) mae = np.mean(abs(y_interp1 - y_interp2)) # normalized RMSE, as y are 0 -> 1 it's just 100x # normalized MAE, as y are 0 -> 1 it's just 100x print("NRMSE: {}, NMAE: {}".format(100 * rmse, 100 * mae)) import matplotlib.pyplot as plt # Tracer un histogramme des données générées plt.hist(data1, bins=30, color='skyblue', edgecolor='black') plt.hist(data2, bins=30, color='red', edgecolor='black') plt.xlabel('Valeurs') plt.ylabel('Fréquence') plt.title('Distribution normale générée aléatoirement') plt.show() # Tracer le nuage de points et la fonction d'interpolation plt.scatter(x1, y1, color='blue', label='Données réelles') plt.scatter(x2, y2, color='red', label='Données réelles') plt.plot(x_interp, y_interp1, color='orange', label='Données interpolées') plt.plot(x_interp, y_interp2, color='orange', label='Données interpolées') plt.xlabel('X') plt.ylabel('Y') plt.title('Interpolation linéaire à partir d\'un nuage de points') plt.legend() plt.show()