%                                            Numerik LAK
%                                      MATLAB Repetitorium
%                                      
% Die Grundgröße in MATLAB  ist die Matrix
%
% Spaltenpräferenz

x = 1:24;                           % erzeugt Zeilenvektor (1,2,...,24)
y = reshape(x,3,8);            % anordnen als  3 x 8 Matrix

y(2,3)                                 % Matrixelement in 2. Zeile, 3. Spalte

y([1,3], [7,1,8])                   % Matrixelemente in Zeilen 1, 3 und Spalten 7,1,8 in dieser Reihenfolge
                                          
% Zugriff auf volle Zeile oder Spalte durch :

y(:,[2,5])                            % Zugriff auf Spalten 2 und 5


clear

% Vektorisierung

x = [2 0 1]; y = [3 1 2];
z = x.^2
u = exp(y)

clear

% arithmetische Progression

 % z =  start : inkrement : ende                ergibt Zeilenvektor
 % z =  start : ende                                   Inkrement = 1!
 
 x = 1 : 2:10
 y = 7 : -3 : 2
 z = 3:2:1                                              % ???

% Steuerelemente

%  for Schleife

%  for i = start : inkrement : ende 
%
%      Anweisungen
%
%  end

% wird verwendet, wenn VOR Eintritt in die  Schleife bereits bekannt ist, wie oft die Schleife durchlaufen werden soll.


% Beispiel: 5.  Partialsumme der geometrischen Reihe mit q=.5

n=5;
sum = 1;
q=.5;
q1 = 1;
for i = 1:n
    q1 = q1*q;
    sum = sum + q1;
end

% der Anweisungsblock in folgender Schleife wird NICHT durchlaufen
 clear
for i=2:1
    disp('Schleifendurchlauf'),i
end
i

% Umsetzen der Zählvariable terminiert nicht Schleife

for k=2:4
    k
    k=10
end

% while Schleife
% Ein Anweisungsblock wird abgearbeitet solange eine bestimmte Bedingung
% zutrifft

% while  Bedingung
%
%  Anweisungen
%
% end
                                          
 % Bsp Maschinengenauigkeit
x=1;
while 1+x > 1
    y=x;
    x = x/2;
end
y 

(1+y/2)-1

% Bedingte Verzweigungen

% ohne Alternative

% if Bedingung
%
%        Anweisungen             % wird nur ausgeführt wenn Bedingung wahr
%        
%
% end

% 1 Alternative

% if Bedingung
%
%        Anweisungen  1        % wird nur ausgeführt wenn Bedingung wahr
%        
% else
%
%       Anweisungen  2         % wird nur ausgeführt wenn Bedingung falsch
%       
% end


% mehrere Alternativen

% if Bedingung 1
%
%        Anweisungen  1        % wird nur ausgeführt wenn Bedingung 1 wahr
%        
% elseif Bedingung 2
%
%       Anweisungen  2         % wird nur ausgeführt wenn Bedingung 2 wahr
%   
% elseif Bedingung 3
%
%       Anweisungen  3         % wird nur ausgeführt wenn Bedingung 3 wahr
%  
% else
% 
% Anweisungen          % falls keine der Bedingungen wahr
%
% end

% der else  Block kann auch fehlen

x = fix(100*rand);

y=-1;

while y ~=x
    y = input('guess a number ')
    if y > x 
        disp('too large')
    elseif y<x
         disp('too small')
     else
         disp('Congratulation')
     end
end
 



%
% Skript files

% Dieses file ist ein MATLAB Skript. Exekution eines Skripts hat gleiche
% Wirkung, als wenn man jede Anweisung des Skripts über die Befehlszeile
% (in derselben Reihenfolge) eingegeben hätte.
% Somit haben alle Variablen globalen Charakter. 
% Die Arbeit mit Skripts in längeren Sitzungen kann daher sehr fehleranfällig
% sein.



% Unterprogramme == function files

%  function outputliste = funkt_name(inputliste)
% %
% % fügen Sie als Kommentar eine vernünftige Dokumentation ein
% %
% 
% %Anweisungen
% 
% return     %optional


% Sowohl inputliste als auch outputliste können leer sein
%
% alle Variablen im Unterprogramm müssen entweder über die Inputliste oder
% innerhalb des Unterprogramms initialisiert werden
%
% alle Variablen, die im Unterprogramm definiert werden, existieren nur im
% Arbeitsspeicher des Unterprogramms
%
% Man hat außerhalb des UP KEINEN Zugriff auf die lokalen
% Variablen im UP, ausgenommen  jene in der outputliste
%
% Vorteil: kein Konflikt mit gleich benanten Variablen im Hauptprogramm und
% in UP
%
% ein UP kann selbst wiededr andere UPs aufrufen


% Übergabe des Namens eines Unterprogrammes in inputliste
%
% Dies ist sinnvoll, wenn ein Hauptprogramm ein anderes Unterprogramm aufrufen
% soll, dessen Name (oder Speicherort) flexibel sein soll.
%
%Der  Einfachheit halber nehmen wir an, das UP sei im Arbeitsverzeichnis
%abgelegt und sei deklariert gemäß
%
% function y1 = function(x1,x2,x3)
%
%Um dieses UP oder Varianten davon (mit gleicher Syntax)  im Hauptprogramm
%aufrufen zu können, deklariert man das Hauptprogramm folgendermaßen

%      function out = haupt(sklave, inputliste)
%          % 
%          % hier ist sklave die lokale Bezeichnung für ein aufzurufendes UP!
%          %
%          
%      Anweisungen
%      
%      x = 
%      y =                        % das sind die Variablen, die auch in der inputliste des UP stehen, gleiche Bedeutung, lokale Bezeichnung
%      z =
%      
%        % Auswertung von UP
%        
%        y = feval( slave,x,y,z);
%        
%        
%     return  
    
    % verwendung von haupt.m
    
    % Erzeuge ein Funktionshandle
    
%     f_handle = @slave;
%     
%     z = haupt(f_handle,inputliste)


                                           