% % % % % % % % % % % % % % % % % % % % % 
%                                       %
% Loesung der Programmieraufgabe 33     %
%                                       %
% Hauptprogramm Aufgabe33.m             %
% Nutzt die Unterroutinen f1,f2,f3      %
% und das Newton-Verfahren my_Newton.m  %
% zur Berechnung von Nullstellen von    %
% den Funktionen f1,f2,f3               %
%                                       %
% % % % % % % % % % % % % % % % % % % % % 

clear all
close all


% (a): 
% 2 - dimensionales Problem: 

n=2;        % Raumdimension
h=0.0001;   % Schrittweite

% Startwerte:
x = zeros(n,1);
x(1)=1;
x(2)=1;
z = x(1)+i*x(2);


% Aufruf der Routine my_Newton. f1 wird als Zeiger uebergeben. 
[x,fehler,k] = my_Newton(@f1,x,h,n,10^(-10));
z = x(1)+i*x(2);

disp('Die Nullstelle lautet z =')
disp(z)

% Auch moegliche Startwerte: zB (10,10),(5,50),...

% Plot des Fehlers:
figure(1)
semilogy(0:k,fehler)
title(['Fehlerplot zu A 33 (a): ',num2str(k),' Iterationen wurden benoetigt'])
xlabel('Iteration k')
ylabel('Fehler ||f(x_k)||_2')

Nullstelle1 = x;

% Loeschen einiger Variablen
clear x fehler k

% ================================================

% (b): 
% 7 - dimensionales Problem: 

n = 7;        % Raumdimension
h = 0.0001;   % Schrittweite

% Startwerte:
x = zeros(n,1);
x(1)=0.5;
x(2)=0;
x(3)=0;
x(4)=0.5;
x(5)=0;
x(6)=0.5;
x(7)=2;

% Aufruf der Routine my_Newton. f2 wird als Zeiger uebergeben. 
[x,fehler,k] = my_Newton(@f2,x,h,n,10^(-10));

disp('Die Nullstelle lautet x =')
disp(x)

% Plot des Fehlers:
figure(2)
semilogy(0:k,fehler)
title(['Fehlerplot zu A 33 (b): ',num2str(k),' Iterationen wurden benoetigt'])
xlabel('Iteration k')
ylabel('Fehler ||f(x_k)||_2')

Nullstelle2 = x;

clear x fehler k

% ================================================


% (c): 
% 2 - dimensionales Problem: 
n = 2;        % Raumdimension
h = 0.0001;   % Schrittweite

% Startwerte:
x = zeros(n,1);
x(1)=-0.5;
x(2)=0.5;

% Aufruf der Routine my_Newton. f3 wird als Zeiger uebergeben. 
[x,fehler,k] = my_Newton(@f3,x,h,n,10^(-10));

disp('Die Nullstelle lautet x =')
disp(x)

Nullstelle3 = x;

% Plot des Fehlers:
figure(3)
semilogy(0:k,fehler)
title(['Fehlerplot zu A 33 (c): ',num2str(k),' Iterationen wurden benoetigt'])
xlabel('Iteration k')
ylabel('Fehler ||f(x_k)||_2')

