Intervallarithmetik auf Sun Rechnern - RWTH

Werbung
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
Herunterladen