cg-Verfahren < Lin. Gleich.-systeme < Numerik < Hochschule < Mathe < Vorhilfe
|
Hallo Leute,
Ist folgende Darstellung des cg-Algorithmus richtig?
[m]\begin{gathered}
\left( 0 \right)\;\; p_1 : = r_0 : = b - Ax_0 \hfill \\
\quad \quad {\text{for}}\;m = 1\;{\text{to}}\;n\;{\text{do}} \hfill \\
\left( 1 \right)\quad \quad {\text{if}}\;r_{m - 1} = 0\;{\text{then}}\;{\text{STOP}} \hfill \\
\left( 2 \right)\quad \;\;\;x_m : = x_{m - 1} + \frac{{r_{m - 1}^T r_{m - 1} }}
{{p_m^T Ap_m }}p_m \hfill \\
\left( 3 \right)\quad \;\;\;r_m : = r_{m - 1} - \frac{{r_{m - 1}^T r_{m - 1} }}
{{p_m^T Ap_m }}Ap_m \hfill \\
\left( 4 \right)\quad \;\;\;p_{m + 1} : = r_m + \frac{{r_m^T r_m }}
{{r_{m - 1}^T r_{m - 1} }}p_m \hfill \\
\quad \quad {\text{end}} \hfill \\
\end{gathered}[/m]
Ich wundere mich nämlich, daß ich für folgende selbstgestellte Aufgabe nach 3 Iterationsschritten keine exakte Lösung rauskriege, sondern die Beträge der Werte im Lösungvektor sogar noch eher größer werden:
[m]A: = \left( {\begin{array}{*{20}c}
2 & 0 & 2 \\
2 & 2 & 1 \\
3 & 2 & 3 \\
\end{array} } \right);\quad b: = \left( {\begin{array}{*{20}c}
0 \\
1 \\
0 \\
\end{array} } \right);\quad x_0 : = \left( {\begin{array}{*{20}c}
2 \\
0 \\
{ - 2} \\
\end{array} } \right)[/m]
Nach 2 Iterationen erhalte ich:
[m]x_2 : = \left( {\begin{array}{*{20}c}
2 \\
{ - 0.75} \\
{ - 2} \\
\end{array} } \right)[/m]
Obwohl sich der Wert doch [mm] $\vektor{1 \\ 0 \\ -1}$ [/mm] annähern sollte, oder nicht? Ich habe A extra so gewählt (die einzige Null in A stammt von mir), daß alle Hauptminoren > 0 sind. Damit ist A positiv definit.
Danke!
Viele Grüße
Karl
|
|
|
|
Hallo Karl,
Ob deine Matrix positiv definit ist hab ich nicht geprüft. Aber symmetrisch ist sie nicht Da klappts mit dem cg-Verfahren auch nicht.
gruß
mathemaduenn
|
|
|
|
|
Hallo mathemaduenn,
> Ob deine Matrix positiv definit ist hab ich nicht geprüft.
> Aber symmetrisch ist sie nicht Da klappts mit dem
> cg-Verfahren auch nicht.
Danke für die Antwort! Das habe ich nicht gewußt. Aber generell habe ich das Verfahren doch richtig aufgeschrieben, oder?
Viele Grüße
Karl
P.S. Weil es mir diesmal mit einer Bestätigung eilt, habe ich die Frage noch im Usenet gestellt.
|
|
|
|
|
Hallo Karl,
Ich beziehe mich mal auf den usenet Artikel
Zitat(original von Karl_Pech):
Aber generell liefert das cg-Verfahren doch auch nicht immer die exakte Lösung,
oder?
Wenn man z.B. folgende Aufgabe hat:
/1 0 0\ /0\ [mm] /1\
[/mm]
A := |0 1 0|; b := |0|; [mm] x_0 [/mm] := |1|
[mm] \0 [/mm] 0 2/ [mm] \1/ \1/
[/mm]
[mm] x_0 [/mm] ist also doch etwas weit vom Lösungsvektor entfernt. Dann kriege ich nach
3 Iterationen ungefähr
/ [mm] 0.02\
[/mm]
[mm] x_3 [/mm] := | 0.02|
\ 0.1 /
Ich habe bisher nämlich gedacht, daß das Verfahren immer die exakte Lösung liefert, wenn
man ohne Verlust von Genauigkeit mit Brüchen rechnet. Ist das so?
(Zitat ende)
Wenn die Matrix symmetrisch und positiv definfit ist gibt's nachn Schritten (n=Dimension der Matrix) eine eindeutige Lösung. Ich sehe auch keine Fehler im Verfahren. Da hast Du Dich vermutlich verechnet. Solange das [mm] Residuum(r_k) [/mm] nicht gleich Null müsstest Du eigentlich auch noch weiterrechnen.
gruß
mathemaduenn
|
|
|
|