| 
|  
|  | 
| 
 
 
	
		|  | Minimum aus einem bestimmten Bereich im Vektor |  |  
 
| 
| Soultan |  
|  
 Forum-Newbie
 
 
 
|  |  
|  | Beiträge: 6 |  |  
|  |  
|  | Anmeldedatum: 03.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: --- |  |  
|  |  |  
|  |  | 
|  Verfasst am: 24.07.2007, 21:07    
Titel: Minimum aus einem bestimmten Bereich im Vektor |  |  
| hallo together, ich folgendes problem. i habe 2 vektoren (d und e) und möchte das minimum von d in bestimmten bereichen in denen e=1 ist ermitteln.
 ich habe wie folgt angefangen, komme aber irgendwie nicht weiter:
 
 d=[10 10 10 10 7 7 8 3 10 10 10 2 5 3 4 10 10 10 10 9 6 4 4 9 10 10 10];
 
 e=[0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0];
 
 g=find(e==1);     %g=[6,7,8,11,12,13,14,15,21,22,23,24]
 
 i=1;
 
 for j=1:12
 if g(i+j)==g(i)+j
 h=g(i:i+j)
 m=min(d(h));
 end
 
 i=i+length(h)-1;    %schiebe i soviele stellen weiter und beginne neu
 
 end
 
 mit hilfe von "g" versuche i rauszufinden wieviele 1er in "e" hintereinander liegen, und bilde dann das minimun aus dem jeweiligen bereich aus "d". am schluss sollte oben als ergebnis rauskommen m=[3 2 4].
 ich weiss es geht auch einfacher,....vielleicht habt ihr da ne bessere idee!?
 
 danke
 
   Soultan
 |  |  
|  |  |  
		| 
 
 |  
| 
| Michaela |  
|  
 Forum-Century
 
 
 
|  |  
|  | Beiträge: 239 |  |  
|  |  
|  | Anmeldedatum: 12.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: bis 2007b |  |  
|  |  |  
|  |  | 
|  Verfasst am: 24.07.2007, 22:29    
Titel: |  |  
| Abend, bin mir nicht sicher ob ich dich richtig verstanden habe. Da ich daheim kein matlab habe, hier mal ein bisschen code "ohne gewähr".
 
 [g,index_g] = find(e ==1)
 
 Sind e und d gleichlang? dann kannst Du ja  folgendes machen
 
 [wert,index] = min(d(g));
 
 wert müsste jetzt eigentlich den minimalen Wert in d enthalten an den Stellen an denen e == 1.
 
 Um den Index jetzt noch auf den ursprünglichen Index zumzumappen, musst Du noch folgendes tun:
 
 
 real_index = index_g(index);
 
 
 Oder habe ich Dich falsch verstanden und Du magst für jeden _zusammenhängenden_ Bereich mit e=1 das Minimum ermitteln?
 |  |  
|  |  
| 
| Soultan |  
| Themenstarter 
 
  
 Forum-Newbie
 
 
 
|  |  
|  | Beiträge: 6 |  |  
|  |  
|  | Anmeldedatum: 03.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: --- |  |  
|  |  |  
|  |  | 
|  Verfasst am: 25.07.2007, 07:54    
Titel: |  |  
| Moin, 
 genau "e" und "d" sind gleichlang. gesucht ist das Minimum aus den bereichen von "d" wo e=1 ist. also solange e=1 soll es aus d den jeweiligen bereich rausnehmen und das Min finden. das erste Min. wäre also im bereich [7 8 3] also min=3.
 
 
 Greetz
 |  |  
|  |  
| 
| Michaela |  
|  
 Forum-Century
 
 
 
|  |  
|  | Beiträge: 239 |  |  
|  |  
|  | Anmeldedatum: 12.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: bis 2007b |  |  
|  |  |  
|  |  | 
|  Verfasst am: 25.07.2007, 18:25    
Titel: |  |  
| Gibt es denn in e nur die Werte 0 und 1? Dann kommst du vielleicht mit find(diff(e) ~=0) weiter, denn das gibt Dir die "Sprungstellen". Und dann jeweils vom aufwärts (+1) zum abwärts (-1) die Sprungstellen nehmen und darin das Minimum suchen? ICh denke, ich würde es so umsetzen. Aber um eine irgendwie geartete Schleife wirst du nicht drumrumkommen...
 |  |  
|  |  
| 
| Littleman |  
|  
 Forum-Newbie
 
 
 
|  |  
|  | Beiträge: 4 |  |  
|  |  
|  | Anmeldedatum: 26.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: --- |  |  
|  |  |  
|  |  | 
|  Verfasst am: 26.07.2007, 12:07    
Titel: |  |  
| ... wie michaela schon ausführte... 
 d = [10 10 10 10 7 7 8 3 10 10 10 2 5 3 4 10 10 10 10 9 6 4 4 9 10 10 10];
 e = [0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0];
 
 %grenzen abstecken
 a = abs(diff(e));
 b = find(a==1);
 
 %untere und obere grenzen
 ll = b(1:2:end)+1;
 ul = b(2:2:end);
 
 %speicher vorher allokieren!! (wenn zunehmend vergrössert wird)
 mins = zeros(1,length(ll));
 
 %minima in den bereichen finden
 for i=1:length(ll),
 mins(i) = min(d(ll(i):ul(i)));
 end
 
 %ausgabe
 disp(mins);
 
 versuche IMMER mit möglichst wenig schleifen zu arbeiten! MATLAB arbeitet array/vektorbasiert!
 |  |  
|  |  
| 
| Soultan |  
| Themenstarter 
 
  
 Forum-Newbie
 
 
 
|  |  
|  | Beiträge: 6 |  |  
|  |  
|  | Anmeldedatum: 03.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: --- |  |  
|  |  |  
|  |  | 
|  Verfasst am: 26.07.2007, 16:23    
Titel: |  |  
| Hallö, 
 Hab jetzt auch schon ne Lösung gefunden; aber eine variante mit verschachtelten schleifen
  falls jem. interessiert kann ichs gerne posten! 
 Danke euch für eure hilfe!
 
   |  |  
|  |  
| 
| Michaela |  
|  
 Forum-Century
 
 
 
|  |  
|  | Beiträge: 239 |  |  
|  |  
|  | Anmeldedatum: 12.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: bis 2007b |  |  
|  |  |  
|  |  | 
|  Verfasst am: 26.07.2007, 19:13    
Titel: |  |  
| @littleman: genauso hätt ich's auch umgesetzt - gut, wer daheim ein matlab hat... 
 @soultan: ja, poste doch mal deine lösung!
 |  |  
|  |  
| 
| Diddy |  
|  
 Forum-Fortgeschrittener
 
 
 
|  |  
|  | Beiträge: 61 |  |  
|  |  
|  | Anmeldedatum: 02.08.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: 2009a |  |  
|  |  |  
|  |  | 
|  Verfasst am: 02.08.2007, 15:01    
Titel: |  |  
| Hallo, 
 mal was prinzipielles: Benutze nie i oder j als Laufvariable, die Zählt Matlab gern als komplexe Zahlen. Nimm stattdessen andere Buchstaben oder ii und jj.
 
 Gruß,
 Christian
 |  |  
|  |  
| 
| Littleman |  
|  
 Forum-Newbie
 
 
 
|  |  
|  | Beiträge: 4 |  |  
|  |  
|  | Anmeldedatum: 26.07.07 |  |  
|  |  
|  | Wohnort: --- |  |  
|  |  
|  | Version: --- |  |  
|  |  |  
|  |  | 
|  Verfasst am: 02.08.2007, 17:01    
Titel: |  |  
| @ Diddy 
 Prinzipiell gebe ich dir ja recht, aber mittlerweile (neuere Matlab Versionen (R200X)) erkennt der JIT (Just-in-Time) Compiler diese Problematik und wählt den entsprechenden Datentyp aus. Kannst ja mal Performance-Messungen machen ...
 
 Den JIT schaltest du mittels "feature accel on/off" ein/aus.
 
 Tipp: Du hast ja Matlab R14 SP3. Lass mal ein(e) for-Schleifen-aufwendige(s) Skript/Funktion (>10000 Iterationen) laufen, öffne die Datei, schreibe NUR ein Kommentar rein, speichere ab, und lass erneut laufen ... interessante Ergebnisse (1. Lauf: 360 sek, zweiter: 17 Sek). Und genau dass ist der JIT ...
 Bei Matlab 200X sind die Unterschiede nicht mehr so groß, bzw. kaum spürbar (alles so um 25 sek.). Da haben Sie das mit dem JIT wohl besser implementiert (das es immer 25 sek ist ...)
 
 So, noch mal sowas nebenbei, hatte kürzlich diese Probleme bei Speedup-Messungen!
 
 Gruß,
 Littleman
 |  |  
|  |  
|     
 
 | 
 
 |  
| Einstellungen und Berechtigungen |  
| 
 | 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
 |
  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.
 
 
 |  |