% Bastian Gross - Numerik - Sommersemester 2014
% Berechnung der impliziten Volatilitaet im Black-Scholes-Modell
% ueber das Newton-Verfahren
%
% Zur Auswertung der Funktion wird die BS-Formel ueber die Simpson-Regel
% approximiert

clear all;
fid=fopen('Programmieraufgabe8_ii.txt','w');

%Verfahrens-Parameter
sigma_0 = 0.05;  %Startwert
h = 1e-6;        %Schrittweite fuer finite Differenzen-Approximation von f'(x)
TOL = 1e-8;      %Abbruchbedingung des Newton-Verfahrens

%Initialisierung
sigma = sigma_0; 
iter = 0;
f = f_newton(sigma);
fprintf(fid,'\n');
fprintf(fid,' Iter.     f(sigma)          sigma   \n');
fprintf(fid,'---------------------------------------\n');
fprintf(fid,'%4d    %+1.6e    %+1.6e \n',iter,f,sigma);
    
%Newton-Verfahren
while abs(f)>TOL
    fstrich = (f_newton(sigma+h)-f)/h;
    sigma = sigma-f/fstrich;
    f = f_newton(sigma);
    iter = iter+1;
    fprintf(fid,'%4d    %+1.6e    %+1.6e \n',iter,f,sigma);
end
fprintf('\n');

%Plot der Funktion 
x = 0.05:0.01:0.4;
for i=1:length(x)
    y(i) = f_newton(x(i));
end
plot(x,y');
title('Funktion f sowie deren Nullstelle \sigma');
hold on;
plot([x(1) x(length(x))],[0 0],'r--');
plot(sigma,f,'r.','MarkerSize',20);