01 - Mátrixszorzás

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.

  • Határozzuk meg, hogy melyik mátrixok azok, amelyek a szorzás tényezőit adják, illetve hogy milyen sorrendben kell a szorzást elvégezni!
  • Mely mátrixok invertálhatóak $M_1,\dots,M_4$ közül?

Segítségül listaformátumban a következő cellából kimásolhatók a mátrixok.

In [1]:
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]]

Megoldás

Először betöltjük pylab csomagot.

In [2]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

Ezután a vizsgálandó mátrixokat eltároljuk változókban.

In [3]:
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.

In [4]:
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))
X = M_4 * M_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.

In [5]:
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ó.")
M_1 nem invetálható.
M_2 invertálható.
M_3 invertálható.
M_4 invertálható.