% pregunta 1, lab 9, S2-2011, Calculo Numerico (521230)
 
% evaluar y graficar FD (en funcion voltaje_diodo)
% pregunta 1.2a
vD = linspace(0,0.5);
FD = voltaje_diodo(vD);
plot(vD,FD)

% funcion en matlab para la aproximacion de raices de funciones reales
% pregunta 1.2b
vf1 = fzero('voltaje_diodo',0,optimset('TolX',1e-10))

vf2 = fzero('voltaje_diodo',[0,0.5],optimset('TolX',1e-10))

% buscar cero de FD con metodo de biseccion e intervalo inicial [0,0.5]
% pregunta 1.3
[vdb,itb] = biseccion('voltaje_diodo',0,0.5,1e-10);
display('numero de iteraciones del metodo de biseccion')
itb
display('voltaje a traves del diodo')
vdb

% metodo de newton unidimensional para aproximar cero de FD
% x0 = 0
[vdn,itn] = newton1d('voltaje_diodo','dvoltaje_diodo',0,1e-10,20);
display('numero de iteraciones del metodo de newton')
itn
display('voltaje a traves del diodo')
vdn

% cambiando x0, con x0 = 0.8 y x0 = 1 el metodo no alcanza precision
% deseada en menos de 21 iteraciones, esto no significa que el metodo no
% converja para esa escogencia de valor inicial. Puede ocurrir que, 
% en efecto, el metodo no converja para la escogencia de valor inicial,
% pero tambien puede ocurrir que solo necesite realizar mas iteraciones
% para llegar a un punto suficientemente cercano al cero de f
for x0 = [0.2 0.4 0.5 0.8 1]
   [vdn,itn] = newton1d('voltaje_diodo','dvoltaje_diodo',x0,1e-10,20);
   x0
   if itn > -1
       display('numero de iteraciones del metodo de newton')
       itn
       display('voltaje a traves del diodo')
       vdn
   else
       display('metodo no alcanzo precision deseada')
   end   
end

% aumentar numero maximo de iteraciones
for x0 = [0.8 1]
   [vdn,itn] = newton1d('voltaje_diodo','dvoltaje_diodo',x0,1e-10,30);
   x0
   if itn > -1
       display('numero de iteraciones del metodo de newton')
       itn
       display('voltaje a traves del diodo')
       vdn
   else
       display('metodo no alcanzo precision deseada')
   end   
end

% comparando aproximaciones obtenidas con fzero, biseccion y newton
abs(vdb-vf2)
abs(vdn-vf1)



