LR Zerlegung auf einem Matrixfeld

Dieses Beispiel ist dem Algorithmus die LR Zerlegung auf einem Matrixfeld durchzuführen nach empfunden.[br][br][math]A=\left(\begin{array}{rrrr}a_{11}&a_{12}&a_{13}&a_{14}\\a_{21}&a_{22}&a_{23}&a_{24}\\a_{31}&a_{32}&a_{33}&a_{34}\\a_{41}&a_{42}&a_{43}&a_{44}\\\end{array}\right)[/math][br][br]Die Faktoren für die Gaußelimination werden gebildet aus der 1.Spalte dividiert durch Diagonalelement der jeweiligen (Rest)Matrix: [br]Im 1.Schritt {{a[sub]11[/sub],a[sub]21[/sub],a[sub]31[/sub],a[sub]41[/sub]}}/a[sub]11[/sub], dieser Vektor bildet die 1.Spalte der L-Matrix und mit geänderten Vorzeichen unter dem Diagonalelement die 1. Spalte der Gaußeliminationsmatrix [i]L[sub]i[/sub][/i] .[br][br][math]\Longrightarrow L_1= \, \left(\begin{array}{rrrr}1&0&0&0\\\frac{-a_{21}}{a_{11}}&1&0&0\\\frac{-a_{31}}{a_{11}}&0&1&0\\\frac{-a_{41}}{a_{11}}&0&0&1\\\end{array}\right)[/math][math]\Longrightarrow L_1\cdot A=[/math][math] \, \left(\begin{array}{rrrr}a_{11}&a_{12}&a_{13}&a_{14}\\0&c_{22}&c_{23}&c_{24}\\0&c_{32}&c_{33}&c_{34}\\0&c_{42}&c_{43}&c_{44}\\\end{array}\right)[/math] [math]\Longrightarrow\; LR= \left(\begin{array}{rrrr}a_{11}&a_{12}&a_{13}&a_{14}\\ \textcolor{red}{\frac{a_{21}}{a_{11}}}&c_{22}&c_{23}&c_{24}\\\textcolor{red}{\frac{a_{31}}{a_{11}}}&c_{32}&c_{33}&c_{34}\\\textcolor{red}{\frac{a_{41}}{a_{11}}}&c_{42}&c_{43}&c_{44}\\\end{array}\right)[/math][br][math] c_{ij} =a_{ij} - a_{kj} \cdot \frac{a_{ik}}{a_{kk}} , k - spalte\;zu\;0, zeile \; i= \left(k + 1 \right)…n, spalte \; j = \left(k + 1 \right)…n [/math][br][i][size=85](etwa Sequence(Sequence({c(i,j) , [i][size=85] a(i,j)[/size][/i] - a(k,j) a(i,k) / a(k,k) }, i,k+1,n), j,k+1,n)[/size]; [/i][size=85][i][br]spaltenweise berechnung - LRdecomp() zeilenweise wg. matrixaufbau im cas[/i]; [/size][br][br]In die 0 Elemente der 1.Spalte [i]L[sub]1[/sub] A[/i] werden die entsprechenden Elemente des [color=#ff0000]Faktorvektors [/color]geschrieben.[br]Mit der Untermatrix ( c[sub]ij[/sub] )von [i]L[sub]1[/sub] A[/i] wird entsprechend dem 1.Schritt weiter gearbeitet [br] [math]\Longrightarrow[/math] (a[sub]ij[/sub]) ==> (c[sub]ij[/sub]) ==> (u[sub]ij[/sub]) ==> u'[sub]44[/sub][br][br] [math]\Longrightarrow \; LR=\left(\begin{array}{rrrr}a_{11}&a_{12}&a_{13}&a_{14}\\ \textcolor{red}{\frac{a_{21}}{a_{11}}}&c_{22}&c_{23}&c_{24}\\\textcolor{red}{\frac{a_{31}}{a_{11}}}&\textcolor{red}{ \frac{c_{32}}{c_{22}}}&u_{33}&u_{34}\\\textcolor{red}{\frac{a_{41}}{a_{11}}}&\textcolor{red}{\frac{c_{42}}{c_{22}}}&\textcolor{red}{\frac{u_{43}}{u_{33}}}&u'_{44}\\\end{array}\right)[/math] [br][br]In der App speichere ich den Status nach jedem Schritt in den Matrizen [i]Ai[/i] . Zum Schluss zerlege ich das Matrixfeld LR in die Matrizen [color=#ff0000][i]L R[/i] [/color]. ggb-CAS bedingt muss für jeden Schritt eine Matrix angelegt werden![br]Die user-function [i]LRdecomp()[/i] setzt den oben beschrieben Algorithmus um. Die Pivottauschmatrizen können einfach auf die Matrixfelder [i]Ai[/i] angewendet werden - [i]Pi[/i] Matrizen für die Zeilenpivotsuche (user-function [i]SPivot()[/i] sind vorhanden. Für Spaltenpivotsuche können sie einfach [i]Pi, Qi[/i] Matrizen dazuschreiben. Zeile [br](29) {L R ,P3 P2 P1 A Q1 Q2 Q3} anpassen .[br][br]Besser zu "sehen" ist der Algorithmus - Prozedurale Programmschritte - in der folgenden App - Pseudoprogramm und Script - allerdings nicht im CAS - achten Sie auf Rundungsfehler....[br][br][size=85]LRdecomp(AA,kk):=Join(Take(AA,1,kk),Sequence(Flatten({If(kk>1,Take(Element(AA,i),1,kk-1),{}),Element(AA, i,kk)/Element(AA, kk,kk),Sequence(Element(AA,i,j) - Element(AA,kk,j) Element(AA,i,kk) / Element(AA,kk,kk) , j,kk+1,n)}), i,kk+1,n));[/size]
Lesen des Matrixfeldes nach einem Gauß-Schritt
In jedem Schritt erhält man eine Zeile der R-Matrix und eine Spalte der L-Matrix und die jeweils verkleinerte Restmatrix auf der der Algorithmus wiederholt wird.[br]Anzeige in Grafikfenster und mit CAS-Fenster mit Zeilennummern abgleichen
LRimMatrixfeldR4
Prozedurale Programmschritte
Pseudoprogramm in Scriptprogramm umgesetzt. [br]Im L-Schritt werden die Matrixpositionen A2,A3,A4||B3,B4||C4 überschrieben und damit wird im R-Schritt weitergerechnet! [br]Zeilenpivotisierung durch Tauschen der Tabellenzeilen durchführen und Tauschmatrizen erstellen oder einfach auf die Originalmatrix übertragen!
Pseudoprogramm und Script

Information: LR Zerlegung auf einem Matrixfeld