Maple
Maple
Maple
ASIGNATURA:
PRCTICA N 12: MTODOS RESOLUCIN DE UNA ECUACIN NO LINEAL (I): Mtodos de biseccin y aproximaciones sucesivas CURSO 2006-07
PRCTICA ELABORADA POR: Prof. Carlos Conde Lzaro Prof. Arturo Hidalgo Lpez Prof. Alfredo Lpez Benito Prof. Carlos Paredes Bartolom Prof. Ramn Rodrguez Pons-Esparver Depto. de Matemtica Aplicada y Mtodos Informticos Escuela Tcnica Superior de Ingenieros de Minas Universidad Politcnica de Madrid Mayo 2007
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
OBJETIVOS DE LA PRCTICA
1. Conocer los comandos bsicos de MAPLE para la resolucin numrica de una ecuacin no lineal. 2. Realizar algoritmos simples que utilicen estructuras iterativas para resolver una ecuacin no lineal que sigan los esquemas numricos de biparticin y de aproximaciones sucesivas. 3. Para el mtodo de biparticin: analizar, sobre ejemplos tratados con MAPLE la influencia de los intervalos iniciales seleccionados sobre el nmero de iteraciones y la convergencia hacia la solucin. 4. Para el mtodo de aproximaciones sucesivas: analizar sobre ejemplos tratados con MAPLE la influencia de las diferentes transformaciones del problema no lineal a uno de punto fijo sobre la convergencia del mtodo, a travs del comportamiento de las condiciones de convergencia.
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
BIBLIOGRAFA
[1] C. Conde Lzaro y E. Schiavi (2007) Resolucin de ecuaciones no lineales. Apuntes disponibles en el Open Course Ware de la Universidad Politcnica de Madrid. [2]. C. Conde y G. Winter (1990). Mtodos y algoritmos bsicos del lgebra numrica. Ed. Revert. Los algoritmos que se siguen en la prctica se pueden consultar en: [3]. C. Conde, A. Hidalgo y A. Lpez. Resolucin de ecuaciones lineales: Mtodos de tipo gradiente. Presentaciones disponibles en el Open Course Ware de la Universidad Politcnica de Madrid.
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
EJEMPLOS
Ejemplo primero: comandos bsicos de para la resolucin ecuaciones no lineales. MAPLE
MAPLE permite resolver una ecuacin o un sistema de ecuaciones no lineales usndose para ello diferentes comandos: solve() fsolve() realroot()
Comando solve() Su uso general es la resolucin de ecuaciones. Por ejemplo: > solve(cos(x)+y,x);
arccos ( y )
Si el problema es un conjunto de ecuaciones, tantas como incgnitas, el sistema se especifica como un conjunto de ecuaciones (recuerda que se escriben entre llaves {eq1,eq2,...}) y se resuelve para un conjunto de incgnitas (recuerda que tambin van entre llaves {var1,var2,...}): > solve({x+y=1,2*x+y=3},{x,y}); { x = 2, y = -1 } Cuando el comando solve no es capaz de encontrar una solucin a la ecuacin o al sistema de ecuaciones, no presenta ninguna salida. > solve({x+y=1,2*x+2*y=3},{x,y}); Este comando, no slo permite resolver ecuaciones lineales, sino tambin no lineales, trabajando tanto con aritmtica exacta: > solve(x^3-6*x^2+11*x-6,x);
1, 2, 3
> solve(6*x^2-11*x-6,x); 11 + 12
265 11 , 12 12
265 12
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> fin;
fin
Comando fsolve() Se trata de un comando que permite la obtencin de las races de una ecuacin o de un sistema, lineal o no lineal, en coma flotante, ya sean estas reales o complejas. La bsqueda de la solucin se realiza aplicando un algoritmo que encuentra las raices reales del problema, a no ser que se especifique lo contrario. La forma de utilizar este comando es totalmente analoga a la del uso de solve(): > fsolve(tan(sin(x))=1,x); 0.9033391108 > p:=3*x^4-16*x^3-3*x^2+13*x+16; fsolve(p=0,x); p := 3 x 4 16 x 3 3 x 2 + 13 x + 16
1.324717957 , 5.333333333
En el caso de que no sea capaz de encontrar alguna solucin, puede aportarse informacin adicional para que esta se localice. En el ejemplo anterior se han encontrado dos soluciones reales, pudiendo buscar una en concreto: > fsolve(p=0,x=1..2);
1.324717957
Esto resulta bastante til cuando se buscan las races de funciones que pertenezcan a intervalos concretos. Nota: a la hora de especificar el intervalo de bsqueda de la solucin hay que tener en cuenta que se trata de un intervalo abierto, con lo que los puntos extremos no se encuentran dentro del rango de la bsqueda. Es posible tambin localizar las races complejas, indicndolo dentro de los parmetros del comando. Como el polinomio anterior es de cuarto grado, faltan dos soluciones que sern complejas:
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> fsolve(p=0,x,complex); -0.6623589786 0.5622795121 I, -0.6623589786 + 0.5622795121 I, 1.324717957 , 5.333333333 > fin;
fin
Comando realroots() Cuando se trabaja con poliomios de una variable y se desea conocer los intervalos de cierto tamao en cuyo interior hay una raz del mismo es posible utilizar el comando realroot(). Este comando proporciona una lista de intervalos en cuyo interior se encuentran cada una de las races reales de un polinomio de coeficientes enteros. El resultado se proporciona en forma de lista de parejas de nmeros racionales: o cuando ambos valores de la pareja son iguales ste representa un nico valor (raz entera del polinomio) o cuando son diferentes representan un intervalo abierto donde se encuentra esta raz. > restart: Sea el polinomio p: > p:=3*x^4-16*x^3-3*x^2+13*x+16; realroot(p); p := 3 x 4 16 x 3 3 x 2 + 13 x + 16
[ [ 0 , 4 ], [ 4 , 8 ] ]
El tamao de los intervalos de salida los ha tomado automticamente. Es posible, especificar el tamao de los intervalos en los que se encuentran las soluciones: > realroot(p,1/10000); 2713, 21705 , 87381 , 43691 2048 16384 16384 8192 Cuando el polinomio posee races enteras estas se muestran con ambos extremos iguales:
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
es interesante utilizar estos intervalos, por ejemplo, como dato de entrada para los algoritmos iterativos de bsqueda de races de polinomios, especialmente cuando se utiliza el mtodo de biparticin, que toma como datos de entrada el intervalo donde se desea encontrar la raz. > fin;
fin
Nota: hay que sealar que el comando realroot utiliza un esquema semejante al mtodo de biparticin para la determinacin de los intervalos donde se encuentra la raz (regla de los signos de Descartes). Una vez vistas las diferentes posibilidades que ofrece el entorno de trabajo MAPLE para resolver una ecuacin no lineal estudiemos a continuacin cmo se programan algunos de los algoritmos ms comnmente utilizados para ste tipo de problemas no lineales, que pueden dar solucn a algunos problemas que MAPLE no puede resolver.
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
multiplicidades fuese impar) dentro del intervalo (a, b). EL que la funcin cambie de signo es equivalente a que f(a)f(b) < 0 Cuando la funcin toma un signo igual en los extremos de un intervalo puede ocurrir que o bien no haya raz en su interior o bien que haya una multiplicidad par de races. En ese caso f(a)f(b) > 0 no siendo posible entonces asegurar la existencia de solucin al problema no lineal f(x) = 0 El mtodo de biparticin se basa en encontrar iterativamente los sucesivos intervalos para en los que se verifica el cambio de signos de los valores en los extremos tomados por funciones continuas, siendo en cada iteracin el tamao del intervalo tomado la mitad del precedente. El esquema computacional seguido puede resumirse como sigue: 1.- entrada de datos (a,b), f(x),eps 2.- inicio x <-- (a+b)/2 3.- bucle iterativo mientras |a-b|>eps si f(x)f(a) > 0 entonces a <-- x si no b <-- x fin condicin x <-- (a+b)/2 fin bucle 4.- escribir solucin x <-- (a+b)/2 Como se ha sealado anteriormente, este algoritmo converger a una raz, siempre y cuando f(x) sea continua en (a, b) y adems f(a)f(b) < 0 para el intervalo inicial. El criterio de parada del algoritmo es directamente el criterio de convergencia del mismo, es decir, que se alcance un intervalo de tamao: |a-b| < . El nmero de veces que se lleva a cabo este proceso iterativo se demuestra que est dado por:
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
imax
ba ln = 1 ln(2)
que nos asegura la relacin adecuada del tamao del ltimo intervalo y con el tamao del primer intervalo (suponiendo que la primera iteracin toma como ndice el 0). En el procedimiento que sigue se recoge el algoritmo de biparticin
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
donde se aprecia que posee una raz dentro del intervalo (2,3). Para buscar dicha raz nos aseguramos de que:
> a:=2;f(a);b:=3;f(b);f(a)*f(b); a := 2
-17 b := 3
2 -34
con lo que puede iniciarse el proceso de bsqueda en este intervalo. Para ello utilicemos el procedimiento antes escrito.
> read "bipart.m":
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> epsilon:=1.*10^(-4.); bipart(a, b, f,epsilon ,solucion, numiter): := 0.0001000000000 > solucion; numiter;
2.924011231 13
En 13 iteraciones hemos encontrado la solucin de la ecuacin x3 - 25 = 0 con una precisin mayor a 10-4. Con el objeto de poder graficar la posicin de los puntos medios del intervalo de bsqueda de la raz repetimos el proceso de biparticin sin usar el procedimiento anterior y almacenando las posiciones de los puntos medios de cada intervalo. Usaremos adems una tolerancia menor = 10-7.
> eps:=10^(-7); numit:=evalf((ln(abs(b-a)/eps)/ln(2.))-1.); 1 eps := 10000000
numit := 22.25349667
> numit:=round(numit)+1;
numit := 23
> for j from 0 to numit by 1 do izq[j]:=a: der[j]:=b: ptmed[j]:=evalf(a+((b-a)/2.),14): vmed:=evalf(f(ptmed[j]),14): if (vmed=0) then print(`la raiz buscada es `,ptmed[j]): else if(vmed*f(a)>0) then a:=ptmed[j]: else b:=ptmed[j]: fi: fi: od:
La solucin alcanzada tras numit iteraciones es almacenda en el vector ptmed[], posicin numit: 10
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> ptmed[numit];
2.9240177273749
El cmo se han comportado los sucesivos puntos solucin (puntos medios de los intervalos en cada iteracin) a lo largo del proceso, puede verse en la siguiente grafica:
> dibsol:=[seq([k,ptmed[k]],k=0..numit)]: pointplot(dibsol,color=blue,symbol=cross,axes=boxed);
> fin;
fin
11
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La figura anterior muestra que es posible aplicar el mtodo de biparticin a cada uno de los tres primeros casos considerados ya que en todos ellos la funcin continua f(x) tiene cambio de signo entre los valores en los extremos de los intervalos dados. En el ltimo de ellos no podremos aplicar el procedimiento de biparticin ya que: > f(1.5)*f(1.75); 1.561367512
12
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
es positivo (lo que indica que no hay raz o que hay un nmero pares de ellas; en este caso, no hay raz). Apliquemos pues el procedimiento visto anteriormente a los tres primeros casos.
El mtodo converge hacia la solucin x = 2 y en 25 iteraciones lo hace con una precisin mayor a 0.1 millonsima. No obstante, con el objeto de poder representar la evolucin de los puntos medios de los intervalos hacia la solucin, repetiremos el proceso de bsqueda sin utilizar el algoritmo anterior y almacenando dichos puntos medios:
> a:=a1: b:=b1: for j from 0 to numit1 by 1 do izq[j]:=a: der[j]:=b: ptmed[j]:=evalf(a+((b-a)/2.),14): vmed:=evalf(f(ptmed[j]),14): if (vmed=0) then
13
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
print(`la raiz buscada es `,ptmed[j]): else if(vmed*f(a)>0) then a:=ptmed[j]: else b:=ptmed[j]: fi: fi: od:
Verifiquemos que la solucin alcanzada tras numit1 iteraciones, almacenda en el vector ptmed, posicin numit1, coincide con la anterior: > sol1:=ptmed[numit1]; sol1 := 2.0000000670552 Y almacenemos en la variable dibsol1 el grfico de los valores de los puntos medios en cada iteracin:
> dibsol1:=[seq([k,ptmed[k]],k=0..numit1)]:
> a:=a2: b:=b2: for j from 0 to numit2 by 1 do izq[j]:=a: der[j]:=b: ptmed[j]:=evalf(a+((b-a)/2.),14): vmed:=evalf(f(ptmed[j]),14): if (vmed=0) then print(`la raiz buscada es `,ptmed[j]): else
14
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La solucin alcanzada tras numit iteraciones es almacenda en el vector ptmed[], posicin numit:2
> sol2:=ptmed[numit2];
sol2 := -0.99999994784595
> dibsol2:=[seq([k,ptmed[k]],k=0..numit2)]:
C) Intervalo [-2.5,3]:
> a3:=-2.5;f(a3);b3:=3;f(b3);f(a3)*f(b3)<0; a3 := -2.5
-361.7578125 b3 := 3 480
-173643.7500 < 0
> a:=a3: b:=b3: for j from 0 to numit3 by 1 do izq[j]:=a: der[j]:=b: ptmed[j]:=evalf(a+((b-a)/2.),14): vmed:=evalf(f(ptmed[j]),14): if (vmed=0) then print(`la raiz buscada es `,ptmed[j]): else if(vmed*f(a)>0) then a:=ptmed[j]: else b:=ptmed[j]:
15
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La solucin alcanzada tras numit iteraciones es almacenda en el vector ptmed[], posicin numit3:
> sol3:=ptmed[numit3];
sol3 := -2.0000000670552
> dibsol3:=[seq([k,ptmed[k]],k=0..numit3)]:
Estudiemos ahora cmo se han comportado cada una de las soluciones obtenidas grficamente.
> with(plots): pp1:=pointplot(dibsol1,color=blue,symbol=cross,axes=boxed): pp2:=pointplot(dibsol2,color=red,symbol=diamond,axes=boxed): pp3:=pointplot(dibsol3,color=brown,symbol=circle,axes=boxed): display(pp1,pp2,pp3);
> fin;
fin
16
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
mtodo
de
biparticin:
caso
(datacin
En una muestra de suelo, se pretende datar la aparicin de ciertos organismos fsiles. Se conoce la cantidad de un cierto istopo p, habitualmente C14, inicialmente presente antes de que el organismo falleciera, sea esta cantidad NC14 . 0
A partir de ese momento comienza la desintegracin isotpica, con una tasa marcada por la constante de desintegracin . Si la cantidad medida de C14 en el momento actual es NC14 (t a ) la ecuacin que rige la concentracin en moles del C14, para un aporte externo es:
t NC14 (t a ) NC14 + et 1 = 0 0 e
donde, para el istopo C14: = 0.00012378 moles/ao y = 10-8 moles/ao. = 1mol cul es la edad del fsil Sabiendo que NC14 (t a ) = 0.0001moles y NC14 0 hallado?
En resumen, se debe resolver la ecuacin f(t) = 0 donde: f(t) = 0.0001 1e 0.00012378t + 108 ( e0.00012378t 1) = 0 0.00012378
> restart: > f:=t->NC14ta-(NC14t0 * exp(-lambda*t)) + (nu/lambda) * (exp(-lambda*t)-1); ( t ) ( t ) (e 1) f := t NC14ta NC14t0 e + > lambda:=0.00012378: > NC14ta:=0.0001: > NC14t0:=1.: > nu:=10^(-8): Para poder aplicar el mtodo de biparticin es necesario encontrar un intervalo ene l que la funcin cambie de signo. Para ello podemos observar que si a = 0, > a:=0: f(a); -0.9999
17
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
As pues, la funcin toma valor negativo en a = 0. Puesto que adems la funcin es creciente, (a medida que se incremente el tiempo transcurrido hasta el instante actual mayor cantidad de istopo haba), podemos probar con distintas potencias de 10 para determinar el extremo superior del intervalo de bsqueda de la raz:
> f(10);f(10^2);f(10^3);f(10^4);f(10^5);f(10^6); -0.9986630657
-0.9875992861 -0.8834836117 -0.2899789221 0.00001500164271
0.00001921150428
Podemos observar que en b = 100000 la funcin ya cambia de signo tomando valores positivos. Por tanto buscaremos la solucin en el intervalo [0, 100000]. Para utilizar el mtodo de biparticin consideraremos adems = 0.01 ao.
> b:=100000: > f(a);f(b);is(f(a)*f(b)<0); -0.2899789221
0.00001500164271 true
> eps:=0.01:
18
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La presin de vapor (en mmHg) del n-hexano (C6) y del n-octano (C8) se pueden relacionar con la temperatura absoluta mediante las expresiones: 2697.55 0 log PC = 15.8737 6 T 48.784 3127.60 0 log PC = 15.9798 8 T 63.633 Segn dichas frmulas, para 2 atmsferas (1520 mm Hg) la temperatura de ebullicin del n-hexano es 364.39K y la del n-octano es de 425.07K.
( )
( )
Se desea conocer la temperatura de ebullicin a 2 atmsferas de una mezcla lquida conteniendo el 50% de moles de cada uno de los dos componentes. Para ello, denotando por x1 y x2 a las fracciones molares en la fase lquida de n-hexano y n-octano respectivamente (ambas 0.5 como se acaba de sealar), y por y1 e y2 a las fracciones molares respectivas en la fase vapor, se pueden relacionar ambas fracciones por:
y1 =
0 PC 6
.x1 =
0 PC 6
2.P
, y2 =
0 PC 8
.x 2 =
0 PC 8
2.P
donde Pz es la presin de vapor del compuesto z puro y P es la presin de trabajo (2 atmsferas = 1520 mmHg) Puesto que adems se sabe que las fracciones molares debe sumar la unidad resultar que:
1 = y1 + y 2 =
0 PC 6
2.P
0 PC 8
2.P
19
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
de donde se tiene que la temperatura de ebullicin buscada se podr determinar resolviendo la ecuacin:
f(T) = e
2697.55 15.8737 T 48.784
3040
3040
1= 0
El programa que sigue realiza esta tarea utilizando el procedimiento del mtodo de biparticin antes sealado. Para ello utiliza una precisin de 10-3 K (muy superior a la que en un laboratorio se podra utilizar) y se realiza la bsqueda en el intervalo [364, 425] cuyos extremos son una aproximacin de las temperaturas de ebullicin a 2 atmsferas del n-hexano y del n-octano puros respectivamente.:
> restart; > with(linalg): with(plots):
Warning, the protected names norm and trace have been redefined and unprotected Warning, the name changecoords has been redefined
> fin_del_ejemplo;
fin_del_ejemplo
20
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
de
aproximaciones
Como ha podido comprobarse en los ejemplos anteriores, aunque la convergencia hacia una raz del problema f(x) = 0 es siempre posible mediante el mtodo de biparticin (siempre que se verifiquen las hiptesis sobre el cambio de signo de la funcin y sobre su continuidad en el intervalo de bsqueda de la solucin), sta es lenta, y puede suponer la realizacin de muchas iteraciones hasta alcanzar una precisin suficiente. Este hecho incrementa el coste computacional de obtencin de la solucin. Por otra parte, el mtodo de biparticin es complicado extenderlo al caso de resolucin de sistemas de ecuaciones no lineales. Es por ello conveniente considerar otros mtodos. Entre ellos dedicaremos este apartado al mtodo de aproximaciones sucesivas, o de punto fijo debido al fundamento matemtico que lo formula. Resumidamente para poder utilizar este mtodo es preciso reformular el problema no lineal hallar x solucin de f(x) = 0 (P1) en la forma denominada como bsqueda de un punto fijo hallar x solucin de g(x) = x (P2) Para llevar a cabo la transformacin de (P1) a (P2), pueden plantearse muchas posibilidades (algunas de ellas las veremos en los ejemplos) segn sea el tipo de funcin no lineal f(x). Pero una vez que se haya reformulado el problema, cundo tiene solucin (P2)?. Se demuestra tambin (para la justificacin detallada pueden consultarse las referencias [1] o [2] de esta prctica) que la condicin suficiente (que no necesaria) para que P2 posea solucin es que g(x) sea una contraccin (es decir una aplicacin cuyas imgenes, para todo punto del intervalo en el que se busque la solucin pertenezcan al propio intervalo de bsqueda y siendo g(x) una aplicacin lipschitziana de razn k<1, es decir que exista un valor k tal que 0 < k < 1 para el que |g(x)-g(y)|< k|x-y| sean cuales sean las abscisas x e y consideradas en el intervalo en el que se busca la solucin de (P2)) y que el intervalo de bsqueda sea un completo (en la recta real, y a nuestros efectos traduciremos esta condicin por el hecho de que el intervalo sea cerrado).
21
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La primera de estas condiciones, a menudo, no es fcil de verificar. Una forma de relajar esta condicin (sustituyndola por otra ms restrictiva) y asegurar la convergencia del mtodo dentro de un intervalo [a,b] donde se busca el punto fijo es que: o g(x) tenga todas sus imgenes pertenecientes a [a, b] o g(x) sea continua en [a, b] y g(x) tambin sea continua en [a, b]. o |g'(x)| < 1 para todo x en [a,b] Una vez asegurada la contractividad de la funcin g(x), el algoritmo del punto fijo que permite obtener una sucesin de puntos convergente hacia dicho punto, responde al esquema siguiente: x0 dado en [a, b] xi+1 = g(xi) (i = 0, 1, 2, ) Un algoritmo para este mtodo puede esquematizarse como: El nmero de iteraciones que como mximo realiza el algoritmo, se encuentra acotado superiormente por:
(1 k) log x x 0 1 = log(k)
imax
Siendo k la constante de la contraccin g(x) y e la distancia mxima al punto fijo que se permite a la solucin aproximada. Puede demostrarse ver ([1] o [2]) que, si g(x) es una contraccin de razn k, la distancia de xi a la solucin x* es proporcional a la distancia |xi xi-1| siendo el factor de proporcionalidad k/(1-k). Por ello esta distancia entre aproximaciones consecutivas es el que suele ser utilizado en la prctica. En el procedimiento siguiente se recoge un algoritmo, programado en MAPLE, del mtodo de punto fijo. Su buen o mal funcionamiento depender de que la aplicacin g(x) sea una contraccin o no en el intervalo (a, b) en el que se busque la solucin (aspecto este ltimo del que mostraremos ms adelante ejemplos sobre cmo realizarlo). El procedimiento proporciona todas las aproximaciones 22
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
calculadas en las sucesivas iteraciones (en el array x y con el objeto de poder realizar grficos posteriormente con ellos) y el nmero de iteraciones realizadas (variable niter). En cuanto al nmero mximo de iteraciones permitidas al algoritmo se supone fijado en el parmetro de entrad maxiter. Cuando el valor de niter sea igual al de maxiter se tendr un motivo para sospechar que no ha habido convergencia del mtodo lo cual podr valorarse analizando la diferencia entre el valor de g(xniter) y xniter). El resto de parmetros de entrada del procedimiento son (se detendr el proceso cuando |xiter xiter-1| < ), la contraccin (g) y el valor semilla con el que se inicializa el proceso iterativo.
Aplicacin del mtodo de aproximaciones sucesivas: caso 1 (los peligros de no verificar que g(x) es una contraccin)
> restart; with(linalg): with(plots):
El no analizar si una funcin g(x) es una contraccin sobre el intervalo de trabajo es algo que se hace con mucha frecuencia (por pereza o por no poder hacerlo al no conocer la funcin ms que a travs de los valores que toma en un conjunto discreto de abscisas). Ello es peligroso pues puede depararnos sorpresas como se ilustra en el siguiente ejemplo: Determinar la nica raz de la ecuacin x3 + 4x2 - 10 = 0 en el intervalo [1, 1'5] mediante el mtodo de aproximaciones sucesivas. 23
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Primera opcin: Sumando x en ambos trminos de la ecuacin se tiene que x = g1(x) siendo g1(x) = x3 + 4x2 + x -10
Todo parece indicar que en 22 iteraciones hemos hallado la solucin, pero.. Si escribimos el valor hallado, el de la funcin g1 en l y la diferencia entre ambos podemos observar que.:
> g1(x[niter]);x[niter];g1(x[niter])-x[niter]; Float( undefined )
Float( undefined ) Float( undefined )
-0.7793788874 10 10
-0.4734192476 10 30
Claramente el mtodo no ha convergido (la aplicacin g1 no es una contraccin). Representemos grficamente el proceso. Para ello usaremos el comando arrow de la librera plottools que permite dibujar flechas y sobre el que puedes obtener informacin en la ayuda de MAPLE. Adems de los movimientos realizados en las primeras iteraciones representaremos la funcin g(x) y la bisectriz del primer y tercer cuadrante. 24
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> dib1:=plot(g1,-25..25,-25..25,color=blue,thickness=2): > bis:=x->x: dibbis:=plot(bis,-25..25,-25..25,color=red,thickness=2): > with(plottools): > for i from 0 to 5 by 1 do if i=0 then base:=0 else base:=x[i] fi: iter[i+1] := arrow([x[i],base], [x[i],x[i+1]], .01, .3, .2, color=black): horiz[i+1] := arrow([x[i],x[i+1]],[x[i+1],x[i+1]], .01,.3, .2, color=black): od: > display(dib1,dibbis,seq(iter[i],i=1..6),seq(horiz[i], i=1..6));
Segunda opcin: Examinemos otra opcin. Siendo f(x) = x3 + 4.x2 -10, de la ecuacin f(x) = 0 puede despejarse x3 resultando que x3 = (10 4x2), y dividiendo por x resultar que: x2 = ((10/x) 4x) de donde hallando la raz cuadrada se obtiene finalmente que: x = sqrt( ((10/x) 4x)) habindonos quedado con la raz positiva pues se busca una solucin positiva. Veamos qu pasa ahora:
25
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> g2:=x->sqrt((10./x)-4*x);
g2 := x 10. 4x x
Hemos agotado las 100 iteraciones permitidas. Mala seal! Verifiquemos el parecido entre el supuesto punto fijo y el valor en l de la funcin:
Hemos viajado al campo de los complejos. Examinemos los primeros valores obtenidos:
> x[0]; x[1]; x[2]; x[3]; x[4]; x[5]; 1.
2.449489743 2.390706186 I 2.621611072 2.621611072 I
1.801962130 + 3.438936993 I
2.357415542 3.401440091 I
Qu sucedi ahora?: La explicacin se puede tener sin ms que representar la funcin g(x):
> dib2:=plot(g2,-25..25,-25..25, color=blue, thickness=2, numpoints=1000): > bis:=x->x: dibbis:=plot(bis,-25..25,-25..25,color=red,thickness=2): > display(dib2,dibbis);
26
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
2.5 ni para -
10 x 3 . 2
Slo hemos realizado 21 iteraciones. Esto parece que funciona. Pero verifiqumoslo:
27
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> dib3:=plot(g3,0..2,0..2,color=blue,thickness=2): > bis:=x->x: dibbis:=plot(bis,0..2,0..2,color=red,thickness=2): > iter[1]:=arrow([x[0],0], [x[0],x[1]], .01, .02, .1,color=black): > horiz[1] := arrow([x[0],x[1]], [x[1],x[1]], .01, .02, .1, color=black): > for i from 1 to 5 by 1 do iter[i+1]:= arrow([x[i],x[i]], [x[i],x[i+1]], .01, .02, .1,color=black): horiz[i+1]:= arrow([x[i],x[i+1]], [x[i+1],x[i+1]], .01, .02, .1, color=black): od: > display(dib3,dibbis,seq(iter[i],i=1..6), seq(horiz[i],i=1..6));
28
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Cuarta opcin: Examinemos otra opcin. Para ello: f(x) = x^3 + 4.x^2 -10 = 0 lo 10 transformaremos en: x2 (x+4) - 10 = 0 de donde: x = . Veamos que x+4
sucede:
> g4:=x->sqrt(10./(x+4.));
g4 := x
10. x + 4.
Slo hemos realizado 8 iteraciones (menos que en el caso anterior). Esto parece que funciona an mejor. Pero verifiqumoslo:
> g4(x[niter]);x[niter];g4(x[niter])-x[niter]; 1.365230017
1.365229987
0.30 10 -7
29
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> dib4:=plot(g4,0..2,0..2,color=blue,thickness=2): > dibbis:=plot(bis,0..2,0..2,color=red,thickness=2): > iter[1]:=arrow([x[0],0], [x[0],x[1]], .01, .02, .1,color=black): > horiz[1] := arrow([x[0],x[1]], [x[1],x[1]], .01, .02, .1, color=black): > for i from 1 to 5 by 1 do iter[i+1] := arrow([x[i],x[i]], [x[i],x[i+1]], .01, .02, .1,color=black): horiz[i+1] := arrow([x[i],x[i+1]], [x[i+1],x[i+1]], .01, .02, .1, color=black): od: > display(dib4, dibbis, seq(iter[i],i=1..6), seq(horiz[i],i=1..6));
30
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Tercera opcin: Muchas otras opciones son posibles. Terminemos con una opcin muy especial (la del mtodo de Newton) eligiendo g(x) = x - f(x)/f'(x) es decir: g(x) = x - (x3+4x2-10) / (3x2+8x) > g5:=x->x-(x^3+4.*x^2-10)/(3.*x^2+8.*x); x 3 + 4. x 2 10 g5 := x x 3. x 2 + 8. x > g5:=x->x-(x^3+4.*x^2-10)/(3.*x^2+8.*x); x 3 + 4. x 2 10 g5 := x x 3. x 2 + 8. x > epsilon:=1*10^(-6):maxiter:=100: semilla:=1.: niter:='niter': aprsuc(semilla,g5,maxiter,epsilon,x,niter): > niter; 5
Slo hemos realizado 5 iteraciones! (an menos que las 8 del caso anterior y que las 21 del tercer caso considerado). El mtodo de Newton funciona mejor. Pero verifiqumoslo:
> g5(x[niter]);x[niter];g5(x[niter])-x[niter]; 1.365230013
1.365230013
0.
31
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> iter[1]:=arrow([x[0],0], [x[0],x[1]], .01, .02, .1,color=black): > horiz[1] := arrow([x[0],x[1]], [x[1],x[1]], .01, .02, .1, color=black): > for i from 1 to 5 by 1 do iter[i+1] := arrow([x[i],x[i]], [x[i],x[i+1]], .01, .02, .1,color=black): horiz[i+1] := arrow([x[i],x[i+1]], [x[i+1],x[i+1]], .01, .02, .1, color=black): od: > display(dib5,dibbis,seq(iter[i],i=1..4), seq(horiz[i],i=1..4));
Para terminar representemos las tres funciones con las que hemos tenido buenos resultados en una misma grfica y junto a la bisectriz del primer cuadrante: > dib3:=plot(g3,0..2,0..2,color=blue,thickness=2): > dib4:=plot(g4,0..2,0..2,color=magenta,thickness=2): > dib5:=plot(g5,0..2,0..2,color=green,thickness=2): > display(dib3,dib4,dib5,dibbis);
32
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
En el entorno de la solucin x = 1.365230013 puede observarse que el valor absoluto de la derivada de las tres funciones es menor en el caso de g5, luego de g4 y el mayor es el de la derivada de g3. Comprobmoslo:
> dg3:=abs(D(g3)(1.365230013)); dg4:=abs(D(g4)(1.365230013)); dg5:=abs(D(g5)(1.365230013));
dg3 := 0.5119612546 dg4 := 0.1272294020 dg5 := 0.4750079764 10 -9
33
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Aplicacin del mtodo de aproximaciones sucesivas: caso 2 (el anlisis del carcter contractivo de la aplicacin g(x))
Busquemos una raz de la funcin f(x) = 3x 2 e x en el intervalo [-4, 4].
> restart;with(linalg):with(plots):with(plottools): > f:=x->3*x^2-exp(x); f := x 3 x 2 e x
Despejando del primer sumando de la funcin la variable x podemos definir la ecuacin g(x) = x siendo g(x) = ex . Analicemos si esta aplicacin es una 3 contraccin en [-4, 4]. Para ello definimos la funcin y su primera derivada:
> g:=x->sqrt(exp(x)/3);
g := x 1 x e 3
ex 1 x e 3
dera := x der( x )
Representemos f(x) para visualizar sus races en [-4, 4]: > plot(f,a..b,thickness=3,color=red);
34
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Analicemos en que subintervalo se verifica que | g'(x) | < 1 para comenzar a asegurar que el mtodo de aproximaciones sucesivas converge hacia una raz. Si representamos la funcin primera derivada tenemos:
> deri:=plot(dera(x),x=a..b,thickness=3, color=blue): uno:=plot(1,a..b,thickness=3,color=black,linestyle=3): > display(deri,uno);
35
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
La figura anterior muestra que existe un intervalo (entre -4 y alrededor de 2) en el que g(x) toma valores absolutos inferiores a la unidad. Pero determinemos ese intervalo analticamente. Para ello
> eq1:=der(x)=1;
eq1 := 1 3 6 ex = 1
x = 2ln 2 3 , es decir:
En cuanto al extremo izquierdo del intervalo, al ser g(x) una funcin que slo toma valores positivos, consideraremos a = -4.
> a:=-4:
El que en el intervalo [a, b] la funcin g(x) tome valores siempre positivos, nos indica que g(x) es una funcin creciente en l. Por tanto para ver en que intervalo estn las imgenes por g(x) de todos los puntos de [a, b] bastar con ver qu sucede en sus extremos.
> evalf(g(a));g(b);
0.07813586219 2.000000000
Por tanto g(x) tiene todas las imgenes de los puntos de [a, b] en el propio [a, b]. Por ltimo la continuidad de g(x) es evidente al ser una raz cuadrada de valores siempre positivos.
> recta:=plot(x,x=a..b,thickness=3,color=black,linestyle=3): dibg:=plot(g,a..b,thickness=3,color=blue,linestyle=2): > rec1:=plot(-x,x=a..b,color=grey): > display(dibg,recta,rec1);
36
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> niter;
21
37
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
Escribamos las soluciones aproximadas que se han ido hallando en cada iteracin:
> for j from 1 by 1 to niter do print(`iteracin=`,j,`solucin=`,x[j]); od; iteracin= , 1, solucin= , 0.3501806397
iteracin= , 2, solucin= , 0.6878284457 iteracin= , 3, solucin= , 0.8143281011
iteracin= , 4, solucin= , 0.8674979817
iteracin= , 5, solucin= , 0.8908696545 iteracin= , 6, solucin= , 0.9013412772 iteracin= , 7, solucin= , 0.9060729062 iteracin= , 8, solucin= , 0.9082190442 iteracin= , 9, solucin= , 0.9091941491
iteracin= , 10, solucin= , 0.9096375370
iteracin= , 11, solucin= , 0.9098392206 iteracin= , 12, solucin= , 0.9099309750 iteracin= , 13, solucin= , 0.9099727210 iteracin= , 14, solucin= , 0.9099917150 iteracin= , 15, solucin= , 0.9100003573
iteracin= , 16, solucin= , 0.9100042896
iteracin= , 17, solucin= , 0.9100060787 iteracin= , 18, solucin= , 0.9100068928 iteracin= , 19, solucin= , 0.9100072632 iteracin= , 20, solucin= , 0.9100074318 iteracin= , 21, solucin= , 0.9100075084
Por ltimo, representemos grficamente el proceso seguido en las primeras iteraciones y la representacin logartmica de la evolucin del error en las sucesivas iteraciones:
38
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> l[0]:=[arrow([semilla,0],[semilla,g(semilla)],.0001,.08,0.1, color=blue), arrow([semilla,g(semilla)],[x[1],x[1]],.0001,.08, 0.2, color=red), arrow([x[1],x[1]],[x[1],0],.0001, .08, 0.1, color=brown)]: for k from 1 by 1 to niter-1 do l[k]:=[arrow([x[k],0],[x[k],g(x[k])],.0001, .08, 0.1, color=blue), arrow([x[k],g(x[k])],[x[k+1],x[k+1]],.0001,.08,0.2, color=red), arrow([x[k+1],x[k+1]],[x[k+1],0],.0001, .08, 0.1, color=brown)]: od: > bise:=t->t: dbis:=plot(bise,-0.5..2.3, color=black, thickness=3, linestyle=3): > display (dbis,dibg,seq(l[ii],ii=0..i-1));
> for i from 1 to niter-1 by 1 do difer[i]:=abs(x[i]-x[niter]): od: err:=pointplot ({seq([uu,log10(difer[uu])],uu=0..i)}): > display(err);
39
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
> fin;
fin
40
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
EJERCICIOS
Primer ejercicio propuesto: Aplicacin de los mtodos de biseccin o aproximaciones sucesivas a la determinacin de frecuencias de mxima emisin energtica
La densidad de energa radiada a la frecuencia por unidad de volumen en un cuerpo negro que se encuentra a la temperatura absoluta T, que denotaremos por u(,T),viene determinada por la ecuacin de Planck:
u(,T) = 8..h . c3 3 e k.T 1
h.
donde h es la constante de Planck h = 6.626.10-34 J.s , k es la constante de Boltzmann k = 1.38066.10-23 J/K y c es la velocidad de la luz en vaco c = 3.108 m/s . Se desea determnar la frecuencia (positiva) a la que se hace mxima la emisin de energa radiante a una temperatura fija T. Para ello, llamando M = Plank en la forma:
u(,T) = M. e 3
N. T
8..h c3
Como se busca que u sea mxima, derivando la expresin anterior respecto a e igualando a 0, se tiene que la mxima densidad de energa se produce cuando: N. N N. 3.2 . e T 1 3 . .e T T du =0 (,T) = M. d N. T e 1 de donde se tiene que:
41
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
N. N. T 3 N T 3. . e 1 . .e = 0 T 2
La ecuacin anterior tiene una solucin trivial doble: u = 0. Pero esta solucin no tiene significacin fsica por lo que debe ser descartada. En este sentido, dividiendo por 2 en la ecuacin anterior resultar la ecuacin que debe resolverse: N. N N. 3 e T 1 e T = 0 T N Llamando x = podemos reescribir la ecuacin en la forma: T 3( e x 1) xe x = 0
Se pide: a) Resolver la ecuacin anterior por el mtodo de aproximaciones sucesivas, determinando un intervalo inicial de bsqueda de la solucin. Utilcese un parmetro de tolerancia = 10-5. b) Transformar a ecuacin anterior en una ecuacin de la forma x = g(x) determinado un intervalo en el que g(x) pueda garantizarse la convergencia del mtodo de aproximaciones sucesivas. Obtener una aproximacin de la constante de Lipschitz de la aplicacin g(x) y una estimacin del nmero de iteraciones que permitirn obtener la solucin aproximada de la ecuacin mediante el mtodo de punto fijo con una precisin de = 10-5. Obtener la solucin aproximada mediante el mtodo de aproximaciones sucesivas.
> restart; > > > > > > > > > > > fin_del_ejercicio;
fin_del_ejercicio
42
Programacin y Mtodos Numricos. C. Conde, A. Hidalgo y A. Lpez, C. Paredes y R. Rodrguez Prctica 12: Resolucin de ecuaciones no lineales(I) ETSI Minas de la Univ. Politcnica de Madrid
43