function newton_2d_v2
% Berechnung des Schnittpunktes zweier Kurven
% mittels 2d-Newton-Methode. ACHTUNG: In der Numerik macht man das
% eigentlich anders!! (Lineares Gleichungssystem in jedem Schritt)
% ss19, 05.06.2019, M.Ries 

fehler = 1   ;     % gross genug, damit while-Schleife startet 
iteration = 1;     % Iterationszaehler starten
x = [ 2, 3]' ;     % Starpunkt fuer die Iteration
fprintf( 'n = %2d, Fehler = %20.16f\n', iteration, fehler   )

axis([0 3 0 3])
hold on                 % Bild NICHT loeschen, hinzumalen
plot( x(1), x(2), '*')  % Plot des Startpunktes

xx = linspace(0,1.5, 200);  % Plot der Funktionsgraphen
yy1= xx.^2    ;  % Parabel
yy2= sqrt( xx ) ;  % Wurzel
plot(xx, yy1, 'g.')
plot(xx, yy2, 'r.')

A  = df(x) ;                % Matrix der Ableitungen
fx = [-x(1)^2+x(2); ...  % 3 Punkte == Fortsetzung des Befehls folgt
      -x(1)+x(2)^2 ];  % Aktueller Funktionswert
  
while (fehler > 1.0d-6) && (iteration < 4)   % Abbruch wenn eins von beiden
                            % NICHT erfuellt ist, beide muessen wahr sein, 
                            % um weiter zu rechnen
    x_neu = x - inv(A) * fx    ;  % Iteration; in der Numerik SO NICHT!!
    iteration = iteration + 1  ;
    fehler = norm( x_neu - x ) ;  % || x_neu - x || in der 2-Norm
    fprintf( 'n = %2d, Fehler = %20.16f\n',iteration, fehler   )
    
    x = x_neu ;              % Umspeichern fuer die naechste Iteration
    plot( x(1), x(2), '*')

    A  = df(x)  ;            % Auswertung der Hessematrix und der Funktion
    fx = [-x(1)^2+x(2); ...  % 3 Punkte == Fortsetzung des Befehls folgt
      -x(1)+x(2)^2 ];  % Aktueller Funktionswert

end
fprintf('Nach n = %2d Iterationen ist x^T = (%19.16f,%19.16f)\n',iteration, x )


function [hesse] = df( x )
   hesse(1,1) = -2*x(1)  ;   % Die vier Komponenten der Ableitungsmatrix
   hesse(1,2) = 1 ; 
   hesse(2,1) = -1  ;
   hesse(2,2) = 2*x(2)  ;
return    
