Algorithmische Optimale Steuerung - CO2-Aufnahme des Meeres

ADiMat

ADiMat - Quelltransformationstool für Matlab

Homepage an der RWTH Aachen

Für die aktuelle Version muss man das Tool Installieren (für Windows oder Linux möglich, s. Homepage).

Wir haben am Institut auf den Suns eine alte Version installiert unter:

  • /home/ts/pub/AD/adimat-0.4-r9 (Solaris Sun-Sparc-Architektur, z.B. auf Rechner sauron)

Dokumentation.

Die folgende Anleitung bezieht sich auf diese alte Version:

Vorbereitung, Umgebungsvariablen setzen: 

  • shell-Variable ADIMAT_HOME auf das adimat-0.4 Verzeichnis setzen:
    • im Home-Verzeichnis in Datei .bashrc folgende Zeile einfügen:
      • export ADIMAT_HOME=/home/ts/pub/AD/adimat-0.4-r9
      • irgendwo in .bashrc gibt es eine Zeile 
        • export PATH= ...
      • dahinter folgende Zeile einfügen:
        • export PATH=$PATH:$ADIMAT_HOME/bin 
  • neues Terminal aufmachen oder im bisherigen Terminal source .bashrc eingeben (um die Änderungen aktiv zu machen)
  • Fertig!

Differenzieren: Es gibt zwei Möglichkeiten:

  • ADiMat direkt auf eine Funktion y=f(x) in Datei f.m anwenden:
    • In Shell:
      • adimat -i x -d y f.m
  • Matlab-Skriptdatei (z.B. driver.m, keine Funktion!) mit Aufruf der zu differenzierenden Funktion schreiben, Beispiel: x=[0,1]; y=f(x);
    • In dieser Datei Direktiven mit Namen der unabhängigen (independent variables) und der abhängigen Variablen (dependent variables) sowie der Funktion, die differenziert werden soll (toplevel function), einfügen:
      • %ADiMat AD_IVARS = x
      • %ADiMat AD_DVARS = y
      • %ADiMat AD_TOP = f
    • In Shell aufrufen:
      • adimat driver.m

In beiden Fällen ist anschließend eine Funktion [g_y,y] = g_f(g_x,x) in Datei g_f.m generiert.

Aufruf/Einbinden des differenzierten Codes:

  • Datei ADiMat_startup.m aus $ADIMAT_HOME/share/adimat/opt_derivclass in das Verzeichnis kopieren, wo Matlab aufgerufen wird.
  • In Matlab Skript ADiMat_startup (s.o.) aufrufen, oder in startup.m die folgende Zeile schreiben (dann wird es beim Start von Matlab automatisch aufgerufen):
    • ADiMat_startup
  • Seed Matrix g_x erzeugen und initialisieren:
    • g_x=createZeroGradients(n,x);
    • Dabei ist n die Anzahl der Richtungs- oder partiellen Ableitungen, die man berechnen will, also für die volle Jacobi-Matrix n= length(x).
    • Einzelne Komponenten von g_x setzen:
      • n=1: i-te partielle Ableitung: g_x{1}(i)=1;
      • n=1: Richtungsableitung in Richtung d: g_x{1}=d;
      • n=length(x): volle Jacobi-Matrix: for i=1:n, g_x{i}(i)=1; end
  • Nach Aufruf von g_f steht die Ableitung in g_y