Ce que je veux faire: implémenter en Python comment trouver la matrice inverse
Lorsque la taille de la matrice devient grande, il faut penser à l'optimisation du traitement, mais
Dans cet article, nous visons à connecter la «partie conceptuelle de la recherche de la matrice inverse» avec l'implémentation en Python.
(Utilisez Numpy
)
A=\left(
\begin{matrix}
1 & 2 \\
3 & 4
\end{matrix}
\right)
ça ira. Dans l'implémentation, cela ressemble à ceci:
> import numpy as np
> A = np.array([[1,2],[3,4]])
> A
array([[1, 2],
[3, 4]])
Si l'expression de la matrice = 0, vérifiez car il n'y a pas de matrice inverse ou d'hésitation:
{\rm det}(A)={\rm det}\left(
\begin{matrix}
1 & 2 \\
3 & 4
\end{matrix}
\right)
=1\times 4-2\times3=-2
En termes de mise en œuvre
> np.linalg.det(A)
-2.0000000000000004
Mathématiquement
A = \left(
\begin{matrix}
a & b \\
c & d
\end{matrix}\right)
Contre
A^{-1} = \frac{1}{{\rm det}A}\left(
\begin{matrix}
d & -b \\
-c & a
\end{matrix}\right)
Remplacez comme connu.
A^{-1} = \frac{1}{-2}\left(
\begin{matrix}
4 & -2 \\
-3 & 1
\end{matrix}\right)
=\left(
\begin{matrix}
-2 & 1 \\
1.5 & -0.5
\end{matrix}
\right)
En termes de mise en œuvre
> inv_A = np.linalg.inv(A)
> inv_A
array([[-2. , 1. ],
[ 1.5, -0.5]])
Où «linalg» est un module de «numpy». Pour plus de détails
http://docs.scipy.org/doc/numpy/reference/routines.linalg.html
Voir
Multiplier la matrice inverse et la matrice originale donne une matrice unitaire, n'est-ce pas?
AA^{-1}=A^{-1}A=
\left(
\begin{matrix}
1 & 0 \\
0 & 1
\end{matrix}
\right)
> np.dot(A,inv_A)
array([[ 1.00000000e+00, 1.11022302e-16],
[ 0.00000000e+00, 1.00000000e+00]])
> np.dot(inv_A,A)
array([[ 1.00000000e+00, 4.44089210e-16],
[ 0.00000000e+00, 1.00000000e+00]])
C'est une chose numérique qui ne devient pas magnifiquement une matrice unitaire, je ne sais pas, mais ...
Si vous voulez essayer différentes choses, essayez de changer la matrice $ A $.
Recommended Posts