for und while Schleifen, if Anweisungen

Viele Algorithmen benoetigen eine mehrfache Auswertung von Anweisungen.

Contents

Beispiel zur Wiederholung der for-Schleife: Fibonacci Folge

f = [1 1];
for n=3:10
    f(n) = f(n-1) + f(n-2);
end
fprintf('Fibonacci Zahl f(10) = %d\n',f(10))
Fibonacci Zahl f(10) = 55

while Schleife

Wiederhole eine Folge von Anweisungen solange eine Bedingung erfuellt ist.

help while
 WHILE  Repeat statements an indefinite number of times.
    The general form of a WHILE statement is:
  
       WHILE expression
         statements
       END
  
    The statements are executed while the real part of the expression
    has all non-zero elements. The expression is usually the result of
    expr rop expr where rop is ==, <, >, <=, >=, or ~=.
 
    The BREAK statement can be used to terminate the loop prematurely.
 
    For example (assuming A already defined):
  
            E = 0*A; F = E + eye(size(E)); N = 1;
            while norm(E+F-E,1) > 0,
               E = E + F;
               F = A*F/N;
               N = N + 1;
            end
 
    See also FOR, IF, SWITCH, BREAK, CONTINUE, END.

    Reference page in Help browser
       doc while

Beispiel:

x = 10;
while abs(x)>1
    x = x/2;
end
fprintf('Ergebnis: x = %f\n',x)
Ergebnis: x = 0.625000

Nun wollen wir die Anzahl der benoetigten Iterationen zaehlen.

n=0;
x=10;
while abs(x)>1
    x = x/2;
    n = n+1;
end
fprintf('Ergebnis nach %d Iterationen: x = %f\n',n,x);
Ergebnis nach 4 Iterationen: x = 0.625000

Es ist oft sinnvoll die Anzahl der Iterationen zu beschraenken.

n=0;
x = 20000;
while abs(x) > 1 && n <=20
    x = x/2;
    n = n+1;
end
fprintf('Ergebnis nach %d Iterationen: x = %f\n',n,x)
Ergebnis nach 15 Iterationen: x = 0.610352

Logisches AND und OR

help &
 &  Logical AND.
    A & B performs a logical AND of arrays A and B and returns an array
    containing elements set to either logical 1 (TRUE) or logical 0
    (FALSE).  An element of the output array is set to 1 if both input
    arrays contain a non-zero element at that same array location.
    Otherwise, that element is set to 0.  A and B must have the same 
    dimensions unless one is a scalar.  
 
    C = AND(A,B) is called for the syntax 'A & B' when A or B is an
    object.
 
    Note that there are two logical AND operators in MATLAB.  The &
    operator performs an element-by-element AND between matrices, while 
    the && operator performs a short-circuit AND between scalar values.
    These operations are explained in the MATLAB Programming documentation 
    on logical operators, under the topic of Basic Program Components.
 
    See also RELOP, OR, XOR, NOT.

    Overloaded methods:
       sym/and

    Reference page in Help browser
       doc and

help |
 |   Logical OR.
    A | B performs a logical OR of arrays A and B and returns an array
    containing elements set to either logical 1 (TRUE) or logical 0
    (FALSE).  An element of the output array is set to 1 if either input
    array contains a non-zero element at that same array location.
    Otherwise, that element is set to 0.  A and B must have the same 
    dimensions unless one is a scalar.  
 
    C = OR(A,B) is called for the syntax 'A | B' when A or B is an
    object.
 
    Note that there are two logical OR operators in MATLAB.  The |
    operator performs an element-by-element OR between matrices, while 
    the || operator performs a short-circuit OR between scalar values.
    These operations are explained in the MATLAB Programming documentation 
    on logical operators, under the topic of Basic Program Components.
 
    See also RELOP, AND, XOR, NOT

    Overloaded methods:
       sym/or

    Reference page in Help browser
       doc or

if Anweisung

Im obigen Beispiel kann man die Anzahl der Iterationen auch durch eine IF-Anweisung beschraenken.

break beendet eine while oder for Schleife.

n=0;
x = 20000;
while abs(x) > 1
    x = x/2;
    n = n+1;
    if n==10, break, end
end
fprintf('Ergebnis nach %d Iterationen: x = %f\n',n,x)
Ergebnis nach 10 Iterationen: x = 19.531250
help if
 IF Conditionally execute statements.
    The general form of the IF statement is
 
       IF expression
         statements
       ELSEIF expression
         statements
       ELSE
         statements
       END
 
    The statements are executed if the real part of the expression 
    has all non-zero elements. The ELSE and ELSEIF parts are optional.
    Zero or more ELSEIF parts can be used as well as nested IF's.
    The expression is usually of the form expr rop expr where 
    rop is ==, <, >, <=, >=, or ~=.
 
    Example
       if I == J
         A(I,J) = 2;
       elseif abs(I-J) == 1
         A(I,J) = -1;
       else
         A(I,J) = 0;
       end
 
    See also RELOP, ELSE, ELSEIF, END, FOR, WHILE, SWITCH.

    Reference page in Help browser
       doc if

Beispiel: Vorsicht bei logischen Abfragen

x = cos(pi/3);
if (x==0.5)
    fprintf('cos(pi/3)=0.5\n');
else
    fprintf('cos(pi/3) ist nicht 0.5!\n');
end
fprintf('cos(pi/3)-0.5 = %16.8e\n',abs(x-0.5));
cos(pi/3) ist nicht 0.5!
cos(pi/3)-0.5 =   1.11022302e-16

Logische Operatoren

Innerhalb eines Progamms testet man oft Bedingungen die den weiteren Programmfluss beeinflussen.

Beispiele: "Ist A gleich B?", "Ist A kleiner als B?", "Ist A<B und C<B?", "Ist A>B oder C>B?"

help relop
 Relational operators.
  < > Relational operators.
      The six relational operators are <, <=, >, >=, ==, and ~=.
      A < B does element by element comparisons between A and B
      and returns a matrix of the same size with elements set to logical
      1 (TRUE) where the relation is true and elements set to logical 0
      (FALSE) where it is not.  A and B must have the same dimensions
      (or one can be a scalar).
 
  &   Element-wise Logical AND.
      A & B is a matrix whose elements are logical 1 (TRUE) where both A 
      and B have non-zero elements, and logical 0 (FALSE) where either has 
      a zero element.  A and B must have the same dimensions (or one can 
      be a scalar).
 
  &&  Short-Circuit Logical AND.
      A && B is a scalar value that is the logical AND of scalar A and B.
      This is a "short-circuit" operation in that MATLAB evaluates B only
      if the result is not fully determined by A.  For example, if A equals
      0, then the entire expression evaluates to logical 0 (FALSE), regard-
      less of the value of B.  Under these circumstances, there is no need
      to evaluate B because the result is already known.
 
  |   Element-wise Logical OR.
      A | B is a matrix whose elements are logical 1 (TRUE) where either 
      A or B has a non-zero element, and logical 0 (FALSE) where both have 
      zero elements.  A and B must have the same dimensions (or one can 
      be a scalar).
 
  ||  Short-Circuit Logical OR.
      A || B is a scalar value that is the logical OR of scalar A and B.
      This is a "short-circuit" operation in that MATLAB evaluates B only
      if the result is not fully determined by A.  For example, if A equals
      1, then the entire expression evaluates to logical 1 (TRUE), regard-
      less of the value of B.  Under these circumstances, there is no need 
      to evaluate B because the result is already known.
 
  ~   Logical complement (NOT).
      ~A is a matrix whose elements are logical 1 (TRUE) where A has zero
      elements, and logical 0 (FALSE) where A has non-zero elements.
 
  xor Exclusive OR.
      xor(A,B) is logical 1 (TRUE) where either A or B, but not both, is 
      non-zero.  See XOR.

Beispiele:

true
ans =

     1

false
ans =

     0

x=5;
disp(x>6);
     0

disp(x<10 & x<6)
     1

disp(x>0 | x < -1);
     1

disp(xor(x<10,x>-1));
     0

disp(xor(x<10,x<0));
     1

disp(x>10 | false);
     0

disp(x<10 & true);
     1

Beachte: Angenommen wir wollen ueberpruefen, ob x=-3 zwischen -4 und 0 liegt. D.h. wir wollen pruefen ob -4 <=x <= 0 gilt.

x=-3;
-4 <= x <= 0
ans =

     0

Matlab interpretiert die obige Zeile von links nach rechts. Also zunaechst

-4 <= x
ans =

     1

Das Ergebnis der ersten Abfrage (also 1) wird nun noch mit 0 verglichen.

(-4<=x) <= 0
ans =

     0

Verwendung von Feldern in Bedingungsabfragen

Beispiel:

x = -1 + 2*rand(1,5); %1x5 Feld von Zufallszahlen in [-1,1]
disp(x);

if (x < 0)
    y = -10;
else
    y = 10;
end
disp(y)
    0.4121   -0.9363   -0.4462   -0.9077   -0.8057

    10

Beachte: x<0 ist true, falls alle Komponenten von x kleiner Null sind.