1 # -*- coding: utf-8 -*-
4 import matplotlib.pyplot as plt
5 np.random.seed(123456789)
10 print("Définition d'un ensemble artificiel de champs physiques")
11 from Models.TwoDimensionalInverseDistanceCS2010 \
12 import TwoDimensionalInverseDistanceCS2010 as Equation
13 Eq = Equation(dimension, dimension)
16 print("Recherche des positions optimales de mesure")
17 from adao import adaoBuilder
18 case = adaoBuilder.New()
19 case.setAlgorithmParameters(
20 Algorithm = 'MeasurementsOptimalPositioningTask',
23 "SampleAsnUplet":Eq.get_sample_of_mu(15, 15),
24 "MaximumNumberOfLocations":nbmeasures,
26 "ErrorNormTolerance":0.,
27 "StoreSupplementaryCalculations":[
30 "EnsembleOfSimulations",
34 case.setBackground(Vector = [1,1] )
35 case.setObservationOperator(OneFunction = Eq.OneRealisation)
38 #-------------------------------------------------------------------------------
40 print("Affichage graphique des résultats")
42 sp = case.get("EnsembleOfSimulations")[-1]
43 sv = case.get("SingularValues")[-1]
44 op = case.get("OptimalPoints")[-1]
47 x1, x2 = np.meshgrid(x1, x2)
48 posx1 = [x1.reshape((-1,))[ip] for ip in op]
49 posx2 = [x2.reshape((-1,))[ip] for ip in op]
50 Omega = Eq.get_bounds_on_space()
52 fig = plt.figure(figsize=(18, 6))
53 name = "Recherche de points optimaux de mesure par "
54 name += '"ADAO/MeasurementsOptimalPositioningTask/DEIM"'
55 fig.suptitle(name, fontsize=20, fontstyle='italic')
57 ax = fig.add_subplot(1, 3, 1)
58 name = "Valeurs singulières de l'ensemble des %i simulations de G"%sp.shape[1]
60 ax.set_title(name, fontstyle='italic', color='red')
61 ax.set_xlabel("Index des valeurs singulières, numérotées à partir de 1")
62 ax.set_ylabel("Amplitude des valeurs singulières")
63 ax.set_xlim(1, len(sv))
66 ax.plot(range(1, 1 + len(sv)), sv)
68 ax = fig.add_subplot(1, 3, 2, projection = "3d")
69 name = "Quelques simulations de G sur un total de %i"%sp.shape[1]
71 ax.set_title(name, fontstyle='italic', color='red')
72 ax.set_xlabel("Position x1")
73 ax.set_ylabel("Position x2")
74 ax.set_zlabel("Amplitude de G")
75 for i in range(sp.shape[1]):
76 if i % 44 != 0: continue
77 Gfield = sp[:,i].reshape((dimension, dimension))
78 ax.plot_surface(x1, x2, Gfield, cmap='coolwarm')
80 ax = fig.add_subplot(1, 3, 3)
81 name = "Ensemble des %i premiers points optimaux de mesure"%nbmeasures
83 ax.set_title(name, fontstyle='italic', color='red')
84 ax.set_xlabel("Position x1")
85 ax.set_ylabel("Position x2")
86 ax.set_xlim(Omega[0][0] - 0.05, Omega[0][1] + 0.05)
87 ax.set_ylim(Omega[1][0] - 0.05, Omega[1][1] + 0.05)
88 ax.grid(True, which='both', linestyle=(0, (1, 5)), linewidth=0.5)
89 ax.plot(posx1, posx2, markersize=6, marker="o", linestyle='')
90 for i in range(len(posx1)):
91 ax.text(posx1[i] + 0.005, posx2[i] + 0.01, str(i + 1), fontweight='bold')
94 fig.savefig("simple_MeasurementsOptimalPositioningTask3.png")