Kapitel 11 Jacobi–Verfahren
Kapitel 11 Jacobi–Verfahren
Kapitel 11 Jacobi–Verfahren
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