Feste Schrittweite, mehrdimensional
Klassenbaum:
Arrays in Java:
Matrix als Array von Arrays zu langsam (zu allgemein)
Grundoperationen der Linearen Algebra fehlen
JavaGrande-Organisation erarbeitet Vorschläge:
Matrix-Klassen von NIST und MathWorks
Mehrdimensionale Arrays von IBM
Klasse Matrix:
``Matlab''-Matrizen:
einfach zu handhaben
nur zweidimensional
Grundoperationen (LU, Cholesky, QR, Eigenwerte, SVR)
nicht auf Höchstleistung optimiert
umständliche Notation, da kein Operator-Überladen in Java:
x1 = x.plus(k1.times(3.0 / 4.0 * h));
statt
x1 = x + 3.0/4.0*h*k1;
(vgl. etwa
ODESolverRK4
)
Achtung: Wann wird Referenz kopiert, wann die Elemente?
ODE
(t,x)
: Kopie der Referenz (
x0
in
ODE
ist konstant)
ODESolver
(ode,t,x)
: Kopie der Elemente (
x
wird in
solv
geändert)
Beispiel
PendelErzwODE
:
erzwungenes mathematisches Pendel mit Reibung
chaotisch bei großen Amplituden
sehr unterschiedliche Ergebnisse für verschiedene Solver und Schrittweiten
ode
in
TestOdeNd
vom Typ
PendelErzwOde
nötig, da
setA
-Methode für Klasse
ODE
nicht definiert
problemlos für
ODESolver
, denn ``
PendelErzwODE
ist eine
ODE
''
Peter Junglas 20.12.1999