Einzelnen Beitrag anzeigen

Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#1

Interpolation mit Splinefunktionen

  Alt 13. Mai 2009, 19:01
Interpolation mit Splinefunktionen
Die Interpolation einer Funktion y = f(x), die mit n + 1 Stützstellen x0, x1,... xn definiert ist, beginnt mit wachsendem n zwischen den Stützstellen zu oszillieren (Satz von Faber).
Aus dieser Erkenntnis entwickelten sich die Verfahren zur Interpolation mit Splinefunktionen. Der Name ist aus der englischen Bezeichnung eines Zeichengerätes mit einem biegsamen Stahlband hergeleitet.
Kubische Splinefunktionen
Am häufigsten werden kubische Splinefunktionen verwendet, die mit stetiger Steigung und Krümmung durch die Stützpunkte gehen.
Durch die Stützpunkte und die an den inneren Stützpunkten zu fordernde Gleichheit von Funktionswert, 1. und 2. Ableitung stehen 4n-2 Gleichungen zur Berechnung der 4n Koeffizienten bereit. Für die 2 fehlende sind 2 Randbedingungen hinzuzufügen.

Ich habe alles notwendige in der Unit Spline zusammengefasst, sie exportiert
- eine Funktionen zur Erzeugung von Splinefunktionen und
- Funktionen zur Berechnung der Funktionswerte, der Werten der 1. und 2. Ableitung und einer Stammfunktion..
Delphi-Quellcode:
function MakeSpline(Flag, n: integer; var P: array of TP;
                    c0, cn: extended; var K: array of TK):boolean;
erzeugt das Koeffizientenarray K einer Splinefunktion aus n Stützstellen und zwei Randbedingungen. Flag, c0 und cn legen die Randbedingungen fest:
Flag Art der Randbedingungen
0 Natürliche Spline: c0, yn'' = cn
1 Spline mit s'(0) = c0, s''(n) = cn
2 Spline mit s'(0) = c0, s'(n) = cn
3 Spline mit s'(n) = cn, s''(0) = c(0)
4 Periodische Spline
In K gibt die Funktion die Koeffizienten des Ansatzes (1) zurück. Mit MakeSpline=true wird angezeigt, dass die Koeffizienten in K gültig sind. Bei MakeSpline=false ist ein Fehler aufgetreten.
Delphi-Quellcode:
function Spl(n: integer; x: extended; var P: array of TP;
                                       var K: array of TK): extended;
function SplAbl1(n: integer; x: extended; var P: array of TP;
                                          var K: array of TK): extended;
function SplAbl2(n: integer; x: extended; var P: array of TP;
                                          var K: array of TK): extended;
function SplStamm(n: integer; x: extended; var P: array of TP;
                          var K: array of TK; var Stamm: array of extended): extended;
berechnen Werte von Splinefunktionen bzw. ihren 1. und 2. Ableitungen. Die Spline wird mit den Arrays P der Stützstellen und K der Koeffizienten übergeben. Das aufrufenden Programms hat dafür zu sorgen, dass x im Definitionsbereich [x0, xn] liegt, wobei geringe Bereichsüberschreitungen durch Rundungsfehler zulässig sind.
Man kann eine Splinefunktion analytisch Integrieren und gewinnt so die zugehörige Stammfunktion zur Berechnung bestimmter Integrale. Dies ist ein effektives Verfahren zur numerischen Integration.
Angehängte Dateien
Dateityp: zip kubspline_612.zip (221,5 KB, 293x aufgerufen)
Dateityp: zip profile_776.zip (479,5 KB, 187x aufgerufen)
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat