Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 5 Mathematisches
  gp 5.1 Arithmetik in Java
  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 Exponentialfunktionen
    gp 5.2.5 Division
    gp 5.2.6 Absolutwerte und Maximum, Minimum
    gp 5.2.7 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 Ganz lange Fakultäten
  gp 5.6 Probleme mit Java und der Mathematik
  gp 5.7 Das Java-Matrix-Paket Jama


Galileo Computing

5.7 Das Java-Matrix-Paket Jama  toptop

Als zweiten Schwachpunkt haben wir ausgemacht, dass leistungsstarke Bibliotheken für Java fehlen. Inwieweit diese in die Standard-Bibliothek integriert sein müssen, bliebe dabei noch zu diskutieren, jedenfalls sind die 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 Matrix-Paket 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 Standard-Bibliothek 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 Matrixberechnung entwickelt, um das 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 Webseite 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

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 © Galileo Press GmbH 2003
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