Kapitel 11 Jacobi–Verfahren

Kapitel 11 Jacobi–Verfahren Kapitel 11 Jacobi–Verfahren

physik.uni.graz.at
von physik.uni.graz.at Mehr von diesem Publisher
26.12.2013 Aufrufe

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

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;

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!