Lösen Sie die N-dimensionalen simultanen linearen Gleichungen $ A x = b $ mit A als Matrix für $ x $.
(1) Berechnen Sie die inverse Matrix $ A ^ -1 $ von A nach der Methode linalg.inv von numpy. Finden Sie den Lösungsvektor $ x = A ^ {-1} b $.
(2) Berechnen Sie $ x $ direkt mit der Methode np.linalg.solve. ** Dies ist in der Regel schneller. ** ** **
%%time
import numpy as np
"""
A x =Der x-Vektor, der b erfüllt, ist linalg.Fragen Sie mit lösen
"""
#Erzeugung der Matrix A.
a1_lis = [1, 0, 0]
a2_lis = [0, 2, 0]
a3_lis = [0, 0, 4]
A_matrix=np.array([a1_lis, a2_lis, a3_lis])
# b vector
b = np.array([4,5,6]) #Generieren Sie b als Zeilenvektor und verwenden Sie es als Translokationsmatrix"Spaltenvektor generieren "
b_vec = b.T
A_inv = np.linalg.inv(A_matrix)
x_vec= np.dot(A_inv,b_vec) #Berechnen Sie den x-Vektor. Zum Produkt der Matrix@Verwenden eines Operators(Referenz)
print(x_vec)
Oder Sie können unten mit "Matrix" schreiben. Die Lesbarkeit ist hoch. Es wird jedoch nicht empfohlen, da es oft unpraktisch ist.
import numpy as np
"""
A x =x Vektor, der b erfüllt= A^-1 Berechnen Sie durch Berechnung von b
"""
#Erzeugung der Matrix A.
a1_lis = [1, 0, 0]
a2_lis = [0, 2, 0]
a3_lis = [0, 0, 4]
A_matrix=np.matrix([a1_lis, a2_lis, a3_lis])
# b vector
bb = np.matrix([4,5,6]) #Generieren Sie b als Zeilenvektor und verwenden Sie es als Translokationsmatrix"Spaltenvektor generieren "
b_vec = bb.T
x_vec=A_matrix.I@b_vec #Berechnen Sie den x-Vektor. Zum Produkt der Matrix@Verwenden eines Operators(Referenz)
print(x_vec)
[[ 4. ]
[ 2.5]
[ 1.5]]
import numpy as np
"""
A x =Der x-Vektor, der b erfüllt, ist linalg.Fragen Sie mit lösen
"""
#Erzeugung der Matrix A.
a1_lis = [1, 0, 0]
a2_lis = [0, 2, 0]
a3_lis = [0, 0, 4]
A_matrix=np.array([a1_lis, a2_lis, a3_lis])
# b vector
b = np.array([4,5,6]) #Generieren Sie b als Zeilenvektor und verwenden Sie es als Translokationsmatrix"Spaltenvektor generieren "
x_vec= np.linalg.solve(A_matrix,b) #Berechnen Sie den x-Vektor. Zum Produkt der Matrix@Verwenden eines Operators(Referenz)
print(x_vec)
Ergebnis (2) [ 4. 2.5 1.5]
** Die numpy.linalg.solve-Methode ist intern Lapacks LAPACK dgesv (tatsächlich gleichzeitig) Ein Wrapper für [1](Lösung linearer Gleichungen) und zgesv (Lösung komplexer simultaner linearer Gleichungen) [1 ]. ** ** **
● In der Computerphysik usw. werden häufig simultane lineare Gleichungen erhalten. Es gibt verschiedene Schemata zum Finden der inversen Matrix, abhängig von der Art der Matrix $ A $, aber es scheint, dass Sie vorerst nur die Lösungsmethode verwenden sollten, wenn Sie ** Code schreiben ... ** ** ** Es gibt die Gaußsche Eliminierungsmethode, die Jacobi-Methode, die Gauß-Seidel-Methode, die konjugierte Gradientenmethode usw. als rudimentäre numerische Berechnungsmethoden zur Lösung simultaner linearer Gleichungen [2]. Vielleicht möchten Sie es nachschlagen, wenn Sie es brauchen.
[1] Beschreibung von numpy.linalg.solve: https://docs.scipy.org/doc/numpy-1.7.0/reference/generated/numpy.linalg.solve.html
[2] Ichiro Kawakami, ["Numerische Berechnung"](https://www.amazon.co.jp/%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97- % E7% 90% 86% E5% B7% A5% E7% B3% BB% E3% 81% AE% E6% 95% B0% E5% AD% A6% E5% 85% A5% E9% 96% 80% E3 % 82% B3% E3% 83% BC% E3% 82% B9-8-% E5% B7% 9D% E4% B8% 8A-% E4% B8% 80% E9% 83% 8E / dp / 4000077783), Iwanami Shoten, 1989.
Über @ operator: [[Wissenschaftliche / technische Berechnung durch Python] Berechnung des Matrixprodukts durch @ operator, python3.5 oder höher, numpy](Wissenschaftliche / technische Berechnung durch Python] Berechnung des Matrixprodukts durch @ operator, python3.5 Danach numpy)
Recommended Posts