CAS Functions 4 Gauß-Algorithm

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]
CAS-User-Functions.ggb
IterationList
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]
stepwise column pivot recursiv iteration
make iteration count depending on length of PT list of row exchange matrices T(). expand PT by adding pivot exchange matrix to last matrix of iteration steps.[br]1 step: exchange 1,2[br]2 step: exchange 2,3[br]3 step: exchange 3,4

Information: CAS Functions 4 Gauß-Algorithm