Verfahren der konjugierten Gradienten

Neue Frage »

Chris2005 Auf diesen Beitrag antworten »
Verfahren der konjugierten Gradienten
Hallo,

ich bin gerade dabei, ein Verfahren der konjugierten Gradienten in Matlab zu implementieren. Dafür ist ein Startvektor x, die Matrix A und der Lösungsvektor b gegeben. In meinen Unterlagen steht, dass dieses Verfahren nach spätestens n Schritten (für n Gleichungen in n unbekannten) gegen die Lösung konvergieren müsste! Irgendwie hat es bei mir aber keinen einfluss, wie oft ich iteriere, ich komme nach einem durchgang mit meinem gegebenen startvektor schon auf einen fehler von 10^-16, von dem ich nicht mehr wegkomme!

kann mir irgendwer helfen?

danke, mfg Chris
navajo Auf diesen Beitrag antworten »

Moin!

Jo, bei jeder Iteration verringert man die Dimension in der der Differenzvektor zu Lösung liegt, d.h. nach n-mal ist die Dimension dann bei 0 und man muss halt bei der Lösung sein.
Aber das gilt halt nur wenn man exakt rechnet. Im Computer gibts da ja Probleme grad wenn die Zahlen sehr groß oder sehr klein werden und bei 10^-16 kanns denk ich schon daran liegen.

Du könntest mal ausprobieren ob das Verfahren wirklich schon nach der ersten Iteration konvergiert indem du einfach mal auf Papier nachrechnest (wär natürlich zu aufwendig wenn deine Matrix irgendwie 1000x1000 ist Augenzwinkern )

Und könntest auch mal A und b posten, dann probiers ichs auch mal aus.

gruß
navajo
Chris2005 Auf diesen Beitrag antworten »

Hi,

danke für deine Antwort: in der Tat ist der Fehler von b - A*x0 im Bereich 10^-15! kann es sein, dass das schon der Rundungsfehler ist von dem du sprichst?

danke, mfg Chris
navajo Auf diesen Beitrag antworten »

Ich würds zumindest mal darauf schieben. Du kommst ja schließlich bei der Lösung an, scheint ja also nicht an deinem Programm zu liegen.

Um solche Fehler kommt man nunmal nicht ganz rum, man kann im Computer eben nur mit ner endlichen Anzahl von Stellern rechnen. Man kanns teilweise ein bisschen entschärfen indem man auf Reihenfolge von Rechenoperationen achtet oder Terme geschickt umformt. Aber grad wenn man mit sehr großen oder sehr kleinen Zahlen rechnet kanns schnell ungenauer werden. 1 + 10^-15 kann je nachdem wieviel byte man für ne Zahl verwendet schon wieder 1 werden, weil einfach nicht genug bit zur Vefügung stehen um alle Nachkommastellen darzustellen.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »