26.12.2013 Aufrufe

Kapitel 11 Jacobi–Verfahren

Kapitel 11 Jacobi–Verfahren

Kapitel 11 Jacobi–Verfahren

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

104 KAPITEL <strong>11</strong>. JACOBI–VERFAHREN<br />

auch ihre gespiegelten Partner unterhalb der Diagonale denselben Wert erhalten. Offensichtlich<br />

führt dies zu einer unnötigen Komplikation. In Jacobi.cc lösen wir dieses Problem<br />

mit Hilfe der Definition<br />

1 #define a(i , j ) a(min(i,j ),max(i,j))<br />

Wenn wir später auf die Nichtdiagonalelemente von a über a(i , j) zugreifen, ist stets<br />

gewährleistet, dass wir ausschließlich die Matrixelemente oberhalb der Diagonale verwenden.<br />

Die Vorlage des Jacobi-Verfahrens hat dann die Form<br />

1 void eigenvalue(const matrix& m, bool vec)<br />

2 {<br />

3 matrix a(m); // matrix a must be symmetric<br />

4 int n=a.size(); // n x n matrix<br />

5 int it ; // counter for iterations<br />

6<br />

7 double c,s,t,theta,dum;<br />

8<br />

10<br />

9 if (vec) v=diagonal(n);<br />

<strong>11</strong> for ( it =0; !isDiagonal(a ); it++)<br />

12 {<br />

13 // sweep over upper half of matrix<br />

14 for (int p=0; pzero)<br />

20 {<br />

21 #define a(i , j ) a(min(i,j ),max(i,j))<br />

22<br />

23 // update a(p,p), a(q,q ), and a(p,q)<br />

24 // ...<br />

25<br />

26 for (int r=0; r

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!