WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Spline-Interpolation: "eingespannte Enden" falsch

 

Barny.G
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2015, 09:16     Titel: Spline-Interpolation: "eingespannte Enden" falsch
  Antworten mit Zitat      
Hallo,

vielleicht habe ich die Mathematik einfach nicht verstanden.

Wenn ich eine (eigentlich unbekannte) Funktion habe (bspw. sin (x) ) aber einige Stützstellen kenne, dann kann ich aus diesen Stützstellen mit spline wunderbar inter- und sogar recht gut extrapolieren. Werden beide Grafen übereinandergelegt, so passt das sehr gut.

Nun benötige ich für einen ganz anderen Anwendungsfall eine Interpolation mit "eingespannten Enden". Das heißt, ich kenne im ersten und letzten Punkt der Wertetabelle die Ableitung (numerisch) dieser Funktion.

In der Matlab-Hilfe ist für diesen Fall ein schönes Beispiel gegeben. Wenn ich das auf mein Problem ( sin (x) ) übertrage, scheint das aber nicht zu funktionieren.

Hier das Codebeispiel:
Code:
clear all;

x = 0:0.1:pi; % zur Darstellung der "unbekannten" Funktion
y = sin(x);   % zur Darstellung der "unbekannten" Funktion

xA = x(18); xE = x(19); % Stützpunkte für die Berechnung der 1.Ableitung
yA = y(18); yE = y(19); % Stützpunkte für die Berechnung der 1.Ableitung

ma = (yE-yA) / (xE-xA); % Anstieg
na = [xE yE];           % Schnitt mit der y-Achse
fmn = ma * (x(end)-xE) + na(2); % Berechnung des Endpunktes für die Darstllung

xSpl = xA:0.17:pi; % Vorgabe für die Spline Berechnung
ySpl = spline(x(1:find(x==xA)),y(1:find(y==yA)),xSpl); % Berechnung der
% Extrapolation, für die Funktion spline sind nur die Punkte bis zur
% 1.Ableitung bekannt.

xSplcs = xA:0.05:2.25; % Extrapolationspunkte für die eingespannten Enden
cs = spline(x(1:find(x==xA)), [1 y(1:find(y==yA)) ma]);
ySplcs = ppval(cs,xSplcs);

%% figures
figure(1)
plot(x,y,'. - blue');
hold on
 plot([xA xE],[yA yE],'o blue');
 plot([na(1);x(end)],[na(2);fmn],'x - green');
 plot(xSpl,ySpl,'v -- red');
 plot(xSplcs,ySplcs,'x : magenta');
hold off
legend('sin(x)','Stützpunkte','f\prime(x)=cos(x)','spline Interpol','spline mit f\prime(x)','Location','best');
axis equal


Der Code ist (für mich) bis zu den "eingespannten Enden" plausibel. Nun meine Fragen:

1) Kann man mit ppval in Kombiation mit spline gar nicht extrapolieren?
2) Ist 1) sozusagen mathematischer Unsinn?
3) Mache ich einen entscheidenden Code-Fehler?

Viele Grüße

Thomas

Beispiel.pdf
 Beschreibung:

Download
 Dateiname:  Beispiel.pdf
 Dateigröße:  6.85 KB
 Heruntergeladen:  475 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.07.2015, 11:07     Titel: Re: Spline-Interpolation: "eingespannte Enden" fal
  Antworten mit Zitat      
Hallo Barny.G,

Bitte erkläre noch, warum Du meinst, dass es nicht zu funktionieren scheint.

Wenn Du das leidige und fiese clear all weglässt, kannst Du übrigens den Debugger verwenden. Alle Breakpoints und Debugger-einstellungen zu löschen ist eine extrem unpraktische Idee!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Barny.G
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2015, 14:52     Titel: Re: Spline-Interpolation: "eingespannte Enden" fal
  Antworten mit Zitat      
Hallo Jan,

ich war der Meinung, wenn ich die Enden einspanne und an dem einen (rechten) Ende die Ableitung (siehe grüne Gerade) nehme, sich der extrapolierte spline ungefähr daran entlang bewegen müsste.

Tatsächlich ist dies eben nicht der Fall. Vielmehr wandert der spline noch innerhalb der letzten (bekannten) Stützstellen davon. Das ist mir suspekt.

Begründung: Wenn ich bei einer Messwertreihe, die durch eine Funktion ausgedrückt werden kann, weiß, dass sie ein asymptotisches Verhalten hat, dann möchte ich das auch gern so abbilden können.

Ist die spline -Funktion vielleicht die Falsche? Wie gesagt, es kann auch an meinem Verständnis für den mathematischen Zusammenhang liegen...

Viele Grüße

Thoams
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.07.2015, 16:24     Titel: Re: Spline-Interpolation: "eingespannte Enden" fal
  Antworten mit Zitat      
Hallo Barny.G,

Code:
xA = x(18); xE = x(19); % Stützpunkte für die Berechnung der 1.Ableitung
yA = y(18); yE = y(19); % Stützpunkte für die Berechnung der 1.Ableitung

Das ist ein ziemlich großer Fehler bei der Berechnung der ersten Ableitung. Wie wäre dies:
Code:
xA = x(18); xE = x(18)+0.001; % Stützpunkte für die Berechnung der 1.Ableitung
yA = y(18); yE = sin(xE); % Stützpunkte für die Berechnung der 1.Ableitung

Ich finde die erzeugte Grafik zu unübersichtlich, um zu sehen, wonach Du genau suchst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Barny.G
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2015, 20:19     Titel:
  Antworten mit Zitat      
Hallo Jan,

entschuldige, dass ich am WE nicht geantwortet habe - wir haben versucht am Wasser ein wenig Abkühlung zu finden Wink

Du hast völlig Recht, dass die numerische 1.Ableitung genauer wird, je dichter man die Punkte aneinander legt. Nur löst das mein Problem noch nicht.

Bisher hatte ich diese spline-Funktion so verstanden, dass bei eingespannten Enden alle extrapolierten Punkte auf der Geraden (1.Ableitung/Tangente/lineare Funktion) liegen sollten. Oder zumindest sehr nah dran.

Und genau das versuche ich in der Grafik zu verdeutlichen. Zur Erklärung:

Blau: ist die Funktion, die ich als Grundmuster für meine "Messwerte" zu Grunde gelegt habe. Dabei hören die Messwerte mit den beiden blauen Kreisen, auch als "Stützpunkte" bezeichnet, auf. (von links aus gesehen) Der Funktionsverlauf ist nur deshalb weitergezeichnet um die spline-Funktion zu (über)prüfen.

Rot: ist das Ergebis der spline-Funktion, die nur die Messwerte bis einschlielich der blauen Kreise kennt. Man sieht schön, dass die spline-Funktion im Nahbereich eine gute Approximation an die tatsächliche Funktion erreichen kann.

Grün: ist die numerisch berechnete 1.Ableitung zwischen den letzten beiden bekannten Messwerten. (daher eine Gerade/Tangente)

Magenta: ist das Ergebnis der spline-Funktion mit den eingespannten Enden.

Nun war ich wie schon gesagt davon ausgegangen, dass Magenta sich eher an der grünen Gerade orientieren sollte.

Aber vielleicht ist das ein Trugschluß? Kann mir da ggf. jemand mathematisch weiterhelfen? Ich möchte gern verstehen warum das so ist bzw. wo ich einen Denkfehler mache.

Viele Grüße

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.07.2015, 09:46     Titel:
  Antworten mit Zitat      
Hallo Barny.G,

Zitat:
entschuldige, dass ich am WE nicht geantwortet habe - wir haben versucht am Wasser ein wenig Abkühlung zu finden :wink:

Aber bitte! Es ist ja Dein Problem und wenn es über das Wochenende Zeit hat, ist das doch schön! Also kein Grund sich zu entschuldigen. :-)

Zitat:
Bisher hatte ich diese spline-Funktion so verstanden, dass bei eingespannten Enden alle extrapolierten Punkte auf der Geraden (1.Ableitung/Tangente/lineare Funktion) liegen sollten. Oder zumindest sehr nah dran.

Weshalb sollte das so sein? Der Spline erzeugt ja Stückchenweise Polynome vom Grad 3. mit stetigen Ableitungen zwischen den Stücken. Bei der Extrapolation werden die äußeren Polynome verlängert und da sie die Ordnung 3 haben sind sie im Allgemeinen nicht gerade, sondern sie können außerhalb eine Krümmung haben und sogar einen Wende-Punkt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Barny.G
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2015, 08:42     Titel:
  Antworten mit Zitat      
Hallo Jan,

Zitat:
Zitat:
Bisher hatte ich diese spline-Funktion so verstanden, dass bei eingespannten Enden alle extrapolierten Punkte auf der Geraden (1.Ableitung/Tangente/lineare Funktion) liegen sollten. Oder zumindest sehr nah dran.

Weshalb sollte das so sein?

Naja, wenn ich schon eingespannte Enden vorgebe, dann sollte sich doch die Funktion daran orientieren. Was machen denn sonst diese Vorgaben für einen Sinn? Bisher war ich der (wahrscheinlich irrigen) Meinung, dass ich der spline-Funktion auf diesem Weg "mitteilen" kann, dass mir der weitere Verlauf der gesuchten/interpolierten Funktion außerhalb der Messwerte durchaus bekannt ist (Vorgabe einer Asymptote).

Wenn das mit der spline-Funktion so nicht funktioniert, gibt es da "was anderes" im Matlab, das mir eine gute interpolation und gleichzeitig eine Extrapolation entlang einer Asymptote liefert? Denn genau das möchte ich ja. Ich weiß wie meine Funktion "zum Ende hin" aussehen muss (Asymptote) und die Interpolation mit der spline-Funktion habe ich hinreichend geprüft. Die passt hervorragend. Nur manchmal muss ich ein kleines Stück in die Asymptote rein - und da passt es eben nicht mehr. Das ist ärgerlich.

Idde? Wink

Schöne Grüße

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2015, 16:34     Titel:
  Antworten mit Zitat      
Hallo Barny.G,

Wenn Du eine Funktion suchst, die mit Geraden extrapoliert, benötigst Du eine lineare Interpolation. Diese erzeugt auch bei der Interpolation keine Überschwinger, im Gegensatz zur Spline-Interpolation.

Möchtest Du dies für eine wissenschaftliche Auswertung einsetzen? In dem Fall würde ich Dir dringend raten, Dich tiefer mit dem Thema auseinanderzusetzen. Einfach mal eben irgendeine Inter/Extra-Polation zu verwenden, wird nicht zu zuverlässigen Ergebnissen führen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Barny.G
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 17.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 18:49     Titel:
  Antworten mit Zitat      
Hallo Jan,

Du hast völlig Recht. Mit Sicherheit sollte ich da tiefer einsteigen - und deswegen war ja auch immer wieder mein Hinweis auf "mathematisches Unvermögen" dabei. Smile

Da jedoch dieser kubische Spline zur Interpolation wie die Faust auf's Auge passt (das kann ich analytisch nachweisen), habe ich mir was Anderes einfallen lassen. Der Messbereich ist einfach erweitert wurden, so dass es keine Extrapolationen mehr gibt und alles fein passt.

Vielen Dank für Deine Zeit!

Thomas.
Private Nachricht senden Benutzer-Profile anzeigen
 
DerBrain87

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2015, 13:56     Titel:
  Antworten mit Zitat      
Der Post ist zwar nicht mehr ganz up2date aber da ich den Code sehr gut gebrauchen konnte - danke an dieser Stelle - Hier eine kleine erklärung, was es mit dem einspannen auf sich hat.

Wenn du Bei der Interpolation die Enden einspannst, sagst du lediglich, dass die Ableitung der Kurve am Anfangs- und Endpunkt in diese Richtung zeigt. Vor und nach dem Anfangs bzw. Endpunkt hast du keinen Zusammenhang mehr zwischen Ableitung der Splinefunktion und der von dir gewünschten Tangente. Du kannst jedoch, wenn du dieses "Tangentenverhalten" vor und nach der Interpolation haben möchtest dein Ergebnis einfach durch Stückeln der interpolationskurven erhalten.

Gruß DerBrain87
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.