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

Problem mit switch/case-Konstrukt

 

sipi
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2012, 16:03     Titel: Problem mit switch/case-Konstrukt
  Antworten mit Zitat      
Hallo beisammen,

mein Problem ist denk ich ein einfaches. Ich habe folgenden Code mit einem Vektor x als Input, der nur Werte im Intervall [0,1] beinhalten soll. Diese Werte sollen entsprechende Zähler um eins nach oben setzen, sollte sich der Wert im entsprechenden Intervall (0,1er Unterteilung) befinden.
Außerdem hat der entsprechende in der ersten Zeile den Maximalwert des entsprechenden Intervalls.

Code:

for e=1:1:10
   
    d=e./10;
    histo(1,e)=d;
    histo(2,e)=0;
   
end


anzahl = size(x)
anzahl = anzahl(2)

for b=1:1:anzahl

switch x(b)
    case {[0, 0.1]}
        histo(2,1) = histo(2,1)+1
    case {[0.1, 0.2]}
        histo(2,2) = histo(2,2)+1
    case {[0.2, 0.3]}
        histo(2,3) = histo(2,3)+1
    case {[0.3, 0.4]}
        histo(2,4) = histo(2,4)+1
    case {[0.4, 0.5]}
        histo(2,5) = histo(2,5)+1
    case {[0.5, 0.6]}
        histo(2,6) = histo(2,6)+1
    case {[0.6, 0.7]}
        histo(2,7) = histo(2,7)+1
    case {[0.7, 0.8]}
        histo(2,8) = histo(2,8)+1
    case {[0.8, 0.9]}
        histo(2,9) = histo(2,9)+1
    case {[0.9, 1]}
        histo(2,10) = histo(2,10)+1
    otherwise
        'ERROR: DOC ist nicht in vorgeschriebenen Intervallgrenzen [0,1]!';
end

end
 



Ich denke die switch/case-Anweisungen sollten von der Grammatik her stimmen. Mein Problem ist jedoch dass nach Ablauf der Funktion, an jeder Stelle in der zweiten Zeile des Vektors 'histo' nach wie vor eine 0 steht.

Ich hoffe mir kann dabei jemand helfen, besten Dank im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


rainer87
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2012, 16:42     Titel:
  Antworten mit Zitat      
warum nicht direkt hist benutzen für ein histogramm? aber ok.

kleine sache zu size
Code:
anzahl = size(x)
anzahl = anzahl(2)

kannst du auch direkt schreiben als:
Code:


zu switch case:
so wie ich das sehe, solltest du da überhaupt keinen wert treffen weil das was du schreibst nicht dem entspricht was du willst, denke ich

wenn du bedingungen abfragen willst wie ist ein wert größer als das oder kleiner oder so, für deine intervalle wäre das wohl so passender:
Code:

switch 1
case x(b)>0.1 && x(b) <0.2
 


mehrere werte fragst du in case ab wenn du das als nur als cell schreibst,
also
case{wert1 wert2 wert3}
vektoren werden nicht als falsche syntax erkannt, aber bei switch darf nur ein skalar oder ein string stehen. d.h. vektoren sind kein fall der mit dem switch wert übereinstimmen können.
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: 12.03.2012, 16:47     Titel:
  Antworten mit Zitat      
Code:
   
x=rand(1,3);    
histo(1,1:10)=0.1:0.1:1;
histo(2,1:10)=0;    
anzahl = size(x,2) ;
for b=1:1:anzahl
histo(2,floor(x(b)*10)+1) = histo(2,floor(x(b)*10)+1)+1 ;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
sipi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 10.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2012, 18:00     Titel:
  Antworten mit Zitat      
Danke!
Ihr konntet mir wirklich weiterhelfen!
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.