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-schleife funktioniert nicht

 

Günter64

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2009, 15:50     Titel: if-schleife funktioniert nicht
  Antworten mit Zitat      
Hallo nochmal,

möchte eine if-schleife aufbauen, und zwar vereinfacht mit diesem Code:

Code:


A=[-2 -1 0 1 2];

if (A<=0)
    B=A;
else
    B=A*0;
end

 


Allerdings bekomme ich als Ergebnis lediglich B=[0 0 0 0 0], obwohl ich B=[-2 -1 0 0 0] erwartet habe. Denke es liegt wohl daran, dass es kein Skalar ist. Ist wahrscheinlich auch blöder Anfängerfehler, aber ich bin bisher erfolgreich um Schleifen drumherumgekommen. Nur jetzt nicht.

Wär' super, wenn mir jemand helfen könnte.

Gruß
Günter


ben
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 21.08.08
Wohnort: Stuttgart
Version: R2007a, R2008b
     Beitrag Verfasst am: 17.06.2009, 16:06     Titel:
  Antworten mit Zitat      
Hab jetzt den Fehler auf die schnelle nicht gefunden, kommst aber auch so zur Lösung:

Code:

A=[-2 -1 0 1 2];
X=A<=0; %Erstellen eines Vektors, der 1 für WAHR und 0 für FALSCH ist
B=A.*X; %Hiermit bekommst Du dein Ergebnis
 


Gruß, Ben
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 17.06.2009, 16:40     Titel:
  Antworten mit Zitat      
Hi, nimm lieber ben sein Vorschlag als if Anweisungen. Trotzdem, dass Problem mit deinen If Anweisungen ist, du kannst keine If Anweisungen mit binären Skalaren machen. Eine If Anweisung sollte immer eine wahre oder falsche Aussage betreffen. In deinem Fall kommt aber ein binärer Skalar raus. Matlab interpretiert dies als ein "Falsch" deswegen kommt es zum else, dort wird dann B=A*0 ausgeführt also alle Einträge in A mit 0 multipliziert.

Viele Grüße,

derOli

P.S. ich kopiere mir bei solchen Sachen manchmal die Zwischenergebnisse raus zum Beispiel guck dir mal das Ergebnis von A<0 an usw.
Private Nachricht senden Benutzer-Profile anzeigen
 
Günter64

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 09:22     Titel:
  Antworten mit Zitat      
Okay, der Tip von Ben funktioniert gut für dieses Beispiel, aber dann bin ich darauf festgelegt, dass ich nur mit 0 weiterrechnen kann falls die Bedingung nicht erfüllt ist.

Bei
Code:


A=[-2 -1 0 1 2];

if (A(1,1)<=0)
    B=A;
else
    B=A*10;
end


funktioniert meine if-Anweisung problemlos, da ich ja nur den ersten Eintrag von A anspreche. Wie ist es möglich, dass die Anweisung auf jeden einzelnen Eintrag von A angewendet wird und somit dann nur B=[-2 -1 0 10 20] ausgegeben wird.
Hoffe es ist klar geworden, was ich meine Smile.

Vielen Dank schonmal!

Gruß
Günter
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2009, 09:37     Titel:
  Antworten mit Zitat      
Du könntest eine Schleife drumlegen, aber das ist nicht wirklich hübsch. Wesentlich eleganter ist folgendes:

Code:

A(A>0) = A(A>0)*10
 
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 - 2024 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.