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

if-Abfrage mit mehreren ODER-Bedingungen

 

bill

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 16:17     Titel: if-Abfrage mit mehreren ODER-Bedingungen
  Antworten mit Zitat      
hallo,

ich bin noch neu in Matlab und habe folgenden code:
Code:

 
if z=='soa'
  Hinweis=  'ab geht die Post...'
elseif z=='dbb'
  Hinweis=  'ab geht die Post...'
elseif z=='asr'
  Hinweis=  'ab geht die Post...'
else
Fehler= 'ungültige Eingabe für Exp.Typ (z)'
Fehler='möglich: soa, db, asr'
return                                    
                                             
   
end
 


ich finde das nicht sehr elegant und habe erst mit
if z== 'soa'|'asr' etc herumprobiert, bin aber zu keiner lösung gekommen.

kann mir jemand weiterhelfen, sodass das ganze in weniger zeilen möglich ist?


danke!


_Peter_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2010, 16:27     Titel:
  Antworten mit Zitat      
du beschreibst 2 verschiedene Sachen. bei deinen If-Bedingungen unterscheidest du ZWISCHEN 3 Bedingungen und bei der zweiten version unterschiedest du nur zwischen 2. Das vorneweg.

Generel ist der Vergleich von strings mit
Code:
zu empfehlen, weil es einfach sauberer und schneller ist.

jetzt ist die Frage was du möchtest

Code:

if strcmp(z, 'soa')
  Hinweis=  'ab geht die Post...1'
elseif strcmp(z, 'dbb')
  Hinweis=  'ab geht die Post...2'
elseif strcmp(z, 'asr')
  Hinweis=  'ab geht die Post...3'
else
 Fehler= 'ungültige Eingabe für Exp.Typ (z)'
 Fehler='möglich: soa, db, asr'
return  
 


ist nicht das gleiche wie
Code:

if strcmp(z, 'soa') || strcmp(z, 'asr')
  Hinweis=  'ab geht die Post...1'
elseif strcmp(z, 'dbb')
  Hinweis=  'ab geht die Post...2'
else
 Fehler= 'ungültige Eingabe für Exp.Typ (z)'
 Fehler='möglich: soa, db, asr'
return  
 


Wenn für alle 3 das gleiche gilt kannst du natürlich auch einfach folgendes schreiben:

Code:

if strcmp(z, 'soa') || strcmp(z, 'asr') || strcmp(z, 'dbb')
  Hinweis=  'ab geht die Post...1'
else
 Fehler= 'ungültige Eingabe für Exp.Typ (z)'
 Fehler='möglich: soa, db, asr'
return  
 


Gruß
Peter
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 07.12.2010, 16:37     Titel:
  Antworten mit Zitat      
Hallo,

noch eleganter wuerde es so funktionieren:
Code:

strings = {'soa','dbb','asr'};
if sum(strcmp(z,strings))
...
else
...
end
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2010, 17:01     Titel: Re: if-Abfrage mit mehreren ODER-Bedingungen
  Antworten mit Zitat      
Hallo bill,

Schau Dir mal genau an, was bei z=='soa' und
z== 'soa'|'asr' geschieht:

'soa' ist ein [1 x 3] CHAR Vektor. Ein Vergleich per "==" geschieht dann elementweise:
Code:

z = 'asa'
z == 'soa'
>> [0, 0, 1] logical vector !
 

Bei z== 'soa'|'asr' wirkt zudem noch die Precedence: == wird zuerst berechnet, dann erst |:
Code:

z = 'asa';
z == 'soa' | 'asr'
% Zuerst der == Operator:
[false, flase, true] | 'asr'
% Im command window erscheint [false, true] als [0, 1]
% Dann wird 'asr' in den gleichen Typ umgewandelt wie der erste
% Operand, nämlich LOGICAL:
[fals, false, true] | [true, true, true]
==> [true, true, true]
 

Wenn die IF-Bedingung ein Vektor ist, wird implizit ALL eingefügt.

Wie Du siehst, lauern da in Matlab eine Menge Tücken in dem harmlos aussehenden z=='soa'|'asr' !

Neben SCO's
Code:

wäre auch dies sinnvoll:
Code:

oder
Code:
switch z
case {'soa','dbb','asr'}
  ...
otherwise
  ...
end


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
joe1234
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 26.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 12:47     Titel:
  Antworten mit Zitat      
Das was Bill sucht ist eindeutig switch case Anweisung. (siehe Post von Jan)
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.