Lösung von Aufgabe 21
  - Alle Berechnungen können mit dem
    Matlab-Skript ex21.m ausgeführt werden.
 
  - Zunächst muss die Differentialgleichung - wie oben
    beschrieben - in die Grundform gebracht werden. Die Funktion f kann dann
    z. B. definiert werden durch
    
      - omega = 8.0;
        f = @(t,y) [y(2); -omega^2*y(1)]; 
    
   
  - Die einzelnen Formeln des Algorithmus lassen sich direkt
    nach Matlab übertragen, wenn man noch die Beträge bei Vektoren durch
    die norm()-Funktion ersetzt.
 
  - Alternativ zur Handarbeit können die einzelnen Zeitschritte
    bis zum Überschreiten der Endzeit bequem in
    einer while-Schleife durchlaufen werden. Dabei
    werden die anfallenden Ergebnisse (Zeiten und y-Werte) zur späteren
    Auswertung in Arrays tall
    und yall gesammelt.
 
  - Man erhält dann folgende Schritte: 
    
      -  
        
           
            | h | 
            t | 
            epslok | 
              | 
          
           
            | 0.0058 | 
            0.0058 | 
            0.000017 | 
            ok | 
          
           
            | 0.0290 | 
            0.0348 | 
            0.001933 | 
            ok | 
          
           
            | 0.0865 | 
            0.1213 | 
            0.017935 | 
            ok | 
          
           
            | 0.1227 | 
            0.2440 | 
            0.007227 | 
            ok | 
          
           
            | 0.2356 | 
            0.2440  | 
            0.323707  | 
            zu groß  
 | 
          
           
            | 0.1274  | 
            0.2440 | 
            0.187370 | 
            zu groß | 
          
           
            | 0.0827 | 
            0.3266 | 
            0.012660 | 
            ok | 
          
           
            | 0.1317 | 
            0.4584 | 
            0.069428 | 
            ok 
 | 
          
           
            | 0.1190 | 
            0.5774 | 
            0.010382 | 
            ok | 
          
          
        
       
    
   
  - Vergleich mit Matlabs ode23: 
    
  
 
  -  Am auffälligsten ist die generell kleinere Schrittweite bei
    Matlab. Ursache ist die Beschränkung von h auf maximal 1/10 des
    Zeitintervalls.  Dadurch ist das Ergebnis insgesamt genauer als der
    Handcode, aber auch genauer als gefordert. Durch Vergleich mit der
    bekannten Lösung
    
  
 
  - erhält man leicht den tatsächlichen maximalen Fehler 
    
      - errMax(Handcode) = 0.1005
 
      - errMax(Matlab) = 0.0089
 
    
   
  -  Außerdem wird bei Matlab die Endzeit genau erreicht,
  während der Handcode darüber hinausschießt. Dies lässt sich durch eine
  Anpassung der Schrittweite am Ende leicht erreichen.