1 Intervallarithmetik auf Sun Rechnern Bruno Lang Lehrstuhl für Hochleistungsrechnen RWTH Aachen [email protected] 12. März 2002 2 Übersicht • Wozu Intervall-Arithmetik ? • Intervallarithmetik • Intervallunterstützung im Sun f95 Compiler • Fortgeschrittene Intervallalgorithmen 3 Wozu Intervallarithmetik ? Beispiel 1: Berechnung von f (x, y) = 9x4 − y 4 + 2y 2 für x = 40545 und y = 70226. Stimmt das in double precision berechnete Ergebnis fˆ = 1160.0 ? 3 Wozu Intervallarithmetik ? Beispiel 1: Berechnung von f (x, y) = 9x4 − y 4 + 2y 2 für x = 40545 und y = 70226. Stimmt das in double precision berechnete Ergebnis fˆ = 1160.0 ? Nein: f = 1. 4 Anfangswertproblem Beispiel 2: Verfolge die Lösung des Anfangswertproblems 0 2 u (t) = (u(t)) + 1 =: f (t, u(t)) u(0) = 0 bis t = 2. (∗) 5 Anfangswertproblem (2) Eulersches Polygonzugverfahren: Wähle Schrittweite h > 0 und Zeitpunkte ti = i · h, i ≥ 0 ⇒ t0 = 0 und u0 := u(t0) sind bekannt, und f (t0, u0) = u20 +1 ist die Steigung der Lösung an der Stelle t0 5 Anfangswertproblem (2) Eulersches Polygonzugverfahren: Wähle Schrittweite h > 0 und Zeitpunkte ti = i · h, i ≥ 0 ⇒ t0 = 0 und u0 := u(t0) sind bekannt, und f (t0, u0) = u20 +1 ist die Steigung der Lösung an der Stelle t0 ⇒ u1 := u0 + h · f (t0, u0) ist Näherung für u(t1), und f (t1, u1) = u11 + 1 ist dortige Steigung 5 Anfangswertproblem (2) Eulersches Polygonzugverfahren: Wähle Schrittweite h > 0 und Zeitpunkte ti = i · h, i ≥ 0 ⇒ t0 = 0 und u0 := u(t0) sind bekannt, und f (t0, u0) = u20 +1 ist die Steigung der Lösung an der Stelle t0 ⇒ u1 := u0 + h · f (t0, u0) ist Näherung für u(t1), und f (t1, u1) = u11 + 1 ist dortige Steigung ⇒ u2 := u1 + h · f (t1, u1) ist Näherung für u(t2), usw. 6 Anfangswertproblem (3) Mit h = 0.1 erhält man u(2) ≈ u20 ≈ 925.95 . 6 Anfangswertproblem (3) Mit h = 0.1 erhält man u(2) ≈ u20 ≈ 925.95 . Falsch, denn exakte Lösung u(t) = tan t ist gar nicht bis t = 2 definiert ! 7 Globale Optimierung Beispiel 3: Bestimme das Minimum der Funktion (≡ Kosten) f (x) = 1 + x · sin(e5x) auf [0, 0.5] (≡ Steuerparameter eines Prozesses). Mögliche Antwort eines Standard“” Optimierungsverfahrens: f ∗ ≈ 0.68 für x∗ ≈ 0.31 . 7 Globale Optimierung Beispiel 3: Bestimme das Minimum der Funktion (≡ Kosten) f (x) = 1 + x · sin(e5x) auf [0, 0.5] (≡ Steuerparameter eines Prozesses). Mögliche Antwort eines Standard“” Optimierungsverfahrens: f ∗ ≈ 0.68 für x∗ ≈ 0.31 . Korrekte Antwort: f ∗ ≈ 0.52 für x∗ ≈ 0.48 . lokales Minimum 8 Toleranzen in den Daten Bei einem sphärischen Hohlspiegel werden folgende Dimensionen gemessen: r = 30 ± 0.01mm d1 = 5 ± 0.01mm d2 = 2.74 ± 0.01mm Welche Schranken können für den Kugelradius d1 − d2 r2 R= + 2(d1 − d2) 2 garantiert werden ? 9 Zusammenfassung Probleme: • Diskretisierung des Kontinuums auf endlich viele Werte reelle Zahlen −→ Maschinenzahlen in Bsp. 1 Zeitintervall −→ Zeitgitter in Bsp. 2 • Arbeiten mit lokaler Information in Bsp. 3 • Wie wirken sich Toleranzen in den Eingabedaten auf das Ergebnis aus ? (Bsp. 4) 10 Übersicht • Wozu Intervall-Arithmetik ? • Intervallarithmetik • Intervallunterstützung im Sun f95 Compiler • Fortgeschrittene Intervallalgorithmen 11 Intervallarithmetik Ziel: Bringe das Kontinuum auf den Rechner“ ” ⇒ Kontinuum mit endlich vielen (Maschinen-)Zahlen darstellen. 11 Intervallarithmetik Ziel: Bringe das Kontinuum auf den Rechner“ ” ⇒ Kontinuum mit endlich vielen (Maschinen-)Zahlen darstellen. Bezeichnungen: [a] = [a, a] = {e a∈R : a≤e a ≤ a} bezeichnet im Folgenden ein (nichtleeres, kompaktes, reelles) Intervall (d.h. a, a ∈ R, a ≤ a). IR ist die Menge aller solchen Intervalle. 12 Intervalloperationen Definition: Für [a], [b] ∈ IR und ◦ ∈ {+, −, ∗, /} ist a ∈ [a], eb ∈ [b]} [a] ◦ [b] := {e a ◦ eb : e ( ∈ IR) die Menge aller möglichen Ergebnisse, wenn die Argumente in [a] bzw. [b] variieren. 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] = [a + b, a + b] 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] = [a + b, a + b] [a] − [b] = [−3, 2] = [a − b, a − b] 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] = [a + b, a + b] [a] − [b] = [−3, 2] = [a − b, a − b] [a] ∗ [b] = [−2, 6] = [min S, max S] mit S = {ab, ab, ab, ab} 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] = [a + b, a + b] [a] − [b] = [−3, 2] = [a − b, a − b] [a] ∗ [b] = [−2, 6] = [min S, max S] mit S = {ab, ab, ab, ab} [a]/[b] = [−1, 3] = [min S, max S] mit S = {a/b, a/b, a/b, a/b} 13 Intervalloperationen (2) Beispiel: [a] = [−1, 3], [b] = [1, 2] [a] + [b] = [0, 5] = [a + b, a + b] [a] − [b] = [−3, 2] = [a − b, a − b] [a] ∗ [b] = [−2, 6] = [min S, max S] mit S = {ab, ab, ab, ab} [a]/[b] = [−1, 3] = [min S, max S] mit S = {a/b, a/b, a/b, a/b} Beobachtung: Endlich viele Operationen (mit den Intervallgrenzen) ermöglichen Aussagen über unendlich viele Zahlen. 14 Standardfunktionen √ Analog: Für [a] ∈ IR und ϕ ∈ {exp, ln, , sin, cos, . . .} ist ϕ([a]) := {ϕ(e a) : e a ∈ [a]} ( ∈ IR) . 14 Standardfunktionen √ Analog: Für [a] ∈ IR und ϕ ∈ {exp, ln, , sin, cos, . . .} ist ϕ([a]) := {ϕ(e a) : e a ∈ [a]} Beispiel: [a] = [−1, 2] ( ∈ IR) . 14 Standardfunktionen √ Analog: Für [a] ∈ IR und ϕ ∈ {exp, ln, , sin, cos, . . .} ist ϕ([a]) := {ϕ(e a) : e a ∈ [a]} ( ∈ IR) . Beispiel: [a] = [−1, 2] exp([a]) = [exp(−1), exp(2)] , da exp % 14 Standardfunktionen √ Analog: Für [a] ∈ IR und ϕ ∈ {exp, ln, , sin, cos, . . .} ist ϕ([a]) := {ϕ(e a) : e a ∈ [a]} ( ∈ IR) . Beispiel: [a] = [−1, 2] exp([a]) = [exp(−1), exp(2)] , da exp % sin([a]) = [sin(−1), 1] (erfordert Fallunterscheidungen, welche Vielfachen von π/2 in [a] enthalten sind) 15 Einschließung des Wertebereichs Wichtige Konsequenz: • Ist f = f (x1, . . . , xn) aus +, −, ∗, /, exp, ln, . . . aufgebaut, und • setzt man für jede Variable xi ein Intervall [ai] ein, • so erhält man ein Intervall f ([a1], . . . , [an]), welches den Wertebereich von f auf [a1] × · · · × [an] =: [a] enthält, also eine Einschließung des Wertebereichs von f auf [a]. 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), f ([1, 2] × [−1, 1]) = [1, 2] · [−1, 1] − [1, 2] 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), f ([1, 2] × [−1, 1]) = [1, 2] · [−1, 1] − [1, 2] = [−2, 2] − [1, 2] 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), f ([1, 2] × [−1, 1]) = [1, 2] · [−1, 1] − [1, 2] = [−2, 2] − [1, 2] = [−4, 1] 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), f ([1, 2] × [−1, 1]) = [1, 2] · [−1, 1] − [1, 2] = [−2, 2] − [1, 2] = [−4, 1] g([1, 2] × [−1, 1]) = [1, 2] · ([−1, 1] − 1) = [1, 2] · [−2, 0] = [−4, 0] 16 Einschließung des Wertebereichs (2) Beispiel: f (x1, x2) = x1x2 − x1 [a] = [1, 2] × [−1, 1]. ≡ x1(x2 − 1) = g(x1, x2), f ([1, 2] × [−1, 1]) = [1, 2] · [−1, 1] − [1, 2] = [−2, 2] − [1, 2] = [−4, 1] g([1, 2] × [−1, 1]) = [1, 2] · ([−1, 1] − 1) = [1, 2] · [−2, 0] = [−4, 0] ⇒ verschiedene Darstellungen der Funktion liefern i.a. verschiedene Einschließungen; im obigen Fall liefert g den exakten Wertebereich, i.a. wird dieser jedoch überschätzt 17 Intervallarithmetik auf dem Rechner Problem: Ergebnisse nahezu aller arithm. Operationen sind nicht exakt auf dem Rechner darstellbar ⇒ Rundung auf nahegelegene“ Maschinenzahl notwendig. ” Gesicherte Aussagen trotz Rundung ? Bemerkung: Auf den meisten (IEEE-konformen) Prozessoren kann festgelegt werden, ob das Ergebnis einer Operation zur nächstgelegenen (nearest = Standardmodus), zur nächstkleineren (downward) oder zur nächstgrößeren (upward) Maschinenzahl gerundet wird. 18 Intervallarithmetik auf dem Rechner (2) Seien [a], [b] Maschinenintervalle (d.h. Endpunkte sind Maschinenzahlen). set rounding( downward ) berechne die vier Produkte in S = {ab, ab, ab, ab} c := min S set rounding( upward ) berechne die vier Produkte in S c := max S Dann gilt [c] := [c, c] ⊇ [a] · [b]. Allgemein: Berücksichtigung von Rundungsfehlern führt zu etwas weiteren Einschließungen. 19 Übersicht • Wozu Intervall-Arithmetik ? • Intervallarithmetik • Intervallunterstützung im Sun f95 Compiler • Fortgeschrittene Intervallalgorithmen 20 Intervallunterstützung im Sun f95 Compiler http://www.sun.com/forte/info/features/intervals.html Beispiel 1: Berechnung von f (x, y) = 9x4 − y 4 + 2y 2 für x = 40545 und y = 70226. 21 Funktionsauswertung (2) program eval_func real(8) :: x, y interval(8) :: ix, iy ! oder einfach "interval" x = 40545 y = 70226 ix = 40545 iy = [ 70226, 70226 ] ! geht bei "Punktintervallen" ! andere Moeglichkeit write( *, * ) 9 * x**4 - y**4 + 2 * y**2 write( *, * ) 9 * ix**4 - iy**4 + 2 * iy**2 end 22 Funktionsauswertung (3) SUNOS:sunc00:interval[7]$ f95 -xia -o eval_func eval_func.f95 SUNOS:sunc00:interval[8]$ eval_func 1160.0 [-7032.0,5256.0] SUNOS:sunc00:interval[9]$ ⇒ Punkt“ergebnis nicht verlässlich ” 23 Funktionsauswertung (4) Rechnung in quadruple precision real(16) :: x, y interval(16) :: ix, iy liefert SUNOS:sunc00:interval[11]$ f95 -xia -o eval_func16 eval_func16.f95 SUNOS:sunc00:interval[12]$ eval_func16 1.0 [1.0,1.0000000000000071054273576010018588] SUNOS:sunc00:interval[13]$ ⇒ Punkt“ergebnis garantiert korrekt ” 24 Toleranzen in den Daten Bei einem sphärischen Hohlspiegel werden folgende Dimensionen gemessen: r = 30 ± 0.01mm d1 = 5 ± 0.01mm d2 = 2.74 ± 0.01mm Welche Schranken können für den Kugelradius d1 − d2 r2 R= + 2(d1 − d2) 2 garantiert werden ? 25 Toleranzen program toleranzen interval :: r, d1, d2, kugel_radius write( *, * ) ’Enter r, d1, d2 :’ read( *, * ) r, d1, d2 Enter r, d1, d2 : [ 29.99, 30.01 ] 5.00 2.74 write( *, * ) ’r = ’, r write( *, * ) ’d1 = ’, d1 write( *, * ) ’d2 = ’, d2 r = [29.989999999999998,30.010000000000002] d1 = [4.9899999999999993,5.0100000000000007] d2 = [2.7299999999999999,2.75] 26 1 2 kugel_radius = r**2 / ( 2*( d1 - d2 ) ) + ( d1 - d2 ) / 2 write( *, * ) ’Kugelradius = ’, kugel_radius write( *, 1 ) kugel_radius write( *, 2 ) kugel_radius format( 1X, ’Der Kugelradius liegt im Bereich ’, vf21.2 ) format( 1X, ’Der Kugelradius liegt im Bereich ’, ves23.2 ) end Kugelradius = [198.35686403508759,202.16680803571442] Der Kugelradius liegt im Bereich [ 198.35, 202.17] Der Kugelradius liegt im Bereich [ 1.98E+002, 2.03E+002] 27 Einige verfügbare Operatoren inf( sup( wid( mid( mag( mig( x x x x x x ) ) ) ) ) ) lower bound upper bound width midpoint magnitude mignitude x x x−x (x + x)/2 max{|e x| : x e ∈ [x]} min{|e x| : x e ∈ [x]} 28 Einige verfügbare Operatoren (2) x x x r x x x x x x .ih. y .ix. y .dj. y .in. x .sb. y .psb. y .int. y .clt. y .pge. y .seq. y intervall hull intersection disjoint element of subset proper subset in the interior certainly < possibly ≥ set = [inf([x] ∪ [y]), sup([x] ∪ [y])] [x] ∩ [y] [x] ∩ [y] = ∅ ? r ∈ [x] ? [x] ⊆ [y] ? [x] ⊂ [y] ? y<x≤x<y ? x e < ye für alle x e ∈ [x], ye ∈ [y] ? x e ≥ ye für gewisse x e ∈ [x], ye ∈ [y] ? [x] = [y] ? 29 Übersicht • Wozu Intervall-Arithmetik ? • Intervallarithmetik • Intervallunterstützung im Sun f95 Compiler • Fortgeschrittene Intervallalgorithmen 30 Fortgeschrittene Intervallalgorithmen Anfangswertlöser 31 Der branch–and–bound Algorithmus zur verifizierten Lösung von Fi(z) = 0 , i = 1, . . . , n , im Bereich [z] = [z 1, z 1] × . . . × [z n, z n] . (Ähnlich für globale Optimierung.) 32 Prozedur Check([z]) wenn 0 6∈ Fi[z] für ein i = 1, . . . , n dann fertig /* [z] kann keine Lösung z enthalten */ sonst wenn [z] klein genug“ ” dann versuche, eine Lösung in [z] nachzuweisen gib [z] aus sonst unterteile [z] in zwei Hälften [z0], [z00] Check([z0]) Check([z00]) 33 enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fi[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fi[z] ?0 ∈ Fjai[z] ?0 ∈ Fi[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fi[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fi[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 33 0 ∈ Fjai[z] ? 0 ∈ Fjai[z] ?0 ∈ Fjai[z] ?0 ∈nein Fi[z] ? 0 ∈ Fjai[z] ? enthält vielleicht Lösung enthält sicher Lösung enthält sicher keine Lösung 34 Intervallarithmetik auf Sun Rechnern Bruno Lang Lehrstuhl für Hochleistungsrechnen RWTH Aachen [email protected] 14. März 2001