Prácticas de Matemáticas con Mathematica . Fundamentos Fundamentos de Matemáticas III . Grado en Ingeniería Civil. Práctica nº 2. Métodos de resolución aproximada de ecuaciones.
Departamento de Matemática Aplicada. E.P.S. de Zamora Universidad de Salamanca
Ejemplo 1: Halle las raices de la ecuación Cos[x]=x utilizando el método de bisección. Definimos la función:
f x_ : Cos x
x
La orden Plot nos permite dibujar la gráfica de la función para tener una idea de dónde se encuentra la raiz (o raíces):
x,
Plot f x ,
2,
2
1
2
1
1
2
1
2
La raiz está localizada localizada en el intervalo 0,
Π
2
Aplicaremos el método de bisección para hallar la raiz.El raiz.El . Aplicaremos
punto de medio del primer primer intervalo corresponde corresponde a un valor donde la función toma valor negativo, negativo, así que el siguiente intervalo será el
0, Π
4
4 N
f Pi
0.0782914 Siendo L la longitud longitud del intervalo intervalo inicial y Ε el error máximo que se quiere cometer al calcular la raiz, el
2 FM III (24-9-2012) Bisección y Newton.nb
3
Si sólo se quiere el intervalo final, es suficiente con utili zar la orden Nest en lugar de NestList.
intfinal
343 123 524 288
Nest biseccion,
Π
,
493 373
Π
2 097 152
0, Pi 2, 20
La aproximación de la raiz buscada se obtiene como el punto intermedio del intervalo.
ap
intfinal
1
intfinal
2
2 N
0.739086 El valor de la función en el punto que acabamos de obtener es:
N
f ap
1.2419 106
Vamos a calcular la raiz con suficiente precisión mediante la orden FindRoot del Mathematica para poder ver qué error cometemos con el método de bi sección:
ra
. FindRootfx
x
0,
x, 0.739, WorkingPrecision
50
0.73908513321516064165531208767387340401341175890076 El error entre la raiz proporcionada por el Mathematica y la aproximación mediante el método de bisección es menor que la tolerancia que exigimos al pri ncipio, como era de esperar.
ra
ap
7.4205 107
Ejemplo 2: Halle las raices de la ecuación Cos[x]=x utilizando el método de Newton. Primero obtenemos la función de i teración g(x) a partir de la función f(x)=Cos[x]-x.
g x_ x
x
1
f 'x Cosx Sinx
x
f x
Si proporcionamos un valor de arranque, x0, la aplicación sucesiva de la función g nos va generando la sucesión de valores que se aproximan a la raiz
x0
0.6
0.6
x1
g x0
0.744017
x2
g x1
0.73909 La obtención de los sucesivos valores puede hacerse de forma directa mediante la orden NestList.
4
2 FM III (24-9-2012) Bisección y Newton.nb
NestList g, x0, 20
0.6, 0.744017, 0.73909, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085, 0.739085
El valor final se obtiene con la orden Nest.
apNew
Nest g, x0, 20
0.739085 El error cometido en esta aproximación es del mismo orden que la precisión con que hemos hecho los cálculos (por defecto es 10^(-16)), así que el Mathematica lo indica con un 0:
ra
apNew
0. Podemos ver el orden de las distintas aproximaciones haciendo la diferencia entre el “valor exacto” proporcionado por el Mathematica y la lista de las sucesivas aproximaciones:
ra
NestList g, x0, 20
0.139085,
0.00493219,
5.34367 106 ,
6.30496 1012, 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
Podemos agrupar todo lo anterior, e incluso pedir que trabaje con más precisión, e incluso añadir criterios de parada, para que mientras no se cumpla que el valor de la funciión o la diferencia entre dos valores sucesivos no sea menor que cierta tolerancia dada, se siga aplicando el método. Incluimos un contador para ver cuantas iteraciones necesitamos.
x0
0.6;
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
, Absx1 x0 x1; x1 SetPrecisiongx0, 50; SetPrecisionfx1, 50; cont
While Or x0
10^
25
10^
,
25
val
El valor de la aproximación es:
x1 0.73908513321516064165531208767387340401341175890076 y para ello ha necesitado 6 iteraciones.
cont 6 Comprobemos que se han cumplido las condiciones para el criterio de parada.
f x1
0. 1050
2 FM III (24-9-2012) Bisección y Newton.nb
Abs x1
x0
1.70 1047 Ejemplo 3: Halle las raices de la ecuación Tan[x]=0 en el intervalo [4,5] mediante el método de bisección.
f x_ : Tan x
Si aplicamos la función bisección definida anteriormente al intervalo {4,5} obtenemos la sucesión de intervalos:
4, 5, 15 19 4, 5, 5, 92 , 92 , 19 , , 4 4
NestList biseccion,
75 , 16
151
151 , , 32 32
603 , 128
301
151 , , 64 32
2413
9651 , 2048
2413 , , 512 512
4825
37
19 , , 8 4 603
75 16
603 , , 128 128
4825 , , 1024 1024
, 1207 256
,
9651
9651 , , 2048 2048
38 603
9651 77 207 9651 , , , , 8192 2048 16 384 2048 intfinal Nest biseccion, 4, 5, 15 154 415 9651 , 2048 32 768 intfinal1 intfinal2 ap N
154 415 32 768
19 301 4096
,
2
4.71239
N
f ap
527 587. El valor encontrado evidentemente no es raiz de la ecuación. Sencillamente porque la ecuación no tiene ninguna raiz en el intervalo de parti da. Nótese que sin embargo el método de bisección se aplica sin problemas:
x, 0, 5
Plot f x , 6 4 2
1
2
3
4
5
2
4
6
Si partimos de un intervalo adecuado, digamos {3,3.5} sí que obtendremos una aproximación a la raiz:
intfinal
Nest biseccion,
3.14159, 3.14159
3, 3.5, 30
5
6
2 FM III (24-9-2012) Bisección y Newton.nb
ap
intfinal
1
intfinal
2
2 N
3.14159
f ap
1.11289 1010 El valor exacto es Pi, así que el error cometido es:
Pi
ap
1.11289 1010
f 'x Cosx Sinx
g x_ x
x0
x
f x
3.1;
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
, Absx1 x0 x1; x1 SetPrecisiongx0, 50; SetPrecisionfx1, 50; cont
While Or x0
10^
25
10^
,
25
val
El valor de la aproximación es:
x1 3.1415926535897932384626433832795028841971693993751 y para ello ha necesitado 4 iteraciones.
cont 4 Y el error cometido es:
Pi
x1
0. 1050 Ejemplo 4: Halle el valor aproximado de la
3
222 3
Tenemos que resolver una ecuación de la que el número anterior sea raiz. Ponemos x= 222 , y elevando al cubo resulta x3 222, es decir el valor buscado es una raiz de la función polinómica f(x)= x3 222 (la cual por otra parte será un número irracional). Para estimar el valor de esa raiz utilizamos el método de Newton
f x_ : x^ 3
222
2 FM III (24-9-2012) Bisección y Newton.nb
7
x, 0, 8
Plot f x , 300
200
100
2
4
6
8
100
200
g x_ 74
x
f 'x Simplify
f x
2x
x2
x0
3
8.;
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
, Absx1 x0 x1; x1 SetPrecisiongx0, 50; SetPrecisionfx1, 50; cont
While Or x0
10^
25
10^
,
25
val
x1 6.0550489465111047173674805703059618382194330373328
cont 7
3
SetPrecision 222^ 1
x1, 50
0 Ejemplo 5: Halle el intervalo donde el método de Newton converge cuando se utiliza para calcular la raiz aproximada de la ecuación ArcTan[x]=0. Se trata de encontrar si hay dos valores para los cuales los puntos de corte con las respectivas tangentes con el eje OX son los mismos puntos. De esa forma se originará un bucle en el método de Newton y no habrá convergencia. Estos puntos determinarán un intervalo como el del dibujo dentro del cual obtendremos convergencia, y fuera del mismo divergencia.
8
2 FM III (24-9-2012) Bisección y Newton.nb
x, 2, 2, Epilog Line1.391745, ArcTan 1.391745, 1.391745, 0 , Line 1.391745, ArcTan 1.391745, 1.391745, 0 , Dashing0.01, Line 1.391745, 0, 1.391745, ArcTan 1.391745, Line1.391745, 0 , 1.391745, ArcTan 1.391745
Plot ArcTan x ,
1.0
0.5
2
1
1
2
0.5
1.0
Sea
a>0
el punto inicial. La recta tangente en ese punto a la curva es y ArcTan a
1 1a2
x a y
corta al eje OX en el punto a-(1 a2 )ArcTan[a]. Igualando este punto con el valor -a y resolviendo la ecuación resultante obtendremos el valor pedido. Se trata pues de hallar la raiz de la ecuación -a=a-(1 a2 )ArcTan[a], o equivalentemente un cero de la función f[x]=2x-(1 x2 )ArcTan[x]. Para ello utilizamos el método de Newton tomando como valor inicial 1.3 y resulta
gx_
1 x^ 2 ArcTanx x fx f 'x 2 x 1 x ArcTanx x 1 2 x ArcTanx Plotfx, x, 0, 2 f x_ : 2 x
2
0.5
0.5
0.5
1.0
1.5
x0
1.3;
1.0
1.5
2.0
2 FM III (24-9-2012) Bisección y Newton.nb
9
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
, Absx1 x0 x1; x1 SetPrecisiongx0, 50; SetPrecisionfx1, 50; cont
While Or x0
10^
25
10^
,
25
val
x1 1.3917452002707349244164412881851277450451647359387
cont 6 Comprobemos que tomando este punto a=1.3917452002707349244164412881851277450451647359387 se produce un bucle cuando se utili za el método de Newton para hallar la raiz de la ecuación ArcTan[x]=0.
gx_ x 1
x fx f 'x x ArcTanx SetPrecision NestListg, x1, 50, 50 1.3917452002707349244164412881851277450451647359387, f x_ : ArcTan x
2
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359388,
1.3917452002707349244164412881851277450451647359386,
1.3917452002707349244164412881851277450451647359379,
1.3917452002707349244164412881851277450451647359366,
1.3917452002707349244164412881851277450451647359345,
1.3917452002707349244164412881851277450451647359893,
1.3917452002707349244164412881851277450451647360467,
1.3917452002707349244164412881851277450451647362048,
10
2 FM III (24-9-2012) Bisección y Newton.nb
1.3917452002707349244164412881851277450451647366249,
1.3917452002707349244164412881851277450451647377306,
1.3917452002707349244164412881851277450451647406352,
1.3917452002707349244164412881851277450451647483190,
1.3917452002707349244164412881851277450451647685578,
1.3917452002707349244164412881851277450451685049334,
1.3917452002707349244164412881851277450451769588021,
1.3917452002707349244164412881851277450452837029774,
1.3917452002707349244164412881851277450446476073774,
1.3917452002707349244164412881851277450417088715003,
1.3917452002707349244164412881851277450387701356232,
1.3917452002707349244164412881851277451269322119349,
1.3917452002707349244164412881851277454090508561323,
1.3917452002707349244164412881851277461466735612733,
1.3917452002707349244164412881851277480480356737283,
1.3917452002707349244164412881851277530938451746330,
1.3917452002707349244164412881851277662623206397196,
1.3917452002707349244164412881851278008835680073131,
1.3917452002707349244164412881851278922547438967295,
1.3917452002707349244164412881851281332781055893313,
1.3917452002707349244164412881851287691970394971724,
1.3917452002707349244164412881850650447431507708334,
1.3917452002707349244164412881921234686272130614834,
1.3917452002707349244164412882047452431107492503700,
1.3917452002707349244164412882299887920778216281431,
1.3917452002707349244164412882930976644955025725761,
1.3917452002707349244164412884066936348473282725554
Como el valor que tomamos es aproximado no siempre se repiten los mismos valores, debido a los errores que se cometen al truncar el valor inicial y debido a los errores que involucran las operaciones, pero de todas formas se ve la alternancia de los valores que se obtienen y la convergencia tan lenta que presentan (de hecho el último valor de la lista anterior es mayor que x1, con lo cual en realidad habrá divergencia).Para valores más pequeños que el valor de a=1.3917452002707349244164412881851277450451647359387 habrá convergencia, y para valores mayores habrá divergencia.
x0
1.3;
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
, Absx1 x0 x1; x1 SetPrecisiongx0, 50; SetPrecisionfx1, 50; cont
While Or x0
val x1 0
10^
25
10^
,
25
2 FM III (24-9-2012) Bisección y Newton.nb
11
cont 8 Para valores de arranque que originan divergencia hemos de considerar un criterio de paro consistente en un número máximo de iteraciones. En este caso hemos considerado tal número igual a 20, así que cuando el contador llega a ese valor el proceso se termina.
x0
1.45;
cont 0; x1
val
SetPrecisionfx1, 50;
SetPrecision g x0 , 50 ;
cont 1;
val
10^ 25 && cont 20, x0 x1; x1 SetPrecisiongx0, 50; val SetPrecisionfx1, 50; cont
While Or
10^
25
, Absx1
x0
cont 20
x1 1.2528661619609705806006104269440310733892352973287 1072 217
NestList g, 1.45, 20
1.45,
1.55026, 1.84593,
16 281.4,
2.88911, 8.67845,
4.16359 108 , 2.72305 1017,
2.13099 1070,
102.443,
1.16474 1035,
7.13317 10140, 7.99254 10281,
1.003436027226568 10564, 1.581609469953546 101128,
3.92932897158335 102256, 2.42525080700910 104513,
9.2391749867017 109026, 1.34086872792897 1018 054,
2.8241801834891 1036108, 1.2528661620342 1072217
NOTA : aunque en este problema, debido a la simetría impar de la función, hemos podido reducir el cá lculo de los bucles a determinarla solución de una única ecuación,
en general habrá que resolver un sistema de la forma a
sol
FindRoot
b, a b
1.4
a
f 'a f a
, MaxIterations
b, b
f 'a f a
b, b
f' b f b
f 'b f b
a .
a, 1.4,
a ,
200, WorkingPrecision
50
1.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359387