R03


Plottet mal
x-Achse nIter
y-Achse omega

Ist recht interessant…


Wann ist die Rechnerübung ?


Mein Jacobi und GS konvergieren zwar, aber laufen immer maxIter oft, weil meine Residuumsberechnung irgendwie broken ist.

Wie geht das denn schön effizient in der Schleife? :-/
Die Differenz aus rechter Seite und der Summe da jedesmal quadrieren, das aufsummieren und am ende nochmal die Wurzel draus ziehen sollte es doch tun!?
Oder darf man einfach nicht die verkürzte Version nehmen, bei der das vordere x_k^i nichtmehr drin ist?

EDIT: Geht. Dann halt so. Ist ja auch logisch :<

Außerdem stimmt in den Formeln zum GS aus den Folien ein Index nicht

Paar Hinweise zur 4 wären hilfreich! Muss da jetz -4 oder 4 auf die Diagonale, wie kann man damit was testen etc


An der Stelle mal Danke für das Testskript, mal schaun ob es hält was es (natürlich ohne Garantie) verspricht :smiley:

Alle Tests fertig. 22 von 22 ‘bestanden’.
Alle Tests erfolgreich bestanden. Gratulation!


na das freut mich aber :smiley:


Schau dir mal im data-Verzeichnis „ALaplace8.mat“ an, das ist das was rauskommen sollte, wenn die Methode mit n=8 aufgerufen wird.

@imhotep: Mal wieder vielen Dank fürs Testprogramm, ist sehr willkommen :slight_smile:


Frag mich nur, worauf es da die 8 Punkte geben soll

Die Matrix bauen istn 10-Zeiler oder so, und dann nurnoch der eine Wert für Omega?


sei doch froh, dass es was geschenkt gibt :stuck_out_tongue:

@ict: gern geschehen.


Nochmal zur Aufgabe 1 (Jacobi):

Kann das noch jemand bestätigen, dass das Verfahren für den ersten Beispielfall nach 21 Schritten konvergieren sollte?

Bei mir ists so, dass meine Implementierung erst nach 104 Schritten das exakte Ergebnis liefert. Das Ergebnis nähert sich dabei in den Schritten zuvor immer weiter der exakten Lösung an, so wie ich es auch erwartet hätte, und die vektoren x1 und x2 der ersten beiden Iterationsschritte würde ich per Hand genauso rechnen, wie es meine Jacobi-Implementierung in der Aufgabe macht:
x1 = [0, 0.5, 0.5, 0.5, 0 ]
x2 = [-0.25, -0.25, 0, -0.25, -0.25 ]

und irgendwann bekomme ich dann auch tatsächlich das Ergebnis:
-2.5 -4 -4.5 -4 -2.5

Ich habe keine Idee woran das liegen könnte, dass ich mehr Iterationen brauche. Immerhin kommen ja am ende auch nicht irgendwelche mist-werte raus sondern auch das korrekte Ergebnis…


104 Schritte sollten schon stimmen (habe ich zumindest auch raus)


yay, dann ist ja jetzt die 104 in der Überzahl. Nach Fehlern zu suchen die es nicht gibt ist ein spitzen Weg um durchzudrehen. :wink:

Danke.


hmmm, also bei mir stimmen einige werte nicht. hab so kleine fehler in der 4. oder 5. Nachkommastelle … weiss jemand evtl warum ? :wink:
ausserdem wollte ich nochwas theoretisches fragen:
A4.txt ist ja nicht diagonaldominant oder ? dann muessten doch alle verfahren nicht konvergieren fuer die Matrix 4 - richtig ?


stimmt jetzt irgendwas mit dieser brechnung vom residuum nicht ? hab naemlich auch das gleiche problem


Also so wie ich es verstanden habe:
Aus diagonaldominanz folgt konvergenz für GaussSeidel usw.
Aber in der umgekehrten Richtung geht die Folgerung nicht.

Ob die Verfahren für eine bestimmte Matrix konvergieren muss man wenn man es sich nicht irgendwie einfacher machen kann über den Spektralradius der Matrix, also den Betragsmäßig größten Eigenwert prüfen.


sooo hab nochne frage: :slight_smile:
wenn ich das optimale omega fuer n=8 selber mal bestimmen will, muss ich doch mein SOR Verfahren mit der Matrix ./data/ALaplace8.mat dem Vektor initialGuess ./data/xLaplace.vec und eigentlich als Vektor b nen Vektor mit 64 Elementen vom Wert -1 ausfuehren oder ?
jetzt ist aber die Referenzdatei ./data/bLaplace.mat ne Matrix. Hab ich jetzt was nicht richtig verstanden, oder ist das ein Fehler vom Aufgabensteller ?
mfg,
hendrik


Jo, nimm einfach die nicht gekürzte Variante von den Folien. Also wo nochmal x_k^i + vor der Klammer steht. Bei der ist klar, was davon das Residuum ist.


Meinst du die ./data/bLaplace8.vec? Da ist komischerweise wirklich wirklich ne Matrix drin, wenn man das allerdings als Vektor einließt wird nur die erste Spalte als Vektor genommen. (Kannst du ja mal ausprobieren: Vector initialGuess(„./data/bLaplace8.vec“); cout << initialGuess << endl; )

Anscheinend hat sich die Abgabefrist verlängert? Auf der Seite steht nun zumindest 10.07.2009. Aber in der Vorlesung wurde dazu nichts gesagt, oder?
edit: Warten muss man können :wink: Grad kam ne Mail. Termin ist auf 10.7. verlängert.


du kannst einfach leere vektoren übergeben, die werden dann automatisch befüllt.
somit hat sich dann auch der fehler von selbst beseitigt.


Ahh, okay und ich wunder mich schon dauernd warum das bei mir nicht funktioniert wenn man einfach die ./data Vektoren benutzt … Nun klappts :slight_smile:
Danke übrigens für den Testcase! Sehr nett gemacht :slight_smile:
Ein kleiner Bug is mir allerdings aufgefallen, wenn irgendwas so schief geht dass nur „nan“ rauskommt wird das auch akzeptiert:

5) a) 2D La Place --> Jacobi
/////////////////////////////////////////////////////////////////////////////////////////////

... [OK]
reference vector v:
1.21365 1.9273 2.33574 2.52331 2.52331 2.33574 1.9273 1.21365 1.9273 3.15982 3.89234 4.23418 4.23418 3.89234 3.15982 1.9273 2.33574 3.89234 4.83962 5.2869 5.2869 4.83962 3.89234 2.33574 2.52331 4.23418 5.2869 5.7869 5.7869 5.2869 4.23418 2.52331 2.52331 4.23418 5.2869 5.7869 5.7869 5.2869 4.23418 2.52331 2.33574 3.89234 4.83962 5.2869 5.2869 4.83962 3.89234 2.33574 1.9273 3.15982 3.89234 4.23418 4.23418 3.89234 3.15982 1.9273 1.21365 1.9273 2.33574 2.52331 2.52331 2.33574 1.9273 1.21365 
output vector: 
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 

Is zwar keine große Sache, da dass sofort auffällt dass die Berechnung nicht stimmen kann, aber ich dacht mir ich sags dir mal.


XD Danke Quirin und Jochen ! Danke an alle “drängenden” Studenten ! Und Danke imhotep !