Résolvez les équations linéaires simultanées à N dimensions $ A x = b $ avec A comme matrice pour $ x $.
(1) Calculez la matrice inverse $ A ^ -1 $ de A par la méthode linalg.inv de numpy. Trouvez le vecteur solution $ x = A ^ {-1} b $.
(2) Calculez $ x $ directement à partir de la méthode np.linalg.solve. ** C'est généralement plus rapide. ** **
%%time
import numpy as np
"""
A x =Le vecteur x qui satisfait b est linalg.Demander à l'aide de résoudre
"""
#Génération de la matrice 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]) #Générez b comme vecteur de ligne et utilisez-le comme matrice de translocation"Générer un vecteur de colonne "
b_vec = b.T
A_inv = np.linalg.inv(A_matrix)
x_vec= np.dot(A_inv,b_vec) #Calculez le vecteur x. Au produit de la matrice@Utilisation d'un opérateur(référence)
print(x_vec)
Ou vous pouvez écrire ci-dessous en utilisant "matrice". La lisibilité est élevée. Cependant, il n'est pas recommandé car il est souvent peu pratique.
import numpy as np
"""
A x =x vecteur qui satisfait b= A^-1 Calculer par calcul de b
"""
#Génération de la matrice 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]) #Générez b comme vecteur de ligne et utilisez-le comme matrice de translocation"Générer un vecteur de colonne "
b_vec = bb.T
x_vec=A_matrix.I@b_vec #Calculez le vecteur x. Au produit de la matrice@Utilisation d'un opérateur(référence)
print(x_vec)
[[ 4. ]
[ 2.5]
[ 1.5]]
import numpy as np
"""
A x =Le vecteur x qui satisfait b est linalg.Demander à l'aide de résoudre
"""
#Génération de la matrice 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]) #Générez b comme vecteur de ligne et utilisez-le comme matrice de translocation"Générer un vecteur de colonne "
x_vec= np.linalg.solve(A_matrix,b) #Calculez le vecteur x. Au produit de la matrice@Utilisation d'un opérateur(référence)
print(x_vec)
Résultat (2) [ 4. 2.5 1.5]
** La méthode numpy.linalg.solve est en interne LAPACK [dgesv] de Lapack (https://www.nag.co.uk/numeric/FL/nagdoc_fl22/pdf/F07/F07AAF.pdf) (simultanée réelle Un wrapper pour [1](solution d'équations linéaires) et zgesv (solution d'équations linéaires simultanées complexes) [1 ]. ** **
● En physique computationnelle, etc., des équations linéaires simultanées sont souvent obtenues. Il existe différents schémas pour trouver la matrice inverse en fonction de la nature de la matrice $ A $, mais il semble que vous devriez simplement utiliser la méthode de résolution pour le moment lors de l'écriture de ** code ... ** ** Il existe la méthode d'élimination gaussienne, la méthode Jacobi, la méthode Gaussienne-Seidel, la méthode du gradient conjugué, etc. comme méthodes de calcul numérique rudimentaire pour résoudre des équations linéaires simultanées [2]. Vous voudrez peut-être le rechercher lorsque vous en avez besoin.
[1] Description de numpy.linalg.solve: https://docs.scipy.org/doc/numpy-1.7.0/reference/generated/numpy.linalg.solve.html
[2] Ichiro Kawakami, ["Calcul numérique"](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.
À propos de l'opérateur @: [[Calcul scientifique / technique par Python] Calcul du produit de la matrice par l'opérateur @, python3.5 ou supérieur, numpy](Calcul scientifique / technique par Python] Calcul du produit de la matrice par l'opérateur @, python3.5 Après ça, numpy)
Recommended Posts