Académique Documents
Professionnel Documents
Culture Documents
Paso 1: Verificar que cumple el teorema de Bolzano, para asegurarnos que existe una raíz en el intervalo
xa , xb .
Paso 2: Calcular el numero de iteraciones a realizarse, donde es la tolerancia o error pedido,
x x
ln b a
n
ln 2
Paso 3: La primera aproximación a la raíz se determina con la fórmula del punto medio:
xa xb
xz
2
Paso 4: Realizar las siguientes evaluaciones para determinar el intervalo en el que se encuentra la raíz:
x , x
a) Si f xa . f xz 0 , entonces la raíz se encuentra en el intervalo a z
x , x
b) Si f xa . f xz 0 , entonces la raíz se encuentra en el intervalo z b
c) Si a b , entonces f ( xz ) 0 . Ya encontramos la raíz
f x .f x 0
Paso 5: De darse el caso a) o el caso b) se repite todo el proceso, llamando a cada una de esta serie de pasos
“iteraciones”.
Debemos repetir estas iteraciones hasta verificar que se cumple la tolerancia o error pedido con la que debemos
aproximarnos a la raíz.
Al cumplirse la condición del Paso 4, la raíz o solución es el último punto medio que se obtuvo.
x x x xz 1
xz xz 1 tolerancia r z z 1 r % z 100%
xz xz
Programación
%biseccion('0.5*exp(x/3)-sin(x)',0.5,1,0.000001)
function biseccion(f,a,b,tol)
f=inline(f);% inline convierte a f en una función que depende de x
n=ceil((log(b-a)-log(tol))/log(2));
% ceil toma el entero mayor cercano obtenido por la cota de error del método
fprintf('\n it. a b x=(a+b)/2 f(x) \n')
for i=1:n
x=(a+b)/2;
fprintf('%3.0f %10.10f %10.10f %10.10f %10.10f \n',i,a,b,x,f(x))
% muestra en cada paso los valores de: la iteración i, a, b, x y f(x)
% la instrucción %10.10f significa dejar 10 espacios y colocar el número con 10 decimales
% la instrucción \n permite cambiar a una línea nueva
if f(a)*f(x)<0
b=x;
else
a=x;
end
end
fprintf('\n La aproximación de la raíz es: %3.10f \n\n',x)
Método de la falsa posición
f ( xa ) xb xa f ( xa ) xa xb
xr xb xa o xr xa xb
f ( xb ) f ( xa ) f ( xb ) f ( xa )
xi xi 1
p 100%
xi
Programación
%falsaposicion('exp(-x)-log(x)',1,2,0.01)
function falsaposicion(f,a,c,tol)
Fx=inline(f);% inline convierte a f en una función que depende de x
x=a;
Fa=eval(f);
x=c;
Fc=eval(f);
fprintf('\n i a b c F(a) F(b) F(c) |c-a| \n');
i=0;
while abs(c-a)>tol
b=(c*Fa-a*Fc)/(Fa-Fc);
x=b;
Fb=eval(f);
i=i+1;
fprintf('\n %2.0f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f
\n',i,a,b,c,Fa,Fb,Fc,abs(c-a));
if abs(Fc)<tol
break;
else
if Fa*Fb<=0
c=b;
Fc=Fb;
else
a=b;
Fa=Fb;
end
end
end
fprintf('\n La aproximación de la raíz es: %.4f',b);
ezplot(Fx);%grafica de la funcion
grid on;
Método de Newton Raphson
f ( xi ) xi xi 1
xi 1 xi donde f ( xi ) 0 ; a xi xi 1 r
f ( xi ) xi
Programación
%newton('0.5*exp(x/3)-sin(x)',0,0.000001)
function newton(f,x0,tol)
syms x;% convierte a x en una variable simbolica para poder derivar la función
df=diff(f,x); % deriva con respecto a x
f=inline(f);
df=inline(char(df));
% inline convierte a f y su derivada df en una funciones que dependen de x
% char transforma a la derivada como una cadena de caracteres para poder
% definirla como función
fprintf('\n i x f(x) \n')
i=0;
%fprintf('%2.0f %110.10f %10.10f \n',i,x0,f(x0))
x1=x0-f(x0)/df(x0);
while abs(x0-x1)>tol
i=i+1;% contador de iteraciones
fprintf('%2.0f %10.10f %10.10f \n',i,x1,f(x1))
x0=x1;
x1=x0-f(x0)/df(x0);
end
fprintf('\n La aproximación de la raíz es: %3.10f \n\n',x1)
Método de la Secante
f xi xi xi 1 xi xi 1 xi xi 1
xi 1 xi , i 1, 2,3,... ; | a || xi xi 1 | r p 100%
f xi f xi 1 xi xi
Programación
%puntofijo('1.14-2*log10*(0.025+3.1167*10^(-4))',1,0.000001)
function puntofijo(g,x0,tol)
g=inline(g);
fprintf('\n it. x g(x) \n')
i=0;
fprintf('%3.0f %10.10f %10.10f \n',i,x0,g(x0))
x1=g(x0);
while abs(x0-x1)>tol
i=i+1;
fprintf('%3.0f %10.10f %10.10f \n',i,x1,g(x1))
x0=x1;
x1=g(x0);
end
fprintf('\n La aproximación del punto fijo es %3.10f \n\n',x1)