====== 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ý |