Está en la página 1de 3

M

etodos Num
ericos
FIQ-UADY
Races de ecuaciones no lineales
- Sustituci
on sucesiva - M
etodo de bisecci
on.
Ya hemos visto que el metodo de sustitucion sucesiva o de punto fijo depende de una funcion
auxiliar g(x) y que si esta verifica la condicion de convergencia para dicho metodo, entonces para
aproximar una raz de una funcion dada, basta con evaluar en forma iterativa la g(x) en un punto
o valor inicial.
A continuacion mostramos dos versiones de codigo que funciona ya sea en OCTAVE o en
MATLAB, para este metodo; uno meramente sencillo el cual solo nos da la respuesta y otro que
nos da mas detalle de como el metodo avanza o funciona. Cabe se
nalar que este u
ltimo tiene
mas caractersticas como por ejemplo, TOLERANCIA, MAXIMO DE ITERACIONES. Ambos
programas resuelven el problema dado en clase para la funcion f (x) = ex x, con la funcion
auxiliar g(x) = ex y valor inicial x0 = 0.52.
% programa para el metodo de punto fijo
% para hallar una ra
z real de una funcion no lineal
x0=.52;
g=inline('exp(-x)');
for i=1:20
x=g(x0);
x0=x;
end
x

Guardar este programa con el nombre ssuces_1, o el que t


u elijas.
Mis observaciones:

Ahora incluimos un codigo mas completo. Guardarlo con el nombre ssuces_2.


%Este programa encuentra una raiz real de una
%ecuacion no lineal aplicando el metodo de
%punto fijo, con los siguientes parametros
%x0 valor inicial
%TOL es la tolerancia
%N0 numero maximo de iteraciones.
% % % % % % % % % % % % % % % % % % % % % % %
x0=.52;
TOL=0.00001;
N0=100;
i=1;
%ingresar la funcion g
g=inline('exp(-x)');
while i <= N0
x=feval(g,x0);
diferencia=abs(x-x0);
fprintf(' %d %20.8f %20.8f\n',i+1,x,diferencia)
if diferencia < TOL
return
else

i=i+1;
fprintf(' %d %20.8f %20.8f\n',i,x,diferencia)
x0=x;
end
end

Mis observaciones:

Ejercicio 1 Sea la funcion f (x) = x3 x 1. Una funcion auxiliar es g(x) = x3 1. Generar


la grafica correspondiente para ver si este metodo es aplicable con esta g(x), es decir, el metodo
converge a alguna raz de f (x).
Para graficar puedes usar el siguiente codigo (recomendable guardarlo como script).
%Grafica ejercicio 1
x=-5:0.1:5;
f=x.3-x-1;
gp=3*x.2;
plot(x,f,'r-',x,gp,'b-')
legend('funcion','gprima')
grid on
axis([-5 5 -5 5])

Mis observaciones:

Finalmente, dependiendo de la informacion obtenida, proporciona un valor inicial y completa


la tabla de abajo. Modificar el programa ssuces_2.
n
0
1
2
3
4
5

|xn xn+1 |

xn

Mis conclusiones:

De manera completamente semejante al metodo anterior abordaremos el de biseccion. A continuacion mostramos un codigo sencillo en donde se muestran las columnas: el n
umero de iteracion,
el punto medio y la evaluacion del punto medio. La funcion se trata del ejemplo 1 de la presentacion
unidad_2_p1.pdf.
%Este programa encuentra una raiz real de una
%funcion no lineal
%aplicando el metodo de biseccion.

%p0 valor inicial


%TOL es la tolerancia
x1=-3;
x2=-2;
TOL=1e-6;
f=inline('2*x*cos(2*x)-(x+1)2');
i=0;
while 1/2*abs(x1-x2) >= TOL
x3= (x1+x2)/2;
if feval(f,x3)*feval(f,x1)<0
x2 = x3;
else
x1 = x3;
end
i=i+1;
fprintf(' %d %15.5f %15.5f\n',i,x3,abs(feval(f,x3)))
end

Mis observaciones:

En el siguiente ejercicio, primero se sugiere que realices los calculos a mano y posteriormente
usando MATLAB/OCTAVE.
Ejercicio 2 Para la siguiente funcion determina en que intervalo es aplicable el metodo de biseccion para encontrar alguna de sus races, y posteriormente calcular el n
umero de iteraciones
indicadas en la tabla para obtener una aproximacion de dicha raz.
f (x) = cos(x) 1/x
Para graficar la funcion, puedes usar la lnea
ezplot('cos(x)-1/x')

ingresada directamente en el command window.


Mis observaciones:

n
1
2
3
4
5
6
..
.

pn

Mis conclusiones:

|f (pn )|

También podría gustarte