Forums Neueste Beiträge
 
Tags Keywords

Splines

21/06/2014 - 12:27 von Hans-Peter Diettrich | Report spam
Ich bin gerade dabei, mich in die Darstellung von Kurven mit Splines
einzuarbeiten (kubisch, parametriert). Leider war ich ein paar Tage
offline, so daß ich mir die Berechnung aus den Fingern saugen mußte.
Mein erster Gedanke war, ausgehend von plausiblen Vorgaben für das erste
Intervall, die Ableitungen f' und f" am Anfang des nàchsten Intervalls
zu berechnen, und mich so durch alle Intervalle durchzuhangeln.

Die allgemeinen Gleichungen
f(x) = a+bx+cx^2+dx^3
f'(x) = b+2cx+3dx^2
f"(x) = 2c+6dx
lassen sich durch Parametrierung auf x=0 am Anfang und x=1 am Ende eines
Intervalls vereinfachen zu
a = f(0)
b = f'(0)
2c = f"(0)
d = y[i+1]-a-b-c
und für x=1 die Startwerte für das nàchste Intervall i+1:
b[i+1] = f'(1) = b+2c+3d
2c[i+1] = f"(1) = 2c+6d

Nun hat sich dummerweise herausgestellt, daß die aus den vorgegebenen
Werten für a,b und c berechneten Werte für d ziemlich unbrauchbar sind,
d.h. mit d=y[i+1]-a-b-c weicht f(1)=a+b+c+d bald weit vom vorgegebenen
y[i+1] ab, schnell um ein Vielfaches des Sollwerts :-(

Wie kann das überhaupt passieren?

Ist die Rechenungenauigkeit mit 64 Bit Gleitkommazahlen schon bei so
einer einfachen Addition unbrauchbar groß?
Formel numerisch zu instabil?

Oder habe ich nur irgendwo einen Denkfehler eingebaut?

Auf Erleuchtung hoffend
DoDi
 

Lesen sie die antworten

#1 Christian Gollwitzer
21/06/2014 - 12:53 | Warnen spam
Am 21.06.14 12:27, schrieb Hans-Peter Diettrich:
Ich bin gerade dabei, mich in die Darstellung von Kurven mit Splines
einzuarbeiten (kubisch, parametriert).

Die allgemeinen Gleichungen
f(x) = a+bx+cx^2+dx^3
f'(x) = b+2cx+3dx^2
f"(x) = 2c+6dx
lassen sich durch Parametrierung auf x=0 am Anfang und x=1 am Ende eines
Intervalls vereinfachen zu
a = f(0)
b = f'(0)
2c = f"(0)
d = y[i+1]-a-b-c
und für x=1 die Startwerte für das nàchste Intervall i+1:
b[i+1] = f'(1) = b+2c+3d
2c[i+1] = f"(1) = 2c+6d

Nun hat sich dummerweise herausgestellt, daß die aus den vorgegebenen
Werten für a,b und c berechneten Werte für d ziemlich unbrauchbar sind,
d.h. mit d=y[i+1]-a-b-c weicht f(1)=a+b+c+d bald weit vom vorgegebenen
y[i+1] ab, schnell um ein Vielfaches des Sollwerts :-(



Sieht eigentlich erstmal gut aus. Hast Du mal ein kurzes Zalenbeispiel,
also zwei Intervalle, Anfangsbedingungen x0=x0'=x0''=0 (sog. natural
spline) oder so? Nachdem Du den oberen Wert ja als ziel-(a+b+c+d)
berechnest, sollte die Subtraktionsauslöschung nur greifen, wenn z.B.
der Zielwert eins, die Koeffizienten aber >10^12 sind.

Ich lege mal vor:
x_0=0; y_0=0
x_1=1; y_1=2
x_2=2; y_2=1

mit den Startwerten x_0'=0 und x_0''=0. Gib das mal in Dein Programm ein
und poste die Koeffizienten hier bzw. sollte den Fehler offensichtlich
machen.

Kann es vielleicht sein, dass Du Dich bei der Koordinatentransformation
der x-Werte von den Stützstellen verhaut hast? Du musst ja jedes
Intervall erst auf 0..1 transformieren, bevor es in f_i(x) eingesetzt
werden kann.

Christian

Ähnliche fragen