Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 5 Mathematisches
gp 5.1 Arithmetik in Java
gp 5.1.1 Java-Sondertypen im Beispiel
gp 5.1.2 Soll eine Division durch Null zur Übersetzungszeit erkannt werden?
gp 5.2 Die Funktionen der Math-Klasse
gp 5.2.1 Attribute
gp 5.2.2 Winkelfunktionen (trigonometrische Funktionen und Arcus-Funktionen)
gp 5.2.3 Runden von Werten
gp 5.2.4 Der Logarithmus
gp 5.2.5 Exponentialfunktionen
gp 5.2.6 Division
gp 5.2.7 Absolutwerte und Maximum, Minimum
gp 5.2.8 Zufallszahlen
gp 5.3 Mathe bitte strikt
gp 5.3.1 Strikt Fließkomma mit strictfp
gp 5.3.2 Die Klassen Math und StrictMath
gp 5.4 Die Random-Klasse
gp 5.5 Große Zahlen
gp 5.5.1 Die Klasse BigInteger
gp 5.5.2 Funktionen von BigInteger
gp 5.5.3 Ganz lange Fakultäten
gp 5.6 Probleme mit Java und der Mathematik
gp 5.7 Das Java-Matrixpaket Jama


Galileo Computing

5.7 Das Java-Matrixpaket Jamatoptop

Als zweiten Schwachpunkt haben wir ausgemacht, dass leistungsstarke Bibliotheken für Java fehlen. Inwieweit diese in die Standardbibliothek integriert sein müssen, bliebe dabei noch zu diskutieren, jedenfalls sind die zwei Klassen BigInteger und BigDecimal nicht besonders viel. (Obwohl zur Ehrenrettung gesagt werden muss, dass bei FORTRAN auch fast alles in externen, zum Teil recht teuren, kommerziellen Bibliotheken steht.) Über Universitäten und Firmen sind allerdings eine Vielzahl von Speziallösungen verfügbar, die dieses Loch stopfen. Auch bei der 3D-API von Sun ist ein Matrixpaket dabei, welches aber nur die einfachsten Matrixoperationen berechnet, darunter etwa die Grundoperationen mit Matrizen. Da aber Matrixoperationen auch für viele Wirtschafts- und Wissenschaftsbereiche wichtig sind, soll an dieser Stelle das Paket Jama vorgestellt werden, das es mit Matrizen aufnimmt. Das Paket ist eine Entwicklung von MathWorks und dem National Institute of Standards and Technology (NIST) und liegt als freie Referenzimplementierung vor, die Sun später als Standardbibliothek anbieten soll. Zusätzlich zu der Matrixklasse als Teil von Jama haben das NIST und die Universität von Maryland das Paket Jampack als alternativen Ansatz für Matrixberechnungen entwickelt, um den es hier aber nicht gehen soll.

Die Jama-Bibliothek (http://math.nist.gov/javanumerics/jama/) besteht im Wesentlichen aus sechs Klassen: Matrix, CholeskyDecomposition, LUDecomposition, QRDecomposition, SingularValueDecomposition und EigenvalueDecomposition. Es ist schön zu sehen, dass auch deutsche Wörter hin und wieder Eingang in wissenschaftliche Begriffe finden. Die Matrixklasse bietet neben grundlegenden Matrixoperationen, die sich auch in der 3D-API befinden, zusätzliche Methoden zur Lösung linearer Gleichungssysteme, zur Determinantenberechnung und zur Berechnung der Inversen einer Matrix an. Die übrigen Klassen erlauben eine Cholesky-Zerlegung, eine LU- und QR-Zerlegung und die Berechnung der Eigenwerte. Als Einschränkung rechnet Jama bisher nur mit reellen Zahlen, es ist jedoch eine Erweiterung auf komplexe Matrixelemente geplant. Hier sind sich die Entwickler jedoch bei der Realisierung noch nicht sicher, da saubere Objektorientierung und Effizienz Hand in Hand gehen sollen. Intern ist die Implementierung mit zweidimensionalen Feldern gelöst. Diese Form führt jedoch zu einem großen Speicherproblem bei dünn besiedelten Matrizen. Ebenso wird auch bei Dreiecksmatrizen keine besondere Implementierung verwendet. All dieses bedenken aber die Entwickler und wollen es in späteren Versionen nachliefern. ##Nun ja, das Datum der letzten Änderung der Web-Seite ist der 23. Juni 1999 (Stand Ende 2002) ...

Um die Leistungen von Jama zusammenzufassen, hier eine Liste der Funktionen:

gp Objektmanipulation
Elemente der Matrix setzen und auslesen, Matrizen kopieren
gp Elementare Operationen
Addition, Subtraktion, Multiplikation, Multiplikation mit einem Skalar, elementweise Multiplikation, elementweise Division, unäres Minus, Transponierung, Norm
gp Zerlegungen
Cholesky, LU, QR, SVD, symmetrischer und nichtsymmetrischer Eigenwert
gp Lösen von Gleichungssystemen
Lösung nichtsingulärer Gleichungen, kleinste Quadrate
gp Sonstiges
Determinante, Rang, Inverses, Pseudo-Inverses

Beispiel Lösen eines einfachen linearen Gleichungssystems mit Jama. Die folgenden Zeilen berechnen die Lösung der Gleichung Ax = b bei einem zufällig erzeugten b.
double m[][] = {
  { 1, 2, 3 },
  { 4, 5, 6 },
  { 7, 8, 9 }
};
Matrix A, b, x ;
A = new Matrix( m );
b = Matrix.random( 3,1 );
x = A.solve( b );
Matrix residual = A.times(x).minus(b);
double rnorm = residual.normInf();

Das Ergebnis lässt sich mit toString() ermitteln. normInf() berechnet die Unendlich-Norm, die das größte Element der Matrix bezeichnet.






Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de