====== HW05 - maticové operace ======
Termín odevzdání: 19.12.2021 23:59 CET
Hodnocení: 5b
===== Zadání =====
Program načte soubor ''matrixes.dat'', ve kterém jsou umístěny definice matic. Textový řetězec, vyjadřující maticovou operaci, je předán programu jako parametr příkazové řádky. Vaším úkolem je provést zadanou operaci a vypsat na standardní výstup výslednou matici.
==== Chyby ====
* Pokud nebude vstup ve správném formátu nebo nepůjde provést příslušnou maticovou operaci (např. data matice neodpovídají deklarované velikosti), vypište "''Error: Chybny vstup!''".
* Pokud jsou ve výrazu použity názvy matic, které nejsou definovány, vypište "''Error: Matice nenalezena!''".
==== Volání programu ====
# maticovy soucet
$python3 HW05.py v=a+b
# maticovy soucin
$python3 HW05.py v=a*b
# determinant matice
$python3 HW05.py det(a)
Vyhodnocení domácího úkolu není automatické. Není dovolenou používat knihovny jako ''numpy''.
K vyhodnocení výrazu s maticemi využijte vestavěné funkce [[https://docs.python.org/3/library/functions.html#eval|eval()]] nebo [[https://docs.python.org/3/library/functions.html#exec|exec()]].
==== Formát vstupu ====
Definice matic jsou v souboru ''matrixes.dat''. Každá matice má na prvním řádku nejprve název a svoji velikost ($n$, $m$) a následuje $n$ řádků vždy s $m$ hodnotami matice. Jednotlivé hodnoty jsou oddělené mezerami, ale za poslední hodnotou je pouze znak nového řádku.
a 3 3
10 20 30
40 50 60
70 80 90
b 3 3
11 44 47
98 17 77
40 33 18
==== Formát výstupu ====
Formát výstupu je stejný, ale obsahuje pouze jednu matici nebo skalár. Pokud je výsledkem matice, jmenuje se ''v''.
==== Doporuční pro implementaci ====
Pro implementaci domácího úkolu navrhněte třídu ''Matrix'', která bude popisovat matici. Parametry konstruktoru bude velikost matice, součástí budou přetížené magické metody pro aritmetické operace:
__add__
__sub__
__mul__
Pro výpočet determinantu implementujte funkci, jejíž argumentem bude instance třídy ''Matrix''.
==== Příklad 1 ====
$
\left( \begin{array}{cc}
76 & 98 & -31 \\\\
30 & 30 & 32 \end{array} \right)
-
\left( \begin{array}{c}
89 & 25 & 38 \\\\
1 & -32 & -38 \end{array} \right)
=
\left( \begin{array}{c}
-13 & 73 & -69 \\\\
29 & 62 & 70 \end{array} \right)
$
^ ''matrixes.dat'' ^ Operace ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
a 2 3
76 98 -31
30 30 32
b 2 3
89 25 38
1 -32 -38
| ''v=a-b'' |
v 2 3
-13 73 -69
29 62 70
| žádný |
==== Příklad 2 ====
$
\left( \begin{array}{cc}
-59 & 78 & -85\end{array} \right)
\times
\left( \begin{array}{c}
78 \\\\
-28 \\\\
-97\end{array} \right)
=
\left( \begin{array}{c}
1459\end{array} \right)
$
^ ''matrixes.dat'' ^ Operace ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
a 1 3
-59 78 -85
b 3 1
78
-28
-97
| ''v=a*b'' |
v 1 1
1459
| žádný |
==== Příklad 3 ====
^ ''matrixes.dat'' ^ Operace ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
a 2 3
16 41 -98
b 3 1
96
-67
49
| ''a*b'' | žádný |
Error: Chybny vstup!
|
==== Příklad 4 ====
$
\left( \begin{array}{cc}
81 & -96 & -56 & -9 \\\\
-19 & 66 & 37 & -21 \\\\
20 & 49 & -71 & -49 \\\\
45 & -96 & 20 & 8\end{array} \right)
\times
\left( \begin{array}{c}
-89 & -96 \\\\
76 & 75 \\\\
65 & 2\end{array} \right)
$
^ ''matrixes.dat'' ^ Operace ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
a 4 4
81 -96 -56 -9
-19 66 37 -21
20 49 -71 -49
45 -96 20 8
b 3 2
-89 -96
76 75
65 2
| ''a*b'' | žádný |
Error: Chybny vstup!
|
==== Příklad 5 ====
^ ''matrixes.dat'' ^ Operace ^ Očekávaný výstup ^ Očekávaný chybový výstup ^
|
a 3 3
1 2 3
4 5 6
7 8 9
| ''det(a)'' | 0 |
žádný
|