MATLAB - Spline-Interpolation

Hallo,

ich bin mir nicht sicher ob folgende Befehle den korrekten Spline durch die Punkte xi,yi zeichnen:

w=1:n;
ws=1:0.1:n;
g=spline(w,[x;y],ws);

n ist die Länge des Vektors x bzw y, x und y sind zeilenvektoren.
Die Matlab-Hilfe zu „spline“ hab ich gelesen aber nicht so ganz durchgeblickt…
Und was passiert wenn ich noch mehr Punkte in ws einfüge, dh ws=1:0.1:n?

Viele Grüße
Ladylai

Hallo,

w=1:n;
ws=1:0.1:n;
g=spline(w,[x;y],ws);

n ist die Länge des Vektors x bzw y, x und y sind
zeilenvektoren.

Laut http://www.mathworks.com/access/helpdesk/help/techdo…
müsste es nur

g = spline(x, y, ws)

sein, ich kann es aber gerade nicht testen.
Wenn du dir nicht sicher biste, plotte einfach die Funktion die da rauskommt, in der Dokumentation ist ein schönes Beispiel wie das geht.

Und was passiert wenn ich noch mehr Punkte in ws einfüge, dh
ws=1:0.1:n?

Huch, das machst du doch schon.
Je mehr Punkte der Vektor hat, desto mehr Punkte hat auch die Ausgabefunktion - wenn du den weglässt, bekommst du die abschnittsweise definierten Polynome zurück.

Grüße,
Moritz

Hallo Moritz,

also laut der matlab hilfe würde es zb so gehen:
x = 0:10;
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,‚o‘,xx,yy)

ich glaube das ich kann das aber nicht direkt so machen, weil ich ja keine y=f(x) funktion habe, sonden die punkte als vektoren x0 und y0 bereits vorgegeben sind, daher kann ich nicht so einfach so ein Intervall der x-Punkte machen, das ich dann verfeinern kann…
Ich habe es auch mal ausprobiert, beide Versionen nochmal:

w=1:n;
ws=1:0.1:n;
g=spline(w,[x0;y0],ws) --> bisher, ich bin mir aber nach wie vor nicht sicher ob das so korrekt ist?? es kommt aber eine kurve durch die punkte raus die wie ein spline aussieht

f=spline(x0,y0,ws) --> dein vorschlag, es kommen negative Punkte raus, x0,y0 liegen aber alle im bereich von 0 bis 1

das war dann der befehl zum zeichnen:
plot(g(1,:smile:,g(2,:smile:,‚b-‘,f,ws,‚g‘)

Und was passiert wenn ich noch mehr Punkte in ws einfüge, dh
ws=1:0.1:n?

Huch, das machst du doch schon.
Je mehr Punkte der Vektor hat, desto mehr Punkte hat auch die
Ausgabefunktion - wenn du den weglässt, bekommst du die
abschnittsweise definierten Polynome zurück.

oh da habe ich mich vertan da wollte ich
ws=1:0.01:n schreiben… ich hab da auch mal ein bisschen rumprobiert, bei ws=1:0.1:n kommt scheinbar die gleiche, runde kurve wie bei ws=1:0.01:n raus, wenn man den intervall kleiner macht, 0.5 oder 0.3 hat man aber noch ecken drin, wird an der auflösung liegen, und da dies kurven bei 0.1 schon rund aussehen (muss nur richtig „aussehen“) würde mir das quasi reichen.

Hallo
,

> x = 0:10;  
> y = sin(x);  
> xx = 0:.25:10;  
> yy = spline(x,y,xx);  
> plot(x,y,'o',xx,yy)

ich glaube das ich kann das aber nicht direkt so machen, weil
ich ja keine y=f(x) funktion habe, sonden die punkte als
vektoren x0 und y0 bereits vorgegeben sind,

D.h. du lässt die ersten beiden Schritte weg und benutzt x0 statt x und y0 statt y.

daher kann ich
nicht so einfach so ein Intervall der x-Punkte machen, das ich
dann verfeinern kann…

Du kannst z.B. das Intervall

xx = min(x):0.01:max(x)

nehmen.

Ich habe es auch mal ausprobiert, beide Versionen nochmal:

w=1:n;
ws=1:0.1:n;
g=spline(w,[x0;y0],ws) --> bisher, ich bin mir aber nach
wie vor nicht sicher ob das so korrekt ist?? es kommt aber
eine kurve durch die punkte raus die wie ein spline aussieht

Dann sollte es eigentlich passen.
Es ist unwahrscheinlich, dass eine stetige und differenzierbare Kurve durch die Punkte herauskomment, die keine Spline-Funktion ist :wink:
Ich sehe diese Möglichkeit zwar nicht in der Dokumentation aufgeführt, aber wenn es klappt, dann klappt es.

f=spline(x0,y0,ws) --> dein vorschlag, es kommen negative
Punkte raus, x0,y0 liegen aber alle im bereich von 0 bis 1

Wenn auch ein paar negative Punkte dabei sind, heisst das noch nicht, dass es falsch ist. Die Interpolation kann durchaus etwas über den Wertebereich der interpolierten Werte herausgehen. Aber letztendlich sieht man ja dem Plot an, ob die Ergebnisse plausibel sind.

Und was passiert wenn ich noch mehr Punkte in ws einfüge, dh
ws=1:0.1:n?

Huch, das machst du doch schon.
Je mehr Punkte der Vektor hat, desto mehr Punkte hat auch die
Ausgabefunktion - wenn du den weglässt, bekommst du die
abschnittsweise definierten Polynome zurück.

oh da habe ich mich vertan da wollte ich
ws=1:0.01:n schreiben… ich hab da auch mal ein bisschen
rumprobiert, bei ws=1:0.1:n kommt scheinbar die gleiche, runde
kurve wie bei ws=1:0.01:n raus,

Vermutlich löst der Plot (oder deine Augen) keine Abschnitte kleiner als 0.1 auf - dann sieht es gleich aus.

wenn man den intervall kleiner
macht, 0.5 oder 0.3 hat man aber noch ecken drin, wird an der
auflösung liegen, und da dies kurven bei 0.1 schon rund
aussehen (muss nur richtig „aussehen“) würde mir das quasi
reichen.

Nadann ist ja alles in Butter :wink:

Grüße,
Moritz