ADMAT - Operatorüberladen für Matlab
Gezipptes tar-Archiv: /homes/guest/slawig/ADMAT.tar.gz
Installiert am Institut für Mathematik:
- im Unix-Pool MA 241 unter /homes/guest/slawig/ADMAT
- im Forschungsnetz (Linux-Rechner) unter /usr/site-local/AutoDiff/ADMAT
Vorbereitung:
- shell-Variable ADMAT auf das ADMAT-Verzeichnis setzen
- Datei startup.m aus $ADMAT in das Verzeichnis kopieren, wo Matlab aufgerufen wird
Differenzieren und Aufruf/Einbinden des differenzierten Codes. Es gibt jeweils zwei Möglichkeiten:
- eine unter Ausnutzen von relativ komfortablen ADMAT-Funktionen
- eine mit direktem Zugriff auf die ADMAT-Datentypen (Klassen)
- Vorwärtsmodus:
- Berechnung des Produktes Jacobimatrix mal Seed Matrix J*S mit dem Befehl [f,Df] = forwprod('f',x,S,[],Extra); Dabei sind:
- x die Inputvariable, nach der abgeleitet wird
- S die Seed Matrix (oder -Vektor)
- "f" der Name der Datei mit der Funktion, die differenziert wird
- diese Funktion muss die Signatur y=f(x,Extra) haben
- Extra ist eine Struktur, in der man zusätzliche Parameter an die Funktion übergeben kann (z.B. Extra.k=3 usw.)
- hat f keine zusätzlichen Parameter, wird (vor Aufruf von forwprod) Extra=[] gesetzt.
- neue Variable der Klasse "deriv" erzeugen und Funktion aufrufen
- x= ...;
- x=deriv(x,S); (dabei ist S die Seed Matrix)
- abzuleitende Funktion (z.B. y=f(x)) unverändert aufrufen
- getval(y) liefert Wert
- getydot(y) liefert Ableitung
- Rückwärtsmodus:
- Bugfixes:
- bei Benutzung von revprod oder parsetapeS:
- bei Benutzung von parsetape:
- Berechnung des Produktes (adjungierte) Seed Matrix mal Jacobimatrix W*J' mit dem Befehl [f,Df] = revprod('f',x,W,Extra); Dabei sind:
- W die (adjungierte) Seed Matrix (oder -Vektor), d.h. W=dy/dy, wenn y die abhängige Variable ist
- Rest wie oben bei forwprod().
- neue Variable der Klasse "derivtape" erzeugen und Funktion aufrufen
- x= ...;
- x=derivtape(x);
- abzuleitende Funktion (z.B. y=f(x)) unverändert aufrufen
- (adjungierte) Seed Matrix W initialisieren s.o.
- Tape für W auswerten mit dem Befehl: parsetape(W);
- Erste Komponente des Tapes enthält die Ableitung: df = tape(1).W;