Mathematik von T. Arens, F. Hettlich, Ch. Karpfinger, U. Kockelkorn, K. Lichtenegger, H. Stachel (zu Kapitel 14: Lineare Gleichungssysteme)restart; Loesung linearer GleichungssystemeUm ein lineares Gleiichungssystem mit einem Computeralgebrasystem zu loesen, muss zunaechst die erweiterte Koeffizientenmatrix eingegeben werden. Dazu koennen wir in Maple den Datentypen matrix nutzen. Es ist etwa A:=matrix(4,3,[[1, 0, 1],[1, 2, 0],[1, 1, 1],[2,1,0]]);Dabei bezeichnet das erste Argument die Anzahl der Zeilen, also die Anzahl der Gleichungen in unserem System. Die zweite Zahl gibt die Anzahl der Spalten und somit die Anzahl der Unbekannten des Systems an. Im dritten Argument werden alle Koeffizienten des Systems in Form einer Liste von Listen (den einzelnen Zeilen) gesammelt.Auf einzelne Elemente in der Matrix koennen wir direkt zugreifen, etwa auf den dritten Eintrag in der zweiten Zeile durchA[2,3];Nun wollen wir das lineare Gleichungssystem aus der Anwendung auf Seite 479 im Buch angehen. Dazu geben wir zunaechst die Koeffizientenmatrix ein. Wir legen die Spalten fest, indem wir die 6 Unbekannten in der Reihenfolge NiM3KCZJInBHNiI2I0kjQUJHRiYmRiU2I0kjQUNHRiYmRiU2I0kjQkFHRiYmRiU2I0kjQkNHRiYmRiU2I0kjQ0FHRiYmRiU2I0kjQ0JHRiY=zusammenstellen. Dann lautet die Koeffizientenmatrix A:=matrix(6,6,[[-2040,-2040,2020,0,1140,0],[2040,0,-2020,-2020,0,1140],[-2450,-2450,2570,0,1380,0],[2450,0,-2570,-2570,0,1380],[-4280,-4280,2960,0,1560,0],[4280,0,-2960,-2960,0,1560]]);Fuer die erweiterte Koeffizientenmatrix benoetigen wir noch die rechte Seite, die auch als Matrix eingegeben werden kann.b:=matrix(6,1,[-300,-120,-340,-180,-810,-50]);Eine Variante des Eleminationsverfahrens von Gauss steht nun zur Verfuegung. Das Programm zusammen mit vielen weiteren zur linearen Algebra ist im Paket linalg zu finden. Also laden wir dieses Paket:with(linalg):(Bemerkung: Haetten wir den letzten Befehl mit einem Semikolon anstelle des Doppelpunkts abgeschlossen, so wuerde uns eine Liste aller Befehle angezeigt, die in diesem Paket zu finden sind. Schauen Sie sich die Begriffe ruhig schon an. Vielleicht entdecken Sie ja den einen oder anderen, der Ihnen bekannt vorkommt.)Somit stehen nun eine ganze Reihe von Befehlen zum Umgang mit linearen Gleichungssystemen zur Verfuegung. Eine Loesung des LGS wird durch den Befehl linsolve bestimmt.l:=linsolve(A,b);Gerne wuerden wir die Zahlen auch im Fliesskommaformat ansehen, alsoevalf(l);... Das funktioniert leider so nicht! Wollen wir die Matrix NiNJImxHNiI= wieder betrachten, so muessen wir NiNJImxHNiI= mit dem Befehl evalm zunaechst auswerten, d.h. Befehle von der Form evalm(l);
evalf(evalm(l));sind erforderlich. Nun laesst sich das Ergebnis bequem ablesen und mit dem im Buch angegebenen vergleichen.Mit dem Befehl rank wird der Rang einer Matrix bestimmt, sodas wir auch die Loesbarkeit des Systems durch Vergleichen vonrank(A);mit dem Rang der erweiterten Koeffizientenmatrix pruefen koennen. Dazu fuegen wir die Koeffizientenmatrix und die rechte Seite mit dem Befehl concat (oder auch augment) horizontal zu einer Matrix zusammen und erhaltenconcat(A,b);
rank(concat(A,b));(Bemerkung: Wenn die Eintraege der Matrix "floating point" Zahlen sind, wird zur Berechnung des Rangs eine Singulaerwertzerlegung von Maple durchgefuehrt. Worum es sich dabei handelt, wird spaeter im Buch erlaeutert.)Da wir es mit einem Computeralgebrasystem zu tun haben, koennen wir auch Parameter abhaengige Systeme, wie im Beispiel auf Seite 474 loesen. Betrachten wir etwa das SystemNiMvLCYmSSJ4RzYiNiMiIiJGKSZGJjYjIiIjRilGKQ==,NiMvLCgmSSJ4RzYiNiMiIiJGKSomSSJjR0YnRikmRiY2IyIiI0YpRikqJiIiJEYpJkYmNiNGMEYpRilGKQ==
undNiMvLCYmSSJ4RzYiNiMiIiMiIiImRiY2IyIiJEYqSSJkR0Yn .Wir geben die Koeffizientenmatrix und die rechte Seite ein:A:=matrix(3,3,[[1,1,0],[1,c,3],[0,1,1]]);
b:=matrix(3,1,[1, 1, d]);und erhalten als Loesunglinsolve(A,b);Dies ist eine formale Loesung, da der offensichtlich kritische Fall bei NiMvSSJjRzYiIiIl, nicht getrennt untersucht wird. Ersetzen wir NiNJImNHNiI= durch NiMiIiU=A:=subs(c=4,evalm(A));und betrachten erneut das Ergebnis vonlinsolve(A,b);Da es zumindest, wenn d nicht 0 ist, keine Loesung zu diesem System gibt, bekommen wir kein Resultat. Mit NiMvSSJkRzYiIiIh erhalten wir aberb:=subs(d=0,evalm(b));
linsolve(A,b);Maple hat eine Hilfsvariable eingefuehrt, da es unendlich viele Loesungen zum Gleichungssystem gibt. Alle diese Loesungen sind von der angegebenen Gestalt (liegen auf einer Geraden), wobei die Hilfsvariable jede beliebige Zahl sein kann. Mit Hilfsvariablen werden gegebenenfalls auch die Loesungsmengen angezeigt, wenn weniger Gleichungen als Unbekannte betrachtet werden. Zum Beispiel zwei Hilfsvariablen beiA:=matrix(2,4,[[1,2,3,4],[0,1,1,1]]);
b:=matrix(2,1,[1, 1]);
linsolve(A,b); Einzelne Gauss'sche EleminationsschritteDa man sich beim Loesen von linearen Gleichungssystemnen gerne verrechnet, ist es angenehm, einzelne Gaussschritte mit dem Rechner zu pruefen. Dazu bietet sich der Befehl addrow(A,r1,r2,p) an, der die Zeile r2 durch r2+p*r1 ersetzt. Zum Beispiel ergibt sich fuer A:= matrix(3,3,[[1, 0, 1],[1, 2, 0],[1, 1, 1]]);wenn wir 3 mal die zweite Zeile zur ersten addierenaddrow(A,2,1,3);Um eigenen Rechnungen auf dem Weg zu einer reduzierten Zeilenstufenform leicht ueberpruefen zu koennen, bietet sich ein eigenes Programm an. Dazu dient in Maple der Befehl proc. Versuchen Sie die Schritte im Programm nachzuvollziehen. Das Programm ist so geschrieben, dass Sie interaktiv jeweils ein Pivotelemente angeben koennen. Kopieren Sie das Programm in ein neues Worksheet und verwenden Sie es, um Ihre Hausaufgaben zu pruefen.gjcheck:=proc(a,b)
local al, bl, piv, seperat, tmp, j:
#Eingabe testen
al:= a: bl:=b:
if type(al,array) then
seperat:=array([seq([`|`],j=1..rowdim(al))]): #Trennstriche zur Darstellung
if (type(bl,array) and rowdim(al)=rowdim(bl)) then
tmp := concat(al,bl);
print(evalm(concat(al,seperat,bl)));
piv:=readstat("Pivotelement ?"):
#Gauss Schritte
while (piv <> 0) do
tmp:=pivot(tmp,piv[1],piv[2]):
#Ausgabe und Eingabe des neuen Pivotelements
al:=submatrix(tmp,1..rowdim(al),1..coldim(al)):
bl:=submatrix(tmp,1..rowdim(bl),(coldim(al)+1)..coldim(tmp)): print(evalm(concat(al,seperat,bl)));
piv:=readstat("Pivotelement ?"):
od:
"Tschuess";
else
"falsche Eingabe";
fi:
else
"falsche Eingabe";
fi:
end:(Es wird hier insbesondere der Befehl pivot genutzt, der durch elementare Zeilenumformungen zu einem angegebenen Pivotelement die entsprechende Stufe berechnet )Definieren wir noch eine rechte Seiteb:=matrix(3,1,[ 1,1,0]);Jetzt koennen wir das Programm nutzen. Dazu geben Sie das gewuenschte Pivotelement in der Form " (3,1); " direkt nach der Aufforderung hinter dem Fragezeichen ein. Wenn Sie anstelle eines Paars von Indizes " 0; " angeben, so bricht das Programm ab.gjcheck(A,b);(2,3);(1,1);0;(Bemerkung: Sie koennen Prozeduren auch mit einem beliebigen Editor in einer Datei eingeben, und diese dann mit
read(Dateiname) in eine Maplesitzung einlesen. Dabei ist zu beachten, dass nach dem end: noch ein return eingegeben wird, also der Cursor im Editor unter dieser Zeile steht, da der Programmtext sonst nicht ausgefuehrt wird.
Um formatierte Daten, wie zum Beispiel eine Matrix, aus einer Datei einzulesen, gibt es den Befehl fscanf , wie er aus c-Bibliotheken eventuell bekannt ist.)Im Programm haben wir eine Moeglichkeit genutzt, Matrizen durch die Angabe von Operatoren einzugeben. matrix(3,5,(i,j)->1/(i^2+j^2));Anstelle einer Liste wird bei dieser Version einfach die Zuordnung angegeben, wie der (i,j)te Eintrag der Matrix zu bilden ist. Aufgaben1. Loesen Sie das linearen GleichungssystemeNiMvLCoqJiIiIyIiIiZJInhHNiI2I0YnRidGJyZGKTYjRiZGJyomIiIlRicmRik2IyIiJEYnRicqJkYyRicmRik2I0YvRidGJyIiIQ==NiMvLComSSJ4RzYiNiMiIiIhIiIqJiIiI0YpJkYmNiNGLEYpRikmRiY2IyIiJEYpJkYmNiMiIiVGKkY0NiMvLCoqJiIiJCIiIiZJInhHNiI2I0YnRidGJyomIiIlRicmRik2IyIiI0YnRicmRik2I0YmISIiKiZGMEYnJkYpNiNGLUYnRjMiIiE=NiMvLCoqJiIiJSIiIiZJInhHNiI2I0YnRidGJyomIiIkRicmRik2IyIiI0YnRicqJkYwRicmRik2I0YtRidGJyZGKTYjRiZGJyIiIQ== ,das SystemNiMvLCgmSSJ4RzYiNiMiIiJGKSomIiIjRikmRiY2I0YrRilGKSomIiIkRikmRiY2I0YvRikhIiIsJEYpRjI=NiMvLCgqJiIiJCIiIiZJInhHNiI2I0YnRidGJyZGKTYjIiIjISIiKiZGLkYnJkYpNiNGJkYnRiciIig= ,sowie das komplexe LGS (s. Aufg. 14.9)NiMvLCYqJiIiIyIiIiZJInhHNiI2I0YnRidGJyomSSJJR0YqRicmRik2IyIiJEYnRidGLQ==NiMvLCgmSSJ4RzYiNiMiIiJGKSomIiIkRikmRiY2IyIiI0YpISIiKiZJIklHRidGKSZGJjYjRitGKUYvKiZGLkYpRjFGKQ==NiMvLCgqJkkiSUc2IiIiIiZJInhHRic2I0YoRihGKCZGKjYjIiIjRigmRio2IyIiJEYoLCZGKEYoRiZGKA==LoesungEs ergibt sichA:=matrix(4,4,[[2, 1, 4, 3],[-1, 2, 1, -1],[3, 4, -1, -2],[4, 3, 2, 1]]);
b:=matrix(4,1,[0,4,0,0]);
linsolve(A,b);undA:=matrix(2,3,[[1, 2, -3],[3, -1, 2]]);
b:=matrix(2,1,[-1,7]);
linsolve(A,b);undA:=matrix(3,3,[[2, 0, I],[1, -3, -I],[I, 1, 1]]);
b:=matrix(3,1,[I,2*I,1+I]);
linsolve(A,b);2. Pruefen Sie indem Sie den Rang der Koeffizientenmatrix und der erweiterten Koeffizientenmatrix bestimmen, dass das folgende Gleichungssystem loesbar ist,NiMvLCgqJiIiJiIiIiZJInhHNiI2I0YnRidGJyomIiIkRicmRik2IyIiI0YnRicqJiIiJUYnJkYpNiNGLUYnISIiRjA=NiMvLCgmSSJ4RzYiNiMiIiJGKSomIiIjRikmRiY2I0YrRilGKSomIiIkRikmRiY2I0YvRikhIiIiIic=NiMvLCgqJiIiIyIiIiZJInhHNiI2I0YnRidGJyZGKTYjRiYhIiIqJiIiJUYnJkYpNiMiIiRGJ0YnRiY=NiMvLCgqJiIiJSIiIiZJInhHNiI2I0YnRidGJyomIiIkRicmRik2IyIiI0YnRicqJkYwRicmRik2I0YtRichIiIiIzk=LoesungA:=matrix(4,3,[[5, 3, -4],[1, 2, -3],[2, -1, 4],[4, 3, -2]]);
b:=matrix(4,1,[2,6,2,14]);
evalb(rank(A) = rank(concat(A,b)));
Es ergibt sich die Loesunglinsolve(A,b);3. Loesen Sie Aufgabe 14.8 im Buch, d.h. es ist nach den Loesungen des linearen Gleichungssystems NiMvLCgqJiwmSSJhRzYiIiIiRilGKUYpJkkieEdGKDYjRilGKUYpKiYsKCokRiciIiMhIiIqJiIiJ0YpRidGKUYpIiIqRjFGKSZGKzYjRjBGKUYpKiYsJkYnRilGMEYxRikmRis2IyIiJEYpRilGKQ==NiMvLCgqJiwoKiRJImFHNiIiIiMiIiIqJkYqRitGKEYrISIiIiIkRi1GKyZJInhHRik2I0YrRitGKyomLChGJ0YrKiYiIidGK0YoRitGLSIiKkYrRismRjA2I0YqRitGKyomRi5GKyZGMDYjRi5GK0YrLCZGKEYrRi5GLQ==NiMvLCgqJiwmSSJhRzYiIiIiRilGKUYpJkkieEdGKDYjRilGKUYpKiYsKCokRiciIiMhIiIqJiIiJ0YpRidGKUYpIiIqRjFGKSZGKzYjRjBGKUYpKiZGJkYpJkYrNiMiIiRGKUYpRik=in Anbhaengigkeit eines Parameters a gefragt.LoesungA:=matrix(3,3,[[a+1, -a^2+6*a-9, a-2],[a^2-2*a-3, a^2-6*a+9, 3],[a+1, -a^2+6*a-9, a+1]]);
b:=matrix(3,1,[1,a-3,1]);
linsolve(A,b);Wir sehen, dass das LGS fuer NiMwSSJhRzYiLCQiIiIhIiI= loesbar ist. Eine komplette Untersuchung zur Loesbarkeit liefert uns der Befehl nicht. So koennten eventuell unendlich viele Loesungen existieren. Die verschiedenen Faelle ergeben sich mit der Bestimmung einer Zeilenstufenform der erweitertetn Koeffizientenmatrix. Im Fall NiMvSSJhRzYiLCQiIiIhIiI= und In den beiden weiteren Spezialfaellen NiMvSSJhRzYiIiIj und NiMvSSJhRzYiIiIk ergibt sichC:=subs(a=-1,evalm(A));
d:=subs(a=-1,evalm(b));
linsolve(C,d);C:=subs(a=2,evalm(A));
d:=subs(a=2,evalm(b));
linsolve(C,d);undC:=subs(a=3,evalm(A));
d:=subs(a=3,evalm(b));
linsolve(C,d);
Das LGS hat fuer NiMvSSJhRzYiLCQiIiIhIiI= keine Loesung. In den anderen beiden Faellen gibt es unendlich viele Loesungen, die durch entsprechende Hilfsvariablen angezeigt sind.