Kapitel 11 Jacobi–Verfahren
Kapitel 11 Jacobi–Verfahren Kapitel 11 Jacobi–Verfahren
102 KAPITEL 11. JACOBI–VERFAHREN 11.5 Implementierung Eine Vorlage zur Implementierung des Jacobi-Verfahrens ist in den Dateien http://physik.uni-graz.at/~uxh/lineare-algebra/Jacobi.h http://physik.uni-graz.at/~uxh/lineare-algebra/Jacobi.cc gegeben. In Jacobi.h wird der namespace Jacobi definiert, 1 namespace Jacobi { 2 3 extern double epsilon; 4 extern double ∗e; 5 extern matrix v; 6 7 void eigenvalue(const matrix& m, bool vec=false); 8 }; der in einem aufrufenden Programm über 1 #include ”Jacobi.h” 2 3 using namespace Jacobi; eingelesen werden kann. epsilon ist der Genauigkeitsparameter, der den Abbruch des Jacobiverfahrens steuert (siehe Box 11.1). Nach Aufruf von 1 matrix a(”matrix.dat”); 2 3 eigenvalue(a); enthält das Array e die angenäherten Eigenwerte. Will man auch die zugehörigen Eigenvektoren bestimmen, sollte man die Funktion eigenvalue über 1 eigenvalue(a,true); aufrufen, wobei die Eigenvektoren spaltenweise in v gespeichert werden. 11.5.1 Abbruchkriterium Das Abbruchkriterium für das Jacobi-Verfahren ist in Jacobi.cc in der Funktion 1 bool isDiagonal(const matrix& a) 2 { 3 double sumDiag=0; 4 double sumOffDiag=0;
11.5. IMPLEMENTIERUNG 103 5 6 for (int i=0; i
- Seite 1 und 2: Kapitel 11 Jacobi-Verfahren Im vori
- Seite 3 und 4: 11.2. TRANSFORMIERTE MATRIX 99 a
- Seite 5: 11.4. EIGENVEKTOREN 101 Jacobi-Verf
- Seite 9: 11.5. IMPLEMENTIERUNG 105 34 if (ve
102 KAPITEL <strong>11</strong>. JACOBI–VERFAHREN<br />
<strong>11</strong>.5 Implementierung<br />
Eine Vorlage zur Implementierung des Jacobi-Verfahrens ist in den Dateien<br />
http://physik.uni-graz.at/~uxh/lineare-algebra/Jacobi.h<br />
http://physik.uni-graz.at/~uxh/lineare-algebra/Jacobi.cc<br />
gegeben. In Jacobi.h wird der namespace Jacobi definiert,<br />
1 namespace Jacobi {<br />
2<br />
3 extern double epsilon;<br />
4 extern double ∗e;<br />
5 extern matrix v;<br />
6<br />
7 void eigenvalue(const matrix& m, bool vec=false);<br />
8 };<br />
der in einem aufrufenden Programm über<br />
1 #include ”Jacobi.h”<br />
2<br />
3 using namespace Jacobi;<br />
eingelesen werden kann. epsilon ist der Genauigkeitsparameter, der den Abbruch des<br />
Jacobiverfahrens steuert (siehe Box <strong>11</strong>.1). Nach Aufruf von<br />
1 matrix a(”matrix.dat”);<br />
2<br />
3 eigenvalue(a);<br />
enthält das Array e die angenäherten Eigenwerte. Will man auch die zugehörigen Eigenvektoren<br />
bestimmen, sollte man die Funktion eigenvalue über<br />
1 eigenvalue(a,true);<br />
aufrufen, wobei die Eigenvektoren spaltenweise in v gespeichert werden.<br />
<strong>11</strong>.5.1 Abbruchkriterium<br />
Das Abbruchkriterium für das Jacobi-Verfahren ist in Jacobi.cc in der Funktion<br />
1 bool isDiagonal(const matrix& a)<br />
2 {<br />
3 double sumDiag=0;<br />
4 double sumOffDiag=0;