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 (2 bedingungen)

 

AssKicker
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2010, 15:33     Titel: if bedingung (2 bedingungen)
  Antworten mit Zitat      
hi leute

mein code:

if (90<matrix(a1,a2)<100)
disp('oben_links = rot')
.......

problem ist das matlab nur prüft ob matrix(a1,a2)>90 ist aber nicht ob
matrix(a1,a2)<100 ist was mache ich falsch

danke schon mal
Private Nachricht senden Benutzer-Profile anzeigen


MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2010, 17:30     Titel:
  Antworten mit Zitat      
du musst die zwei bedingungen mit nem logischen und verbinden, so sieht das dann aus
Code:
if matrix(a1,a2)>90 && matrix(a1,a2)<100
Private Nachricht senden Benutzer-Profile anzeigen
 
AssKicker
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2010, 17:44     Titel: komisch
  Antworten mit Zitat      
also erstmal danke für die antwort das funktioniert so

komisch ist nur das ich das anfangs so programmiert hatte und das nicht funktioniert hatte
jetzt nach ändern geht es aber auf einmal
wird wohl ein anwenderproblem gewesen sein :-)

close
Private Nachricht senden Benutzer-Profile anzeigen
 
uzcyi
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 66
Anmeldedatum: 22.12.15
Wohnort: Nähe Pforzheim
Version: ---
     Beitrag Verfasst am: 26.12.2015, 19:45     Titel: Ich habe das selbe Problem woran kann es liegen ?
  Antworten mit Zitat      
Hallo,
hier der Code
Code:

for c = 1:laengex
         if 0.975 * x(c,1) < x(c+1,1) && x(c+1,1) < x(c,1)*1.025 && 0.975*y(c,1) < y(c+1,1) && y(c+1,1) < y(c,1)* 1.025
 


Kann er ab bestimmten Bedienungen nicht mehr weiter rechnen ?
Oder liegt es daran ,dass ich zwischen denn && ( ) setzen muss ,habe ich zwar versucht
hat nicht funktioniert.

Index exceeds matrix dimensions. Errorr in .. (line 18 ) if..
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: 26.12.2015, 22:34     Titel:
  Antworten mit Zitat      
Hallo,

hast du es mal mit dem Debugger versucht?
Ohne die Dimensionen der Variablen zu kennen, kann man an sich nur raten, aber ich versuch's mal:
Wenn laengex die Länge von x ist, dann ist c in der letzten Iteration also laengex, und c+1 somit laengex+1. Dieser Index übersteigt aber die Länge von x.
Vielleicht reicht es schon aus, die Schleife nur bis laengex-1 laufen zu lassen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
uzcyi
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 66
Anmeldedatum: 22.12.15
Wohnort: Nähe Pforzheim
Version: ---
     Beitrag Verfasst am: 27.12.2015, 01:46     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank !! mit den Tipp von laengex-1 daran lag es.
Ich schreib mal meinen vollständigen Code hier rein:

Code:

function[Fixation,Sacration] = funfprozent(x,y)
% x = DP_EyeData_Original_LeftEye_PupilX(x,1)  
% y = DP_EyeData_Original_LeftEye_PupilY(y,1)


% Längenbestimmen von X und Y
laengex = length(x);
laengey = length(y);


if laengex == laengey
    %Erstellung für Sacrationen und Fixationen
    Sacration(1:laengex,1) = 0;
    Fixation(1:laengex,1) = 0;

   for c = 1:laengex-1
         if 0.975 * x(c,1) < x(c+1,1) && x(c+1,1) < x(c,1)*1.025 && 0.975*y(c,1) < y(c+1,1) && y(c+1,1) < y(c,1)* 1.025
           Fixation(c+1,1) = 1;
            Sacration(c+1,1) = 0;
            else
            Fixation(c+1,1) = 0;
            Sacration(c+1,1) = 1;
         end
    end
 else
    fprintf('Anzahl der Länge von x und y stimmt nicht überein. \n');
end  
 


Liegt hier ein Anfängerfehler vor oder ist alles im grünen Bereich ? Oder was sollte man vermeiden.
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.12.2015, 12:21     Titel:
  Antworten mit Zitat      
Hallo,

läuft der Code fehlerfrei durch? Wenn nicht, welche Fehler liefert er?
Liefert der Code die erwarteten Ergebnisse? Wenn nicht, inwiefern nicht?

Ansonsten: wenn man if innerhalb einer for-Schleife verwendet, kann der Code oft durch logische Indizierung kompakter formuliert werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
uzcyi
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 66
Anmeldedatum: 22.12.15
Wohnort: Nähe Pforzheim
Version: ---
     Beitrag Verfasst am: 27.12.2015, 23:54     Titel:
  Antworten mit Zitat      
Ja , vielen Dank nochmals
das Programm läuft fehlerfrei und die Ergebnisse stimmen auch überein.
Jedoch möchte ich gerne alles richtig bzw. wie ein Professionellen Programmierer programmieren lernen.

Zitat
Ansonsten: wenn man if innerhalb einer for-Schleife verwendet, kann der Code oft durch logische Indizierung kompakter formuliert werden.

Gruß uzcyi
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: 28.12.2015, 11:26     Titel:
  Antworten mit Zitat      
Hallo uzcyi,

Eine sehr wichtige Regel für "professionelle" Programmierer ist:
Zitat:
Avoid pre-mature optimization!

Eine Schleifen-Lösung ist leichter in andere Programmiersprachen übertragbar und entspricht eher der üblichen Pseudo-Code-Schreibweise von Algorithmen. Da Matlab seit Version 6.5 Schleifen optimieren kann, ist die Vektorisierung nicht mehr unbedingt Pflicht. Oft sieht dier Code aber leichter lesbar aus dadurch.

Pre-mature optimization heißt, dass man versucht gleich möglichst schnellen Code zu schreiben, wobei die Übersichtlichkeit leidet und das Debuggen erschwert wird. Das oberste Ziel ist es aber, einen fehlerfreien Code zu schreiben. Wenn er dann erfolgreich (!) getestet wurde, ist die Zeit gekommen mit dem Profiler die Code-Abschnitte zu finden, die die meiste Laufzeit benötigen. Jede Minute, die man zur Verbesserung von Code-Teilen aufwende, die nur 0.1% der Laufzeit benötigen, ist verlorene Zeit, denn sie kann im allerbesten Fall den Code um 0.1% beschleunigen.

Es gilt die Regel:
Zitat:
programTime = programmingTime + documentationTime + debugTime + runTime

Code ohne ausführliche Kommentare ist nach einigen Monaten unbenutzbar.

Zum Code selbst: Fixation und Sacration enthalten die gleichen Informationen. Es wäre deshalb einfacher, nut einen Vektor zu erstellen und den anderen hinterher z.B. per "1-Fixation" zu "kopieren".
Es bringt nichts, die mit 0 vorbelegten Werte in der Schleife mit 0 zu überschreieben. Die entsprechenden Code-Zeilen rauben nur Zeit.

Und nun noch die Vektorisierung mit logischen Indizes:
Code:
if laengex == laengey
   %Erstellung für Sacrationen und Fixationen

   Sacration = zeros(laengex, 1);  % Die andere Version ist auch ok.
   Fixation(1:laengex,1) = 0;
   
   m = 0.975 * x(1:laengex-1) < x(2:laengex) & ...
          x(2:laengex) < x(1:laengex-1) * 1.025 & ...
          0.975 * y(1:laengex-1) < y(2:laengex) & ...
          y(2:laengex) < y(1:laengex-1)* 1.025;
   Fixation(2:laengex) = m;
   Sacration(2:laengex) = ~m;  % Oder: 1 - m
else
    fprintf('Anzahl der Länge von x und y stimmt nicht überein. \n');
end

Gruß, 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.