Algorithmisches Differenzieren - M1
Algorithmisches Differenzieren - M1
Algorithmisches Differenzieren - M1
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Technische Universität München<br />
Fakultät für Mathematik<br />
Herbert Fischer<br />
<strong>Algorithmisches</strong> <strong>Differenzieren</strong><br />
Skriptum zur Vorlesung WS 2005/06
<strong>Algorithmisches</strong> <strong>Differenzieren</strong><br />
Herbert Fischer<br />
1 Einleitung<br />
Wir wollen für eine Funktion f die Ableitung f ′ an einer gegebenen Stelle berechnen.<br />
Nehmen wir zum Beispiel die Funktion f : IR → IR mit f(x) = (x 3 + x) 2 und fragen<br />
nach f ′ (7). Gemäß der Definition der Ableitung erhalten wir den Wert<br />
f ′ ((7 + h)<br />
(7) = lim<br />
h→0<br />
3 + (7 + h)) 2 − (73 + 7) 2<br />
h<br />
= 103600.<br />
Üblicher ist es, mit den bekannten Regeln der Differentialrechnung eine Formel<br />
f ′ (x) = 2(x 3 + x)(3x 2 + 1)<br />
zu erzeugen, mit der wir dann f ′ (7) = 103600 berechnen. Beide Wege sind nur in<br />
einfachen Fällen brauchbar. Ist die Funktion f etwa durch ein Programm mit 5000<br />
Anweisungen gegeben, so sind andere Wege zu suchen.<br />
Die Regeln zum <strong>Differenzieren</strong> ermöglichen es, die Berechnung von Ableitungen<br />
zu automatisieren. Das Prinzip ist einfach: Die gegebene Funktion f wird in Teile<br />
zerlegt, für die Teile werden Ableitungen gebildet, sodann werden die Ableitungen der<br />
Teile zusammengesetzt und ergeben f ′ (x). Dieses mehr oder weniger automatische<br />
<strong>Differenzieren</strong> wollen wir schematisch so darstellen.<br />
103600<br />
✛<br />
auto. Diff.<br />
✛<br />
✛<br />
(x 3 + x) 2<br />
In vielen Bereichen der Angewandten Mathematik treten Ableitungen auf: beim iterativen<br />
Lösen von nichtlinearen Gleichungen, in der nichtlinearen Optimierung, bei der<br />
Behandlung von Differentialgleichungen, bei der Steuerung von Robotern, in der Sensitivitätsanalyse,<br />
bei fast allen kontinuierlichen physikalischen Problemen. Während<br />
innerhalb der Reinen Mathematik die Behandlung von Ableitungen, also die Differentialrechnung,<br />
seit langem ein abgeschlossenes Gebiet ist, wird in der numerischen<br />
Praxis bezüglich der Ableitungen meist der Stand vor Leibniz beibehalten: Für eine<br />
gegebene Funktion f wird die Ableitung f ′ an gegebener Stelle x angenähert durch<br />
einen Differenzen-Quotienten<br />
f ′ (x) ≈<br />
f(y) − f(x)<br />
.<br />
y − x<br />
7
1 EINLEITUNG 2<br />
Es ist klar, daß in gewissen Fällen der Differenzen-Quotient die einzige Möglichkeit<br />
ist, Informationen über die Ableitung zu erhalten, z.B. wenn f(x) das Ergebnis eines<br />
Experimentes ist. In vielen Fällen jedoch ist die zu betrachtende Funktion explizit<br />
gegeben, etwa durch einen Algorithmus, oder formelmäßig implizit bestimmt, etwa<br />
durch eine definierende Gleichung. Nun sind Regeln zum <strong>Differenzieren</strong> bekannt und<br />
einfach. Es liegt also durchaus nahe, die schrittweise Anwendung dieser Regeln und<br />
damit die Berechnung von Ableitungen nicht dem Benutzer aufzubürden, sondern<br />
von einem Algorithmus durchführen zu lassen. Für praktische Anwendungen braucht<br />
man nicht Formeln für Ableitungen, es reicht, wenn die Werte von Ableitungen an<br />
vorgegebenen Stellen berechnet werden können. Die systematische Erzeugung von Algorithmen,<br />
die Ableitungswerte berechnen, und die Verwendung dieser Algorithmen<br />
nennt man <strong>Algorithmisches</strong> <strong>Differenzieren</strong>.<br />
Betrachten wir eine differenzierbare Funktion f : D ⊆ IR n → IR. Sei A ein Algorithmus,<br />
der zu gegebenem x ∈ D den Funktionswert f(x) berechnet.<br />
f(x)<br />
✛<br />
A<br />
Wir sind interessiert an einem transformierten Algorithmus A ′ , der zu gegebenem x ∈<br />
D den Funktionswert und den Ableitungswert f ′ (x) berechnet.<br />
f(x), f ′ (x)<br />
✛<br />
✛<br />
x<br />
A ′ ✛ x<br />
Die Transformation von A nach A ′ soll durch einen Algorithmus DIFF erfolgen.<br />
A ′ ✛<br />
✛<br />
DIFF<br />
Wir werden untersuchen, wie für eine große Klasse von Funktionen bzw. Algorithmen<br />
die Transformation DIFF realisiert werden kann.<br />
Für eine rationale Funktion f : D ⊆ IR n → IR sei #(f, A) die Anzahl der rationalen<br />
Operationen zur Berechnung von f(x) mit Algorithmus A, und #(f, f ′ , A ′ ) sei die<br />
Anzahl der rationalen Operationen zur Berechnung von f(x) und f ′ (x) mit Algorithmus<br />
A ′ . Im Vergleich dieser “Kosten” gemäß der Formel<br />
#(f, f ′ , A ′ ) = K · #(f, A)<br />
gibt der Faktor K Auskunft über die Effizienz des Algorithmus A ′ . Und da A ′ durch<br />
DIFF erzeugt wird, ist K auch ein Maß für die Effizienz von DIFF. Bei geschickter<br />
Realisierung von DIFF ergibt sich K ≤ 4. Das heißt: Funktionswert f(x)<br />
A
1 EINLEITUNG 3<br />
und Ableitungswert f ′ (x) zusammen kosten höchstens 4-mal soviel wie der Funktionswert<br />
f(x) alleine. Im Vergleich dazu ist die Approximation von f ′ (x) durch<br />
einen Differenzen-Quotienten teuer, sie erfordert mindestens n + 1 Funktionswert-<br />
Berechnungen. Somit ergibt sich für n > 3 die überraschende Situation: Die Approximation<br />
von f ′ (x), berechnet mit einem Differenzen-Quotienten, ist teuerer als der<br />
exakte Wert f ′ (x), berechnet mit Algorithmischem <strong>Differenzieren</strong>.<br />
Im Jahr 1959 wurde an der Akademie der Wissenschaften der UdSSR ein Bericht [11]<br />
“Programme zum Automatischen <strong>Differenzieren</strong> für die Maschine BESM” in Russisch<br />
geschrieben, der eine der ersten Arbeiten zu unserem Thema ist. Seitdem erschienen<br />
etwa 300 einschlägige Veröffentlichungen, ein subjektive Auswahl ist im Literaturverzeichnis<br />
zu finden. Rall’s Buch [121] von 1981 ist heute eine Standard–Referenz. Einen<br />
guten Überblick geben die Proceedings [70] einer internationalen Tagung im Jahr 1991,<br />
herausgegeben von Griewank und Corliss. Von den neueren Veröffentlichungen, insbesondere<br />
im Zusammenhang mit der Intervall–Rechnung, ist Lohner’s Arbeit [106]<br />
von 1994 zu nennen. Das vorliegende Kapitel enthält die grundlegenden Ideen des<br />
Algorithmischen <strong>Differenzieren</strong>s, wobei wir auch auf die Hesse–Matrix einer reellen<br />
Funktion von n Veränderlichen eingehen. Die Darstellung ist bewußt breit ausgelegt,<br />
sodaß besondere Vorkenntnisse nicht nötig sind.
2 VORWÄRTS–METHODE 4<br />
2 Vorwärts–Methode<br />
Sei f :D ⊆ IR n → IR eine differenzierbare Funktion. f ′ bezeichne die Ableitung von f.<br />
Dann ist<br />
f ′ �<br />
∂f(x)<br />
(x) = ,<br />
∂x1<br />
∂f(x)<br />
, . . . ,<br />
∂x2<br />
∂f(x)<br />
�<br />
∈ IR<br />
∂xn<br />
1×n .<br />
f ′ (x) ist eine Matrix mit einer Zeile und n Spalten. Wir wollen f ′ (x) zusammensetzen<br />
aus Ableitungen von Teilen von f. Beginnen wir mit ganz einfachen Teilen, mit<br />
kanonischen Projektionen und konstanten Funktionen.<br />
Ist r : IR n → IR eine kanonische Projektion, d.h.<br />
r(x) = xk = k–te Komponente von x,<br />
so ist offensichtlich<br />
r ′ (x) = [0, . . . , 0, 1, 0, . . . , 0] mit 1 in Position k.<br />
Ist r : IR n → IR eine konstante Funktion, d.h.<br />
so gilt natürlich<br />
r(x) = gegebene oder berechnete Konstante,<br />
r ′ (x) = [0, . . . . . . , 0].<br />
So trivial diese Ableitungen auch sind, wir benötigen sie vorerst als Basis für den<br />
Aufbau von f ′ (x).<br />
Jetzt behandeln wir zwei geläufige Verfahren, aus gegebenen Funktionen in einfacher<br />
Weise neue Funktionen zu bilden, die rationale Komposition und die Verwendung von<br />
Bibliothek–Funktionen.<br />
2.1 Rationale Komposition<br />
Wir betrachten zwei differenzierbare Funktionen<br />
a : D ⊆ IR n → IR und b : D ⊆ IR n → IR.<br />
Sei r eine der Funktionen a + b, a − b, a · b, a/b mit der Einschränkung b(x) �= 0 für<br />
alle x ∈ D im Fall a/b. Die Funktion r ist differenzierbar. In Tabelle 1 sind Formeln<br />
für die Ableitung r ′ angegeben.<br />
Typ r = r ′ =<br />
+ r = a + b r ′ = a ′ + b ′<br />
− r = a − b r ′ = a ′ − b ′<br />
· r = a · b r ′ = b · a ′ + a · b ′<br />
/ r = a / b r ′ = (a ′ − r · b ′ )/b<br />
Tabelle 1: Ableitung der rationalen Komposition<br />
Wir wollen streng unterscheiden zwischen Funktionen und Funktionswerten: r und r ′<br />
sind Funktionen, r(x) und r ′ (x) sind Funktionswerte. Die Tabelle 1 zeigt also Formeln
2 VORWÄRTS–METHODE 5<br />
für Funktionen. Wenden wir eine der Funktionen r, r ′ auf ein x ∈ D an, so erhalten<br />
wir Formeln für Funktionswerte. Etwa für die Division erhalten wir<br />
r ′ (x) = (a ′ (x) − r(x) · b ′ (x))/b(x).<br />
Aus den Formeln in Tabelle 1 schließen wir:<br />
Das Paar r(x), r ′ (x) kann berechnet werden aus den Paaren a(x), a ′ (x) und b(x), b ′ (x).<br />
Diese schlichte Einsicht ist einer der wichtigsten Angelpunkte des Automatischen <strong>Differenzieren</strong>s.<br />
Das Paar r(x), r ′ (x) ist nicht ein Paar von Formeln, es ist auch nicht<br />
ein Paar von Funktionen, es ist ein Element von IR × IR 1×n . Der Mechanismus zur<br />
Berechnung des Paares r(x), r ′ (x) hängt nicht von x ab, er ist auch unabhängig von<br />
den speziellen Funktionen a und b, er wird allein bestimmt durch den Typ ω von r.<br />
Dies soll durch folgendes Diagramm verdeutlicht werden.<br />
r(x), r ′ (x)<br />
✛<br />
RAT<br />
✛<br />
✛<br />
✛<br />
ω<br />
a(x), a ′ (x)<br />
b(x), b ′ (x)<br />
RAT kann realisiert werden als Prozedur in PASCAL, als Subroutine in FORTRAN,<br />
oder als Funktion, wenn die gewählte Programmiersprache es zuläßt. Einfacher ist es,<br />
die vier Typen von r einzeln zu behandeln. Dann kann man in Programmiersprachen<br />
wie ADA, C++, PASCAL–XSC Operatoren definieren, die in kompakter Schreibweise<br />
RAT realisieren.<br />
Wir verwenden hier RAT als Funktion, die zu einem Typ ω ∈ {+, −, ·, /} und zu<br />
Paaren A = (a(x), a ′ (x)) und B = (b(x), b ′ (x)) das Paar R = (r(x), r ′ (x)) berechnet,<br />
R ←− RAT(ω, A, B).<br />
Ein kurzes Beispiel soll die Bedeutung der rationalen Komposition für die Berechnung<br />
von Ableitungen demonstrieren.
2 VORWÄRTS–METHODE 6<br />
Beispiel 1<br />
Gegeben sei die differenzierbare Funktion<br />
f : D ⊆ IR 2 → IR mit f(x) = x1 · x2 − 7<br />
,<br />
x1 + x2<br />
wobei D = {x|x = (x1, x2) ∈ IR 2 , x1 + x2 �= 0}. Gewünscht ist f ′ (3, 8). Wir definieren<br />
Funktionen f1, f2, . . . , f7 : D → IR durch<br />
f1(x) = x1<br />
f2(x) = x2<br />
f3(x) = 7<br />
f4(x) = f1(x) · f2(x)<br />
f5(x) = f4(x) − f3(x)<br />
f6(x) = f1(x) + f2(x)<br />
f7(x) = f5(x) / f6(x)<br />
Offensichtlich ist f7 = f. Da zu gegebenem x ∈ D nacheinander die Werte f1(x),<br />
f2(x),. . . , f7(x) = f(x) berechnet werden können, liegt ein Algorithmus A zur Berechnung<br />
von f(x) vor. Nun betrachten wir die Paare Yk = (fk(x), f ′ k(x)) für k =1, 2, . . . , 7.<br />
Mit x = (3, 8) sind die Paare Y1, Y2, Y3 bekannt. Die folgenden Paare Y4, Y5, Y6, Y7<br />
können schrittweise mit RAT berechnet werden.<br />
Y1 ←− (3, [1, 0])<br />
Y2 ←− (8, [0, 1])<br />
Y3 ←− (7, [0, 0])<br />
Y4 ←− RAT(·, Y1, Y2) = (24, [8, 3])<br />
Y5 ←− RAT(−, Y4, Y3) = (17, [8, 3])<br />
Y6 ←− RAT(+, Y1, Y2) = (11, [1, 1])<br />
Y7 ←− RAT(/, Y5, Y6) = (1.54 . . . , [0.586 . . . , 0.132 . . .])<br />
Somit ist f(3, 8) = 1.54 . . . und f ′ (3, 8) = [0.586 . . . , 0.132 . . .]. ⊓⊔<br />
Für jede explizit gegebene rationale Funktion f und jedes zulässige Argument x können<br />
wir f ′ (x) mit RAT schrittweise berechnen. Eine Formel für die Ableitung f ′ im<br />
herkömmlichen Sinne wird dabei nicht verwendet.
2 VORWÄRTS–METHODE 7<br />
2.2 Bibliothek–Funktionen<br />
Sei Λ eine Kollektion differenzierbarer reeller Funktionen einer reellen Variablen. Wir<br />
denken dabei an Funktionen wie sin, ln, exp,. . . und ähnliche. Der Kürze halber seien<br />
die Funktionen in Λ Bibliothek–Funktionen genannt. Wir betrachten eine Bibliothek–<br />
Funktion<br />
λ : E ⊆ IR → IR<br />
und eine differenzierbare Funktion<br />
a : D ⊆ IR n → IR.<br />
Unter der Voraussetzung a(D) ⊆ E definieren wir eine neue Funktion<br />
r : D ⊆ IR n → IR mit r(x) := λ(a(x)).<br />
Diese Funktion r ist differenzierbar und es gilt<br />
r ′ (x) = λ ′ (a(x)) · a ′ (x).<br />
Wir nehmen an, die Funktionen λ und λ ′ können für jedes zulässige Argument ausgewertet<br />
werden. Dies ist kein Problem für die üblichen Bibliothek–Funktionen sin, ln,<br />
exp,. . . und ähnliche.<br />
Aus den Formeln für r(x) und r ′ (x) schließen wir:<br />
Das Paar r(x), r ′ (x) kann mittels λ, λ ′ berechnet werden aus dem Paar a(x), a ′ (x).<br />
Diese fast triviale Erkenntnis ist ein weiterer wichtiger Angelpunkt des Algorithmischen<br />
<strong>Differenzieren</strong>s. Der Mechanismus zur Berechnung des Paares r(x), r ′ (x) hängt nicht<br />
von x ab, er ist auch unabhängig von den speziellen Funktionen a und λ. Zur Berechnung<br />
des Paares r(x), r ′ (x) aus dem Paar a(x), a ′ (x) müssen wir allerdings wissen,<br />
welches λ ∈ Λ verwendet werden soll. Dies soll durch folgendes Diagramm verdeutlicht<br />
werden.<br />
r(x), r ′ (x)<br />
✛<br />
LIB<br />
✛<br />
✛<br />
λ<br />
a(x), a ′ (x)<br />
LIB kann realisiert werden als Prozedur in PASCAL, als Subroutine in FORTRAN,<br />
oder als Funktion, wenn die gewählte Programmiersprache das zuläßt. Man kann auch<br />
jede Bibliothek–Funktion einzeln behandeln und den Namen der Bibliothek–Funktion<br />
in den Namen der entsprechenden Prozedur bzw. Subroutine bzw. Funktion stecken.<br />
Wir verwenden hier LIB als Funktion, die zu einer Bibliothek–Funktion λ und zu<br />
einem Paar A = (a(x), a ′ (x)) das Paar R = (r(x), r ′ (x)) berechnet,<br />
R ←− LIB(λ, A).<br />
Ein kurzes Beispiel soll die Verwendung von Bibliothek–Funktionen für die Berechnung<br />
von Ableitungen demonstrieren.
2 VORWÄRTS–METHODE 8<br />
Beispiel 2<br />
Gegeben sei die differenzierbare Funktion<br />
f : D ⊆ IR 3 → IR mit f(x) = (x1 − 7) · sin(x1 + x2)<br />
,<br />
wobei D = {x|x = (x1, x2, x3) ∈ IR 3 , x3 �= 0}. Gewünscht ist f ′ (−13, 8, 0.3). Zu<br />
gegebenem x ∈ D kann der Funktionswert f(x) schrittweise berechnet werden wie in<br />
Spalte 1 des folgenden Schemas angegeben. Hier ist y9 = f(x).<br />
y1 = x1 f1(x) = x1 Y1 ← (x1, [1, 0, 0])<br />
y2 = x2 f2(x) = x2 Y2 ← (x2, [0, 1, 0])<br />
y3 = x3 f3(x) = x3 Y3 ← (x3, [0, 0, 1])<br />
y4 = 7 f4(x) = 7 Y4 ← (7, [0, 0, 0])<br />
y5 = y1 − y4 f5(x) = f1(x) − f4(x) Y5 ← RAT(−, Y1, Y4)<br />
y6 = y1 + y2 f6(x) = f1(x) + f2(x) Y6 ← RAT(+, Y1, Y2)<br />
y7 = sin(y6) f7(x) = sin(f6(x)) Y7 ← LIB(sin, Y6)<br />
y8 = y5 · y7 f8(x) = f5(x) · f7(x) Y8 ← RAT(·, Y5, Y7)<br />
y9 = y8/y3 f9(x) = f8(x)/f3(x) Y9 ← RAT(/, Y8, Y3)<br />
Das Schema für y1, y2, . . . , y9 erlaubt die Definition von Funktionen f1, f2, . . . , f9 wie<br />
in Spalte 2 angegeben. Offensichtlich ist f9 = f. Nun führen wir Paare Yk =<br />
(fk(x), f ′ k(x)), für k = 1, 2, . . . , 9, ein. Für gegebenes x sind die Paare Y1, Y2, Y3, Y4<br />
bekannt. Und für k = 5, 6, 7, 8, 9 kann das Paar Yk aus bereits ermittelten Paaren mit<br />
RAT und LIB berechnet werden. Das letzte Paar ist<br />
Y9 = (f9(x), f ′ 9(x)) = (f(x), f ′ (x)).<br />
Für x = (−13, 8, 0.3) erhalten wir<br />
f(x) = −63.9 . . . und f ′ (x) = [−15.7 . . . , −18.9 . . . , 213. . . .].<br />
Die Spalte 1 stellt eine code-list für die Funktion f dar, wie sie von L.B. Rall in [121]<br />
verwendet wird. Diese code-list ist ein Algorithmus A zur Berechnung von f(x). Die<br />
Spalte 2 zeigt, daß eine code-list für f eine iterative Folge f1, f2, . . . , f9 von Funktionen<br />
definiert. Und die Spalte 3 kann als Algorithmus A ′ zur Berechnung von f(x) und f ′ (x)<br />
aufgefaßt werden. Die in der Einleitung genannte Transformation DIFF : A → A ′ ist<br />
im Vergleich von Spalte 1 und Spalte 3 ersichtlich. ⊓⊔<br />
x3
2 VORWÄRTS–METHODE 9<br />
2.3 Allgemeines Schema<br />
Wir betrachten eine Funktion f : D ⊆ IR n → IR, die durch einen Algorithmus A gemäß<br />
Tabelle 2 definiert ist.<br />
(1) Für k = 1, 2, . . . , n<br />
yk = xk = k–te Komponente von x<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
yk = Φk(y1, y2, . . . , yk−1)<br />
(3) f(x) = yn+t<br />
Tabelle 2: Algorithmus A zur Berechnung von f(x)<br />
Die verwendeten Funktionen Φn+1, Φn+2, . . . , Φn+t seien differenzierbar. Dann ist f<br />
ebenfalls differenzierbar. Wir definieren Funktionen f1, f2, . . . , fn mit<br />
fk(x) := xk = k–te Komponente von x<br />
und Funktionen fn+1, fn+2, . . . , fn+t mit<br />
fk(x) := Φk(f1(x), f2(x), . . . , fk−1(x)).<br />
Ist Φk eine konstante Funktion, dann ist natürlich fk ebenfalls eine konstante Funktion.<br />
Ist Φk von der Gestalt<br />
Φk(y1, y2, . . . , yk−1) = yi ∗ yj mit ∗ ∈ {+, −, ·, /},<br />
dann ist fk(x) = fi(x) ∗ fj(x), also ist fk eine rationale Komposition wie in Abschnitt<br />
2.1 behandelt. Ist Φk von der Gestalt<br />
Φk(y1, y2, . . . , yk−1) = λ(yi) mit λ ∈ Λ,<br />
dann ist fk(x) = λ(fi(x)), also ist fk eine Funktion wie in Abschnitt 2.2 behandelt.<br />
Im allgemeinen nehmen wir an, daß Φk für gegebene Argumente ausgewertet werden<br />
kann. Für die Ableitung f ′ k erhalten wir mit der Ketten–Regel<br />
⎡ ⎤<br />
f ′ k(x) = Φ ′ k(f1(x), f2(x), . . . , fk−1(x)) ·<br />
⎢<br />
⎣<br />
f ′ 1(x)<br />
.<br />
f ′ k−1(x)<br />
Diese Formel für f ′ k(x) beinhaltet als Spezialfälle auch die entsprechenden Formeln für<br />
die Ableitungen aus den Abschnitten 2.1 und 2.2. Im allgemeinen nehmen wir an, daß<br />
Φ ′ k für gegebene Argumente ausgewertet werden kann.<br />
Nun betrachten wir Paare von Funktionswert und Ableitungswert und setzen<br />
Yk := (fk(x), f ′ k(x)) für k = 1, 2, . . . , n + t.<br />
Für k = 1, 2, . . . , n ist das Paar Yk offensichtlich, und für k = n + 1, n + 2, . . . , n + t<br />
kann das Paar Yk aus den Paaren Y1, Y2, . . . , Yk−1 berechnet werden,<br />
Yk ←− Φ ∗ k(Y1, Y2, . . . , Yk−1).<br />
⎥<br />
⎦ .
2 VORWÄRTS–METHODE 10<br />
Damit ergibt sich ein Algorithmus A ′ zur Berechnung von f(x) und f ′ (x) wie in Tabelle<br />
3 dargestellt.<br />
(1) Für k = 1, 2, . . . , n<br />
Yk ← (xk, [0, . . . , 0, 1, 0, . . . , 0]) mit 1 in Position k<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
Yk ← Φ ∗ k(Y1, Y2, . . . , Yk−1)<br />
(3) (f(x), f ′ (x)) ← Yn+t<br />
Tabelle 3: Algorithmus A ′ zur Berechnung von f(x) und f ′ (x)<br />
Die Anwendung von A ′ nennt man Vorwärts–Methode. Die Algorithmen A und A ′<br />
sehen sich sehr ähnlich. Entsprechend einfach und naheliegend ist daher die in der<br />
Einleitung erwähnte Transformation DIFF : A → A ′ . Allerdings sind wir bisher sehr<br />
großzügig mit den Konstanten umgegangen. Die Verwendung einer Konstanten als<br />
konstante Funktion, deren Ableitung nur Nullen enthält, fügt sich zwar einfach in die<br />
Theorie ein, in der Praxis wird man jedoch darauf Wert legen, unnötige Operationen<br />
mit Nullen zu vermeiden. Dies führt zu einer Verfeinerung der Funktionen RAT und<br />
LIB und zu einer sorgfältigeren Behandlung von Φk. In der Transformation DIFF<br />
müssen dann entsprechend viele Spezialfälle berücksichtigt werden.<br />
2.4 Komplexität<br />
In diesem Abschnitt beschränken wir uns auf eine rationale Funktion<br />
f : D ⊆ IR n → IR.<br />
Wir wollen abschätzen, wie viele rationale Operationen zur Berechnung von Funktionswert<br />
f(x) und Ableitungswert f ′ (x) benötigt werden. Unter einer rationalen Operation<br />
verstehen wir Addition oder Subtraktion oder Multiplikation oder Division zweier<br />
reeller Zahlen oder Vorzeichenwechsel einer reellen Zahl. Ferner soll abgeschätzt werden,<br />
wieviel Speicherplatz nötig ist. Bei solchen Abschätzungen ist es wesentlich zu<br />
beachten, daß sowohl f(x) als auch f ′ (x) auf verschiedene Weisen berechnet werden<br />
können. So gibt es zum einen für eine Funktion viele Schreibweisen, die sich in der<br />
Anzahl der Operationen unterscheiden, etwa<br />
f(x) = 1 − x2<br />
=<br />
x1 + x2<br />
x1<br />
.<br />
x1 + x2<br />
Zum anderen gibt es bei einem vorgegebenen Algorithmus zur Berechnung von f(x)<br />
verschiedene Algorithmen, die den Ableitungswert f ′ (x) berechnen.<br />
Wir folgen dem Algorithmus A in Tabelle 2 und spezifizieren die Vorschrift<br />
yk = Φk(y1, y2, . . . , yk−1).<br />
Wir nehmen an, daß yk mit einer rationalen Operation aus y1, y2, . . . , yk−1 berechnet<br />
wird. Die verschiedenen Möglichkeiten sind in Tabelle 4 zusammengestellt, wobei ci<br />
und cj konstante reelle Zahlen sind.<br />
Den präzisierten Algorithmus zur Berechnung von f(x) nennen wir jetzt FUN, siehe<br />
Tabelle 5.
2 VORWÄRTS–METHODE 11<br />
Typ yk y ′ k #(yk, y ′ k)<br />
A yi + yj mit i �= j y ′ i + y ′ j n + 1<br />
S yi − yj mit i �= j y ′ i − y ′ j n + 1<br />
M yi · yj mit i �= j yj · y ′ i + yi · y ′ j 3n + 1<br />
D yi/yj mit i �= j (y ′ i − yk · y ′ j)/yj 3n + 1<br />
AV yi + yi 2 · y ′ i n + 1<br />
SV yi − yi 0 1<br />
MV yi · yi (2 · yi) · y ′ i n + 2<br />
DV yi/yi 0 1<br />
AVC yi + cj y ′ i 1<br />
SVC yi − cj y ′ i 1<br />
MVC yi · cj cj · y ′ i n + 1<br />
DVC yi/cj y ′ i/cj n + 1<br />
ACV ci + yj y ′ j 1<br />
SCV ci − yj −y ′ j n + 1<br />
MCV ci · yj ci · y ′ j n + 1<br />
DCV ci/yj (−yk/yj) · y ′ j n + 3<br />
VW −yj −y ′ j n + 1<br />
Tabelle 4: Formeln für yk und y ′ k<br />
(1) Für k = 1, 2, . . . , n<br />
yk = xk = k–te Komponente von x<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
yk = eine der Formeln in Tabelle 4 Spalte 2<br />
(3) f(x) = yn+t<br />
Tabelle 5: Algorithmus FUN zur Berechnung von f(x)
2 VORWÄRTS–METHODE 12<br />
Wir definieren<br />
#(f, FUN) := Anzahl der rationalen Operationen zur Berechnung<br />
von f(x) mit FUN.<br />
Offensichtlich gilt #(f, FUN) = t. Es sei nochmals darauf hingewiesen, daß die Zahl<br />
#(f, FUN) nicht eine Kenngröße der Funktion f ist, sondern dem Algorithmus FUN<br />
zugeordnet ist. Die in der Literatur auftretende Bezeichnung L(f) im Zusammenhang<br />
mit “Anzahl der Operationen” sollte reserviert bleiben für L(f) := min #(f, FUN),<br />
wobei das Minimum zu nehmen ist über alle möglichen Algorithmen vom Typ FUN<br />
zur Berechnung von f(x).<br />
Nun folgen wir dem Algorithmus A ′ in Tabelle 3 und spezifizieren die Vorschrift<br />
Yk ←− Φ ∗ k(Y1, Y2, . . . , Yk−1).<br />
Das Paar Yk besteht aus yk = fk(x) und y ′ k = f ′ k(x). Abhängig vom Typ der k–ten<br />
Operation wird y ′ k berechnet wie in Tabelle 4 Spalte 3 angegeben. Den so präzisierten<br />
Algorithmus zur Berechnung von f(x) und f ′ (x) nennen wir jetzt VM (Vorwärts–<br />
Methode), siehe Tabelle 6.<br />
Wir definieren<br />
(1) Für k = 1, 2, . . . , n<br />
(yk, y ′ k) ← (xk, [0, . . . , 0, 1, 0, . . . , 0]) mit 1 in Position k<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
(yk, y ′ k) ← gemäß Tabelle 4 Spalte 2 und Spalte 3<br />
(3) (f(x), f ′ (x)) ← (yn+t, y ′ n+t)<br />
Tabelle 6: Algorithmus VM<br />
#(f, f ′ , VM) := Anzahl der rationalen Operationen zur Berechnung<br />
von f(x) und f ′ (x) mit VM.<br />
Es ist sehr einfach, die Größe #(f, f ′ , VM) abzuschätzen. In Tabelle 4 Spalte 4 ist<br />
unter #(yk, y ′ k) angemerkt, wie “teuer” ein Paar (yk, y ′ k) ist. Damit erhalten wir<br />
Proposition 1: Für die Berechnung von f(x) und f ′ (x) mit dem Algorithmus VM<br />
gilt<br />
#(f, f ′ , VM) ≤ (3n + 1) · #(f, FUN).<br />
Funktionswert und Ableitungswert zusammen, berechnet mit VM, kosten also höchstens<br />
(3n + 1)–mal soviel wie der Funktionswert alleine. Diese Abschätzung ist scharf.<br />
Wenn im Algorithmus FUN nur Operationen vom Typ M oder D auftreten, dann wird<br />
obige Ungleichung zu einer Gleichung.
2 VORWÄRTS–METHODE 13<br />
Nun zum Bedarf an Speicherplätzen für den Algorithmus VM. Es ist schwierig, eine<br />
relevante Größe zu definieren, da wir im Algorithmus VM nicht spezifiziert haben, was<br />
während des Ablaufes des Algorithmus zu speichern ist und was eventuell zu vergessen<br />
ist. Wenn wir jedes Paar (yk, y ′ k) für k = 1, 2, . . . , n + t separat speichern, dann sind<br />
(n + t) · (n + 1) Speicherplätze nötig. In einem Programm für den Algorithmus VM<br />
wird man allerdings versuchen, gespeicherte Zahlen zu vergessen, wenn sie für den Rest<br />
des Algorithmus nicht mehr von Belang sind, d.h. man überschreibt Speicherplätze.<br />
Dadurch kann der Bedarf an Speicherplätzen weit unter (n + t) · (n + 1) sinken.<br />
Wir wollen noch eine Variante V<strong>M1</strong> zum Algorithmus VM angeben. Der Algorithmus<br />
VM startet in Block (1) mit den Ableitungen y ′ 1, y ′ 2, . . . , y ′ n, die jeweils (n − 1)<br />
System–Nullen enthalten. Im Block (2) werden aus diesen Ableitungen neue Ableitungen<br />
gebildet. Dabei werden rationale Operationen mit System–Nullen ausgeführt.<br />
Diese unnötigen Operationen werden im Algorithmus V<strong>M1</strong> unterdrückt. Jedem y ′ k<br />
ordnen wir eine Index–Menge Ik zu, welche die Indizes der signifikanten Komponenten<br />
von y ′ k enthält. So gehört z.B. zu y ′ 1 die Index–Menge I1 = {1}. Angenommen y ′ i, Ii<br />
und y ′ j, Ij sind bereits berechnet und y ′ k = y ′ i + y ′ j. Dann werden die Komponenten von<br />
y ′ k berechnet nach der Vorschrift<br />
y ′ ⎧<br />
y<br />
⎪⎨<br />
kµ =<br />
⎪⎩<br />
′ iµ + y ′ jµ für µ ∈ Ii ∩ Ij<br />
y ′ iµ für µ ∈ Ii\Ij<br />
y ′ ⎫<br />
⎪⎬<br />
jµ für µ ∈ Ij\Ii<br />
⎪⎭<br />
0 für µ /∈ Ii ∪ Ij<br />
für µ = 1, 2, . . . , n.<br />
Die zu y ′ k gehörige Index–Menge ist Ik = Ii ∪ Ij. Analog werden bei den anderen<br />
Verknüpfungen von Ableitungen die Operationen mit System–Nullen eingespart.
3 RÜCKWÄRTS–METHODE 14<br />
3 Rückwärts–Methode<br />
In Abschnitt 2 haben wir gezeigt, wie ein Algorithmus A zur Berechnung eines Funktionswertes<br />
f(x) transformiert werden kann in einen Algorithmus A ′ für die Berechnung<br />
von Funktionswert f(x) und Ableitungswert f ′ (x). Der beschriebene Weg ist nicht der<br />
einzige, das gesteckte Ziel zu erreichen. Es gibt einen anderen Weg, der ebenfalls<br />
zu einem Algorithmus für die Berechnung von f(x) und f ′ (x) führt. Während bei<br />
der Vorwärts–Methode schrittweise die Ableitungen ∂yk<br />
verwendet werden, liefert der<br />
∂xi<br />
zweite Weg eine Methode, in der schrittweise Ableitungen ∂yn+t<br />
erscheinen. Diese<br />
∂yk<br />
zweite Methode nennen wir Rückwärts–Methode, aus Gründen, die noch ersichtlich<br />
werden. In diesem Abschnitt wollen wir den mathematischen Formalismus für die<br />
Rückwärts–Methode darlegen. Dabei werden – der Geschlossenheit zuliebe – einige<br />
Bezeichnungen aus Abschnitt 2 wiederholt.<br />
3.1 Allgemeines Schema<br />
Wir betrachten eine Funktion f : D ⊆ IR n → IR, die durch einen Algorithmus A gemäß<br />
Tabelle 7 definiert ist.<br />
(1) Für k = 1, 2, . . . , n<br />
yk = xk = k–te Komponente von x<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
yk = Φk(y1, y2, . . . , yk−1)<br />
(3) f(x) = yn+t<br />
Tabelle 7: Algorithmus A zur Berechnung von f(x)<br />
Wir nehmen an, daß für k = n + 1, n + 2, . . . , n + t die Funktion<br />
Φk : Dk−1 ⊆ IR k−1 → IR (1)<br />
und deren Ableitung Φ ′ k bekannt sind. Wir nehmen ferner an, daß die Funktionen<br />
Φk und Φ ′ k für gegebene Argumente ausgewertet werden können. Der Algorithmus<br />
A beschreibt, wie zu gegebenem x ∈ D der Funktionswert f(x) schrittweise über die<br />
Hilfsgrößen y1, y2, . . . , yn+t zu berechnen ist.<br />
Nun definieren wir für k = n + 1, n + 2, . . . , n + t<br />
Ek : Dk−1 ⊆ IR k−1 → IR k � �<br />
z<br />
mit Ek(z) := .<br />
Φk(z)<br />
(2)<br />
Jeder Funktion Φk ist also eine Funktion Ek zugeordnet. Ek kopiert das Argument z<br />
und fügt eine neue Komponente Φk(z) an. Ferner definieren wir die Funktion<br />
L : IR n+t → IR mit L(z) := letzte Komponente von z. (3)
3 RÜCKWÄRTS–METHODE 15<br />
Damit erhalten wir eine schöne Darstellung der Funktion f,<br />
f(x) = L(En+t(En+t−1( . . . En+2(En+1(x)) . . . ))), (4)<br />
oder noch kürzer<br />
f = L ◦ En+t ◦ En+t−1 ◦ . . . ◦ En+2 ◦ En+1, (5)<br />
wobei ◦ die Hintereinanderausführung von Funktionen bedeutet. Die Formel (4)<br />
beschreibt in kompakter Weise die Berechnung von f(x) gemäß Algorithmus A. Der<br />
Berechnung von yk in Algorithmus A entspricht die Auswertung der Funktion Ek in<br />
Formel (4).<br />
<strong>Differenzieren</strong> wir die Formel (4)! Zur Abkürzung setzen wir<br />
zn := x (6)<br />
und für k = n + 1, n + 2, . . . , n + t<br />
zk := Ek(Ek−1( . . . En+2(En+1(x)) . . . )). (7)<br />
Aus (4) ergibt sich mit der Ketten–Regel<br />
f ′ (x) = L ′ (zn+t) · E ′ n+t(zn+t−1) · . . . · E ′ n+2(zn+1) · E ′ n+1(zn). (8)<br />
Somit erhalten wir für f ′ (x) ein Produkt von Jacobi–Matrizen. Die Multiplikation von<br />
Matrizen ist assoziativ, also gibt es viele Möglichkeiten, das Produkt zu ermitteln.<br />
Bei genauerem Hinsehen kann man erkennen, daß die Multiplikation von rechts nach<br />
links der Vorwärts–Methode entspricht. Die Multiplikation von links nach rechts ergibt<br />
die Rückwärts–Methode. Diese soll jetzt näher beschrieben werden.<br />
Zunächst geben wir den Teil–Produkten Namen, wir definieren<br />
pn+t+1 := L ′ (zn+t), (9)<br />
und für k = n + t, n + t − 1, . . . , n + 1 in dieser Reihenfolge<br />
pk := pk+1 · E ′ k(zk−1). (10)<br />
Dann stellen wir fest, daß für k = n, n + 1, . . . , n + t gilt<br />
⎡ ⎤<br />
y1<br />
⎢ ⎥<br />
⎢<br />
⎢y2<br />
⎥<br />
zk = ⎢ ⎥<br />
⎢<br />
⎣ . ⎥<br />
⎦<br />
yk<br />
mit y1, y2, . . . , yk gemäß Algorithmus A. (11)<br />
Leider benötigen wir die Vektoren zn+t, zn+t−1, . . . , zn in dieser Reihenfolge. Wir<br />
müssen also die Werte y1, y2, . . . , yn+t mit Algorithmus A berechnen und können dann<br />
erst mit der Produktbildung beginnen. In Tabelle 8 ist unser Plan skizziert.
3 RÜCKWÄRTS–METHODE 16<br />
(1) Berechne y1, y2, . . . , yn+t = f(x) mit Algorithmus A. Mit (11)<br />
stehen somit die Vektoren zn+t, zn+t−1, . . . , zn zur Verfügung<br />
(2) Berechnung von f ′ (x):<br />
(2.1) pn+t+1 := L ′ (zn+t)<br />
(2.2) Für k = n + t, n + t − 1, . . . , n + 1 in dieser Reihenfolge<br />
pk := pk+1 · E ′ k(zk−1)<br />
(2.3) f ′ (x) = pn+1<br />
Tabelle 8: Plan für die Rückwärts–Methode<br />
Das folgende Schema soll unseren Plan verdeutlichen.<br />
f ′ (x) =L ′ (zn+t)·E ′ n+t(zn+t−1)·. . .·E ′ n+2(zn+1)·E ′ n+1(zn)<br />
pn+t+1<br />
Nun zu technischen Details! Es gilt<br />
pn+t<br />
pn+2<br />
pn+1<br />
pn+t+1 := L ′ (zn+t) = [0, . . . , 0, 1] = Zeile mit n + t Spalten. (12)<br />
pk+1 ist eine Zeile mit k Spalten. E ′ k(zk−1) ist eine Matrix mit k Zeilen und k − 1<br />
Spalten. Die oberen k − 1 Zeilen von E ′ k(zk−1) bilden eine Einheitsmatrix, und die<br />
letzte Zeile von E ′ k(zk−1) ist Φ ′ k(zk−1). Diese besonders einfache Gestalt der Matrix<br />
E ′ k(zk−1) bewirkt<br />
pk<br />
� �� �<br />
pk,1 . . . pk,k−1<br />
pk+1<br />
� �� �<br />
= pk+1,1 . . . pk+1,k−1 pk+1,k<br />
E<br />
� �� �<br />
′ k(zk−1)<br />
• 1<br />
· · · · · · · · · · · ·<br />
Φ ′ k(zk−1)<br />
[pk,1 . . . pk,k−1] = [pk+1,1 . . . pk+1,k−1] + pk+1,k · letzte Zeile von E ′ k(zk−1) (13)<br />
oder mit Φ ′ k(zk−1) ausgedrückt<br />
[pk,1 . . . pk,k−1] = [pk+1,1 . . . pk+1,k−1] + pk+1,k · Φ ′ k(zk−1). (14)<br />
1
3 RÜCKWÄRTS–METHODE 17<br />
In Block (2.2) Schritt k unseres Planes ist also zu einer Zeile ein Vielfaches der Zeile<br />
Φ ′ k(zk−1) zu addieren. Dies legt “ Überschreiben” nahe. Wir führen eine Arbeitszeile U<br />
der Länge n + t ein,<br />
U = U1 . . . Un Un+1 . . . . . . Un+t<br />
in der wir die aktuellen Werte von pk speichern. Aus (14) entsteht dann die update–<br />
Formel<br />
Uµ ←− Uµ + Uk · Φ ′ k(zk−1)µ für µ = 1, 2, . . . , k − 1, (15)<br />
wobei der Index µ die Spalte von U bzw. Φ ′ k(zk−1) kennzeichnet. Nach Beendigung<br />
von Block (2.2) unseres Planes enthält die Arbeitszeile U die Werte<br />
und es gilt<br />
U = pn+1,1 . . . pn+1,n pn+2,n+1 . . . . . . pn+t+1,n+t (16)<br />
f ′ (x) = pn+1 = [U1, U2, . . . , Un]. (17)<br />
Damit ergibt sich ein Algorithmus A ′ zur Berechnung von f(x) und f ′ (x) wie in Tabelle<br />
9 dargestellt.<br />
(1) Berechne y1, y2, . . . , yn+t = f(x) mit Algorithmus A.<br />
(2) Berechnung von f ′ (x):<br />
(2.1) U ← [0, . . . , 0, 1] mit Länge n + t<br />
(2.2) Für k = n + t, n + t − 1, . . . , n + 1 in dieser Reihenfolge<br />
für µ = 1, 2, . . . , k − 1<br />
Uµ ← Uµ + Uk · Φ ′ k(y1, y2, . . . , yk−1)µ<br />
(2.3) f ′ (x) ← [U1, U2, . . . , Un]<br />
Tabelle 9: Algorithmus A ′ zur Berechnung von f(x) und f ′ (x)<br />
3.2 Komplexität<br />
Über den Rechenaufwand des Algorithmus A ′ kann Näheres erst ausgesagt werden,<br />
wenn Einzelheiten über die Funktionen Φk und Φ ′ k für k = n + 1, n + 2, . . . , n + t<br />
vorliegen. Wir betrachten hier nur rationale Φk. Ferner nehmen wir an, daß die<br />
Vorschrift<br />
yk = Φk(y1, y2, . . . , yk−1) (18)<br />
nur eine rationale Operation darstellt. Die verschiedenen Möglichkeiten sind in Tabelle<br />
10 Spalte 2 angegeben.
3 RÜCKWÄRTS–METHODE 18<br />
Tk yk ¯yki ¯ykj Ski Skj #(Ski, Skj)<br />
A yi + yj mit i �= j 1 1 Uk Uk 0<br />
S yi − yj mit i �= j 1 −1 Uk Uk 0<br />
M yi · yj mit i �= j yj yi Uk · yj Uk · yi 2<br />
D yi/yj mit i �= j 1/yj −yk/yj Uk/yj Ski · yk 2<br />
AV yi + yi 2 Uk · 2 1<br />
SV yi − yi 0<br />
MV yi · yi 2 · yi Uk · 2 · yi 2<br />
DV yi/yi 0<br />
AVC yi + cj 1 Uk 0<br />
SVC yi − cj 1 Uk 0<br />
MVC yi · cj cj Uk · cj 1<br />
DVC yi/cj 1/cj Uk/cj 1<br />
ACV ci + yj 1 Uk 0<br />
SCV ci − yj −1 Uk 0<br />
MCV ci · yj ci Uk · ci 1<br />
DCV ci/yj −yk/yj Uk · yk/yj 2<br />
VW −yj −1 Uk 0<br />
Tabelle 10: Formeln für yk, ¯yki, ¯ykj, Ski, Skj in Abhängigkeit vom Typ Tk Die<br />
Berechnung des Funktionswertes f(x) erfolge mit dem Algorithmus FUN gemäß Tabelle<br />
11.<br />
(1) Für k = 1, 2, . . . , n<br />
yk = xk = k–te Komponente von x<br />
(2) Für k = n + 1, n + 2, . . . , n + t<br />
yk = eine der Formeln in Tabelle 10 Spalte 2<br />
(3) f(x) = yn+t<br />
Tabelle 11: Algorithmus FUN zur Berechnung von f(x)<br />
Dann sind die Funktionen Φk bekannt, und damit auch die Funktionen Φ ′ k. Es sei<br />
¯yk := Φ ′ k(y1, y2, . . . , yk−1). (19)<br />
Wegen der besonderen Gestalt von Φk enthält die Zeile ¯yk höchstens zwei von 0 verschiedene<br />
Einträge. Ist zum Beispiel<br />
yk = Φk(y1, y2, . . . , yk−1) = yi · yj
3 RÜCKWÄRTS–METHODE 19<br />
mit i �= j, so gilt<br />
¯yk = Φ ′ k(y1, y2, . . . , yk−1) = [0, . . . , 0, yj, 0, . . . , 0, yi, 0, . . . , 0]<br />
mit yj in Spalte i und yi in Spalte j. Die update–Vorschrift in Tabelle 9 Block (2.2)<br />
für µ = 1, 2, . . . , k − 1<br />
Uµ ← Uµ + Uk · Φ ′ k(y1, y2, . . . , yk−1)µ<br />
schmilzt daher zusammen auf höchstens zwei updates der Gestalt<br />
Ui ← Ui + Uk · ¯yki<br />
Uj ← Uj + Uk · ¯ykj<br />
In Tabelle 10 sind für alle auftretenden Fälle die ¯yki und/oder ¯ykj angeben.<br />
Zur Einsparung von Operationen setzen wir<br />
(20)<br />
(21)<br />
Ski := Uk · ¯yki für Tk ∈ {A,S,M,D,AV,MV,AVC,SVC,MVC,DVC} (22)<br />
Skj := Uk · ¯ykj für Tk ∈ {A,M,ACV,MCV} (23)<br />
Skj := −Uk · ¯ykj für Tk ∈ {S,D,SCV,DCV,VW} (24)<br />
Damit erhalten wir aus (20) und (21) die endgültigen update–Formeln<br />
Ui ← Ui + Ski für Tk ∈ {A,S,M,D,AV,MV,AVC,SVC,MVC,DVC} (25)<br />
Uj ← Uj + Skj für Tk ∈ {A,M,ACV,MCV} (26)<br />
Uj ← Uj − Skj für Tk ∈ {S,D,SCV,DCV,VW} (27)<br />
Den so präzisierten Algorithmus zur Berechnung von f(x) und f ′ (x) nennen wir jetzt<br />
RM (Rückwärts–Methode), siehe Tabelle 12.<br />
(1) Berechne y1, y2, . . . , yn+t = f(x) mit Algorithmus FUN.<br />
(2) Berechnung von f ′ (x):<br />
(2.1) U ← [0, . . . , 0, 1] mit Länge n + t<br />
(2.2) Für k = n + t, n + t − 1, . . . , n + 1 in dieser Reihenfolge<br />
für Tk ∈ {A,S,M,D,AV,MV,AVC,SVC,MVC,DVC}<br />
Ski ← gemäß Tabelle 10<br />
Ui ← Ui + Ski<br />
für Tk ∈ {A,M,ACV,MCV}<br />
Skj ← gemäß Tabelle 10<br />
Uj ← Uj + Skj<br />
für Tk ∈ {S,D,SCV,DCV,VW}<br />
Skj ← gemäß Tabelle 10<br />
Uj ← Uj − Skj<br />
(2.3) f ′ (x) ← [U1, U2, . . . , Un]<br />
Tabelle 12: Algorithmus RM
3 RÜCKWÄRTS–METHODE 20<br />
Wir definieren<br />
#(f, f ′ , RM) := Anzahl der rationalen Operationen zur Berechnung<br />
von f(x) und f ′ (x) mit RM.<br />
Proposition 2: Für die Berechnung von f(x) und f ′ (x) mit dem Algorithmus RM<br />
gilt<br />
#(f, f ′ , RM) ≤ 5 · #(f, FUN).<br />
Beweis: Block (1) kostet t Operationen. In Tabelle 10 ist unter #(Ski, Skj) angemerkt,<br />
wie teuer Ski und/oder Skj sind. Für k = n + t, n + t − 1, . . . , n + 1 bezeichne<br />
#(update,k) die Anzahl der in Block (2.2) Schritt k durchzuführenden update–<br />
Operationen. Offensichtlich ist #(update,k) höchstens 2. Somit ergibt sich<br />
#(f, f ′ , RM) = t +<br />
≤ t +<br />
n+t<br />
�<br />
k=n+1<br />
n+t<br />
�<br />
k=n+1<br />
(#(Ski, Skj) + #(update, k))<br />
(2 + 2) = 5t = 5 · #(f, FUN).<br />
Die Abschätzung in Proposition 2 ist scharf. Wenn im Algorithmus FUN nur Operationen<br />
vom Typ M oder D auftreten, dann wird obige Ungleichung zu einer Gleichung.<br />
Zur Durchführung des Algorithmus RM werden zwei Listen der Länge n+t benötigt,<br />
eine für die Werte y1, y2, . . . , yn+t, und eine für die Arbeitszeile U. Vergleicht man die<br />
Vorwärts–Methode mit Überschreiben und die Rückwärts–Methode, so zeigt sich, daß<br />
im allgemeinen der Bedarf an Speicherplätzen bei der Vorwärts–Methode sehr viel<br />
kleiner ist als der Bedarf an Speicherplätzen bei der Rückwärts–Methode.<br />
Man kann den Algorithmus RM noch verfeinern zu einem Algorithmus R<strong>M1</strong>. Dabei<br />
wird berücksichtigt, daß in Block (2.2) zu Beginn die Arbeitszeile U bis auf Un+t = 1<br />
nur “System–Nullen” enthält. Eine Addition zu einer System–Null kann bei geeigneter<br />
Buchführung vermieden werden, eine Subtraktion erfordert einen Vorzeichen–Wechsel.<br />
Dies liefert allerdings nur<br />
#(f, f ′ , R<strong>M1</strong>) < 5 · #(f, FUN).<br />
Eine weitere Verfeinerung vom R<strong>M1</strong> zu einem Algorithmus RM2 ist möglich, wenn<br />
man in Block (2.2) fällige Vorzeichen–Wechsel nicht sofort ausführt, sondern erst am<br />
Ende von Block (2.2). Einzelheiten sind in [57] ausführlich beschrieben. Ohne Beweis<br />
geben wir folgendes Ergebnis an.<br />
Proposition 3: Für die Berechnung von f(x) und f ′ (x) mit dem Algorithmus RM2<br />
gilt<br />
#(f, f ′ , RM2) ≤ 4 · #(f, FUN).<br />
Funktionswert f(x) und Ableitungswert f ′ (x) zusammen, berechnet mit RM2, kosten<br />
also höchstens 4–mal soviel wie der Funktionswert alleine.<br />
⊓⊔
3 RÜCKWÄRTS–METHODE 21<br />
Beispiel 3<br />
Aller Erfahrung nach haben Leser, denen Automatisches <strong>Differenzieren</strong> noch neu ist,<br />
Schwierigkeiten mit der Rückwärts–Methode. Wir wollen daher den Algorithmus RM<br />
an einem einfachen Beispiel vorführen. Mit folgendem Schema FUN<br />
y1 = x1<br />
y2 = x2<br />
y3 = y1 · y2<br />
y4 = y3 − 7<br />
y5 = y1 + y2<br />
y6 = y4/y5<br />
f(x) = y6<br />
wird eine Funktion f : D ⊆ IR 2 → IR definiert. Für x = (3, 8) sollen Funktionswert<br />
f(x) und Ableitungswert f ′ (x) berechnet werden.<br />
Gemäß RM Block (1) erzeugen wir<br />
y1 = x1 = 3<br />
y2 = x2 = 8<br />
y3 = y1 · y2 = 24<br />
y4 = y3 − 7 = 17<br />
y5 = y1 + y2 = 11<br />
y6 = y4/y5 = 17<br />
11<br />
Somit ist f(3, 8) = 17<br />
11 und die Werte y1, y2, . . . , y6 stehen zur Verfügung.<br />
Gemäß RM Block (2) setzen wir<br />
U ← [0, 0, 0, 0, 0, 1].<br />
Diese Arbeitszeile U wird nun schrittweise umgeformt. Wir geben alle dazu nötigen<br />
Einzelheiten an.<br />
k = 6 : T6 = D, i = 4, j = 5<br />
S64 ← U6/y5 = 1/11 = 1<br />
11 und U4 ← U4 + S64 = 0 + 1<br />
11<br />
S65 ← S64 · y6 = 1 17 · 11 11<br />
k = 5 : T5 = A, i = 1, j = 2<br />
= 1<br />
11<br />
= 17<br />
121 und U5 ← U5 − S65 = 0 − 17<br />
121<br />
S51 ← U5 = − 17<br />
121 und U1 ← U1 + S51 = 0 + (− 17 17 ) = − 121 121<br />
S52 ← U5 = − 17<br />
121 und U2 ← U2 + S52 = 0 + (− 17 17 ) = − 121 121<br />
k = 4 : T4 = SVC, i = 3<br />
S43 ← U4 = 1<br />
11 und U3 ← U3 + S43 = 0 + 1<br />
11<br />
k = 3 : T3 = M, i = 1, j = 2<br />
= 1<br />
11<br />
S31 ← U3 · y2 = 1 8 · 8 = 11 11 und U1 ← U1 + S31 = − 17 8 + 121 11<br />
S32 ← U3 · y1 = 1 3 · 3 = 11 11 und U2 ← U2 + S32 = − 17 3 + 121 11<br />
= − 17<br />
121<br />
= 71<br />
121<br />
= 16<br />
121
3 RÜCKWÄRTS–METHODE 22<br />
Schließlich erhalten wir f ′ (3, 8) = [U1, U2] =<br />
� �<br />
71 16<br />
, .<br />
121 121
REFERENCES 23<br />
References<br />
[1] Aberth, O.: Precise Numerical Analysis. William C.Brown Publishers, Dubuque,<br />
Iowa, USA, 1988.<br />
[2] Aida-Zade, K.R., Evtushenko, Yu.G.: Bystroe avtomaticheskoe differentsirovanie<br />
na EVM. Matematicheskoe Modelirovanie 1, 1989, 120-131.<br />
[3] Arbenz, P., Gander, W.: Solving nonlinear eigenvalue problems by algorithmic<br />
differentiation. Computing 36, 1986, 205-215.<br />
[4] Bartholomew-Biggs, M.C., Bartholomew-Biggs, L., Christianson, B.: Optimization<br />
and Automatic Differentiation in Ada: Some practical experience. Optimization<br />
Methods and Software 4, 1994, 47-73.<br />
[5] Barton, D.: On Taylor series and stiff equations. ACM Transactions on Mathematical<br />
Software 6, 1980, 280-294.<br />
[6] Barton, D., Willers, I.M., Zahar, R.V.M.: Taylor series methods for ordinary<br />
differential equations - an evaluation. In: Mathematical Software, ed. by J.Rice,<br />
Academic Press, New York, 1971, 369-390.<br />
[7] Baur, W., Strassen, V.: The complexity of partial derivatives. Theoretical Computer<br />
Science 22, 1983, 317-330.<br />
[8] Beck, T.: Automatisches <strong>Differenzieren</strong> von Algorithmen. Dissertation, Technische<br />
Universität München, 1991.<br />
[9] Beck, T.: Automatic differentiation of iterative processes. Journal of Computational<br />
and Applied Mathematics 50, 1994, 109-118.<br />
[10] Beck, T., Fischer, H.: The if-problem in automatic differentiation. Journal of<br />
Computational and Applied Mathematics 50, 1994, 119-131.<br />
[11] Beda, L.M., Korolev, L.N., Sukkikh, N.V., Frolova, T.S.: Programme zum Automatischen<br />
<strong>Differenzieren</strong> für die Maschine BESM, (in Russisch). Technischer<br />
Bericht, Akademie der Wissenschaften der UdSSR, Moskau, 1959.<br />
[12] Berz, M.: Differential algebra - A new tool. In: Proceedings of the 1989 IEEE Particle<br />
Accelerator Conference, March 20-23, 1989, ed. by F.Bennet and J.Kopta,<br />
IEEE, 1989.<br />
[13] Berz, M.: Forward algorithms for higher derivatives in many variables with applications<br />
to beam physics. In [70], 147-156.<br />
[14] Berz, M.: Automatic differentiation as nonarchimedean analysis. In: Computer<br />
Arithmetic and Enclosure Methods, ed. by L.Atanassova and J.Herzberger, Elsevier<br />
(North-Holland), Amsterdam, 1992, 439-450.<br />
[15] Bischof, Ch.H.: Issues in parallel automatic differentiation. In [70], 100-113.
REFERENCES 24<br />
[16] Bischof, Ch., Carle, A., Corliss, G.F., Griewank, A.: ADIFOR: Automatic differentiation<br />
in a source translator environment. Preprint MCS-P288-0192, Argonne<br />
National Laboratory, 1992.<br />
[17] Bischof, Ch., Griewank, A.: ADIFOR: A Fortran system for portable automatic<br />
differentiation. Preprint MCS-P317-0792, Argonne National Laboratory, 1992.<br />
[18] Bischof, Ch., Griewank, A., Juedes, D.: Exploiting parallelism in automatic<br />
differentiation. In: Proceedings of the 1991 International Conference on Supercomputing,<br />
ed. by E.Houstis and Y.Muraoka, ACM Press, 1991, 146-153.<br />
[19] Bohlender, G., Rall, L.B., Ullrich, Ch., Wolff von Gudenberg, J.: PASCAL-<br />
SC: Wirkungsvoll programmieren, kontrolliert rechnen. Bibliographisches Institut,<br />
Zürich, 1986.<br />
[20] Carlile, B.R.: Solution of nonlinear systems of equations on the FPS 64-bit family<br />
of scientific computers using automatic differentiation. In: Proceedings of the<br />
1986 Array Conference, Portland, Oregon, 1986, 142-169.<br />
[21] Christianson, B.: Automatic Hessians by reverse accumulation. IMA Journal of<br />
Numerical Analysis 12, 1992, 135-150.<br />
[22] Christianson, B.: Reverse accumulation and accurate rounding error estimates<br />
for Taylor series coefficients. Optimization Methods and Software 1, 1992, 81-94.<br />
[23] Christianson, B.: Reverse accumulation and attractive fixed points. Optimization<br />
Methods and Software 3, 1994, 311-326.<br />
[24] Corliss, G.F.: Computing narrow inclusions for definite integrals. In: Computerarithmetic,<br />
Scientific Computation and Programming Languages, ed. by<br />
E.Kaucher, U.Kulisch, Ch.Ullrich, Teubner-Verlag, Stuttgart, 1987, 150-169.<br />
[25] Corliss, G.F.: Applications of differentiation arithmetic. In: Reliability in Computing:<br />
The Role of Interval Methods in Scientific Computing, ed. by R.E.Moore,<br />
Academic Press, London, 1988, 127-148.<br />
[26] Corliss, G.F.: Overloading point and interval Taylor operators. In [70], 139-146.<br />
[27] Corliss, G.F., Chang, Y.F.: Solving ordinary differential equations using Taylor<br />
series. ACM Transactions on Mathematical Software 8, 1982, 114-144.<br />
[28] Corliss, G., Rall, L.B.: Automatic generation of Taylor series in PASCAL-SC:<br />
Basic operations and applications to ordinary differential equations. In: Transactions<br />
of the First Army Conference on Applied Mathematics and Computing,<br />
U.S. Army Research Office, Research Triangle Park, NC, 1984, 177-209.<br />
[29] Corliss, G., Rall, L.B.: Adaptive, self-validating numerical quadrature. SIAM<br />
Journal on Scientific and Statistical Computing 8, 1987, 831-847.
REFERENCES 25<br />
[30] Cuyt, A.A.M., Rall, L.B.: Computational implementation of the multivariate<br />
Halley method for solving nonlinear systems of equations. ACM Transactions on<br />
Mathematical Software 11, 1985, 20-36.<br />
[31] Davis, P.H., Pryce, J.D.: A New Implementation of Automatic Differentiation<br />
for Use with Numerical Software. Technical Report AM-87-11, School of Mathematics,<br />
University of Bristol, 1987.<br />
[32] Davis, P.H., Pryce, J.D., Stephens, B.: Recent developments in automatic differentiation.<br />
In: Scientific Software Systems, ed. by J.C.Mason and M.G.Cox,<br />
Chapman and Hall, London, 1990, 153-165.<br />
[33] Davis, P.H., Stephens, B., Corliss, G.F., Krenz, G.S.: Specification of a Preprocessor<br />
for Use with Differentiation Arithmetic. Technical Report AM-88-08,<br />
School of Mathematics, University of Bristol, 1988.<br />
[34] Dixon, L.C.W.: Automatic differentiation and parallel processing in optimisation.<br />
In: Optimization, Parallel Processing and Applications, ed. by<br />
A.Kurzhanski, K.Neumann, D.Pallaschke, (Lecture Notes in Economics and<br />
Mathematical Systems 304), Springer-Verlag, Berlin, 1988, 86-93.<br />
[35] Dixon, L.C.W.: On the impact of automatic differentiation on the relative performance<br />
of parallel truncated Newton and variable metric algorithms. SIAM<br />
Journal on Optimization 1, 1991, 475-486.<br />
[36] Dixon, L.C.W.: Use of automatic differentiation for calculating Hessians and<br />
Newton steps. In [70], 114-125.<br />
[37] Dixon, L.C.W., Maany, Z., Mohseninia, M.: Finite Element Optimisation in ADA<br />
using Automatic Differentiation. Technical Report 205, Numerical Optimisation<br />
Centre, Hatfield Polytechnic, 1988.<br />
[38] Dixon, L.C.W., Maany, Z., Mohseninia, M.: Automatic differentiation of large<br />
sparse systems. Journal of Economic Dynamics and Control 14, 1990, 299-311.<br />
[39] Dixon, L.C.W., Price, R.C.: Truncated Newton method for sparse unconstrained<br />
optimization using automatic differentiation. Journal of Optimization Theory and<br />
Applications 60, 1989, 261-275.<br />
[40] Evtushenko, Yu.G.: Automatic differentiation viewed from optimal control theory.<br />
In [70], 25-30.<br />
[41] Fischer, H.: Some aspects of automatic differentiation. In: Numerical Methods<br />
and Approximation Theory III, ed. by G.V. Milovanović, University of Niˇs, Yugoslavia,<br />
1988, 199-208.<br />
[42] Fischer, H.: Automatic differentiation: Fast method to compute the quadratic<br />
form of Hessian matrix and given vector. Facta Universitatis (Niˇs),<br />
Ser.Math.Inform.3, 1988, 51-59.
REFERENCES 26<br />
[43] Fischer, H.: Automatic differentiation of characterizing sequences. Journal of<br />
Computational and Applied Mathematics 28, 1989, 181-185.<br />
[44] Fischer, H.: Fast method to compute the scalar product of gradient and given<br />
vector. Computing 41, 1989, 261-265.<br />
[45] Fischer, H.: Automatic differentiation: Parallel computation of function, gradient,<br />
and Hessian matrix. Parallel Computing 13, 1990, 101-110.<br />
[46] Fischer, H.: Automatic and parallel generation of gradient and Hessian matrix.<br />
In: System Modelling and Optimization, ed. by H.J.Sebastian and K.Tammer,<br />
(Lecture Notes in Control and Information Sciences 143), Springer-Verlag, Berlin,<br />
1990, 104-114.<br />
[47] Fischer, H.: Automatic differentiation of the vector that solves a parametric linear<br />
system. Journal of Computational and Applied Mathematics 35, 1991, 169-184.<br />
[48] Fischer, H.: Special problems in automatic differentiation. In [70], 43-50.<br />
[49] Fischer, H.: Automatic differentiation: Reduced gradient and reduced Hessian<br />
matrix. Computational Optimization and Applications 1, 1992, 327-344.<br />
[50] Fischer, H.: Automatisches <strong>Differenzieren</strong>. In: Wissenschaftliches Rechnen -<br />
Eine Einführung in das Scientific Computing. edited by J.Herzberger, Akademie-<br />
Verlag, Berlin, 1995, 53-104.<br />
[51] Fischer, H.: Automatic differentiation: The key idea and an illustrative example.<br />
In: Applied Mathematics and Parallel Computing, edited by H.Fischer,<br />
B.Riedmüller, S.Schäffler, Physica-Verlag, Heidelberg, 1996, 121–139.<br />
[52] Automatic Differentiation: Root Problem and Branch Problem. In: Encyclopedia<br />
of Optimization, Kluwer Academic Publishers, 2001, edited by C.A.Floudas,<br />
P.M.Pardalos.<br />
[53] Algorithmic Differentiation with Intervals. In: Inclusion Methods for Nonlinear<br />
Problems, with Applications in Engineering, Economics and Physics, edited by<br />
J.Herzberger, Springer-Verlag, Computing Supplementum 16, 2002, 45–65.<br />
[54] Fischer, H., Flanders, H.: A minimal code list. Theoretical Computer Science<br />
215, 1999, 345–348.<br />
[55] Fischer, H., Hertneck, Ch.: Gradient and Hessian matrix forward with functions<br />
version A in ANSI-C. Technical Report IAMS1995.8TUM, Institut für Angewandte<br />
Mathematik und Statistik, Technische Universität München, 1995.<br />
[56] Fischer, H., Schäffler, S., Warsitz, H.: Parameter estimation in linear regression<br />
models with stationary ARMA(p,q)-errors using automatic differentiation.<br />
Yugoslav Journal of Operations Research 2, 1992, 55-68.<br />
[57] Fischer, H., Warsitz, H.: Complexity of derivatives generated by symbolic differentiation.<br />
In: Computer Algebra in Scientific Computing, Proceedings of the<br />
Third Workshop on Computer Algebra in Scientific Computing, CASC-2000,<br />
Samarkand, October 5–9, 2000, ed. by V.G.Ganzha, E.W.Mayr, E.V.Vorozhtsov,<br />
Springer-Verlag, 2000, 129–144.
REFERENCES 27<br />
[58] Fischer, H.C.: Schnelle automatische Differentiation, Einschlie”sungsmethoden<br />
und Anwendungen. Dissertation, Universität Karlsruhe, 1990.<br />
[59] Fischer, H.C.: Effiziente Berechnung von Ableitungswerten, Gradienten und Taylorkoeffizienten.<br />
In: Jahrbuch Überblicke Mathematik 1992, ed. by S.D. Chatterji,<br />
B. Fuchssteiner, U. Kulisch, R. Liedl, W. Purkert, Vieweg-Verlag, Braunschweig,<br />
1992, 59-73.<br />
[60] Gander, W.: Computermathematik. Birkhäuser Verlag, Basel, 1985.<br />
[61] Garcia, O.: A system for the differentiation of Fortran code and an application<br />
to parameter estimation in forest growth models. In [70], 273-285.<br />
[62] Gay, D.: Automatic differentiation of nonlinear AMPL models. In [70], 61-73.<br />
[63] Gilbert, J.C.: Automatic differentiation and iterative processes. Optimization<br />
Methods and Software 1, 1992, 13-21.<br />
[64] Gilbert, J.C., Le Vey, G., Masse, J.: La différentiation automatique de fonctions<br />
représentées par de programmes et son application à l’analyse d’erreurs. Compte<br />
rendu de la journee différentiation automatique, 11 Octobre 1991, Centre National<br />
d’Etudes Spatiales, Toulouse, France.<br />
[65] Grandinetti, L., Conforti, D.: Numerical comparisons of nonlinear programming<br />
algorithms on serial and vector processors using automatic differentiation. Mathematical<br />
Programming 42, 1988, 375-389.<br />
[66] Greiner, M., Kredler, Ch.: PADMOS und PADFIT - Automatisches <strong>Differenzieren</strong><br />
und nichtlineare Optimierung in MS-DOS. In: Multimedia, Vernetzung<br />
und Software für die Lehre, ed. by K.Dette and P.J.Pahl, Springer-Verlag, Berlin,<br />
1992, 255-264.<br />
[67] Griewank, A.: On Automatic Differentiation. In: Mathematical Programming<br />
- Recent Developments and Applications, ed. by M.Iri and K.Tanabe, Kluwer<br />
Academic Publishers, Dordrecht, Holland, 1989, 83-107.<br />
[68] Griewank, A.: Automatic evaluation of first and higher-derivative vectors. In:<br />
Bifurcation and Chaos: Analysis, Algorithms, Applications, ed. by R.Seydel,<br />
F.W.Schneider, T.Küpper, H.Troger, (International Series of Numerical Mathematics<br />
97), Birkhäuser Verlag, Basel, 1991, 135-148.<br />
[69] Griewank, A.: Achieving logarithmic growth of temporal and spatial complexity<br />
in reverse automatic differentiation. Optimization Methods and Software 1, 1992,<br />
35-54.<br />
[70] Griewank, A., Corliss, G.F. (editors): Automatic Differentiation of Algorithms:<br />
Theory, Implementation, and Application. SIAM, Philadelphia, 1991.<br />
[71] Griewank, A., Juedes, D., Srinivasan, J.: ADOL-C, A Package for the Automatic<br />
Differentiation of Algorithms Written in C/C++. Preprint MCS-P180-1190, Argonne<br />
National Laboratory, 1991.<br />
[72] Hammer, R., Hocks, M., Kulisch, U., Ratz, D.: Numerical Toolbox for Verified<br />
Computing I. Springer-Verlag, Berlin, 1993.
REFERENCES 28<br />
[73] Hillstrom, K.E.: JAKEF - A portable symbolic differentiator of functions given<br />
by algorithms. Technical Report ANL-82-48, Argonne National Laboratory, 1982.<br />
[74] Horwedel, J.E.: GRESS, a preprocessor for sensitivity studies of Fortran programs.<br />
In [70], 243-250.<br />
[75] Horwedel, J.E.: Reverse automatic differentiation of modular FORTRAN programs.<br />
Technical Memorandum ORNL/TM 12050, Computing and Telecommunications<br />
Division, Oak Ridge National Laboratory, 1992.<br />
[76] Huss, R.: An Ada library for automatic evaluation of derivatives. Applied Mathematics<br />
and Computation 35, 1990, 103-123.<br />
[77] Iri, M.: Simultaneous computation of functions, partial derivatives and estimates<br />
of rounding errors, complexity and practicality. Japan Journal of Applied Mathematics<br />
1, 1984, 223-252.<br />
[78] Iri, M.: History of automatic differentiation and rounding error estimation. In<br />
[70], 3-16.<br />
[79] Iri, M., Kubota, K.: Methods of fast automatic differentiation and applications.<br />
Research Memorandum RMI 87-02, Department of Mathematical Engineering<br />
and Instrumentation Physics, Faculty of Engineering, University of Tokyo, 1987.<br />
[80] Iri, M., Kubota, K., Murota, K.: Geometrical/geographical optimization and<br />
fast automatic differentiation. Yugoslav Journal of Operations Research 1, 1991,<br />
121-134.<br />
[81] Iri, M., Tsuchiya, T., Hoshi, M.: Automatic computation of partial derivatives<br />
and rounding error estimates with applications to large-scale systems of nonlinear<br />
equations. Journal of Computational and Applied Mathematics 24, 1988, 365-392.<br />
[82] Jackson, R.H.F., McCormick, G.P.: The polyadic structure of factorable function<br />
tensors with applications to high-order minimization techniques. Journal of<br />
Optimization Theory and Applications 51, 1986, 63-94.<br />
[83] Jackson, R.H.F., McCormick, G.P.: Second-order sensitivity analysis in factorable<br />
programming: theory and applications. Mathematical Programming 41,<br />
1988, 1-27.<br />
[84] Jerrell, M.E.: Function minimization and automatic differentiation using C++.<br />
In: Object-Oriented Programming: Systems, Languages and Applications, ed.<br />
by N.Meyrowitz, special issue of ACM SIGPLAN Notices, Vol.24, No.10, 1989,<br />
169-173.<br />
[85] Jerrell, M.E.: Automatic differentiation using almost any language. ACM<br />
SIGNUM Newsletter, Vol.24, No.1, 1989, 2-9.<br />
[86] Jerrell, M.E.: Automatic differentiation in C++. Journal of Object Oriented<br />
Programming 3, 1990, 17-24.<br />
[87] Juedes, D.W.: A taxonomy of automatic differentiation tools. In [70], 315-329.
REFERENCES 29<br />
[88] Kagiwada, H., Kalaba, R., Rasakhoo, N., Spingarn, K.: Numerical Derivatives<br />
and Nonlinear Analysis. Plenum Press, New York, 1986.<br />
[89] Kalaba, R., Plum, T., Tesfatsion, L.: Automation of nested matrix and derivative<br />
operations. Applied Mathematics and Computation 23, 1987, 243-268.<br />
[90] Kalaba, R., Tesfatsion, L.: Automatic differentiation of functions of derivatives.<br />
Computers and Mathematics with Applications 12A, 1986, 1091-1103.<br />
[91] Kalaba, R., Tesfatsion, L., Wang, J.: A finite algorithm for the exact evaluation<br />
of higher order partial derivatives of functions of many variables. Journal of<br />
Mathematical Analysis and Applications 92, 1983, 552-563.<br />
[92] Kalaba, R., Tishler, A.: A computer program to minimize a function with many<br />
variables using computer evaluated exact high-order derivatives. Applied Mathematics<br />
and Computation 13, 1983, 143-172.<br />
[93] Kalaba, R., Tishler, A.: Generalized Newton algorithm to minimize a function<br />
with many variables using computer-evaluated exact higher-order derivatives.<br />
Journal of Optimzation Theory and Applications 42, 1984, 383-395.<br />
[94] Kalman, D., Lindell, R.: Automatic differentiation in astrodynamical modeling.<br />
In [70], 228-239.<br />
[95] Kedem, G.: Automatic differentiation of computer programs. ACM Transactions<br />
on Mathematical Software 6, 1980, 150-165.<br />
[96] Kelch, R.: Self-validating numerical quadrature. In: Accurate Numerical Algorithms<br />
- A Collection of Research Papers, ed. by Ch.Ullrich and J. Wolff von Gudenberg,<br />
(Research Report ESPRIT, Project 1072, DIAMOND, Vol.1), Springer-<br />
Verlag, Berlin, 1989, 162-202.<br />
[97] Kelevedzhiev, E., Yantcheva, T.: Application of automatic differentiation to the<br />
Hessian matrix evaluation. In: Proceedings of Twenty First Spring Conference<br />
of the Union of Bulgarian Mathematicians, Sofia, April 3-6, 1992, 86-91.<br />
[98] Kim, K.V., Nesterov, Yu.E., Cherkasskiĭ, B.V.: An estimate of the effort in<br />
computing the gradient. Soviet Mathematics Doklady, Vol.29, 1984, 384-387.<br />
[99] Kredler, Ch.: Anwendungen des automatischen <strong>Differenzieren</strong>s in der Strukturoptimierung.<br />
ZAMM 69, 1989, T91-T93.<br />
[100] Kredler, Ch.: Robust sequential active set programming: Theory and implementation<br />
details. Report 227, DFG-Schwerpunkt: Anwendungsbezogene Optimierung<br />
und Steuerung, Technische Universität München, 1990.<br />
[101] Kubota, K., Iri, M.: Estimates of rounding errors with fast automatic differentiation<br />
and interval analysis. Journal of Information Processing 14, 1991, 508-515.<br />
[102] Lawson, C.L.: Automatic differentiation of inverse functions. In [70], 87-94.<br />
[103] Layne, J.D.: Applying automatic differentiation and self-validation numerical<br />
methods in satellite simulations. In [70], 211-217.
REFERENCES 30<br />
[104] Liepelt, M., Schittkowski, K.: PCOMP: A FORTRAN Code for Automatic Differentiation.<br />
Report 254, DFG-Schwerpunkt: Anwendungsbezogene Optimierung<br />
und Steuerung, Universität Bayreuth, 1990.<br />
[105] Lohner, R.: Einschlie”sung der Lösung gewöhnlicher Anfangs- und Randwertaufgaben<br />
und Anwendungen. Dissertation, Universität Karlsruhe, 1988.<br />
[106] Lohner, R.: Verified Computing and Programs in PASCAL-XSC. Habilitationsschrift,<br />
Universität Karlsruhe, 1994.<br />
[107] Maany, Z.: Ada automatic differentiation packages. Technical Report 209, Numerical<br />
Optimisation Centre, Hatfield Polytechnic, 1989.<br />
[108] Matijasevich, Yu.V.: A posteriori interval analysis. In: EUROCAL’85, ed. by Bob<br />
F.Caviness, (Lecture Notes in Computer Science 204), Springer–Verlag, Berlin,<br />
1985, 328-334.<br />
[109] Mazourik, V.: Integration of automatic differentiation into application programs<br />
for PC’s. In [70], 286-293.<br />
[110] McCormick, G.P.: Nonlinear Programming. Wiley, New York, 1983.<br />
[111] Mehlhorn, R., Sachs, G.: A new tool for efficient optimization by automatic<br />
differentiation and program transparency. Optimization Methods and Software<br />
4, 1994, 225-242.<br />
[112] Michelotti, L.: MXYZPTLK: A C++ hacker’s implementation of automatic differentiation.<br />
In [70], 218-227.<br />
[113] Miller, W., Wrathall, C.: Software for Roundoff Analysis of Matrix Algorithms.<br />
Academic Press, New York, 1980.<br />
[114] Moore, R.E.: Methods and Applications of Interval Analysis. SIAM Studies in<br />
Applied Mathematics, Philadelphia, 1979.<br />
[115] Musaev, E.A.: Narrowing of intervals by partial derivatives. Interval Computations<br />
1, 1991, 86-91.<br />
[116] Neidinger, R.D.: An efficient method for the numerical evaluation of partial<br />
derivatives of arbitrary order. ACM Transactions on Mathematical Software 18,<br />
1992, 159-173.<br />
[117] Neumaier, A.: Interval Methods for Systems of Equations. Cambridge University<br />
Press, Cambridge 1990.<br />
[118] Ostrowski, G.M., Wolin, Yu.M., Borisow, W.W.: Über die Berechnung von<br />
Ableitungen. Wissenschaftliche Zeitschrift Technische Hochschule für Chemie,<br />
Leuna-Merseburg, Vol.13, 1971, 382-384.<br />
[119] Pfeiffer, F.W.: Automatic Differentiation in PROSE. ACM SIGNUM Newsletter,<br />
Vol.22, No.1, January 1987, 2-8.
REFERENCES 31<br />
[120] Rall, L.B.: Applications of software for automatic differentiation in numerical<br />
computation. In: Fundamentals of Numerical Computation, ed. by G.Alefeld<br />
and R.D.Grigorieff, (Computing Supplementum 2), Springer-Verlag, Wien, 1980,<br />
141-156.<br />
[121] Rall, L.B.: Automatic Differentiation: Techniques and Applications. (Lecture<br />
Notes in Computer Science 120), Springer-Verlag, Berlin, 1981.<br />
[122] Rall, L.B.: Differentiation and generation of Taylor-coefficients in PASCAL-<br />
SC. In: A New Approach to Scientific Computation, ed. by U.Kulisch and<br />
W.L.Miranker, Academic Press, New York, 1983, 291-309.<br />
[123] Rall, L.B.: Differentiation in PASCAL-SC: type GRADIENT. ACM Transactions<br />
on Mathematical Software 10, 1984, 161-184.<br />
[124] Rall, L.B.: Global optimization using automatic differentiation and interval iteration.<br />
Technical Summary Report 2832, Mathematics Research Center, University<br />
of Wisconsin, Madison, 1985.<br />
[125] Rall, L.B.: Improved interval bounds for ranges of functions. In: Interval Mathematics<br />
1985, ed. by K.Nickel, (Lecture Notes in Computer Science 212), Springer-<br />
Verlag, Berlin, 1986, 143-155.<br />
[126] Rall, L.B.: Optimal implementation of differentiation arithmetic. In: Computerarithmetic,<br />
Scientific Computation and Programming Languages, ed. by<br />
E.Kaucher, U.Kulisch, Ch.Ullrich, Teubner-Verlag, Stuttgart, 1987, 287-295.<br />
[127] Rall, L.B.: Differentiation arithmetics. In: Computer Arithmetic and Self-<br />
Validating Numerical Methods, ed. by Ch.Ullrich, (Notes and Reports in Mathematics<br />
in Science and Engineering, Vol.7), Academic Press, New York, 1990,<br />
73-90.<br />
[128] Rall, L.B.: Point and interval differentiation arithmetics. In [70], 17-24.<br />
[129] Rich, L.C., Hill, D.R.: Automatic differentiation in MATLAB. Applied Numerical<br />
Mathematics 9, 1992, 33-43.<br />
[130] Rosemblun, M.: Automatic Differentiation: Overview and Application to Systems<br />
of Parametrized Nonlinear Equations. Technical Report CRPC-TR92262,<br />
Center for Research on Parallel Computation, Rice University, 1992.<br />
[131] Saarinen, S., Bramley, R.B., Cybenko, G.: Neural networks, backpropagation,<br />
and automatic differentiation. In [70], 31-42.<br />
[132] Sawyer, J.W.: First partial differentiation by computer with an application to<br />
categorial data analysis. The American Statistician 38, 1984, 300-308.<br />
[133] Shiriaev, D.: Reduction of spatial complexity in reverse automatic differentiation<br />
by means of inverted code. In: Computer Arithmetic and Enclosure Methods, ed.<br />
by L.Atanassova and J.Herzberger, Elsevier (North-Holland), Amsterdam, 1992,<br />
475-484.
REFERENCES 32<br />
[134] Shiriaev, D.: Fast Automatic Differentiation for Vector Processors and Reduction<br />
of the Spatial Complexity in a Source Translation Environment. Dissertation,<br />
Universität Karlsruhe, 1993.<br />
[135] Soulié, E.J.: User’s experience with FORTRAN compilers in least squares problems.<br />
In [70], 297-306.<br />
[136] Speelpenning, B.: Compiling fast partial derivatives of functions given by algorithms.<br />
Ph.D.Thesis, Department of Computer Science, University of Illinois,<br />
Urbana-Champaign, 1980.<br />
[137] Stephens, B.R., Pryce, J.D.: DAPRE, A Differentiation Arithmetic System for<br />
FORTRAN. Technical Report ACM-91-3, Royal Military College of Science,<br />
Shrivenham, UK, 1991.<br />
[138] Tesfatsion, L.: Automatic evaluation of higher-order partial derivatives for nonlocal<br />
sensitivity analysis. In [70], 157-165.<br />
[139] Thacker, W.C.: Automatic differentiation from an oceanographer’s perspective.<br />
In [70], 191-201.<br />
[140] van den Heuvel, P., van Hulzen, J.A., Goldmann, V.V.: Automatic generation<br />
of FORTRAN-coded Jacobians and Hessians. In: Proceedings of EUROCAL 87,<br />
ed. by J.Davenport, (Lecture Notes in Computer Science 378), Springer-Verlag,<br />
Berlin, 1987, 120-131.<br />
[141] Van Iwaarden, R.: Automatic differentiation applied to unconstrained nonlinear<br />
optimization with result verification. Interval Computations, No.3, 1993, 41-60.<br />
[142] Volin, Yu.M., Ostrovskii, G.M.: Automatic computation of derivatives with the<br />
use of the multilevel differentiation technique - 1. Algorithmic basis. Computers<br />
and Mathematics with Applications 11, 1985, 1099-1114.<br />
[143] Warner, D.D.: A partial derivative generator. Computing Science Technical Report<br />
No.28, Bell Telephone Laboratories, Murray Hill, N.J., 1975.<br />
[144] Wexler, A.: Automatic evaluation of derivatives. Applied Mathematics and Computation<br />
24, 1987, 19-46.<br />
[145] Wexler, A.: An algorithm for exact evaluation of multivariate functions and their<br />
derivatives to any order. Computational Statistics and Data Analysis 6, 1988, 1-6.<br />
file vorlesung123.tex