Az alábbi mátrixok közül
\begin{equation} M_1=\left(\begin{array}{ccc} 3 &6 &3\\ 9 &3 &9\\ 2 &0 &2 \end{array}\right)\,, M_2=\left(\begin{array}{ccc} 7 &9 &6\\ 9 &3 &0\\ 1 &2 &3 \end{array}\right)\,, M_3=\left(\begin{array}{ccc} 3 &2 &6\\ 6 &5 &9\\ 8 &5 &8 \end{array}\right)\,, M_4=\left(\begin{array}{ccc} 0 &2 &9\\ 6 &5 &4\\ 9 &9 &2\end{array}\right) \end{equation}ha kettőt megfelelő sorrendben összeszorzunk, akkor eredményül az
\begin{equation} X=\left(\begin{array}{ccc} 36& 6& 36\\ 71& 51& 71\\ 112& 81& 112 \end{array}\right) \end{equation}mátrixot kapjuk.
Segítségül listaformátumban a következő cellából kimásolhatók a mátrixok.
M1=[[3,6,3],[9,3,9],[2,0,2]]
M2=[[7,9,6],[9,3,0],[1,2,3]]
M3=[[3,2,6],[6,5,9],[8,5,8]]
M4=[[0,2,9],[6,5,4],[9,9,2]]
X=[[36,6,36],[71,51,71],[112,81,112]]
Először betöltjük pylab
csomagot.
%pylab inline
Ezután a vizsgálandó mátrixokat eltároljuk változókban.
M = [matrix(M1), matrix(M2), matrix(M3), matrix(M4)] # Az M mátrixokat az egyszerű vizsgálat kedvéért egy tömbben tároljuk el
X = matrix(X)
Ezután kipróbáljuk az összes lehetséges szorzat-variációt két, egymásba ágyazott for-ciklussal.
for i in range(len(M)): # Az első tényezőn végig megyünk minden
for j in range(len(M)): # A második tényezők végig megyünk mind
if (M[i]*M[j] == X).all(): # És akkor szólunk, ha a szorzat minden eleme egyezik az X mátrixszal
print("X = M_" + str(i + 1) + " * M_" + str(j + 1))
Ezek után, egy for-ciklussal végigmegyünk az M
tömb elemein, és megvizsgáljuk őket. Egy mátrix akkor invertálható, ha determinánsa nem 0.
for i in range(len(M)):
if det(M[i]) != 0: # Ha invertálható kiírjuk
print("M_" + str(i + 1) + " invertálható.")
else: # Ha nem, kiszámoljuk a spúrt
print("M_" + str(i + 1) + " nem invetálható.")