nn = Matrix-Zeilen (Matrix-Dimension)[br][br][color=#1155Cc]Zeilen-Spalten-Tausch (row/col exchange)[/color][br][code]T(zz,ss,nn):=Sequence(Element(Identity(nn), If(kk<>zz && [br]kk<>ss,kk, If(kk==zz,Max(zz,ss),Min(zz,ss)))),kk,1,nn)[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Zeilen-Spalten-Operationen (row/col op)[/color][br][code]E(zle,spl,fzs,nn):=Sequence(Sequence(Element(Identity(nn), zz,ss)-1*(zle==spl && zle==zz &&spl==ss)*1+If(zz==zle && ss==spl,fzs,0),ss,1,nn),zz,1,nn)[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Gauß-Schritt, Vorwärts-Substitution (gauss-step substitution to upper triangular matrix)[/color][br][color=#1155Cc]Elementarmatrizen für Spalte jj[/color] [color=#1155Cc](benötigt E(zle,spl,fzs,nn)) [/color][br][code]LE(AA,jj):=Sequence(E(k,jj,-Element(AA,k,jj)/Element(AA,jj,jj)),k,n,jj+1)[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Elementarmatrizen [/color][color=#1155Cc][color=#1155Cc]Vorwärts-Substitution,[/color] Liste für Spalte ss[/color] [br][code]LE(AA,ss):= Sequence(Sequence(If(j==ss && k>ss, If(k==ss,1,-1) Element(AA,k,ss)/Element(AA,ss,ss),(j==k)*1), j ,1,Length(AA)),k,1,Length(AA))[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Elementarmatrizen zur Rücksubstitution, Liste für Spalte ss[/color] [color=#1155Cc](benötigt E(zle,spl,fzs,nn)) [/color] [br][code]RE(AA, jj):=(Sequence(E(k,jj,-Element(AA,k,jj),Length(AA)),k,1,jj-1)) ;[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc][color=#1155Cc][color=#1155Cc]Vorwärts-Substitution [/color][/color]Spalte zz (2..n) von MM == Null [/color][br][code]GaussTriag(MM,zz):=Sequence( If(kk>zz ,Element(MM, kk) - Element(MM,kk,zz)/Element(MM,zz,zz) Element(MM,zz),Element(MM,kk)) ,kk,1,Length(MM))[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Diagonale 1en für GaussSubst[/color][br][code]GaussDiag(MM):=Sequence(If(Element(MM,kk,kk) <> 0, Element(MM,kk)/Element(MM,kk,kk),Element(MM,kk)),kk,1,Length(MM) )[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]Rücksubstitution zur Einheitsmatrix, [br]Spalte zz (n..2) von MM == Nul[/color][br][code]GaussSubst(MM,zz):=Sequence(If(kk < zz,Element(MM,kk)-Element(MM,kk,zz) Element(MM,zz),Element(MM,kk)),kk,1,Length(MM));[/code][br][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br][color=#1155Cc]LR-Zerlegung auf einem Matrixfeld - i,j nicht anderweitig verwenden![br]Spalte kk (1...n-1)[/color][br][code]LRdecomp(AA,kk):=Join(Take(AA,1,kk),Sequence(Sequence(If(i < kk,Element(AA, j,i),If(i==kk,Element(AA,j,kk)/Element(AA,kk,kk),Element(AA, j,i)-Element(AA,j,kk) (Element(AA,kk,i)/Element(AA,kk,kk)))), i,1,Length(AA)),j,kk+1,Length(AA)));[/code][br][color=#1155Cc][icon]https://www.geogebra.org/images/ggb/toolbar/mode_keepinput.png[/icon][br]Sei LR=LRdecomp(A,n-1) die abgeschlossene LR-Zerlegung von A die L,R enthält[br]L,R herausziehen[/color] (getL, getR)[br][code]R:=Sequence(Take(Join(Sequence(0,i,1,j),Take(Element(LR,j),j,Length(LR))),2,Length(LR) + 1),j,1,Length(LR))[/code][br][code]L:=Join(Take(Identity(Length(LR)),1,1),Sequence(Join(Take(Element(LR,j),1,j- 1), Take(Element(Identity(Length(LR)),j),j,Length(LR))),j,2,Length(LR)))[/code][br]---[br][color=#ff0000]Don't forget to close function input with [keep Input] [/color][icon]/images/ggb/toolbar/mode_keepinput.png[/icon][br]
Die Algorithmen der Matrizenrechnung lassen sich rekursiv darstellen,[br]sei z.B. [i]LX(A[sub]j-1 [/sub], j[/i] ) eine Elementarmatrizenfolge, um in [i]A[sub]j-1[/sub][/i] eine Spalte Nullen unter dem Diagonallement j zu erzeugen. Um eine obere Dreiecksmatrix zu erzeugen wären [i]j=1..n-1[/i] Spalten zu bearbeiten:[br][br][math]A_{j} = LX\left(A_{j-1}, j \right) \; A_{j-1}[/math][br][br]Anstatt für jeden Schritt eine CAS-Zeile anzulegen[br][i]A1 = [b]LX[/b](A0,1) A0[br]A2 = [b]LX[/b](A1,2) A1 [br]A3 = [b]LX[/b](A2,3) A2[/i][br]kann [br][i]Iteration( [color=#1e84cc]«Expression»[/color], [color=#38761D]«Variables», «Start Values[i][color=#38761D]»[/color][/i][/color], «Count» )[/i][br][i]IterationList([color=#1e84cc]{Element(a,1) + 1, [b]LX[/b](Element(a,2), Element(a,1) + 1) * Element(a,2)}[/color],[color=#38761D]a[/color],[color=#38761D]{{0, A0}}[/color],3)[/i][br]diese Schritte zusammenfassen, wenn für [i]Expression [/i]und Lauf[i]variable[/i] a eine spezielle Listenform gewählt wird:[br][br][color=#38761D]«Variables», «Start Values»[/color][color=#38761D] == [color=#38761D]a[/color] , [color=#38761D]{{0, A0}}[/color][br] j == Element(a,1) [math]\nearrow [/math] [math]\nwarrow[/math] Element(a,2)[/color] == A[sub]j-1[/sub] [br][br][i]Iteration()[/i] statt [i]IterationList() [/i]stellt nur den letzten Iterations-Schritt dar![br]Beispielsweise angewendet auf die LR-Zerlegung ohne Pivotsuche [br][br](12) A:= {{2,1,-3,4},{4,1,-4,9},{-2,1,0,-5},{2,2,-5,1}}[br](13)[i] IterationList({Element(a,1)+1,[b]LRdecomp[/b](Element(a, 2),Element(a, 1)+1) }, a, {{0, A}},3)[/i][br][br][math]\left(\begin{array}{rr}0&\left(\begin{array}{rrrr}2&1&-3&4\\4&1&-4&9\\-2&1&0&-5\\2&2&-5&1\\\end{array}\right)\\1&\left(\begin{array}{rrrr}2&1&-3&4\\2&-1&2&1\\-1&2&-3&-1\\1&1&-2&-3\\\end{array}\right)\\2&\left(\begin{array}{rrrr}2&1&-3&4\\2&-1&2&1\\-1&-2&1&1\\1&-1&0&-2\\\end{array}\right)\\3&\left(\begin{array}{rrrr}2&1&-3&4\\2&-1&2&1\\-1&-2&1&1\\1&-1&0&-2\\\end{array}\right)\\\end{array}\right)[/math][br][br]Auskopplung von L, R[br][br](14) [i]iR:=[b]getR[/b](Element($13,4,2))[/i][br][math]R:=\left(\begin{array}{rrrr}2&1&-3&4\\0&-1&2&1\\0&0&1&1\\0&0&0&-2\\\end{array}\right)[/math][br](15) [i]iL:=[b]getL[/b](Element($13,4,2))[/i][br][math]L:=\left(\begin{array}{rrrr}1&0&0&0\\2&1&0&0\\-1&-2&1&0\\1&-1&0&1\\\end{array}\right)[/math][br][br](18)-(26) LR-Zerlegung mit Pivotsuche[br]nach jedem Schritt muß die Tauschmatrix für die Pivotzeile ermittelt werden. [br][br]Wenn man die Tauschmatrizen erstmal ermittelt hat und in eine Liste stellt[br][i]PT:{ T(1,2,4),T(2,3,4),T(3,4,4) }[/i][br]dann kann rekrusiv mit[br][i]IterationList({Element(a,1)+1,[b]LRdecomp[/b](Element(PT, Element(a, 1)+1) Element(a, 2),Element(a, 1)+1) }, a, {{0, A}},Length(PT))[/i][br]iteriert werden...[br]