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-Bedingung

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2011, 18:41     Titel: If-Bedingung
  Antworten mit Zitat      
Hi!

Ich bin Matlab-Anfänger und hab da eine Frage zu den If-Schleifen.

Ich habe mir die Exposition ausgerechnet mit:

Code:


x = dz/dx % size: 1100x740
y = dz/dy % size: 1100x740

expo = y./-x %size: 1100x740


 


Jetzt müsste ich die ergebnis-matrix "Einnorden" und zwar mit folgenden bedingungen:

expo < 0 --> expo = 90 – expo
expo > 90 --> expo = 360 – expo + 90
0 < expo < 90 --> expo = 90 - expo

Mein code dazu wäre:

Code:


        if expo(j,i) < 0;
            expo(j,i) = 90 - expo(j,i);
        elseif expo(j,i) > 90;
            expo(j,i) = 360 - expo(j,i) + 90;
        elseif 0 < expo(j,i) < 90;
            expo(j,i) = 90 - expo(j,i);
        end

 


Dieser Code funktioniert auch. Nur leider bin ich mir nicht sicher, ob matlab das macht, was ich will, oder ob es jetzt immer alle expo, die die bedingungen in der nächsten elseif beziehung erfüllen überschreibt. Ich will, dass matlab immer auf das ursprüngliche expo = y./-x zurückgreift, und damit die if bedingungen erfüllt.

Danke, schon mal.

mfg


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.10.2011, 18:57     Titel: Re: If-Bedingung
  Antworten mit Zitat      
Hallo,

Wenn Du Dir nicht sicher bist, was Matlab macht, setze einen Debugger-Breakpoint in den Code und lasse Matlab Zeile für Zeile den Code durchlaufen. Zudem kannst Du ein paar Testdaten erzeugen und die Ergebnisse prüfen.

Danach noch ein Tipp:
Code:
index = (expo < 0);
expo(index) = 90 – expo(index);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2011, 19:01     Titel:
  Antworten mit Zitat      
Hallo,

Code:
elseif 0 < expo(j,i) < 90;

Das macht wahrscheinlich nicht das, was es soll. Du meinst wohl
Code:
elseif 0 < expo(j,i) && expo(i,j) < 90;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 27.10.2011, 19:02     Titel:
  Antworten mit Zitat      
Die Fälle <0 und > 90 sind gleich...man könnte sie auch zusammenfassen!

Code:

 if expo(j,i) < 0;
     expo(j,i) = 90 - expo(j,i);
 elseif expo(j,i) > 90;
     expo(j,i) = 90 - expo(j,i);
 else % 0 <= expo <= 90
     expo(j,i) = 360 - expo(j,i) + 90;
 end

% Falls 0 und 90 ausgeschlossen werden sollen:
 if expo(j,i) < 0;
     expo(j,i) = 90 - expo(j,i);
 elseif (expo(j,i) > 0) && (expo(j,i) < 90);
     expo(j,i) = 360 - expo(j,i) + 90;
 elseif expo(j,i) > 90
     expo(j,i) = 90 - expo(j,i);
 end

% Falls die beiden Fälle wirklich gleich sind:
 if (expo(j,i) < 0) || (expo(j,i) > 90)
     expo(j,i) = 90 - expo(j,i);
 else % 0 <= expo <= 90
     expo(j,i) = 360 - expo(j,i) + 90;
 end
 


Ob die Bedingungen alle richtig gesetzt sind, kann man sehr leicht mit dem Debugger kontrollieren. Man setzt einfach innerhalb der Bedingung (hier jeweils bei exp0(j,i)=...) einen Breakpoint und lässt das Programm dort anhalten. Dann kannst die Bedingung mit den Daten im Workspace vergleichen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Kevin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 93
Anmeldedatum: 18.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2011, 13:45     Titel:
  Antworten mit Zitat      
Hallo Gast,
Zitat:

if expo(j,i) < 0;
expo(j,i) = 90 - expo(j,i);
elseif expo(j,i) > 90;
expo(j,i) = 360 - expo(j,i) + 90;
elseif 0 < expo(j,i) < 90;
expo(j,i) = 90 - expo(j,i);
end


das ist dein Vorschlag.

Jetzt meiner:

Code:

if expo(i,j)<90 then
  expo(i,j)=90-expo(i,j);
else
  expo(i,j)=360-expo(i,j)+90;
end;
 


Gruß
Kevin
_________________

1000 Buchstaben? Warum nur 6?
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.