Guillaume Kielwasser il y a 6 mois
commit
37b3f29fce
1 fichiers modifiés avec 79 ajouts et 0 suppressions
  1. 79 0
      interp.py

+ 79 - 0
interp.py

@@ -0,0 +1,79 @@
+#!/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()