Simple Matlab Frage

Breakzone

Komplett-PC-Käufer(in)
Hallo!

Ich bin ein ziemlicher Matlab Anfänger und ich muss für ein Projekt einen 3 dimensionalen Pfad erstellen. Dazu habe ich eine Reihe von X, Y, Z Vektoren erstellt und den besagten Pfad durch einzelne Punkte beschrieben.

Bsp:
x=[ 0 0 3 4 5 5 5 8 8]
y=[0 1 1 1 7 8 8 8 8]
z=[3 3 3 7 5 2 3 4 5]

Durch diesen (oder ähnlichen) Pfad möchte ich gerne einen Interpolationsspline legen. Im Curve Fitting Tool Menü kommt allerdings die Fehlermeldung

Duplicate x-y data points detected: using average of the z values. Verstehe ich das richtig, dass sich bei X und Y Koordinaten die gleichen Punkte mehrmals befinden und daher eine Interpolation nicht möglich sei? Wie könnte man das umgehen? Mein Ziel ist es am Ende eine Interpolationsformel zu bekommen, die meinen Pfad am besten beschreibt. Könnte man den ganzen Pfad (in Wirklichkeit 1x223 double Zahlen) in Bereiche aufteilen, damit sich die Koordinaten nicht wiederholen? Obwohl die Frage für Matlab Experten vermutlich ganz einfach ist, stehe ich gerade etwas auf dem Schlauch.

Viele Grüße!
 
Ja das Problem ist folgendes:
Ein Punkt ist sozusagen doppelt vorhande: (x=5,y=8)
Spline ist so aufgebaut dass die Kurve durch jeden Punkt geht. Nun kann die Kurve ja aber nicht durch beide Punkte gleichzeitig gehen. Daher legt Matlab sie durch: 5/8/3.5. Entweder das ist in Ordnung für dich oder du wählst ne andere Interpol.Methode
 
Danke für die Rückmeldung! Verstehe ich dich richtig, dass du die Punkte mit den Koordinaten p6=(5,8,2) und p7=(5,8,3) meinst? Warum legt Matlab den z-Wert dann auf 3.5 gesetzt? Müsste das nicht 2.5 sein? (der Mittelwert zwischen 2 und 3 beim Z-Wert)

Viele Grüße!
 
Verstehe, also könnte ich als workaround einfach statt p7=(5,8,3) p7=(5, 8, 3.0000001) nehmen? Was den Verlauf des Pfades ja sehr unwesentlich verändern würde.
Gibt es eine Möglichkeit sich die Interpolationsgleichung als Formel oder Code anzeigen zu lassen? Bei 3d kubischer Interpolation mit den oben genannten Punkten (mit meinem workaround) steht bei result sowas:

Piecewise cubic interpolant:
f(x,y) = piecewise cubic surface computed from p
where x is normalized by mean 1.238 and std 1.446
and where y is normalized by mean -0.001 and std 0.0006205
Coefficients:
p = coefficient structure

Goodness of fit:
SSE: 5.08e-29
R-square: 1
Adjusted R-square: NaN
RMSE: NaN


Viele Grüße!
 
Nein der Workaround wäre schlecht. Durchschnit wie Matlab es schon vorschlägt ist vernünftiger.
Probiers mal mit einem 2D Datensatz aus und plotte es dir, da siehst du dann ganz schnell was passiert (kriegst nämlich schlagartig eine vertikale Linie in den Plot).
 
Das Problem ist, dass die vertikale Linie ein fester Bestandteil von meinem Verlauf ist.
Hier sind die Punkte die ich interpoliert haben möchte:
>> X=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0:-2:-16 -16 -16 -16 -16 -16:2:0 0 0 0 0 0 0 0 0 0 0 0 0 0];
>> Y=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 10 15 20 25 35 45 55 55 65 75 85 95 105 115 125 135 145 150 150 150 150 150 150 150];
>> Z= [0:5:200 205 200 200 190 180 170 160 150 145 145 145 155 165:5:195];
Die ersten 40 (oder mehr) Punkte sind also eine vertikale gerade mit der Steigung 0, da ändert sich nur der Z-Wert. Ich suche quasi eine Möglichkeit eine Spline Funktion (oder eine andere Interpolationsmöglichkeit) durch alle Punkte zu legen und am Ende nur mit der Funktion (Also der Formel) zu arbeiten.
So sieht der plot3 Verlauf aus:

Spline.jpg
Vielen Dank!
 
Das kommt jetzt darauf an was du mit der Formel hinterher "arbeiten" möchtest: Spline interpoliert stückweise, d.h. du Matlab hat intern soviele Funktionen (minus eins glaub ich) wie Punkte. Die Ableitungen sind i.A. unstetig.
Aber wenns dir nur auf Zwischenwerte ankommt dann interpolier halt mit Spline und deinem Punkt 3.00001 musste dir aber angucken dass die Interpolation da nicht "abhaut" (evtl an den Robustness Einstellungen drehen).
 
Ich möchte mit der Formel somit arbeiten, dass ich quasi die Länge eines Segmentes varrieren möchte. Ich habe beispielsweise erstmal nur diesen geraden vertikalen Verlauf für die ersten 50 Punkte. Dafür hätte ich gerne eine Formel (also Gleichung), bei der ich die Länge Varieren könnte. Dann der nächste Halbkreisförmige Bereich - dafür dann auch eine Formel usw. Weisst du wie ich mir die Formel für die Interpolation direkt anzeigen lassen kann , oder direkt in den command window importieren kann?
 
Zurück