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

Vektor mit äquidistanten Werten

 

skewcrap
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 14:06     Titel: Vektor mit äquidistanten Werten
  Antworten mit Zitat      
Hallo

Hatte ein wenig Mühe einen aussagekräftigen Titel zu finden, ich entschuldige mich dafür.

Ich habe eine Matrix mit Dimension mx2. Es handelt sich um x,y Koordinatenpunkte die eine Linie ergeben!

Mein Problem ist, dass diese Punkte sehr ungleichmässig verteilt sind. Am Anfang der Linie sind die Punkte extrem nah beinander, am Ende der Linie sind sie weiter entfernt.

Ich habe ein Script welches mir diese Punkte generiert. Ich verzichte hier auf Details, da es recht umfangreich würde.

Ich kann die Auflösung beliebig wählen, wenn ich diese so wähle dass sie am Ende der Linie hoch genug ist, dann sind die Punkte am Anfang jedoch viel zu dicht beinander.

Ich suche also eine Möglichkeit gewisse Elemente des Vektors zu löschen, damit die Distanz zwischen den Punkten ungefähr gleich ist.

Kann mir jemand einen Tip geben, wie ich das mit Matlab am besten bewerkstelligen könnte?

Ich hoffe meine Beschreibung war verständlich!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.04.2013, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

am besten wäre es natürlich, die Wahl der Auflösung in deinem Skript so anzupassen, dass von vorneherein nur die gewünschten Punkte erzeugt werden.
Sind die Punkte in der "richtigen" Reihenfolge (z.B. von links nach rechts) angeordnet?
Sind die Punkte nach einem bestimmten Muster verteilt, z.B. so, dass sie auf einer logarithmischen Skala gleichmäßig verteilt wirken würden?

Grundsätzlich kannst du:
- beim ersten Punkt anfangen
- den nächsten Punkt suchen, der die gewünschte Entfernung hat, und alle dazwischen rausschmeißen.
- den vorherigen Schritt wiederholen, bis du beim letzten Punkt angelangt bist.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 15:20     Titel:
  Antworten mit Zitat      
Am Script kann ich nicht viel ändern, die Kurve wird durch eine Parametrisierung erzeugt. Der Parameter für die Parametrisierung wird äquidistant gewählt, die Punkte die rauskommen sind aber nicht mehr äquidistant!

Die Punkte sind monoton steigend von A nach B und zwar für beide Koordinaten.

Gibt es keine Funktion in Matlab die man verwenden könnte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.04.2013, 15:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Gibt es keine Funktion in Matlab die man verwenden könnte?

Man könnte natürlich interpolieren (interp1), aber das willst du wohl nicht. Eine Funktion, die genau das macht, was du nach meinem Verständnis möchtest, ist mir nicht bekannt. Da müsste man also selbst ein paar Zeilen Code schreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 15:37     Titel:
  Antworten mit Zitat      
Nein, interpolieren geht nicht! Dann muss ich mich wohl oder übel mal dran setzen und eine Funktion basteln!
Private Nachricht senden Benutzer-Profile anzeigen
 
skewcrap
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 11:50     Titel:
  Antworten mit Zitat      
Habe das ganze nun folgendermassen gelöst:

Code:
function mat=equidist(vec_x,vec_y,res)
n=1;
m=2;
while 1
    if (sqrt((vec_x(m)-vec_x(n))^2+(vec_y(m)-vec_y(n))^2)<res)
        vec_x(m)=[];
        vec_y(m)=[];
    else n=n+1;
         m=m+1;
    end
    if (m==length(vec_x))
        break
    end
end

mat=[vec_x,vec_y];
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.