Bisección y Newton con Mathematica

11
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 (o raí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, el

description

Desarrollo del método de Newton con el programa Mathematica.

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],

[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