% Calculo de solucion analitica de
%               -u'' = f(x)
%              u(-1) = u(1) = 0
%
% con     
% f(x) = -(2/eps^2)*( (x-1)*exp(-((x-1)/eps)^2) - (x+1)*exp(-((x+1)/eps)^2)) 
%
% Se logran soluciones analiticas en terminos de funcion de error "erf"
%

clear
syms x y z real
syms eps real positive
u2p = (2/eps^2)*( (x-1)*exp(-((x-1)/eps)^2) - (x+1)*exp(-((x+1)/eps)^2));
up  = int(u2p);
u   = int(up);
%
% Correccion para introducir condiciones de borde en extremos
%
uBC = u - subs(u,x,2);

disp ('Termino de carga f(x) = ');
pretty (simplify(u2p))
disp (' ')
disp ('Derivada de la solucion up(x) = ');
pretty (simplify(up))
disp (' ')
disp ('Solucion analitica u(x) = ');
pretty (simplify(uBC))

%
% Valor del parametro eps (controla regularidad de la solucion)
% Cuando eps --> 0   ==>  se pierde regularidad 
%
epsval = 1.;

sizeFontB = 20;

%
% Plot de la solucion y sus derivadas para el valor de eps elegido
%
figure(1)
ezplot(vectorize(subs(u2p,eps,epsval)),[-2 2])
u2pmax = subs(u2p,{x,eps},{1+epsval/2, epsval})*2.;
axis([-2 2 -u2pmax u2pmax] )
%axis([-2 2 -1 -exp(-1/epsval/epsval)])
grid
title  ('');
ylabel ('u2p(x)');
xlabel ('x');
set(get(gca,'xlab'),'Fontsize',sizeFontB)
set(get(gca,'ylab'),'Fontsize',sizeFontB)
set(get(gca,'title'),'Fontsize',sizeFontB)

figure(2)
ezplot(vectorize(subs(up,eps,epsval)),[-2 2])
axis([-2 2 -1 1] )
grid
title  ('');
ylabel ('up(x)');
xlabel ('x');
set(get(gca,'xlab'),'Fontsize',sizeFontB)
set(get(gca,'ylab'),'Fontsize',sizeFontB)
set(get(gca,'title'),'Fontsize',sizeFontB)

figure(3)
ezplot(vectorize(subs(uBC,eps,epsval)),[-2 2])
grid
title  ('');
ylabel ('u(x)');
xlabel ('x');
set(get(gca,'xlab'),'Fontsize',sizeFontB)
set(get(gca,'ylab'),'Fontsize',sizeFontB)
set(get(gca,'title'),'Fontsize',sizeFontB)

