function Simula_Circuito_Diodo()
    % Paramentros del Cicuito
    
    Vmax = 10;  % Volts;
    R    =  1.8; % ohms
    
    %tiempo de evaluación
    t = [0:0.001:0.1];
    %Voltaje en función del tiempo
    v = Vmax*sin(377*t);
    
    for k = 1:length(t)
        I(k) = ReglaFalsa(@Circuito_Diodo, -Vmax/R, Vmax/R, [v(k), R]);
    end
    
    plot(t, v, t, I);  
    title('Solución de un circuito con Diodo');
    xlabel('tiempo s');
    legend('Voltaje', 'Corriente');
end


function di = Circuito_Diodo(I, p)
   V = p(1);
   R = p(2);
   di = V - R*I - Vd(V, I);
end

function r = ReglaFalsa(f, a, b, p)
%ReglaFalsa(f, a, b, p)
%   f : función a evaluar
%   a : inicio del intervalo
%   b : fin frl intervalo
%   p : parametros

 while 1 
     c = a - f(a,p)*(b-a)/(f(b,p) - f(a,p));
     if(abs(f(c,p)) <= 1e-06)
         break;
     end;
     if f(a,p)*f(c,p) < 0 
         b = c;
     else
         a = c;
   end;
 end;
 r = c;
end

function V = Vd(Vf, I)
% V = Vd(Vf, I)
%   Vf voltaje de la Fuente
%   I Corriente en el circuito

  Is = 1e-12;
  Vt = 25.85e-3;
  
  if I>=0
      V = log(I/Is+1)*Vt;
  else
      V = Vf;
  end
end