Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
Hallo, hier noch einmal die Problematik von N und SetPrecision und die dann eintretende Stellenauslöschung beim Rechnen Das nb beinhalted eine simple Form des Davidson-Verfahren zur Bestimmung des betragsmässig größten Eigenwertes einer 100x100 Matrix, reell, nicht symmetrisch, zufällig. Schaut Euch mal die Ergenisse an [mit Mathematica 5.1 gemacht. MIt Version 4 läuft es so nicht, da ich die Funktion "Norm" und "Eigenvalues" zur Bestimmung eines EW benutze. "Eigenvalues[A,1]" liefert den gößten EW. Aber das ist im Grunde nebensächlich. In der ersten Zelle werden die Ausgangsmatrix A und der Startvektor mit N berechnet: n = 100; tmp = N[Table[If[i == j, Random[Real, {0, 1}], Random[Real, {0, 1}]], {i, 1, n}, {j, 1, n}]]; A = tmp; . . . tmp = N[Table[Random[Real, {-10, 10}], {i, 1, n}]]; [Das If ist nebensächlich und dient nur dazu, im Testfall eine diagonaldominante Matrix bei Bedarf zu erzeugen, also eine ganz normale Matrix mit Reals]. In der zweiten Zelle wird das Gleiche mit SetPrecision mit 50 Stellen gemacht n = 100; tmp = SetPrecision[Table[If[i == j, Random[Real, {0, 1}], Random[Real, {0, 1}]], {i, 1, n}, {j, 1, n}], 50]; A = tmp; . . . tmp = SetPrecision[Table[Random[Real, {-10, 10}], {i, 1, n}], 50]; Schaut man sich die Ergebnisse an, dann sieht man, daß in der ersten Zelle alles gut geht. Die MaschinePrecision bleibt während der Rechnung erhalten und die Ergebnisse sind in Ordnung. In der zweiten Zelle wird die Precision aufgefressen, wie man deutlich sieht! Woran liegt das? Im Algorithmus wird auch GramSchmidt zur Orthogonalisierung verwendet. Er meckert in der zweiten Zelle rum \!\(GramSchmidt::"zeromag" \(\(:\)\(\ \)\) "The magnitude of \!\({ 0``0.51459253908149, 0``0.655168185198406, 0``0.6136232110037116, \ 0.2911151519510895014`0.02911543173540807, 0``0.7102477517539784, \ 0``0.656413398009062, 0``0.6835108328676073, 0``0.6192498952159269, \ 0``0.686386657560155, 0``0.7548169826639913, \(\(\[LeftSkeleton] 90 \ \[RightSkeleton]\)\)}\) was zero under the inner product \!\(Dot\). This \ suggests that the vectors are linearly dependent."\) ok.ok, soll uns nicht weiter jucken, das passiert nun mal im Algorithmus. Die Vektoren werden tatsächlich nahezu linear abhängig. (Stellenauslöschung) Um die Basis neu aufzubauen muß eben genau deswegen der neue Vektor zu den bereits bestehenden orthogonalisiert werden. Deswegen ja GramSchmidt, man kann auch Householder nehmen, ändert aber nix wesentliches. In der ersten Zelle klappt's, in der zweiten nicht. Warum? Danke und beste Grüße, Marc von Bredow
Davidsonmethode.nb
Description: Mathematica Notebook document
Frühere | Chronologischer Index | Spätere | ||
Vorherige | Thematischer Index | Nächste |
DMUG-Archiv, http://www.mathematica.ch/archiv.html