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

Werte mit größten Abständen zueinaner bestimmen

 

fleischcracker.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 09:26     Titel: Werte mit größten Abständen zueinaner bestimmen
  Antworten mit Zitat      
Hallo alle zusammen,

ich habe eine 178560x2 Matrix. Die erste Spalte enthält Zeitwerte (aufsteigend), die zweite enthält Messdatendie ich auswerten möchte.

Folgendes habe ich gemacht:
ich habe für alle 60 Werte der zweiten Spalte(entspricht einer Zeitspanne von 15 Minuten) einen minimalen und maximalen Wert bestimmt und die diese in zwei Matrizen (min 2880x1 und max 2880x1) abgespeichert. Somit habe ich für eine Zeitspanne von 15 Minuten einen minimalen und auch einen maximalen Wert.
Jetzt kommt die eigentliche Herausforderung:

Ich gehe beispielsweise von dem ersten Maximalwert (max 2880x1) aus und möchte den größten Abstand (egal ob positiv oder negativ) zum nächsten Wert bestimmen, dabei kann der nexte Wert sowohl aus der Matrix min 2880x1, wie auch aus der Matrix max 2880x1 kommen (beides zweite Zeile) . Ausgehend von dem neuen bestimmten Maximal-, oder Minimalwert setze ich es solange fort, bis die beiden Matrizen, min und max, durch sind. Hier noch ein kleines Beispiel wie ich es meine:

min max
100 102
120 121
120 129
110 130
23 77
55 69

Ausgehend von dem ersten Maximalwert 102 soll folgende Matrix A entstehen:

A
102
121
129
110
23
69

Ich bin für jede Hilfe sehr Dankbar!!!


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 26.05.2011, 09:46     Titel:
  Antworten mit Zitat      
Das lässt sich bestimmt auch vektorisiert mit arrayfun() & diff() lösen, aber: Ich würde eine ganz einfache Schleife verwenden (bei 2880 Werten kein Problem), die in jedem Schritt die Differenz prüft. Das sollte in der Regel keine Rechenzeit kosten..
Private Nachricht senden Benutzer-Profile anzeigen
 
fleischcracker.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2011, 10:40     Titel:
  Antworten mit Zitat      
eupho hat Folgendes geschrieben:
Das lässt sich bestimmt auch vektorisiert mit arrayfun() & diff() lösen, aber: Ich würde eine ganz einfache Schleife verwenden (bei 2880 Werten kein Problem), die in jedem Schritt die Differenz prüft. Das sollte in der Regel keine Rechenzeit kosten..


Danke für die Antwort,

diff() bildet eine Differenz von zwei nacheinaderfolgenden Werten, das ist sehr schön, passt aber, soweit ich es beurteilen kann, nicht ganz zu meinem Vorhaben. Wie könnte denn eine einfache Schleife aussehen? Meine programmierkenntnisse sind sehr begrenzt, ich habe hier schon mal etwas angefangen, aber komme irgendwie nicht weiter:

k=max;
i=min;

if |k-i2|>|k-k2| than i2, else k2
 
fleischcracker.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 09:55     Titel:
  Antworten mit Zitat      
Ich bekomme es einfach nicht hin Sad

Euer Fleischcracker
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 30.05.2011, 10:30     Titel:
  Antworten mit Zitat      
Hallo Fleischcracker,
hier eine einfache Lösung:
Code:

values_min = [100; 120; 120; 110; 23; 55];
values_max = [102; 121; 129; 130; 77; 69];
A = NaN(length(values_min),1);

A(1) = values_max(1);

for i = 1 : length(A)-1
 if abs(A(i) - values_min(i+1)) >= abs(A(i) - values_max(i+1))
  A(i+1) = values_min(i+1);
 else
  A(i+1) = values_max(i+1);
 end
end
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?

Zuletzt bearbeitet von _Peter_ am 30.05.2011, 12:59, insgesamt 3-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.05.2011, 10:30     Titel:
  Antworten mit Zitat      
Hallo

so:
Code:

start_dist = 0;

min_val    = [100 120 120 110 23 55]';
max_val    = [102 121 129 130 77 69]';


res        = zeros(size(min_val));

for k=1:length(res)
   
   dist1 = abs(min_val(k)- start_dist);
 
   dist2 = abs(max_val(k)- start_dist);

   if  dist1 > dist2
      res(k)     = min_val(k);
      start_dist = min_val(k);
   else
      res(k)     = max_val(k);
      start_dist = min_val(k);
   end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
fleischcracker.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 10:58     Titel:
  Antworten mit Zitat      
_Peter_ und Denny,

Hut ab Jungs!!! Einfach Spitze!!! Ihr seid die Geilsten!!! Es ist genau das was ich wollte, was würde ich ohne Euch machen? Vielen Dank nochmal an euch und alle anderen!!!
 
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.