function w1=nlbvpfd(inter,bv,n)
% Diferencias finitas no lineal para resolver BVP
%   inter, intervalo de integración; bv, valores de contorno;
%   n, número de pasos.
% 
 a=inter(1); b=inter(2); ya=bv(1); yb=bv(2);
 h=(b-a)/(n+1); w=zeros(n,1); w1=w+0.01;
 while abs(w1-w)>sqrt(eps)     % Iteraciones de Newton-raphson
    w=w1;
    w1=w-jac(w,h,n)\f7(w,h,bv,n);
 end
 close all, plot ([a a+(1:n)*h b],[ya w1' yb]);
end

function y=f7(w,h,bv,n)
 y=zeros(n,1); 
 y(1)=bv(1)-(2+h^2)*w(1)+h^2*w(1)^2+w(2);
 y(n)=w(n-1)-(2+h^2)*w(n)+h^2*w(n)^2+bv(2);
 for i=2:n-1
    y(i)=w(i-1)-(2+h^2)*w(i)+h^2*w(i)^2+w(i+1);
 end
end

function a=jac(w,h,n)
 a=zeros(n,n); 
 for i=1:n
    a(i,i)=2*h^2*w(i)-2-h^2;
 end
 for i=1:n-1
    a(i,i+1)=1;
    a(i+1,i)=1;
 end
end