Aplicación libre 1. Métodos de Bisección, Newton-Raphson y Secante
Bisección y Newton con Mathematica
description
Transcript of Bisección y Newton con Mathematica
Prácticas de Matemáticas con Mathematica .
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_D := Cos@xD - 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 (oraíces):
Plot@f@xD, 8x, -2, 2<D
-2 -1 1 2
-2
-1
1
La raiz está localizada en el intervalo90, Π
2=. Aplicaremos el método de bisección para hallar la raiz.El
punto de medio del primer intervalo corresponde a un valor donde la función toma valor negativo, así que el sigu-
iente intervalo será el 90, Π
4=
f@Pi � 4D �� N
-0.0782914
Siendo L la longitud del intervalo inicial y Ε el error máximo que se quiere cometer al calcular la raiz, elnúmero de veces,n, que habrá que aplicar el método de bisección es:
Siendo L la longitud del intervalo inicial y Ε el error máximo que se quiere cometer al calcular la raiz, elnúmero de veces,n, que habrá que aplicar el método de bisección es:
Solve@L � 2^Hn + 1L � Ε, nDSolve::ifun: Inverse functions are being used by Solve, so
some solutions may not be found; use Reduce for complete solution information. �
::n ®
-Log@2D - LogA Ε
LE
Log@2D>>
Particularizando para los valores de L®Pi/2,Ε®10^(-6) obtenemos que el número de veces que hay queaplicar el método de bisección es n=20.
-Log@2D - LogA Ε
LE
Log@2D�. 8L ® Pi � 2, Ε ® 10^H-6L< �� N
19.5831
Log@2, Pi � 2 10^6D - 1 �� N
19.5831
Definimos la función bisección que a partir de un intervalo nos da el siguiente subintervalo donde se localizala raiz:
biseccion@8a_, b_<D := IfBf@aD fBa + b
2F < 0, :a,
a + b
2>, :b,
a + b
2>F
biseccion@80, Pi � 2<D
:0,Π
4>
biseccionB:0,Π
4>F
: Π
4,
Π
8>
La obtención de la sucesión de subintervalos se puede obtener fácilmente con la orden NestList del Mathemat-ica, hay que proporcionar un valor inicial para la función, en este caso el intervalo de partida {0,Pi/2}, y el númerode veces que se va a iterar, en este caso n=20, para obtener una aproximación con el error requerido de Ε®10^(-6).
NestList@biseccion, 80, Pi � 2<, 20D
::0,Π
2>, :0,
Π
4>, : Π
4,
Π
8>, : Π
4,
3 Π
16>, : Π
4,
7 Π
32>, : Π
4,
15 Π
64>,
: 15 Π
64,
31 Π
128>, : 15 Π
64,
61 Π
256>, : 15 Π
64,
121 Π
512>, : 15 Π
64,
241 Π
1024>,
: 241 Π
1024,
481 Π
2048>, : 241 Π
1024,
963 Π
4096>, : 241 Π
1024,
1927 Π
8192>,
: 1927 Π
8192,
3855 Π
16 384>, : 1927 Π
8192,
7709 Π
32 768>, : 7709 Π
32 768,
15 417 Π
65 536>,
: 7709 Π
32 768,
30 835 Π
131 072>, : 7709 Π
32 768,
61 671 Π
262 144>, : 7709 Π
32 768,
123 343 Π
524 288>,
: 123 343 Π
524 288,
246 687 Π
1 048 576>, : 123 343 Π
524 288,
493 373 Π
2 097 152>>
2 2 FM III (24-9-2012) Bisección y Newton.nb
Si sólo se quiere el intervalo final, es suficiente con utilizar la orden Nest en lugar de NestList.
intfinal = Nest@biseccion, 80, Pi � 2<, 20D
: 123 343 Π
524 288,
493 373 Π
2 097 152>
La aproximación de la raiz buscada se obtiene como el punto intermedio del intervalo.
ap =intfinal@@1DD + intfinal@@2DD
2�� N
0.739086
El valor de la función en el punto que acabamos de obtener es:
f@apD �� N
-1.2419 ´ 10-6
Vamos a calcular la raiz con suficiente precisión mediante la orden FindRoot del Mathematica para poderver qué error cometemos con el método de bisección:
ra = x �. FindRoot@f@xD � 0, 8x, 0.739<, WorkingPrecision ® 50D0.73908513321516064165531208767387340401341175890076
El error entre la raiz proporcionada por el Mathematica y la aproximación mediante el método de bisecciónes menor que la tolerancia que exigimos al principio, como era de esperar.
ra - ap
-7.4205 ´ 10-7
Ejemplo 2: Halle las raices de la ecuación Cos[x]=x utilizando el método de Newton.
Primero obtenemos la función de iteración g(x) a partir de la función f(x)=Cos[x]-x.
g@x_D = x - f@xD � f'@xD
x --x + Cos@xD-1 - Sin@xD
Si proporcionamos un valor de arranque, x0, la aplicación sucesiva de la función g nos va generando lasucesión de valores que se aproximan a la raiz
x0 = 0.6
0.6
x1 = [email protected]
x2 = [email protected]
La obtención de los sucesivos valores puede hacerse de forma directa mediante la orden NestList.
2 FM III (24-9-2012) Bisección y Newton.nb 3
NestList@g, x0, 20D80.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, 20D0.739085
El error cometido en esta aproximación es del mismo orden que la precisión con que hemos hecho loscá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” propor-cionado por el Mathematica y la lista de las sucesivas aproximaciones:
ra - NestList@g, x0, 20D90.139085, -0.00493219, -5.34367 ´ 10-6, -6.30496 ´ 10-12, 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 seamenor que cierta tolerancia dada, se siga aplicando el método. Incluimos un contador para ver cuantas iteracionesnecesitamos.
x0 = 0.6;
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD,
x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++DEl 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@x1D0. ´ 10-50
4 2 FM III (24-9-2012) Bisección y Newton.nb
Abs@x1 - x0D1.70 ´ 10-47
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_D := Tan@xDSi aplicamos la función bisección definida anteriormente al intervalo {4,5} obtenemos la sucesión de
intervalos:
NestList@biseccion, 84, 5<, 15D
:84, 5<, :5,9
2>, : 9
2,
19
4>, : 19
4,
37
8>, : 19
4,
75
16>,
: 75
16,
151
32>, : 151
32,
301
64>, : 151
32,
603
128>, : 603
128,
1207
256>,
: 603
128,
2413
512>, : 2413
512,
4825
1024>, : 4825
1024,
9651
2048>, : 9651
2048,
19 301
4096>,
: 9651
2048,
38 603
8192>, : 9651
2048,
77 207
16 384>, : 9651
2048,
154 415
32 768>>
intfinal = Nest@biseccion, 84, 5<, 15D
: 9651
2048,
154 415
32 768>
ap =intfinal@@1DD + intfinal@@2DD
2�� N
4.71239
f@apD �� N
527 587.
El valor encontrado evidentemente no es raiz de la ecuación. Sencillamente porque la ecuación no tieneninguna raiz en el intervalo de partida. Nótese que sin embargo el método de bisección se aplica sin problemas:
Plot@f@xD, 8x, 0, 5<D
1 2 3 4 5
-6
-4
-2
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, 83, 3.5<, 30D83.14159, 3.14159<
2 FM III (24-9-2012) Bisección y Newton.nb 5
ap =intfinal@@1DD + intfinal@@2DD
2�� N
3.14159
[email protected] ´ 10-10
El valor exacto es Pi, así que el error cometido es:
Pi - ap
-1.11289 ´ 10-10
g@x_D = x - f@xD � f'@xDx - Cos@xD Sin@xDx0 = 3.1;
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD,
x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++DEl 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. ´ 10-50
Ejemplo 4: Halle el valor aproximado de la 2223
Tenemos que resolver una ecuación de la que el número anterior sea raiz. Ponemos x= 2223
, y elevando alcubo resulta x3 = 222, es decir el valor buscado es una raiz de la función polinómica f(x)=x3 - 222 (la cual por otraparte será un número irracional). Para estimar el valor de esa raiz utilizamos el método de Newton
f@x_D := x^3 - 222
6 2 FM III (24-9-2012) Bisección y Newton.nb
Plot@f@xD, 8x, 0, 8<D
2 4 6 8
-200
-100
100
200
300
g@x_D = x - f@xD � f'@xD �� Simplify
74
x2+
2 x
3
x0 = 8.;
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD,
x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++D
x1
6.0550489465111047173674805703059618382194330373328
cont
7
SetPrecision@222^H1 � 3L - x1, 50D0
Ejemplo 5: Halle el intervalo donde el método de Newton converge cuando se utiliza para calcular la raizaproximada 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 conel eje OX son los mismos puntos. De esa forma se originará un bucle en el método de Newton y no habrá convergen-cia. Estos puntos determinarán un intervalo como el del dibujo dentro del cual obtendremos convergencia, y fueradel mismo divergencia.
2 FM III (24-9-2012) Bisección y Newton.nb 7
Plot@ArcTan@xD, 8x, -2, 2<,
Epilog ® [email protected], [email protected]<, 8-1.391745, 0<<D,
[email protected], [email protected]<, 81.391745, 0<<D,
[email protected], 0<, 8-1.391745, [email protected]<<D,
[email protected], 0<, 81.391745, [email protected]<<D<D
-2 -1 1 2
-1.0
-0.5
0.5
1.0
Sea a>0 el punto inicial. La recta tangente en ese punto a la curva es y - ArcTan@aD =1
1+a2 Hx - aL 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 Newtontomando como valor inicial 1.3 y resulta
f@x_D := 2 x - H1 + x^2L ArcTan@xDg@x_D = x - f@xD � f'@xD
x -
2 x - I1 + x2M ArcTan@xD1 - 2 x ArcTan@xD
Plot@f@xD, 8x, 0, 2<D
0.5 1.0 1.5 2.0
-1.5
-1.0
-0.5
0.5
x0 = 1.3;
8 2 FM III (24-9-2012) Bisección y Newton.nb
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD,
x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++D
x1
1.3917452002707349244164412881851277450451647359387
cont
6
Comprobemos que tomando este punto a=1.3917452002707349244164412881851277450451647359387 seproduce un bucle cuando se utiliza el método de Newton para hallar la raiz de la ecuación ArcTan[x]=0.
f@x_D := ArcTan@xDg@x_D = x - f@xD � f'@xD
x - I1 + x2M ArcTan@xDSetPrecision@NestList@g, x1, 50D, 50D81.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.3917452002707349244164412881851277450451647359387,
1.3917452002707349244164412881851277450451647359388,
-1.3917452002707349244164412881851277450451647359386,
1.3917452002707349244164412881851277450451647359379,
-1.3917452002707349244164412881851277450451647359366,
1.3917452002707349244164412881851277450451647359345,
-1.3917452002707349244164412881851277450451647359893,
1.3917452002707349244164412881851277450451647360467,
-1.3917452002707349244164412881851277450451647362048,
1.3917452002707349244164412881851277450451647366249,
2 FM III (24-9-2012) Bisección y Newton.nb 9
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 formasse ve la alternancia de los valores que se obtienen y la convergencia tan lenta que presentan (de hecho el último valorde la lista anterior es mayor que x1, con lo cual en realidad habrá divergencia).Para valores más pequeños que elvalor de a=1.3917452002707349244164412881851277450451647359387 habrá convergencia, y para valoresmayores habrá divergencia.
x0 = 1.3;
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD,
x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++D
x1
0
10 2 FM III (24-9-2012) Bisección y Newton.nb
cont
8
Para valores de arranque que originan divergencia hemos de considerar un criterio de paro consistente en unnúmero máximo de iteraciones. En este caso hemos considerado tal número igual a 20, así que cuando el contadorllega a ese valor el proceso se termina.
x0 = 1.45;
cont = 0;
x1 = SetPrecision@g@x0D, 50D;
val = SetPrecision@f@x1D, 50D;
cont = 1;
While@Or@Hval > 10^H-25LL, HAbs@x1 - x0D > 10^H-25LLD &&
cont < 20, x0 = x1; x1 = SetPrecision@g@x0D, 50D;val = SetPrecision@f@x1D, 50D; cont++D
cont
20
x1
1.2528661619609705806006104269440310733892352973287´ 1072 217
NestList@g, 1.45, 20D91.45, -1.55026, 1.84593, -2.88911, 8.67845, -102.443,
16 281.4, -4.16359 ´ 108, 2.72305 ´ 1017, -1.16474 ´ 1035,
2.13099 ´ 1070, -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 ´ 1036 108, 1.2528661620342 ´ 1072 217=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 determinar la solución de una única ecuación,
en general habrá que resolver un sistema de la forma :a -f @aDf '@aD
� b, b -f @bDf '@bD
� a> .
sol = FindRootB:a -f@aD
f'@aD� b, b -
f@bDf'@bD
� a>, 8a, 1.4<,
8b, -1.4<, MaxIterations ® 200, WorkingPrecision ® 50F
8a ® 1.3917452002707349244164412881851277450451647359387,
b ® -1.3917452002707349244164412881851277450451647359387<
2 FM III (24-9-2012) Bisección y Newton.nb 11