Kapitola 14
MATRIX – Bloky pro maticové a vektorové operace

Knihovna MATRIX je navržena pro pokročilé maticové výpočty a manipulace. Zahrnuje širokou škálu bloků, jako je MB_DGEMM, MB_DTRMM a MB_DGER pro operace typu matice-matice a matice-vektor. Knihovna obsahuje funkce pro rozklad matic (ML_DGEBRD, ML_DGEQRF), problémy s vlastními hodnotami (ML_DGEEV, ML_DGEES ) a rozklad singulární hodnoty (ML_DGESDD). Kromě toho nabízí pomocné bloky jako MX_MAT, MX_VEC a MX_FILL pro vytváření matic a manipulaci, stejně jako specializované bloky, jako je např. MX_DTRNSP pro maticovou transpozici a MX_RAND pro generování náhodných matic. Tato knihovna je nezbytná pro složité matematické operace zahrnující matice v různých aplikacích.

Poznámky k implementaci
První prvek matice má index(0,0), první prvek vektoru index (0).

Vektor není samostatný objekt, ale matice s jedním sloupcem. Může být i matice s jedním řádkem, které se říká řádkový vektor. Pokud se někdy v systému REXYGEN vyžaduje vektor, myslí se tím sloupcový (tj. matice s jedním sloupcem).

Matice jsou mezi bloky předávány odkazem. V rámci nějakého bloku (nejčastěji MX_MAT nebo MX_VEC) se alokuje paměť pro celou matici a pak se jen předává jedno číslo, které znamená adresu této paměti. To znamená, že všechny bloky, které si matici předávají pořád pracují s jednou kopií a vzájemně si matici přepisují. Pokud je potřeba vytvořit kopii matice, je potřeba použít další blok MX_MAT a data zkopírovat (např. blokem MB_DCOPY).

Některé bloky pracující s vektorem (např. MB_DCPY, RTOV, VTOR) nekontrolují přesné rozměry (takže např. matici 10x10 chápou jako 100 prvkový vektor). Pro tento případ je důležité vědět, že se hodnoty ukládají po sloupcích (tj. prvek (1,0) má index 1, prvek (2,0) má index 2, prvek (0,1) má index 10, prvek (0,2) má index 11, atd.). Tyto bloky nelze použít s podmaticí vrácenou blokem MX_DSAREF. Chování v tomto případě je nedefinované.

Většina bloků má odkaz/referenci na matici jak na vstupu tak na výstupu. Obojí je odkaz na stejnou matici, takže je jedno, kam další blok připojíme. Protože ale pořadí spouštění bloků se řídí tokem signálu, připojením na výstup jiného bloku definujeme pořadí spouštění bloků a tím i pořadí vykonávání maticových operací.

 CNA – Konstantní pole (vektor/matice)
 MB_DASUM – Součet absolutních hodnot
 MB_DAXPY – Provádí y := a*x + y pro vektory x,y
 MB_DCOPY – Kopíruje vektor x do vektoru y
 MB_DDOT – Skalární součin dvou vektorů
 MB_DGEMM – Provádí C := alpha*op(A)*op(B) + beta*C, where op(X) = X or op(X) = X^T
 MB_DGEMV – Provádí y := alpha*A*x + beta*y or y := alpha*A^T*x + beta*y
 MB_DGER – Provádí A := alpha*x*y^T + A
 MB_DNRM2 – Eukleidovská norma vektoru
 MB_DROT – Rovinná rotace vektoru
 MB_DSCAL – Násobení vektoru konstantou
 MB_DSWAP – Záměna dvou vektorů
 MB_DTRMM – Provádí B := alpha*op(A)*B or B := alpha*B*op(A), where op(X) = X or op(X) = X^T pro trojúhelníkovou matici A
 MB_DTRMV – Provádí x := A*x or x := A^T*x pro trojúhelníkovou matici A
 MB_DTRSV – Řeší jednu ze soustav rovnic A*x = B nebo A^T*x = B pro trojúhelníkovou matici A
 ML_DGEBAK – Zpětná transformace k ML_DGEBAL levých nebo pravých vlastních vektorů
 ML_DGEBAL – Vyvážení obecné reálné matice
 ML_DGEBRD – Redukce obecné reálné matice do bidiagonální formy pomocí ortogonální transformace
 ML_DGECON – Odhad převrácené hodnoty čísla podmíněnosti obecné reálné matice
 ML_DGEES – Výpočet vlastních čísel, Schurovy formy a volitelně matice Schurových vektorů
 ML_DGEEV – Výpočet vlastních čísel a volitelně levých a/nebo pravých vlastních vektorů
 ML_DGEHRD – Redukce reálné obecné matice A na horní Hessenbergovu formu
 ML_DGELQF – Výpočet LQ faktorizace reálné matice A s rozměry M x N
 ML_DGELSD – Výpočet řešení s minimální normou reálné lineární úlohy nejmenších čtverců
 ML_DGEQRF – Výpočet QR faktorizace reálné matice A s rozměry M x N
 ML_DGESDD – Výpočet singulární dekompozice (SVD) reálné matice A s rozměry M x N
 ML_DLACPY – Kopíruje celou nebo část matice do jiné matice
 ML_DLANGE – Výpočet některé z maticových norem obecné matice
 ML_DLASET – Inicializuje mimodiagonální a diagonální prvky matice na zadané hodnoty
 ML_DTRSYL – Řešení reálné Sylvesterovy rovnice pro kvazitrojúhelníkové matice A a B
 MX_AT – Hodnota prvku matice/vektoru
 MX_ATSET – Nastavení hodnoty prvku matice/vektoru
 MX_CNADD – Přičte skalár ke každému prvku matice/vektoru
 MX_CNMUL – Vynásobí matici/vektor skalárem
 MX_CTODPA – Diskretizace spojitého modelu (A,B) do (Ad,Bd) s využitím Padéových aproximací
 MX_DIM – Dimenze matice/vektoru
 MX_DIMSET – Nastavení dimenze matice/vektoru
 MX_DSAGET – Uložení submatice A do matice B
 MX_DSAREF – Nastavení odkazu na submatici A do matice B
 MX_DSASET – Uložení matice A do submatice v B
 MX_DTRNSP – Transpozice obecné matice: B := alpha*A^T
 MX_DTRNSQ – Transpozice čtvercové matice na místě: A := alpha*A^T
 MX_FILL – Vyplnění reálné matice/vektoru
 MX_MAT – Blok pro uložení dat matice
 MX_RAND – Náhodně vygenerovaná matice nebo vektor
 MX_REFCOPY – Kopírování vstupních odkazů na matice A a B do jejich výstupních odkazů
 MX_SLFS – Ukládání a čtení matice/vektoru do souboru nebo textového řetězce
 MX_VEC – Blok pro uložení dat vektoru
 MX_WRITE – Výpis matice/vektoru do konzole/systémového logu
 RTOV – Vektorový multiplexer
 SWVMR – Přepínač vektorového/maticového/odkazovacího signálu
 VTOR – Vektorový demultiplexer

2024 © REX Controls s.r.o., www.rexygen.com