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

Interpolation von Wegpunkten

 

n.force
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 10:38     Titel: Interpolation von Wegpunkten
  Antworten mit Zitat      
Hallo liebes Forum,

ich habe ein kleines Problem bei der linearen Interpolation von einfachen Wegpunkten mit Hilfe der Funktion
Code:
.

Mein Code sieht so aus:
Code:
way = 3;
   
    plot(lon(way,:),lat(way,:),'ko-');
   
    way_length = sum(~isnan(lon(way,[1:end]))==1); % Aus wievielen Knoten besteht ein Weg
   
    lon_q =[min(lon(way,[1:way_length])):0.1:max(lon(way,[1:way_length]))];
    lat_q = interp1(lon(way,[1:way_length]),lat(way,[1:way_length]),lon_q,'linear');


Und ein Resultat habe ich als Datei angehängt. Die schwarze Linie verbindet die Punkte richtig. Die Interpolation (rot) aber nicht. warum?

Vielen Dank für Eure Hilfe

interp.jpg
 Beschreibung:

Download
 Dateiname:  interp.jpg
 Dateigröße:  55.43 KB
 Heruntergeladen:  361 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 11:24     Titel:
  Antworten mit Zitat      
hmm mich verweundert ein wenig das es da keine fehlermeldung wegen der monotonie giebt.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 11:30     Titel:
  Antworten mit Zitat      
nein, keine Fehlermeldung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 11:34     Titel:
  Antworten mit Zitat      
naja ohne lauffähigs beispiel kann ich das so nicht nachvollzihen. die punkte werden in der reihenfolge verbunden wie sie im vektor vorkommen. deine funltion ist nicht eindeutig. wenn du also deine ordinatenwerte sortierst und diese sortierung dann auf die abszissen werte übernismmst sollte es klappen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 11:39     Titel:
  Antworten mit Zitat      
Aber die Reihenfolge passt so. Das ist ja auch an der schwarzen Linie zu erkennen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 11:43     Titel:
  Antworten mit Zitat      
wie gesagt. für interpolation müssen die werte streng monoton sein. das sind deine x werte nicht. ich weis nicht warum er dir keinen fehler gibt aber das kann ich ohne lauffähiges beispiel nicht nachvollzihen.
Zitat:
Sample points, specified as a row or column vector of real numbers. The values in x must be strictly monotonic and increasing. Furthermore, the length of x must conform to one of the following requirements:

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 14:15     Titel:
  Antworten mit Zitat      
ja, dann liegt es natürlich daran, dass die Werte nicht monoton sind.

Wie könnte ich denn das Problem trotzdem lösen?
Ich möchte einfach zwischen zwei aufeinanderfolgenden Punkten linear interpolieren um die Zwischenräume mit mehreren Datenpunkten zu füllen.

Ich habe auch mal die Daten für latitide und Longitude angehängt.

data.zip
 Beschreibung:

Download
 Dateiname:  data.zip
 Dateigröße:  239.08 KB
 Heruntergeladen:  359 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 14:21     Titel:
  Antworten mit Zitat      
genau so wie du oben gepostet hast. der code liefert das gewünschte ergebniss.
das bild was du oben gepostet hast ist aber nicht das bild das zum code gehört.
in deinem geposteten bild sind lon und lat vertauscht.
in deinem code hingegen ist alles richtig und er macht auch das was er soll
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 14:25     Titel:
  Antworten mit Zitat      
Mhhh,

also hier nochmal mein kompletter Code:

Code:
for i = 1:length(lon)
    %     close all
   
    way = i
   
    plot(lon(way,:),lat(way,:),'ko-');
   
    way_length = sum(~isnan(lon(way,[1:end]))==1);
   
    lon_q =[min(lon(way,[1:way_length])):0.5:max(lon(way,[1:way_length]))];
    lat_q = interp1(lon(way,[1:way_length]),lat(way,[1:way_length]),lon_q,'linear');
   
    hold on
    plot(lon_q,lat_q,'r.')
   
end
xlabel('Longitude')
ylabel('Latitude')
legend('Straße', 'Interpolation')
axis equal


Wo ist da jetzt was vertauscht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 14:47     Titel:
  Antworten mit Zitat      
hmm auf anhieb fällt mir da auch nichts gutes ein. ich brainstorme mal ein wenig:
    2 punkte nehmen. sortieren. interpolieren. zurück tauschen.

    monotie überprüfen. sonst argumente und funktionswerte tauschen. interpolieren. wieder zurück tauschen.

    2d interpolation mit zwert als markierung ob ein wert vorhanden ist.

... ma gucken ob mir noch was besseres einfällt..
allerdings verstehe ich nicht warum das das überhaubt machen willst. lineare interpolation liefert dir ja keine neuen informationen. dir wird damit ja nur eine genauigkeit vorgetäuscht die nicht da ist. und beim plotten werden die punkte eh linear verbunden. du würdest also keinen unterschied erhalten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 14:49     Titel:
  Antworten mit Zitat      
Ich glaube ich habe es hinbekommen:

Code:
for i = 1:length(lon)
    %     close all
   
    way = i
   
    plot(lon(way,:),lat(way,:),'ko-');
   
    way_length = sum(~isnan(lon(way,[1:end]))==1);
    for k=1:way_length-1
        lon_q =[min(lon(way,[k:k+1])):0.3:max(lon(way,[k:k+1]))];
        lat_q = interp1(lon(way,[k:k+1]),lat(way,[k:k+1]),lon_q,'spline');
        hold on
        plot(lon_q,lat_q,'r.')

    end
   
   
   
end
xlabel('Longitude')
ylabel('Latitude')
legend('Straße', 'Interpolation')
axis equal


Stellt sich nur noch die Frage, wie ich lat_q und lon_q vernünftig speichern kann.

Ich brauche diese Interpolation für ein Map Matching.
Private Nachricht senden Benutzer-Profile anzeigen
 
n.force
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 02.03.12
Wohnort: nähe Magdeburg
Version: ---
     Beitrag Verfasst am: 16.06.2015, 15:23     Titel:
  Antworten mit Zitat      
Könntest du mir evtl. nochmal helfen?

Wie bekomme ich denn Zeilenvektoren unterschiedlicher Länge in eine Matrix gespeichert. Die Vektoren sollen dann jeweils untereinander stehen?

also als Beispiel:
x1 = [1 2 3];
x2 = [8 9 7 5 2];
x3 = [5 3];

gesamt = [1 2 3 NaN NaN; 8 9 7 5 2; 5 3 NaN NaN NaN];
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.06.2015, 15:28     Titel:
  Antworten mit Zitat      
zuerst würde ich mal nicht den index im namen verstecken. für sowas sind cellarrays da zb.
ich würde dann ein nan array mit der größten dimension erstellen und dann mit ner schleifen die vektoren da reinlegen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
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.