Salome HOME
d9fca5a000beb70ae0b494d988e305ac1f074639
[modules/adao.git] / doc / fr / scripts / simple_MeasurementsOptimalPositioningTask3.py
1 # -*- coding: utf-8 -*-
2 #
3 import numpy as np
4 import matplotlib.pyplot as plt
5 np.random.seed(123456789)
6 #
7 dimension = 20
8 #
9 print("Définition d'un ensemble artificiel de champs physiques")
10 from Models.TwoDimensionalInverseDistanceCS2010 \
11      import TwoDimensionalInverseDistanceCS2010 as Equation
12 Eq = Equation(dimension, dimension)
13 print()
14 #
15 print("Recherche des positions optimales de mesure")
16 from adao import adaoBuilder
17 case = adaoBuilder.New()
18 case.setAlgorithmParameters(
19     Algorithm = 'MeasurementsOptimalPositioningTask',
20     Parameters = {
21         "Variant":"DEIM",
22         "SampleAsnUplet":Eq.get_sample_of_mu(15, 15),
23         "MaximumNumberOfLocations":50,
24         "ErrorNorm":"Linf",
25         "ErrorNormTolerance":0.,
26         "StoreSupplementaryCalculations":[
27             "SingularValues",
28             "OptimalPoints",
29             "EnsembleOfSimulations",
30             ],
31         }
32     )
33 case.setBackground(Vector = [1,1] )
34 case.setObservationOperator(OneFunction = Eq.OneRealisation)
35 case.execute()
36 #
37 print()
38 print("Affichage graphique des résultats")
39 #
40 sp = case.get("EnsembleOfSimulations")[-1]
41 x1, x2 = Eq.get_x()
42 x1, x2 = np.meshgrid(x1, x2)
43 name = "Représentation de quelques snapshots de G sur un total de %i"%sp.shape[1]
44 print("  -", name)
45 fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, figsize=(6, 6))
46 fig.suptitle(name)
47 ax.set_xlabel("Position x1", fontweight='bold', color='red')
48 ax.set_ylabel("Position x2", fontweight='bold', color='red')
49 ax.set_zlabel("Amplitude de G", fontweight='bold', color='red')
50 for i in range(sp.shape[1]):
51     if i % 44 != 0: continue
52     ax.plot_surface(x1, x2, sp[:,i].reshape((dimension, dimension)), cmap='coolwarm')
53 fig.savefig("simple_MeasurementsOptimalPositioningTask31.png")
54 plt.close()
55 #
56 sv = case.get("SingularValues")[-1]
57 name = "Valeurs singulières de l'ensemble des simulations de G"
58 print("  -", name)
59 fig, ax = plt.subplots(figsize=(6, 6))
60 fig.suptitle(name)
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))
64 ax.set_yscale("log")
65 ax.grid(True)
66 ax.plot(range(1, 1 + len(sv)), sv)
67 fig.savefig("simple_MeasurementsOptimalPositioningTask32.png")
68 plt.tight_layout()
69 plt.close()
70 #
71 nbmax = 15
72 op = case.get("OptimalPoints")[-1]
73 posx1 = [x1.reshape((-1,))[ip] for ip in op[:nbmax]]
74 posx2 = [x2.reshape((-1,))[ip] for ip in op[:nbmax]]
75 name = "Ensemble des %i premiers points optimaux de mesure"%nbmax
76 Omega = Eq.get_bounds_on_space()
77 print("  -", name)
78 fig, ax = plt.subplots(figsize=(6, 6))
79 fig.suptitle(name)
80 ax.set_xlabel("Position x1", fontweight='bold', color='red')
81 ax.set_ylabel("Position x2", fontweight='bold', color='red')
82 ax.set_xlim(Omega[0][0] - 0.05, Omega[0][1] + 0.05)
83 ax.set_ylim(Omega[1][0] - 0.05, Omega[1][1] + 0.05)
84 ax.grid(True, which='both', linestyle=(0, (1, 5)), linewidth=0.5)
85 ax.plot(posx1, posx2, markersize=6, marker="o", linestyle='')
86 for i in range(len(posx1)):
87     ax.text(posx1[i] + 0.005, posx2[i] + 0.01, str(i + 1), fontweight='bold')
88 fig.savefig("simple_MeasurementsOptimalPositioningTask33.png")
89 plt.tight_layout()
90 plt.close()