Está en la página 1de 2

% dicoUO237092

% Autor: Ana Isabel Fdez.-Tresguerres Mata


% 3ºGF PL4 MNAF
% Programa de búsqueda de raíces de una función por el método de bisección o
dicotomía:

function [v,nit]=regulafalsi(f,a,b,nmax,tol)
% x, estimación del límite de la sucesión
% f, función definida como cadena de caracteres en la variable x
% v, dominio en un vector [v(1),v(2)]
% n, es el número de iteraciones, hacemos una distinción entre n>1, número de
iteraciones y n<=1
% tolerancia del error

% Estamos asumiendo que f(v(1))·f(v(2))<0


% Ejemplo de uso: x=dico('x^2-2',[1,2], 10)

f=inline(f); %
fa=f(a); fb=f(b); % Evaluamos la función en a y en b y las denominamos
como fa y fb
if fa*fb>0 % Comprobamos si fa*fb es mayor de cero, si lo
verifica nos aparece
% en pantalla que no hay cambio de sgno en el
% intervalo que hemos escogido y por tanto no hay
% raíz
disp('No hay cambio de signo en el intervalo')
v=[];nit=[];
return
elseif fa==0 % Sino ocurre eso, entonces y nos devuelve en
pantalla que encontró que
% tiene una raíz.
disp('raiz encontrada')
v=a;nit=0;
return
elseif fb==0
disp('raiz encontrada')
v=b;nit=0; % No hicimos ninguna iteración aún
return
end % Fin del bucle

figure
clc
subplot(2,1,1); % En una misma pantalla nos dibuja dos graficas una
encima de otra
plot([a b],[0 0],'r') % Nos representa
hold on % Mantiene la gráfica
fplot(f,[a b]); % Representa
title('Grafica de la funcion') % Título de la gráfica
subplot(2,1,2);hold on
title('Visualizacion del proceso') % Título del gráfico
xlabel(' Subintervalos ') % Título eje x
ylabel(' Numero de iteracion') % Título eje y
format long % Formto con más decimales

nit=0;
a1=a;
b1=b;

for i=1:nmax% Bucle desde 1 hasta el número de iteraciones que queramos

plot([a1 b1],[i i]);


axis([a b .5 i+.5]);
pause
v(i)=(a1*f(b1)-b1*f(a1))/(f(b1)-f(a1));
nit=nit+1;
fvi=f(v(i));

if abs(a1-v(i))<tol | abs(b1-v(i))<tol
return
elseif f(a1)*fvi < 0
b1=v(i);

elseif f(a1)*fvi > 0


a1=v(i);

else
disp(' fue encontrada la raiz! ');
return
end

end

También podría gustarte