# spy03all_operations_matricielles.py import numpy as np import matplotlib.pyplot as plt print('----- 3.2 ----------------') print("Un premier exemple, pour tester Spyder3 sur un programme connu.") x=np.arange(5) print("x=", x) y=x plt.plot(x, y, 'o--') plt.plot(x, -y, 'o-') plt.title('y=x et y=-x') plt.show() print('----- 3.3 ----------------') print("Testons quelques opérations matricielles.") A = np.array([[2, 3], [4, 5]], np.float64) print("A=\n", A) B = np.array([[3, 5], [7, 9]], np.float64) print("B=\n", B) C = A * B # produit terme à terme print("C=\n", C) D = np.dot(A, B) # produit matriciel print("D=\n", D) print("type(D[0,0])=", type(D[0,0])) vec = np.array([4, 6], np.float64) print("A*vec=", np.dot(A, vec)) # produit Matrice fois un vecteur. print('----- 3.4 ----------------') Ainv = np.linalg.inv(A) # Matrice inverse de la matrice A print("Ainv=\n", Ainv) print("A*Ainv=\n", np.dot(A, Ainv)) # Matrice fois son inverse donne l'identité print('------ 3.5 ---------------') print("Système de 2 équations à 2 inconnues.") A = np.array([[4, -2], [9, -5]], np.float64) Ainv = np.linalg.inv(A) # Matrice inverse de la matrice A b = np.array([11, 23], np.float64) v = np.dot(Ainv, b) # produit Ainv*b, donne la solution du sytème. print("v=", v) # Affichage de la solution print("A*v=", np.dot(A, v)) # Vérification que l'on retrouve b print('----- 3.6 ---------------') v_sol = np.linalg.solve(A, b) # Résolution du système d'équations. print("v_sol=", v_sol) # Affichage de la solution print("A*v_sol=", np.dot(A, v_sol)) # Vérification que l'on retrouve b print('------ 3.7 ---------------') print("Système de 3 équations à 3 inconnues.") A = np.array([[1, 1, 1], [1, 2, 3], [3, 5, -6]], np.float64) Ainv = np.linalg.inv(A) # Matrice inverse de la matrice A b = np.array([-3, -4, 15], np.float64) v = np.dot(Ainv, b) # produit Ainv*b, donne la solution du sytème. print("v=", v) # Affichage de la solution print("A*v=", np.dot(A, v)) # Vérification que l'on retrouve b print("Meilleure manière de résoudre.") v_sol = np.linalg.solve(A, b) # Résolution du système d'équations. print("v_sol=", v_sol) # Affichage de la solution print("A*v_sol=", np.dot(A, v_sol)) # Vérification que l'on retrouve b print('------ 3.8 ---------------') print("Système de 4 équations à 4 inconnues.") A = np.array([[4, -2, 4, 4], [2, -5, 7, -9], [3, -2, 3, 4], [7, 3, -3, 8]], np.float64) b = np.array([12, 13, 8, 6], np.float64) v_sol = np.linalg.solve(A, b) # Résolution du système d'équations. print("v_sol=", v_sol) # Affichage de la solution print("A*v_sol=", np.dot(A, v_sol)) # Vérification que l'on retrouve b print('------ 3.9 ---------------') print("Système sans solution.") A = np.array([[4, -6], [2, -3]], np.float64) b = np.array([17, 8], np.float64) try: v_sol = np.linalg.solve(A, b) # Essai de résolution du système d'équations. print("v_sol=", v_sol) except : print('Erreur, pas de solution.') print('------ 3.10 ---------------') print("Solution approchée d'un système d'équations linéaires.") A = np.array([[4, -6], [2, -3]], np.float64) b = np.array([17, 8], np.float64) v_sol = np.linalg.lstsq(A, b, rcond=None)[0] # Solution approchée "Least square" = "moindre carré" print("v_sol=", v_sol) print("a*v_sol=", np.dot(A, v_sol)) print('------ 3.11 ---------------') print("Autre exemple de système sans solution, avec solution approchée.") A = np.array([[4, -2, 4], [2, -5, 7], [6, -7, 11]], np.float64) b = np.array([12, 13, 26], np.float64) v_sol = np.linalg.lstsq(A, b, rcond=None)[0] # Solution approchée "Least square" = "moindre carré" print("v_sol=", v_sol) print("A*v_sol=", np.dot(A, v_sol)) print('------ 3.12 ---------------') print("Système sur-dimensionné. 3 équations à 2 inconnues.") A = np.array([[4, -2], [2, -5], [3, -2]], np.float64) b = np.array([14, -5, 8], np.float64) v_sol = np.linalg.lstsq(A, b, rcond=None)[0] # Solution approchée "Least square" = "moindre carré" print("v_sol=", v_sol) print("A*v_sol=", np.dot(A, v_sol))