% P3
% mirar en funcP3_lab7.m funcion, cuyo cero quiere buscarse
x = -3:.01:3;
x = x';
y = zeros(length(x),1);
for i = 1:length(x)
    % no se evalua funcP3_lab7 en cero porque quad da un warning, pero
    % el valor de la funcion en 0 puede calcularse de manera exacta
    if x(i) ~= 0
        y(i) = feval('funcP3_lab7',x(i));
    else
        y(i) = -sqrt(pi)/4;
    end
end
figure(1)
plot(x,y)
xlabel('x')
title('funcion en preg. P3');
hold on
% recta x=0 para que sea mas facil distinguir donde estan los ceros de f
plot(x,zeros(length(x),1),'k')

% segun grafico la funcion tiene un cero entre 0 y 2 y dos entre 2 y 3
% llamando a fzero con intervalo inicial
% comprobando que f cambia de sigo entre 0.1 y 2
% no se da [0,2] como intervalo inicial porque quad da warning al aproximar
% integral con x = 0
disp('valor de f en P3 en 0.1')
feval('funcP3_lab7',0.1)

disp('valor de f en P3 en 2')
feval('funcP3_lab7',2)
disp('cero entre 0.1 y 2')
fzero('funcP3_lab7',[0.1,2],optimset('TolX',1e-10))
% tambien puede darse aproximacion inicial, en lugar de intervalo inicial
% fzero('funcP3_lab7',1,optimset('TolX',1e-10))

% refinando el grafico entre 2 y 3
x = 2:.001:3;
x = x';
y = zeros(length(x),1);
for i = 1:length(x)
    y(i) = feval('funcP3_lab7',x(i));
end
figure(2)
plot(x,y)
hold on
plot(x,zeros(length(x),1),'k')
% un cero esta entre 2.4 y 2.5 y el otro entre 2.5 y 2.6
% comprobando que f cambia de signo
disp('valor de f en P3 en 2.4')
feval('funcP3_lab7',2.4)
disp('valor de f en P3 en 2.5')
feval('funcP3_lab7',2.5)
% llamando a fzero con intervalo que contiene a cero
disp('cero entre 2.4 y 2.5')
fzero('funcP3_lab7',[2.4,2.5],optimset('TolX',1e-10))
% llamando a fzero con aproximacion inicial a cero
% fzero('funcP3_lab7',2.4,optimset('TolX',1e-10))

% comprobando que f cambia de signo
disp('valor de f en 5.2 en 2.5')
feval('funcP3_lab7',2.5)
disp('valor de f en 5.2 en 2.6')
feval('funcP3_lab7',2.6)
% llamando a fzero con intervalo que contiene a cero
disp('cero entre 2.5 y 2.6')
fzero('funcP3_lab7',[2.5,2.6],optimset('TolX',1e-10))
% llamando a fzero con aproximacion inicial a cero
% fzero('func52_lab7',2.6,optimset('TolX',1e-10))
