Punto Fijo1
-
Upload
patricio-sabetta -
Category
Documents
-
view
212 -
download
0
Transcript of Punto Fijo1
-
8/17/2019 Punto Fijo1
1/8
Carrera: ING. INDUSTRIAL
Asignatura: Métodos Computacionales
Tema: Raíces – Iteración de Punto Fijo
Clase: Laboratorio
RAÍCES DE ECUACIONES NO LINEALES – ITERACIÓN DE PUNTO FIJO
INTRODUCCIÓN.
Las soluciones de una ecuación no lineal escalar 0)( = x f , se llaman ceros o raíces de la
función f . Existen una gran variedad de métodos o técnicas que permiten resolver el problema las
cuales serán objeto de estudio durante el presente curso. En este momento nos referiremos
específicamente a método conocido como Método Iterativo de Punto Fijo 1 .Si la ecuación por resolver es de la forma 0)( = x f y se puede escribir en la forma:
)( xg x = (1)
entonces se puede desarrollar el esquema iterativo siguiente:
,...,2,1,0),(1 ==+ n xg x nn (2)
a partir de la información que se dispone de la función (posición de la raíz) debe proporcionarse
una aproximación inicial,o
x al valor de la raíz. Siguiendo los pasos descriptos en [1, capítulo 3
sección 3.1.4] la ecuación (1) se obtiene reordenando la ecuación 0)( = x f de modo a que
aparezca el valor de x en el lado izquierdo. Por ejemplo, la ecuación
0 / 1=−
xe x
(3)
Puede reordenarse para obtener x
e x / 1
= (4)
Siendo en este caso
xe xg / 1)( = (5)
Referencia:
[1] “Introducción a los Métodos Numéricos con Pascal” – L.V. Atkinson, P.J. Harley. Universty
of Sheffield.
1 Una denominación alternativa, que se encuentra frecuentemente en la literatura, es Método de
Sustituciones Sucesisvas. No obstante, esta denominación nosotros la reservaremos para hacer referencia auna clase mas amplia de métodos iterativos de resolución de ecuaciones no lineales.
-
8/17/2019 Punto Fijo1
2/8
Como es obvio la generación de la función g no es única y existe una diversidad de posiblesfunciones g. Por ejemplo, tomando logaritmos a ambos lados llegamos a :
)ln(
1)(
x xg =
(6)
O sumando x a ambos lados de la ecuación se llega:
2)(
/ 1 xe x
xg +=
(7)
En todos los casos la metodología de aplicación del método es la misma. El método avanza desde
un valor propuestoo
x , lo cual permite hacer una primera estimación (corrección) del valor de la
raíz
)(1 o xg x = (8)
luego
)(12
xg x = (9)
y así sucesivamente.
Como se verá más adelante una de las ventajas del método, o quizás la mas importante radica en
su sencillez y en la flexibilidad para escoger la función )( xg . Entre las desventajas se encuentra
el hecho que no siempre el método es convergente para una dada función )( xg elegida
arbitrariamente.
Recordemos el enunciado de dos teoremas que aclaran este punto2.
Teorema 1: Si )( xg es continua en [a,b] y )( xg está en [a,b] para toda x en el intervalo,entonces )( xg tiene un punto fijo en el intervalo [a,b]. Además, suponiendo que )( xg′
exista en el (a,b) y que satisfaga
1)(
-
8/17/2019 Punto Fijo1
3/8
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
-2.0
-1.8
-1.6
-1.4
-1.2
-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
PUNTO FIJO
Y
X
g(x) = exp(-2x) x
g'(x) = -2 exp(-2x)
Ejemplo mostrando la que la condición 1)(
-
8/17/2019 Punto Fijo1
4/8
Nos proponemos ahora encontrar utilizando la técnica de punto fijo la raíz más pequeña. De lagráfica vemos que la solución que buscamos se encuentra entre un valor de x = -1 y x = 0 .
rescribiendo la ecuación no lineal en la forma )( xg x = tenemos:
3
2)(
2−+
==
xe x
xg x
y evaluando su derivada )( xg′
3
2)(
xe x
xg +=′
podemos analizar su comportamiento en el intervalo que nos ocupa [-1,0]. Vemos que la función
)( xg′ satisface la condición impuestas por los teoremas que vimos precedentemente. Luego la
serie que se origina al aplicar el esquema Iterativo de Punto Fijo es convergente y converge a un
único punto fijo que coincide con una de las raíces del problema original el cual buscamos
resolver 0)( = x f .
-
8/17/2019 Punto Fijo1
5/8
La ventana de comandos de MatLab que se muestra a continuación permite ver la secuencia deiteraciones que han sido necesarias a los fines de encontrar la raíz del ejemplo anterior. La
función puntofijo.m requiere como argumentos de entrada la función g, el intervalo donde sesabe que se ubica la raíz, el punto de arranque o estimación inicial, la tolerancia admitida en el
valor del punto fijo y un número máximo de iteraciones para prevenir un posible bucle infinito en
el algoritmo.
Mostrando lo enunciado precedentemente.
Apliquemos ahora la función puntofijo.m a la ecuación no lineal dada por la ecuación 3 para lacual vimos tres posibles elecciones de la función )( xg
(I) x
e xg / 1)( = (II)
)ln(
1)(
x xg =
-
8/17/2019 Punto Fijo1
6/8
(III)2
)( / 1 x
e x xg
+=
Analicemos las tres gráficas precedentes a la vista del los teorema 1 y 2 que se enunciaron. En elcaso (I) la derivada de la función g es
xe xg / 1)( =′ . El valor absoluto de g′ está acotado en todo
el intervalo [0.5,5] pero sólo para valores de x mayores a aprox. 1.42 la 1)(
-
8/17/2019 Punto Fijo1
7/8
(caso III)
Otro dato interesante de resaltar el que se sugiere la comparación de los errores obtenidos en loscasos donde la serie es convergente (caso I y III) , vemos que para un mismo número de
iteraciones la secuencia III converge a un error mucho menor que en el caso I. Equivalentemente
hablamos de que la serie III converge más rápidamente que la serie I. Note además que este hecho
está relacionado con el valor de la derivada (caso III 0672.0)5.1( =′g < caso I8657.0)5.1( =′g ).
Actividades propuestas:
1 – Analizar la función de Matlab puntofijo.m . Modifique el algoritmo de forma a
verificar la siguiente definición:
Sunpóngamos que xn, n=0,1,2,..., es una secuencia que converge hacia α y sea
α ε −=nn
x para cada n. Si existen las constantes c y p con
c p
n
n
n=
+
∞→ε
ε 1lim
entonces se dice que la secuencia de iteraciones xn converge hacia α con orden p yconstante asintótica c.
2 – Genere diferentes iteraciones de punto fijo basadas en la función
1)sin(2)( 2 −+= x x x x f
que tiene una raíz en el intervalo [0,1]. Compruebe si hay convergencia aplicando el resultado
del teorema 2 y verifique estas conclusiones programando y ejecutando los programas
resultantes.
3 – Modifique la función puntofijo.m de forma tal de poder visualizar en la gráfica laconvergencia de la secuencia x0, x1, ... hacia el punto fijo.
-
8/17/2019 Punto Fijo1
8/8
function puntofijo_g(f_name,a,b,x0,toler,itermax)
% f_name : nombre del archivo m que define la funcion
% a, b : extremos del intervalo inicial
% x0 : estimacion inicial% toler : tolerancia
% itermax : limite del numero de iteraciones
format long
npoints = 200;
% limpia el area grafica
clf, hold off
% define las escalas del grafico
dx = (b-a) / npoints;
xp = a:dx:b;
yp=feval(f_name,xp);
ymax=max([yp,xp]);ymin=min([yp,xp]);dy=(ymax-ymin)/npoints;
% grafica la funcion g(x)
plot(xp,yp,'r') ; xlabel('x') ; ylabel('f(x)');
% Identifica el metodo de resolucion
title(' Metodo Iterativo de Punto Fijo '), hold on% grafica la funcion x [x=g(x)]
plot(xp,xp,'b')
fprintf('\n\n\Metodo Iterativo de Punto Fijo:\n');
fprintf('Pulse Return al cabo de cada iteracion\n')
fprintf('\n')
fprintf(' Iter a b x f(x) error \n');
def32 = 0;
y1=ymin;
% proceso iterativo
iter=0;
while 1
iter = iter + 1;
x1 = feval(f_name,x0);
% control I
if(x1 == NaN) breck, end
% control II
if(x1 < a | x1 > b)fprintf(' La estimacion de x fuera de los limites del
intervalo.\n'); break
end
% control III
if ( iter > itermax )
fprintf(' Se excedio el limite de iteraciones.\n'); break
end
% evaluacion del error relativoerror = abs((x1-x0)/x1);
% impresion de los resultados parciales
fprintf('%3.0f %10.3f, %10.3f', iter, a, b);
fprintf('%14.8f, %12.4e, %12.4e\n', x1, feval(f_name,x1),error);
% almacena valores de los errores para ser utilizadosposteriormente
if(iter == 1) error1= error; end
if(iter == 2)
error2 = error1;
error1 = error;
end
if(iter > 2)
def32 = 1;error3 = error2;
error2 = error1;
error1 = error;
end
% visualizacion de secuencia de aprox. al punto fijoplot([x0,x0],[y1,x1],':'); plot(x0,x1,'x')
plot([x0,x1],[x1,x1],':');plot(x1,x1,'o')
y1=x1;
% solucion ?
if (error < toler)
fprintf(' Se satisface la tolerancia \n') ; break
end
pause
% nueva estimacionx0=x1;
end
text(a+15*dx,ymax-15*dy, 'Solution final: ')
text(a+55*dx,ymax-15*dy, num2str(x1))text(a+15*dx,ymax-30*dy, 'Iteration: ')
text(a+45*dx,ymax-30*dy, num2str(iter))
fprintf(' Resultado final: %12.6f \n',x1);
% La sucecion originada converge hacia el punto fijo con% orden [p] y constante asintotica [c]
if(def32 == 1)
error1/error2;error2/error3;
p = log(error1/error2)/log(error2/error3);
c =error1/(error2^p);
fprintf(' Orden de convergencia: %12.6f \n',p);
fprintf(' Error asintotico: %12.6f \n',c);end