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

Reduktion auf vordefinierte Zahl

 

Senraphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2014, 13:13     Titel: Reduktion auf vordefinierte Zahl
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgende Zielsetzung:

Ich möchte meinen Datensatz mit rund 400 Stützpunkten auf genau 220 reduzieren.
Der Datensatz umfasst verschiedenste Information. Die für mich entscheidende Information bezieht sich auf Differenzwerte, die alle positiv sind.
Nun möchte diejenigen 180 Stützpunkte (400-220) entfernen, die den kleinsten Differenzwert haben.
Zusätzlich soll der Anfangs- und der Endpunkt, sowie der höchste und der niedrigste Stützpunkt nicht gelöscht werden. Die Information über die Höhe eines Stützpunktes steht in einer gesonderten Spalte.
Dies habe ich bereits mit max/min ausgeben lassen.

Obwohl ich schon ziemlich alles versucht habe komme ich nicht auf einen geeigneten Lösungsansatz. Kann mir jemand bitte helfen?
Vielen Dank.

Beste Grüße
Senraphil
Private Nachricht senden Benutzer-Profile anzeigen


Senraphil
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2014, 08:53     Titel:
  Antworten mit Zitat      
hat keiner eine Idee??
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 22.07.2014, 10:56     Titel:
  Antworten mit Zitat      
Ich denke das liegt daran, dass kein Codebeispiel der "alles versucht" Versuche vorliegt. Mir fällt es immer einfacher einen existierenden Code zu verbessern - den Fehler zu finden, als einen Code zu entwicklen mit der Gefahr doch etwas falsche verstanden zu haben.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Senraphil
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2014, 11:10     Titel:
  Antworten mit Zitat      
Ok. Folgendes Beispiel:

Mein Datensatz umfasst 421 Stützpunkte. Die Punkte sind definiert durch eine Kilometerangabe, Differenz zum nächsten Punkt und einer Höhenangabe. Diese Informationen sind in den ersten drei Spalten für jede Zeile vorhanden.
So nun kommt die Aufgabe: Ich möchte den Datensatz nun auf genau 220 Stützpunkte reduzieren. Allerdings darf der Start-/Endpunkt sowie der höchte/tiefste Punkt nicht gelöscht werden. das Kriterium zur Reduktion soll die Differenz zwischen den Stützpunkten sein.

So nun habe ich mir zunächst die Anzahl der zu löschenden Stützpunkte mit
Code:
tol = 220
tol_inv=size(data,1)-tol

ausgeben lassen. Jetzt weis Matlab zumindest mal wie viel Stützpunkte gelöscht werden sollen: 180.

An dieser Stelle habe ich mir dann mit min und max die höchste/tiefste Höhe ausgeben lassen.

Nun sollen anhand der Höhendifferenz (Spalte 2) zwischen den Punkten die zuvor berechneten Reduktionsanzahl (180) reduziert werden. Es sollen genau die Punkte gelöscht werden, die die kleinste Höhendifferenz zu ihrem nächsten Stützpunkt aufweisen. An dieser Stelle komme ich nun nicht weiter.
Wie kann ich die 180 Punkte finden, die die kleinste Höhendifferenz zum nächsten Punkt aufweisen?
Und wie kann Matlab die zu löschenden Daten zählen?

Ich hoffe ich konnte dir eine genaue Darstelkung meines Problems liefern.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2014, 12:40     Titel:
  Antworten mit Zitat      
Code:

s = cumsum(rand(421,1)); % Kilometerangabe
h = 2*sin(0.01*s) + 0.05*randn(size(s)); % Höhe

plot(s,h);


while numel(s) > 220
    [hh,ind_min] = min(h);
    [hh,ind_max] = max(h);
    ind_that_can_be_deleted = setdiff([2:numel(s)-1],[ind_min,ind_max]);
    [m,ind_s] = min(diff(s(2:end-1)));
    s(ind_s+1) = [];
    h(ind_s+1) = [];
end


hold on;
plot(s,h,'r');
 


Mir ist erst mal nur eine Lösung mit Schleife eingefallen. Nicht schön aber vielleicht ein Anfang.
Private Nachricht senden Benutzer-Profile anzeigen
 
Senraphil
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 16.04.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2014, 09:45     Titel:
  Antworten mit Zitat      
Vielen Dank Thomas84!!

Könntest du mir eventuell kurz erklären, was die einzelnen Schritte machen?
So ganz verstehe ich es nämlich nicht.
Danke.
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.