Die Mathe-Redaktion - 14.12.2017 09:11 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
ListenpunktSchwätz / Top 15
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 529 Gäste und 18 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Stern Mathematik: Interpolation durch kubische Splines
Freigegeben von matroid am So. 14. Oktober 2007 12:19:11
Verfasst von kostja -   12249 x gelesen [Gliederung] [Statistik] Druckbare Version Druckerfreundliche Version
Mathematik

\(\begingroup\)

Das Interpolationsproblem


fed-Code einblenden


fed-Code einblenden
fed-Code einblenden
Natürlich versteht jeder unter "einfach" etwas anderes, so dass ich hier einige Beispiele bringen und dann die Interpolation mit kubischen Splines etwas näher beleuchten möchte.


Navigation:
TODO:
  • Beweis der Fehlerabschätzung







Interpolation durch Polygonzüge


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden
Streckenzug
fed-Code einblenden





Lagrangeinterpolation


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden
Lagrangepolynom, n=5Lagrangepolynom, n=10
Lagrangepolynom, n=15Lagrangepolynom, n=20

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden


needles Artikel: LAGRANGE-Interpolation.








Motivation



Vergessen wir für einen Moment die Mathematik und sinnen etwas darüber nach, welche Hilfsmittel man verwenden könnte, um eine glatte Kurve durch vorgegebene Punkte in einer Ebene zu zeichnen. Ich weiß nicht, auf welche Ideen Ihr kommt, aber Leute aus dem Schiffsbau haben hier die Idee gehabt eine dünne Holzlatte zwischen Querstreben einzuspannen und den Verlauf nachzuziehen. Hier ein kleiner Selbstversuch. Es wurde jedoch statt einer Holzlatte ein Karton verwendet.



KartonsplineKartonspline
KartonsplineKartonspline


Ich habe im auf der Homepage der AG Numerik (Uni Bielefeld) dieses intessante Dokument (Backup) gefunden, das gleich am Anfang sehr ausführlich den Zusammenhang von kubischen Splines mit der Biegeenergie solcher Holzlatten beschreibt.








Ein mathematisches Modell


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden







Aufstellen der Gleichungen


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden





Existenz und Eindeutigkeit der Lösung


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

Wer's kürzer mag und den Satz von den Gerschgorin-Kreisen kennt, dem sei gesagt, dass aus der strikten Diagonaldominanz folgt, dass die Eigenwerte von Null weg beschränkt sind und der Kern somit trivial sein muss.



fed-Code einblenden

fed-Code einblenden

fed-Code einblenden





Simple Beispiele


fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden

fed-Code einblenden





Fehlerabschätzung



fed-Code einblenden


fed-Code einblenden

fed-Code einblenden





Eine Implementierung



Jetzt haben wir zwar eine schöne Theorie, aber zugegebener Maßen, sind die dabei anfallenden Rechnungen nichts, was man gerne von Hand erledigt. Um noch ein paar Beispiele zu betrachten und diese nicht selbst rechnen zu müssen, möchte ich noch eine mögliche Implementierung des Algorithmus vorstellen. Da man mit MATLAB/Octave um das Problem herum kommt, zuerst eine Bibliothek für Matrizen zu schreiben, habe ich meine Wahl darauf gelegt.
Die folgenden Code Abschnitte sind für Octave geschrieben, sollten aber ohne weiteres entweder direkt mit Matlab laufen, oder mit geringem Aufwand auf Matlab portierbar sein.

Zunächst den Algorithmus, um den es hier ja gehen soll.


Matlab
function y = Spline(x, f, e1, en, xi)
 
% x, f, xi: Zeilenvektoren. x paarweise verschieden und aufsteigend sortiert.
%
% Werte den kubischen Spline zu den Stützstellen (x,f)
% an den Stellen xi aus.
% Lege s''(x(1)) = e1 und s''(x(n)) = en fest.
 
[tmp, n] = size(x);
n = n-1; % Wir haben nun n+1 Stützstellen!!!
 
% Gitterweiten
for i=1:n
	h(i) = x(i+1)-x(i);
end
 
% Unsere Polynom haben die Gestalt:
% p(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3
 
% Berücksichtige die Krümmung am Rand
a_2(1) = 1/2*e1;
a_2(n+1) = 1/2*en;
 
% Erzeuge das Gleichungssystem: Ax = b
 
% % Berechne den Lösungsvektor b
for i=1:n-1
	b(i) = 3 * ( ( f(i+2) - f(i+1) ) / h(i+1) - ( f(i+1) - f(i) ) / h(i) );
end
b(1) = b(1) - h(1) * a_2(1);
b(n-1) = b(n-1) - h(n) * a_2(n+1);
 
% % Erzeuge das Gleichungssystem A
for i=1:n-1
	H(i) = 2*(h(i) + h(i+1));
end
A = diag(H) + diag(h(2:n-1), 1) + diag(h(2:n-1), -1);
 
% Löse das Gleichungssystem
a_2(2:n) = Gauss(A, b', true);
 
% Berechne die übrigen Koeffizienten
for i = 1:n
	a_1(i) = ( f(i+1) - f(i) ) / h(i) - h(i)/3 * ( a_2(i+1) + 2*a_2(i) );
end
 
for i = 1:n
	a_3(i) = ( a_2(i+1) - a_2(i) ) / ( 3 * h(i) );
end
 
% Werte nun die Polynome an den Stellen xi aus.
[tmp, m] = size(xi);
for k = 1:m
	j(k) = 1;
	% Suche i mit x(i-1) <= xi <= x(i)
	for i = 1:n+1 % Das sollte man hier besser machen! O(n) im worst case
		if ( xi(k) < x(i) )
			j(k) = i-1;
			break;
		end
		j(k)=n;
	end
 
	% Auswertung mit Horner-Schema
	X = (xi(k) - x(j(k)));
	y(k) = f(j(k)) + X*( a_1(j(k)) + X*( a_2(j(k)) + X*a_3(j(k)) ) );
end
 
return
 
Spline.m


Hier der verwendete Gaussalgo:


Matlab
function x = Gauss(A, b, pivot)
% Gaussverfahren löst _reguläres_ Gl.System
% Es wird nicht auf Lösbarkeit geprüft!!!
%
% pivot: Schalter für Pivotierung
 
[n, t] = size(b);
 
x = zeros(n, 1);
A = [A, b];
 
% Ich denke das ist selbsterklärend. Gewöhnlicher Gaussalgo...
for k = 1 : n-1
	if (pivot)
		[C, l] = max(abs(A(k:n,k)));
		t = A(k+l-1,:); A(k+l-1,:) = A(k,:); A(k,:) = t;
	end
	for j = k+1 : n
	if ( A(k,k) == 0 )
		disp('Lösung nicht möglich')
		x = inf;
		return
	end
		A(j,:) = A(j,:) - A(j,k)/A(k,k) * A(k,:);
	end
end
x(n) = A(n,n+1)/A(n,n);
for k = n-1 : -1 : 1
	x(k) = (A(k,n+1) - A(k,k+1:n)*x(k+1:n))/A(k,k);
end
 
return
 
Gauss.m


Als nächstes schreiben wir noch ein paar kleine Funktionen, die uns das Leben etwas erleichtern sollen:


Matlab
function [x, f] = Func(a, b, n, F)
 
% a < b reell, n natürliche Zahl, F: Name einer reellwertigen Funktion
%
% Berechnet die Stützstellen der Funktion F zu der Zerlegung
% x(i) = i*(b-a)/n
 
F = str2func(F);
x = zeros(1, n+1);
f = zeros(1, n+1);
 
h = (b-a)/n;
for i = 0:n
	x(i+1) = a + h*i;
	f(i+1) = F( x(i+1) );
end
 
return
 
Func.m





Noch ein paar Beispiele



fed-Code einblenden
Matlab
function y = Func_F(x)
 
% Eine Testfunktion: y = 1 / ( 1 + 25 * x * x );
 
y = 1 / ( 1 + 25 * x * x );
 
return
 
Func_F.m


Nun ein Testprogramm


Matlab
function main()
 
% Testet Spline.m
 
g = 80; % Gitterweite
% Plot der Testfunktion
[X, Y] = Func(-1, 1, g, 'Func_F');
 
for n = 2:2:12 % Plotte den Spline mit n Stützstellen
	% Berechne die Stützstellen zur Testfunktion
	[x, f] = Func(-1, 1, n, 'Func_F');
	% Plotte den Spline
	F = Spline(x, f, 0, 0, X);
 
	% Plot Befehle
	plot(x, f, 'x ;Stuetzwerte;');
	hold on;
	plot(X, F, '+ ;Spline;');
	plot(X, Y, ';Funktion;');
	hold off;
	title(['Spline Interpolation: n = ', int2str(n)]);
	xlabel('x');
	ylabel('f(x)');
	axis([-1, 1, -0.5, 1.1]);
	pause; % Taste drücken
end
 
return
 
main.m

Spline, n=2Spline, n=4
Spline, n=6Spline, n=8
Spline, n=10Spline, n=12







Ausblick


Mann kann Splines natürlich auch dazu verwenden um Linien im Mehrdimensionalen zu zeichnen. Hat man eine Parametrisierung für Messpunkte, so wendet man einfach in jeder komponente die Interpolation durch und trägt die Splinefunktionen übereinander auf.
Hier ist ein ganz simples Beispiel:

Matlab
function dim2spline()
 
T=0.1:1/2:2*pi;
X = log(T).*cos(T);
Y = log(T).*sin(T);
 
t=0.1:1/50:2*pi;
x = Spline(T, X, 0, 0, t);
y = Spline(T, Y, 0, 0, t);
 
plot(X,Y, ';Stuetzstellen;+r');
hold on;
plot(x,y, ';kubisdcher Spline;');
hold off;
 
title('2 dimensionaler Spline');
xlabel('x(t)');
ylabel('y(t)');
 
dim2spline.m
2 dimensionaler Spline

In diesem Zusammenhang sollte man sich aber vor allem mal die sog. NURBS - eine Verallgemeinerung dieses Konzepts - anschauen, da diese in der Praxis häufiger vorkommen und auch Flächen modelieren können.






Abschluss


Dem aufmerksamen Leser ist sicherlich nicht entgangen, dass der Beweis der Fehlerabschätzung fehlt. Nun, ich muss ehrlich zugeben, ich hatte keine Lust, diesen einzutragen, aber fühlt Euch herzlich eingeladen dies zu tun. Dazu einfach auf Bearbeiten im entsprechenden Abschnitt klicken. Ich und viele andere Leser auf dem MP würden sich sicher darüber freuen. ;-)

Ich verbleibe nun mit schönen Grüßen
und wünsche Euch einen guten Start ins neue Semester!

Euer Konstantin



  1. 1 cf. Prof. Rannacher - Vorlesungsskript: Numerik 0 Seite 41
    Aufgerufen am: 14.02.2007 - 16:01 Uhr
  2. 2 cf. Prof. Rannacher - Vorlesungsskript: Numerik 0 Seite 29
    Aufgerufen am: 14.02.2007 - 16:08 Uhr

\(\endgroup\)
Link auf diesen Artikel Link auf diesen Artikel  Druckbare Version Druckerfreundliche Version  Einen Freund auf diesen Artikel aufmerksam machen Weitersagen Kommentare zeigen Kommentare  
pdfFür diesen Artikel gibt es keine pdf-Datei


Arbeitsgruppe Alexandria Dieser Artikel ist im Verzeichnis der Arbeitsgruppe Alexandria eingetragen:
: Mathematik :: Angewandte Mathematik :: Numerik :: Interpolation :
Interpolation durch kubische Splines [von kostja]  
Wir suchen nun eine ''einfache'' Funktion p: I -> \IR, welche die Interpolationsbedingung erfüllt. Natürlich versteht jeder unter "einfach" etwas anderes, so dass ich hier einige Beispiele bringen und dann die Interpolation mit kubischen Splines etwas näher beleuchten möchte.
[Die Arbeitsgruppe Alexandria katalogisiert die Artikel auf dem Matheplaneten]

 
Verwandte Links
 
Besucherzähler 12249
 
Aufrufstatistik des Artikels
Insgesamt 2406 externe Besuche zwischen 2017.12 und 2017.12 [Anzeigen]
DomainAnzahlProz
http://matheplanet.com421.7%1.7 %
http://google.de198182.3%82.3 %
http://google.it1174.9%4.9 %
http://google.fr1144.7%4.7 %
http://google.ro321.3%1.3 %
http://google.ru271.1%1.1 %
http://kostja.selfip.org60.2%0.2 %
http://www.bing.com401.7%1.7 %
http://google.se40.2%0.2 %
http://images.google.de40.2%0.2 %
http://r.duckduckgo.com30.1%0.1 %
http://www.ecosia.org50.2%0.2 %
http://google.nl20.1%0.1 %
http://de.search.yahoo.com60.2%0.2 %
http://ecosia.org50.2%0.2 %
http://suche.web.de40.2%0.2 %
http://search.mywebsearch.com20.1%0.1 %
http://search.tb.ask.com40.2%0.2 %
http://cn.bing.com10%0 %
http://www1.delta-search.com10%0 %
http://just-like.net10%0 %
http://www.fireball.de10%0 %
http://search.conduit.com10%0 %
http://metager.de10%0 %
http://suche.t-online.de20.1%0.1 %

Aufrufer der letzten 5 Tage im Einzelnen
Insgesamt 40 Aufrufe in den letzten 5 Tagen. [Anzeigen]
DatumAufrufer-URL
2017.12.01-2017.12.13 (18x)viewtopic.php?topic=99078&ref=https://www.google.de/&ff=y
2017.12.11-2017.12.13 (2x)viewtopic.php?topic=99078&ref=https://www.google.at/&ff=y
2017.12.01-2017.12.12 (18x)https://www.google.de/
2017.12.12 10:51viewtopic.php?topic=99078&ref=https://www.google.de/
2017.12.11 15:31viewtopic.php?topic=105692&ref=https://www.google.de/&ff=y

Häufige Aufrufer in früheren Monaten
Insgesamt 2287 häufige Aufrufer [Anzeigen]
DatumAufrufer-URL
2013-2017 (208x)http://google.de/url?sa=t&rct=j&q=
2014-2015 (193x)http://google.de/url?sa=t&rct=j&q=kubische spline interpolation beispiel
2012.01 (154x)http://google.de/url?sa=t&source=web&cd=1&ved=0CCMQFjAA
201501-02 (130x)http://google.de/url?sa=t&rct=j&q=kubische spline interpolation
2012.05 (121x)http://google.de/url?sa=t&rct=j&q=spline matroid
2012.02 (117x)http://google.it/imgres?q=streckenzug
2013.01 (117x)http://google.de/url?sa=t&rct=j&q=spline matlab matheraum
201210-11 (96x)http://google.de/url?sa=t&rct=j&q=spline interpolation octave
2012.12 (94x)http://google.de/url?sa=t&rct=j&q=splines übungsaufgabe
2012.07 (85x)http://google.de/url?sa=t&rct=j&q=octave kumischer spline
2014.06 (82x)http://google.de/url?sa=t&source=web&cd=3&ved=0CCAQFjAC
2013.02 (71x)http://google.fr/url?sa=t&rct=j&q=kubische interpolationspolynom
2012.06 (70x)http://google.de/url?sa=t&rct=j&q=natürlicher kubischer spline beispiel
2014.12 (60x)http://google.de/url?sa=t&source=web&cd=6&ved=0CCcQFjAF
2012.03 (58x)http://google.de/url?sa=t&source=web&cd=1&ved=0CCwQFjAA
2014.07 (57x)http://google.de/url?sa=t&rct=j&q=mathe spline interpolation
2013.05 (54x)http://google.de/url?sa=t&rct=j&q=zahlenbeispiel quadratischer spline
2012.04 (46x)http://google.de/url?sa=t&rct=j&q=streckenzuginterpolation
2014.01 (43x)http://google.fr/url?sa=t&rct=j&q=
2012.09 (41x)http://google.de/url?sa=t&rct=j&q=spline kubisch beispiel
2013.06 (41x)http://google.de/url?sa=t&rct=j&q=octave spline beispiele
2013.07 (34x)http://google.de/url?sa=t&rct=j&q=splines kubisch
2014.03 (33x)http://google.de/url?sa=t&rct=j&q=natürliche splines code
2013.04 (32x)http://google.de/url?sa=t&rct=j&q=kubischen spline differenzieren
2015.05 (32x)http://google.ro/url?sa=t&rct=j&q=
2015.06 (30x)http://google.de/url?sa=t&rct=j&q=algorithmus für kubische spline-interpolat...
2013.11 (29x)http://google.de/url?sa=t&rct=j&q=interpolierende kubische spline berechnen
2014.09 (27x)http://google.de/url?sa=t&rct=j&q=mathroids b-spline interpolate
2014.10 (27x)http://google.ru/url?sa=t&rct=j&q=
2014.08 (22x)http://google.de/url?sa=t&rct=j&q=spline kubisch rechnung
2013.03 (19x)http://google.de/url?sa=t&rct=j&q=kubische spline berechnen
2012.08 (18x)http://google.de/url?sa=t&rct=j&q=matheplanet spline
2013.08 (15x)http://google.de/url?sa=t&rct=j&q=spline interpolation matroids matheplanet
2013.09 (13x)http://google.de/url?sa=t&rct=j&q=kubische spline interpolation online
2012-2013 (6x)http://kostja.selfip.org/science-math.htm
2013.02 (4x)http://www.bing.com/search?q=kubischer Spline beispiel rechnung&qs=n&form=QBR...
2015.07 (4x)http://google.se/url?sa=t&rct=j&q=
201604-09 (4x)http://images.google.de/url?sa=t&rct=j&q=

[Seitenanfang]

" Stern Mathematik: Interpolation durch kubische Splines" | 4 Kommentare
 
Für den Inhalt der Kommentare sind die Verfasser verantwortlich.

Re: Interpolation durch kubische Splines
von Meren-Adven am So. 14. Oktober 2007 13:41:06

\(\begingroup\)
Hi Konstantin,

gefällt mir gut, der Artikel.
Zwei Vorschläge:
1) Die Lagrange-Polynome kriegst Du doch sicher noch in einem Satz motiviert, oder wink
2) Schön, diese Motivation der Splines, warum hast du aber nicht gleich noch dazugeschrieben, dass daher das Wort "Spline" kommt? Vermutlich steht das im verlinkten Artikel, aber da will ich jetzt nicht reinschauen wink

Bin mal gespannt, ob sich ein Fehlerabschätzungs-Beweiser findet biggrin
Kommt irgendwann noch was zu B-Splines?

Gruß
Hannes\(\endgroup\)

 [Bearbeiten]

Re: Interpolation durch kubische Splines
von Ueli am Mo. 29. Oktober 2007 14:54:57

\(\begingroup\)
Hallo Konstantin,

Dein Artikel hat mir sehr gefallen.

Ich bin auch oft mit Interpolation konfrontiert. Leider passen Polynome bei mir nicht gut (auch Splines). Ich habe Funktionen die bei kleinen Werten sehr gross werden und bei grossen Werten verschwinden, ähnlich wie f=1/x. Ein Ansatz war daher zum Beispiel die reziproke Funktion 1/f zu interpolieren und erhalte somit 1/p(x). Manchmal ist es aber auch besser durch eine physikalische Überlegung die Funktion mehr oder weniger zu erraten und noch etwas an den Konstanten zu schrauben, bis der Fehler minimal wird.
Nun seh ich aber in deinem Artikel den 2-dimensionalen Spline und werde einmal probieren ob es damit besser geht...

Übrigens noch ein Buch-Tip:

W. Dahmen, A. Reusken: Numerik für Ingenieure und Naturwissenschaftler
Springer-Verlag GmbH
ISBN: 3540255443
EAN: 9783540255444

Gruss Ueli\(\endgroup\)

 [Bearbeiten]

Re: Interpolation durch kubische Splines
von kostja am Di. 30. Oktober 2007 16:09:13

\(\begingroup\)
Hallo Uelli,

vielen Dank für Deinen Beitrag. Die Idee 1/f zu interpolieren klingt irgendwie interessant. smile Ich glaube ich mache mal ein paar Tests, wenn ich mal wieder Zeit finden sollte.

Das "Funktion raten und an den Parametern schrauben" nennt sich auch fitten, und ist zunächst eine völlig andere Art der Aufgabenstellung. Hier erwartet man zum Beispiel nicht, dass alle Punkte auf der Kurve liegen. So weit ich weiß, gibt es dafür eigene Agorithmen und Lösungsansätze.

Bitte sag mir, ob der 2d-Spline Ansatz, irgendetwas vernünftiges liefert.

MfG Konstantin\(\endgroup\)

 [Bearbeiten]

Re: Interpolation durch kubische Splines
von MichaH am Do. 18. Dezember 2008 03:40:03

\(\begingroup\)
*den Urschrei ausstoß*

Man man man ... erstmal mega viel lob an den autor ... sry bin gerade zu faul den namen nachzugucken aber respekt, den du dir verdient hast, von mir smile

Ich hab damit gerade mal ne Aufgabe gelöst und es sogar alles verstanden, SUPER.

Aber eine kleine Sache die mich seit ca. 2 Stunden beschäftige biggrin es gibt einen kleinen fehler was mir voll net wahr war weil das noch keiner gesehen hat ...

Aus fed-Code einblenden muss natürlich fed-Code einblenden werden. Dann stimmen auch die Ergebnisse ... mit denen ich mich jetzt so lange rumgequält hab biggrin

Aber wie gesagt mega vielen dank und respekt ... sowas kann ja immer mal passieren ... wenn ich es schaffe (die berechtigung hab) werde ich den fehler auch gleich mal korrigieren ...

aber erstmal eine rachen ^^

lg micha

\(\endgroup\)

 [Bearbeiten]

 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2017 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]