Métodos Numéricos: Resolución de ejercicios con Maple Tema 5:...

23
Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: Resolución aproximada de ecuaciones Prof. Francisco Palacios EPSEM-UPC Abril 2008. Versión 1.3 Ejercicio 1. (a) Representamos conjuntamente las funciones de los dos miembros de la ecuación x=exp(-x). La raíz es la x del punto de corte de las gráficas. > plot([x,exp(-x)],x=0..1); x 1 0.8 0.6 0.4 0.2 1 0.8 0.6 0.4 0.2 0 (c) Si exigimos 4 decimales exactos en la aproximación mediante el método de la bisección, resulta la siguiente inecuación: > inec:=1/2^n<0.5*10^(-4); := inec < 1 2 n .00005000000000 Resolvemos graficamente la inecuación, vemos que hacen falta 15 pasos. > plot(inec,n=0..20); n 20 15 10 5 1 0.8 0.6 0.4 0.2 0 Programa elemental para calcular 5 pasos de bisección. > f:=x->x-exp(-x); a:=0; b:=1; n:=5; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od; := f x x e ( ) x := a 0 := b 1 := n 5 , , ******** iteración 1 ************** := c .5000000000 , , ******** iteración 2 ************** Page 1

Transcript of Métodos Numéricos: Resolución de ejercicios con Maple Tema 5:...

Page 1: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

Métodos Numéricos: Resolución de ejercicios con MapleTema 5: Resolución aproximada de ecuacionesProf. Francisco PalaciosEPSEM-UPCAbril 2008. Versión 1.3

Ejercicio 1.(a) Representamos conjuntamente las funciones de los dos miembros de la ecuación x=exp(-x). La raíz es la x del punto de corte de las gráficas.> plot([x,exp(-x)],x=0..1);

x10.80.60.40.2

1

0.8

0.6

0.4

0.2

0

(c) Si exigimos 4 decimales exactos en la aproximación mediante el método de la bisección, resulta la siguiente inecuación:> inec:=1/2^n<0.5*10^(-4);

:= inec < 1

2n .00005000000000

Resolvemos graficamente la inecuación, vemos que hacen falta 15 pasos. > plot(inec,n=0..20);

n 2015105

1

0.8

0.6

0.4

0.2

0

Programa elemental para calcular 5 pasos de bisección.> f:=x->x-exp(-x);

a:=0; b:=1; n:=5; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od;

:= f → x − x e( )−x

:= a 0 := b 1 := n 5, ,******** iteración 1 **************

:= c .5000000000, ,******** iteración 2 **************Page 1

Page 2: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= c .7500000000, ,******** iteración 3 **************

:= c .6250000000, ,******** iteración 4 **************

:= c .5625000000, ,******** iteración 5 **************

:= c .5937500000Ejercicio 2.Si realizamos el gráfico con Maple, podemos representar directamente y=x-exp(-x) y observar el corte con OX. Fíjate que cuando realizamos el esquema manualmente, es preferible representar por separado las curvas y=x, y=exp(-x), y observar el punto de corte.> plot(x-exp(-x),x=0..1);

x 10.80.60.40.2

0.6

0.4

0.2

0

-0.2

-0.4

-0.6

-0.8

-1

De la gráfica, podemos estimar el valor aproximado 0.57 para la solución.Determinamos el número de iteraciones para obtener 7 decimales exactos. 'Limpiamos' la variable n que hemos utilizado en el ejercicio anterior.> n:='n';

:= n n> ineq:=1/2^n<0.5E-7;

:= ineq < 1

2n .5 10-7

> plot(ineq,n=20..30);

n 302826242220

1

0.8

0.6

0.4

0.2

0

Necesitamos 25 iteraciones.> n7:=25;

:= n7 25Usamos el programa anterior para calcular el valor de las 25 iteraciones. Observa que hemos puesto : después de od, eso evita que se impriman los cálculos realizados dentro del bucle. Hemos añadido una comando print al final que imprime el valor obtenido en la última iteración.> f:=x->x-exp(-x);

a:=0; b:=1; n:=n7; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od: print(`Valor de la aproximación =`,c);

:= f → x − x e( )−x

Page 2

Page 3: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= a 0 := b 1 := n 25

,Valor de la aproximación = .5671432916Calculamos la solución con fsolve.> s:=fsolve(f(x),x=a..b);

:= s .5671432904Calculamos el error, tomando como valor exacto el proporcionado por fsolve.> er:=abs(s-c);

:= er .12 10-8

Vemos que, en efecto, el error es inferior a 0.5*10^(-7).Es interesante observar que, para la ecuación considerada, Maple puede calcular la solución exacta usando la función especial LambertW.> s:=solve(f(x),x);

:= s ( )LambertW 1> sf:=evalf(s);

:= sf .5671432904Ejercicio 3. Dibujamos una representación conjunta.> plot([1/x,ln(x)],x=1..2,color=[red,blue]);

x21.81.61.41.21

1

0.8

0.6

0.4

0.2

0

Calculamos el número de iteraciones necesario para asegurar 5 decimales exactos.> n:='n';

inec:=1/2^n<0.5*10^(-5);

:= n n

:= inec < 1

2n .5000000000 10-5

Resolvemos gráficamente.> plot(inec,n=0..30);

n 30252015105

1

0.8

0.6

0.4

0.2

0

Cambio de signo en 17.54, hacen falta 18 iteraciones.También podemos resolver con solve.> solve(inec,n);

( )RealRange ,( )Open 17.60964047 ∞Vemos que la inecuación se cumple para valores de n superiores a 17.609, por lo tanto hemos de tomar n=18.Valor de las 4 primeras iteraciones.

Page 3

Page 4: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

> f:=x->1/x-ln(x); a:=1; b:=2; n:=4; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od;

:= f → x − 1x

( )ln x

:= a 1 := b 2 := n 4, ,******** iteración 1 **************

:= c 1.500000000, ,******** iteración 2 **************

:= c 1.750000000, ,******** iteración 3 **************

:= c 1.875000000, ,******** iteración 4 **************

:= c 1.812500000Valor de la iteración 18.> f:=x->1/x-ln(x);

a:=1; b:=2; n:=18; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od: print(`Valor de la aproximación =`,c);

:= f → x − 1x

( )ln x

:= a 1 := b 2 := n 18

,Valor de la aproximación = 1.763225557Resolución con fsolve.> s:=fsolve(f(x),x=a..b);

:= s 1.763222834Error, tomando como valor exacto el proporcionado por fsolve.> error:=abs(s-c);

:= error .2723 10-5

Vemos que el error real es inferior a 0.5x10^(-5).También en este caso, Maple obtiene una solución exacta con solve, usando la función especial LambertW.> s:=solve(f(x),x);

:= s1

( )LambertW 1> sf:=evalf(s);

:= sf 1.763222834Problema 4Representación conjunta.> plot([ln(x),exp(-x)],x=1..2,color=[red,blue]);

Page 4

Page 5: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

x 21.81.61.41.21

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0

El intervalo tiene longitud 1, necesitamos 18 iteraciones. Los cálculos son los mismos que en el ejercicio anterior. Observa que la cota de error sólo depende de la longitud de intervalo y el número de decimales exactos exigido.Valor de las primeras 4 iteraciones.> f:=x->ln(x)-exp(-x);

a:=1; b:=2; n:=4; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od;

:= f → x − ( )ln x e( )−x

:= a 1 := b 2 := n 4, ,******** iteración 1 **************

:= c 1.500000000, ,******** iteración 2 **************

:= c 1.250000000, ,******** iteración 3 **************

:= c 1.375000000, ,******** iteración 4 **************

:= c 1.312500000Valor de la iteración 18. > f:=x->ln(x)-exp(-x);

a:=1; b:=2; n:=18; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od: print(`Valor de la aproximación =`,c);

:= f → x − ( )ln x e( )−x

:= a 1 := b 2 := n 18

,Valor de la aproximación = 1.309803011Valor calculado por fsolve y error.> s:=fsolve(f(x),x=a..b);

error:=abs(s-c);

:= s 1.309799586

:= error .3425 10-5

En este caso Maple no puede obtener una solución real con solve.Page 5

Page 6: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

> s:=solve(f(x)=0,x);

:= s e

⎛⎝⎜⎜

⎞⎠⎟⎟RootOf − _Z e

( )e_Z1

> evalf(s);

− − .8912828692 5.493407989 IProblema 5Escribimos la ecuación en forma normal f(v)=0 y definimos la función f(v).> f:=v->9.81*0.002-1.4E-5*v^1.5-1.15E-5*v^2;

:= f → v − − .01962 .000014 v1.5 .0000115 v2

Buscamos cambios de signo en los intervalos dados.> f(20.),f(30.),f(40.);

, ,.01376780193 .00696956526 -.00232175098Tenemos un cambio de signo en [30,40]. Representamos la función en ese intervalo.Observa que aunque hemos utilizado v para definir la función, podemos usar cuaquier variable "limpia" para dibujar la gráfica. En particular, podemos usar f(x). > plot(f(x),x=30..40);

x403836343230

0.006

0.004

0.002

0

-0.002

Tomamos el valor aproximado de la raíz v=37.7Número de pasos para 2 decimales exactos, observa que la longitud del intervalo inicial es (b-a)=10.> n:='n';

ineq:=10/2^n<0.005;

:= n n

:= ineq < 10

2n .005

> plot(ineq,n=0..20);

n 2015105

1

0.8

0.6

0.4

0.2

0

Cambio de signo en x=10.96, necesitamos 11 iteraciones.Confirmamos el resultado resolviendo la iecuación con solve.> solve(ineq,n);

( )RealRange ,( )Open 10.96578428 ∞Valor de las 3 primeras iteraciones.> f:=v->9.81*0.002-1.4E-5*v^1.5-1.15E-5*v^2;

a:=30; b:=40; n:=3; for i from 1 to n do `******** iteración`,i,`**************`; Page 6

Page 7: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od;

:= f → v − − .01962 .000014 v1.5 .0000115 v2

:= a 30 := b 40 := n 3, ,******** iteración 1 **************

:= c 35., ,******** iteración 2 **************

:= c 37.50000000, ,******** iteración 3 **************

:= c 38.75000000Valor de la iteración 11.> f:=v->9.81*0.002-1.4E-5*v^1.5-1.15E-5*v^2;

a:=30; b:=40; n:=11; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od;

:= f → v − − .01962 .000014 v1.5 .0000115 v2

:= a 30 := b 40 := n 11

, ,******** iteración 1 ************** := c 35.

, ,******** iteración 2 ************** := c 37.50000000

, ,******** iteración 3 ************** := c 38.75000000

, ,******** iteración 4 ************** := c 38.12500000

, ,******** iteración 5 ************** := c 37.81250000

, ,******** iteración 6 ************** := c 37.65625000

, ,******** iteración 7 ************** := c 37.73437500

, ,******** iteración 8 ************** := c 37.77343750

, ,******** iteración 9 ************** := c 37.75390625

, ,******** iteración 10 ************** := c 37.74414063

, ,******** iteración 11 ************** := c 37.73925782

Cálculo de la raíz con fsolve y verificación del error.> s:=fsolve(f(x),x=a..b);

error:=abs(s-c);

:= s 37.73457794 := error .00467988Page 7

Page 8: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

Intentamos resolver con solve.> solve(f(x)=0,x);

37.73457794En este caso, solve también nos proporciona la solución.Problema 6Expresamos la ecuación en forma nomal f(x)=0 y definimos f(x).> f:=x->tan(0.1*x)-9.2*exp(-x);

:= f → x − ( )tan .1 x 9.2 e( )−x

Existencia y unicidad. Observa que tan(0.1x) es continua en [3,4].> f(3.);

-.1487047794> f(4.);

.2542893409Hay cambio de signo en [3,4].> diff(f(x),x);

+ + .1 .1 ( )tan .1 x 2 9.2 e( )−x

La derivada es positiva, por lo tanto la raíz es única.Intervalo de longitud 1, para 5 decimales necesitamos 18 iteraciones.> f:=x->tan(0.1*x)-9.2*exp(-x);

a:=3; b:=4; n:=18; for i from 1 to n do `******** iteración`,i,`**************`; c:=evalf((a+b)/2); if evalf(f(c)*f(a))<0 then b:=c else a:=c fi od: print(`Valor de la aproximación =`,c);

:= f → x − ( )tan .1 x 9.2 e( )−x

:= a 3 := b 4 := n 18

,Valor de la aproximación = 3.292926791Calculamos el valor de f(x), tiene que ser próximo a cero.> f(c);

.9867 10-6

Comparación con el resultado de fsolve.> s:=fsolve(f(x)=0,x=a..b);

error:=abs(s-c);

:= s 3.292924615

:= error .2176 10-5

Intentamos resolver con solve.> solve(f(x)=0,x);

− 2.411843808 11.09724577 IVemos que solve no obtiene la solución real buscada.Problema 7Si resolvemos el problema de forma manual, dibujaremos las curvas correspondientes a los miembros de la ecuación.> plot([x,exp(-x)],x=0..1,color=[red,blue]);

Page 8

Page 9: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

x10.80.60.40.2

1

0.8

0.6

0.4

0.2

0

Observamos que hay una solución cercana a 0.6.En la resolución con Maple, podemos escribir la ecuación en forma normal f(x)=0, y representar una sola curva. La solución es ahora el corte con el eje OX.> f:=x->x-exp(-x);

plot(f(x),x=0..1);

:= f → x − x e( )−x

x10.80.60.40.2

0.6

0.4

0.2

0

-0.2

-0.4

-0.6

-0.8

-1

Podemos tomar x0=0.5. Realizamos 3 iteraciones con el método de Newton-Raphson.> f:=x->x-exp(-x);

f1:=D(f); x0:=0.5; n:=4; for i from 0 to n-1 do x.(i+1):=evalf(x.i-f(x.i)/f1(x.i)); od;

:= f → x − x e( )−x

:= f1 → x + 1 e( )−x

:= x0 .5 := n 4

:= x1 .5663110032 := x2 .5671431650 := x3 .5671432904 := x4 .5671432904

Hemos parado cuando el error estimado es inferior a 0.5·10^(-8). Vamos a verificar que, en efecto, x4 aproxima la solución de la ecuación con 8 decimales exactos.> t:=8;

delta:=0.5*10^(-t); Page 9

Page 10: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

a:=x4-delta; b:=x4+delta; f(a); f(b);

:= t 8

:= δ .5000000000 10-8

:= a .5671432854 := b .5671432954

-.79 10-8

.78 10-8

Siguiendo el razonamiento explicado en el resumen de teoría, podemos asegurar que la solución es correcta.

Problema 8Expresamos la ecuación en forma normal y calculamos las primeras 4 iteraciones.> f:=x->tan(0.1*x)-9.2*exp(-x);

f1:=D(f); x0:=3.5; n:=4; for i from 0 to n-1 do x.(i+1):=evalf(x.i-f(x.i)/f1(x.i)); od;

:= f → x − ( )tan .1 x 9.2 e( )−x

:= f1 → x + + .1 .1 ( )tan .1 x 2 9.2 e( )−x

:= x0 3.5 := n 4

:= x1 3.277030081 := x2 3.292831611 := x3 3.292924612 := x4 3.292924615

Vemos que se repiten los 8 primeros decimales.Verificamos que la solución tiene 5 decimales exactos> t:=5;

delta:=0.5*10^(-t); a:=x4-delta; b:=x4+delta; f(a); f(b);

:= t 5

:= δ .5000000000 10-5

:= a 3.292919615 := b 3.292929615

-.22670 10-5

.22671 10-5

Observamos que hay cambio de signo, por lo tanto x4 aproxima la solución con 5 decimales exactos. Comparamos con el valor de fsolve para verificar que esto es cierto.> s:=fsolve(f(x)=0);

er:=abs(s-x4);

:= s 3.292924615 := er 0

Obviamente, el error 0 obtenido no quiere decir que nuestra solución es exacta. El motivo de este valor es que nuestro programa proporciona el mismo valor que fsolve.Problema 94 primeras iteraciones.> f:=v->9.81*0.002-1.4E-5*v^1.5-1.15E-5*v^2; Page 10

Page 11: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

f1:=D(f); x0:=30.; n:=4; for i from 0 to n-1 do x.(i+1):=evalf(x.i-f(x.i)/f1(x.i)); od;

:= f → v − − .01962 .000014 v1.5 .0000115 v2

:= f1 → v − − .0000210 v.5 .0000230 v := x0 30. := n 4

:= x1 38.65761127 := x2 37.74489496 := x3 37.73457926 := x4 37.73457794

Se piden 3 decimales exactos. Detenemos las iteraciones en x4 al haberse "estabilizado" los 6 primeros decimales.Verificamos la validez del resultado.> t:=3;

delta:=0.5*10^(-t); a:=x4-delta; b:=x4+delta; f(a); f(b);

:= t 3 := δ .0005000000000

:= a 37.73407794 := b 37.73507794

.49844 10-6

-.49845 10-6

Hay cambio de signo, por lo tanto, podemos garantizar que x4 aproxima la solución con 3 decimales exactos.Problema 10Tomamos la ecuación x^2-41=0 y aplicamos el método de Newton-Raphson con valor incial x0=6.5> f:=x->x^2-41;

f1:=D(f); x0:=6.5; n:=4; for i from 0 to n-1 do x.(i+1):=evalf(x.i-f(x.i)/f1(x.i)); od;

:= f → x − x2 41 := f1 → x 2 x

:= x0 6.5 := n 4

:= x1 6.403846154 := x2 6.403124278 := x3 6.403124237 := x4 6.403124238

Observamos que el error estimado |x4-x3| es inferior a 0.5·10^(-8). Verificamos la validez del resultado> t:=6;

delta:=0.5*10^(-t); a:=x4-delta; b:=x4+delta; f(a); f(b);

Page 11

Page 12: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= t 6

:= δ .5000000000 10-6

:= a 6.403123738 := b 6.403124738

-.640 10-5

.641 10-5

Hay cambio de signo, x4 aproxima la raíz con 6 decimales exactos. Verificamos esta afirmación comparando con sqrt(41)> sqrt(41.)-x4;

-.1 10-8

Problema 11Usamos la ecuación x^5-23=0 y aplicamos el método de Newton-Raphson con valor incial 1.5.> f:=x->x^5-23;

f1:=D(f); x0:=1.5; n:=6; for i from 0 to n-1 do x.(i+1):=evalf(x.i-f(x.i)/f1(x.i)); od;

:= f → x − x5 23

:= f1 → x 5 x4

:= x0 1.5 := n 6

:= x1 2.108641975 := x2 1.919586823 := x3 1.874456501 := x4 1.872176796 := x5 1.872171231 := x6 1.872171231

Hemos necesitado 6 iteraciones para obtener un error estimado aceptable. Verificamos la validez del resultado.> t:=6;

delta:=0.5*10^(-t); a:=x6-delta; b:=x6+delta; f(a); f(b);

:= t 6

:= δ .5000000000 10-6

:= a 1.872170731 := b 1.872171731

-.00003069.00003074

Hay cambio de signo, el resultado es correcto. Calculamos el error exacto con 10 dígitos.Verificamos el resultado comparando con 23^(1/5).> 23.^(1/5)-x6;

0Problema 12Tomamos la ecuación x-1/c=0.> c:='c';

f:=x->1/x-c; f1:=diff(f(x),x); x-f(x)/f1; expand(");

:= c c

Page 12

Page 13: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= f → x − 1x

c

:= f1 −1

x2

+ x⎛

⎝⎜⎜

⎠⎟⎟ −

1x

c x2

− 2 x x2 cVemos que efectivamente, después de simplificar, la fórmula de recurrencia del método de Newton-Raphson no contien divisiones.Aproximación de 1/9. Tomamos valor inicial 0.1.> c:=9;

x0:=0.1; n:=4; for i from 0 to n-1 do x.(i+1):=evalf(2*x.i-(x.i)^2*c); od;

:= c 9 := x0 .1 := n 4 := x1 .11

:= x2 .1111 := x3 .11111111

:= x4 .1111111111Error con 10 dígitos> er:=1/c-x4;

:= er 0Para 1/45, tomamos valor incial 0.02.> c:=45;

x0:=0.02; n:=5; for i from 0 to n-1 do x.(i+1):=evalf(2*x.i-(x.i)^2*c); od;

:= c 45 := x0 .02 := n 5

:= x1 .0220 := x2 .02222000

:= x3 .02222222200 := x4 .02222222222 := x5 .02222222222

Error con 10 dígitos.> er:=1/c-x5;

:= er 0Para 1/678, tomamos valor incial 1/500=0.002> c:=678;

x0:=0.002; n:=5; for i from 0 to n-1 do x.(i+1):=evalf(2*x.i-(x.i)^2*c); od;

:= c 678 := x0 .002 := n 5

:= x1 .001288Page 13

Page 14: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= x2 .001451235968 := x3 .001474545740 := x4 .001474926156 := x5 .001474926253

Error con 10 dígitos.> er:=1/c-x5;

:= er .1 10-11

Problema 13Definimos la función de iteración.> g:=x->(x+cos(x))/2;

:= g → x + 12

x12

( )cos x

Calculamos la derivada y la representamos. > g1:=diff(g(x),x);

:= g1 − 12

12

( )sin x

> plot(g1,x=0..1);

x10.80.60.40.20

0.5

0.4

0.3

0.2

0.1

Vemos que g' es positiva, por lo tanto, g(x) creciente, cuando x varia en [0,1], entonces g(x) varía en [g(0),g(1)].> g(0);

12

> g(1.);

.7701511530 Obtenemos g([0,1])=[0.5,0.7715], por lo tanto se cumple la "propiedad inclusiva".Vamos a calcular una cota superior de |g'(x)|. Como la derivada es positiva, la función objetivo es g'. > h:=g1;

h1:=diff(h,x);

:= h − 12

12

( )sin x

:= h1 −12

( )cos x

La derivada de h es negativa, por lo tanto, h es decreciente y tomará el máximo en el inicio del intervalo.> > M1:=subs(x=0,h);#podemos comprobar el valor en el gráfico> M1:=evalf(M1);

:= M1 − 12

12

( )sin 0

:= M1 .5000000000Determinamos el número de iteraciones para obtener 5 decimales exactos, para ello exigimos (M1)^(n)(b-a)<0.5*10^(-5). Observa que en este caso es b-a=1 y M1=0.5.> n:='n';

:= n nPage 14

Page 15: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

> ineq:=M1^n<0.5*10^(-5);

:= ineq < .5000000000n .5000000000 10-5

Resolución gráfica de la inecuación.> plot(ineq,n=10..40,thickness=3);

n40353025201510

1

0.8

0.6

0.4

0.2

0

En el gráfico observamos que la desigualdad es cierta a partir de 17.8; necesitamos 18 iteraciones.Cálculo del valor aproximado. Primeras 5 iteraciones.> g:=x->(x+cos(x))/2;

x0:=0.5; n:=5; for i from 0 to n-1 do x.(i+1):=evalf(g(x.i)); od;

:= g → x + 12

x12

( )cos x

:= x0 .5 := n 5

:= x1 .6887912810 := x2 .7304030635 := x3 .7376543073 := x4 .7388512527 := x5 .7390469553

Valor de la iteración 18.> g:=x->(x+cos(x))/2;

x0:=0.5; n:=18; for i from 0 to n-1 do x.(i+1):=evalf(g(x.i)); od: x.n;

:= g → x + 12

x12

( )cos x

:= x0 .5 := n 18

.7390851332Comparación con el valor caculado por fsolve.> s:=fsolve(x=g(x));

error:=abs(s-x18);

:= s .7390851332 := error 0

De hecho, el método converge mucho antes de lo previsto. El valor de g'(x) cerca de la raíz es aprox. 0.2, con ese valor de M1, el número de iteraciones sería n=8.> n:='n';

:= n nPage 15

Page 16: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

> ineq:=0.2^n<0.5*10^(-5); plot(ineq,n=0..15,thickness=3);

:= ineq < .2n .5000000000 10-5

n1412108642

1

0.8

0.6

0.4

0.2

0

> Si tomamos como valor incial x0=0.73, vemos que el método converge en 8 iteraciones. A continuación calculamos las 8 primeras iteraciones a partir de x0=0.73 y los errores estimados en cada paso.> g:=x->(x+cos(x))/2;

x0:=0.73; n:=8; for i from 0 to n-1 do `***********************`; x.(i+1):=evalf(g(x.i)); error.(i+1):=abs(x.(i+1)-x.i); od;

:= g → x + 12

x12

( )cos x

:= x0 .73 := n 8

*********************** := x1 .7375872012

:= error1 .0075872012***********************

:= x2 .7388402650 := error2 .0012530638

*********************** := x3 .7390451611

:= error3 .0002048961***********************

:= x4 .7390786098 := error4 .0000334487

*********************** := x5 .7390840687

:= error5 .54589 10-5

*********************** := x6 .7390849596

:= error6 .8909 10-6

*********************** := x7 .7390851049

:= error7 .1453 10-6

*********************** := x8 .7390851287

:= error8 .238 10-7Page 16

Page 17: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

Observamos que en la iteración 8, el error estimado es claramente inferior a 0.5*10^(-5).Problema 14El problema es muy parecido al anterior. Definimos la función de iteración.> g:=x->(x+exp(-x))/2;

:= g → x + 12

x12

e( )−x

La función de iteración es claramente continua. Para estudiar si se cumplen las hipótesis del teorema de convergencia en la iteración de punto fijo, debemos verificar que: 1) g(x) cae dentro de [0.5,1] para todo x en [0.5],2) El máximo de |g'(x)| sobre [0.5,1] es menor que 1.Empezamos por calcular la derivada de la función de iteración> g1:=diff(g(x),x);

:= g1 − 12

12

e( )−x

Una forma de investigar el signo de g1 es representar la desigualdad g1>0. > plot(g1>0,x=-3..3,thickness=3);

x 321-1-2-3

1

0.8

0.6

0.4

0.2

0

La desigualdad toma el valor 1 cuando es cierta, por lo tanto vemos que g'(x) es positiva en el intervalo [0.5,1]. La función de iteración es creciente en el intervalo. Calculamos los valores de g en los extremos del intervalo.> g(0.5);

.5532653299> g(1.);

.6839397206Cuando x varía en [0.5,1], g(x) toma valores en [g(0.5),g(1)]. Por lo tanto se cumple la condición (1).Ahora vamos a calcular M1=max|g'(x)|. Hemos visto que la derivada es positiva en el intervalo del problema, por lo tanto |g'(x)|=g'(x). La función objetivo es h(x)=g'(x).> h:=g1;#la derivada es positiva

h1:=diff(h,x);

:= h − 12

12

e( )−x

:= h112

e( )−x

h1 es claramente positiva. > plot(h1,x=0.5..1,y=0..0.4);

x10.90.80.70.60.5

y

0.4

0.3

0.2

0.1

0

Por lo tanto h es creciente y toma el máximo en x=1.> M1:=subs(x=1.,h);

Page 17

Page 18: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

M1:=evalf(M1);

:= M1 − 12

12

e( )-1.

:= M1 .3160602794Calculamos el número de iteraciones que permiten asegura 5 decimales.> a:=0.5;

b:=1.; n:='n'; ineq:=M1^n*(b-a)<0.5*10^(-5); plot(ineq,n=2..15,thickness=3);

:= a .5 := b 1. := n n

:= ineq < .5 .3160602794n .5000000000 10-5

n 1412108642

1

0.8

0.6

0.4

0.2

0

La inecuación empieza a ser cierta para x= 9.995; necesitamos 10 iteraciones.El siguiente programa calcula las iteraciones y el error estimado a partir del valor incial x0=0.75.> g:=x->(x+exp(-x))/2;

x0:=0.75; n:=10; for i from 0 to n-1 do `***********************`; x.(i+1):=evalf(g(x.i)); error.(i+1):=abs(x.(i+1)-x.i); od;

:= g → x + 12

x12

e( )−x

:= x0 .75 := n 10

*********************** := x1 .6111832764

:= error1 .1388167236***********************

:= x2 .5769457957 := error2 .0342374807

*********************** := x3 .5692784102

:= error3 .0076673855***********************

:= x4 .5676060368 := error4 .0016723734

*********************** := x5 .5672434722

:= error5 .0003625646***********************

:= x6 .5671649740 := error6 .0000784982Page 18

Page 19: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

*********************** := x7 .5671479834

:= error7 .0000169906***********************

:= x8 .5671443061

:= error8 .36773 10-5

*********************** := x9 .5671435103

:= error9 .7958 10-6

*********************** := x10 .5671433381

:= error10 .1722 10-6

Comparamos el valor obtenido con el que se obtiene con fsolve.> s:=fsolve(x=g(x));

err10:=abs(s-x10);

:= s .5671432904

:= err10 .477 10-7

Vemos que, efectivamente, la aproximación x10 tiene los 5 decimales exactos exigidos.Si observamos el valor de los errores estimados, vemos que un programa controlado por el error estimado habría detenido las iteraciones en x8. En ese caso el error real, sería

> err8:=abs(s-x8);

:= err8 .10157 10-5

Punto fijo x-Lf(x)

Ejercicio 15En este ejercicio nos proporcionan el intervalo que contiene la solución. En primer lugar debemos expresar la ecuación en forma normal f(x)=0 e identificar f(x). El programa siguiente calcula las iteraciones para la forma de punto fijo = ( )g x − x λ ( )f x . Como valor incial se ha tomado el punto medio del intervalo. Para mayor claridad, observa que primero contruimos g(x) como expresión y, despues, la transformamos en función con unapply.> f:=x->tan(0.1*x)-9.2*exp(-x);

a:=3; b:=4; fa:=evalf(f(a)); fb:=evalf(f(b)); f1:=(fb-fa)/(b-a); lambda:=1/f1; g:=x-lambda*f(x); g:=unapply(g,x); `******************`; x0:=evalf((a+b)/2); n:=9; for i from 0 to n-1 do x.(i+1):=g(x.i); od;

:= f → x − ( )tan .1 x 9.2 e( )−x

:= a 3 := b 4

:= fa -.1487047794 := fb .2542893409 := f1 .4029941203 := λ 2.481425782

:= g − + x 2.481425782 ( )tan .1 x 22.82911719 e( )−x

:= g → x − + x 2.481425782 ( )tan .1 x 22.82911719 e( )−x

******************Page 19

Page 20: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= x0 3.500000000 := n 9

:= x1 3.283588487 := x2 3.294128906 := x3 3.292774547 := x4 3.292943399 := x5 3.292922265 := x6 3.292924909 := x7 3.292924579 := x8 3.292924619 := x9 3.292924614

En el enunciado se pide una precisión de 6 decimales exactos. Tomando un margen de seguridad, hemos detenido las iteraciones cuando se han "estabilizado" los primeros 8 decimales. El resultado con fsolve es: > s:=fsolve(f(x)=0,x=a..b);

:= s 3.292924615El error exacto es:> er9:=abs(s-x9);

:= er9 .1 10-8

Ejercicio 16Resolvemos de forma similar al ejercicio anterior.> f:=x->x-cos(x);

a:=0; b:=1; fa:=evalf(f(a)); fb:=evalf(f(b)); f1:=(fb-fa)/(b-a); lambda:=1/f1; g:=x-lambda*f(x); g:=unapply(g,x); `******************`; x0:=evalf((a+b)/2); n:=10; for i from 0 to n-1 do x.(i+1):=g(x.i); od;

:= f → x − x ( )cos x := a 0 := b 1 := fa -1.

:= fb .4596976941 := f1 1.459697694 := λ .6850733574

:= g + .3149266426 x .6850733574 ( )cos x := g → x + .3149266426 x .6850733574 ( )cos x

****************** := x0 .5000000000

:= n 10 := x1 .7586717534 := x2 .7361182309 := x3 .7395176934 := x4 .7390216954 := x5 .7390944288 := x6 .7390837710 := x7 .7390853328 := x8 .7390851040 := x9 .7390851375Page 20

Page 21: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= x10 .7390851325Hemos detenido las iteraciones cuando se han estabilizado los 8 primeros decimales. Comparando con fsolve, el error real es:> s:=fsolve(f(x)=0,x=a..b);

er10:=abs(s-x10);

:= s .7390851332

:= er10 .7 10-9

Ejercicio 17En este caso, el enunciado no proporciona el intervalo. Como 49<55<64, tomamos como intervalo incial [7,8] y como valor incial x0=7.5.> f:=x->x^2-55;

a:=7; b:=8; fa:=evalf(f(a)); fb:=evalf(f(b)); f1:=(fb-fa)/(b-a); lambda:=1/f1; g:=x-lambda*f(x); g:=unapply(g,x); `******************`; x0:=evalf((a+b)/2); n:=5; for i from 0 to n-1 do x.(i+1):=g(x.i); od;

:= f → x − x2 55 := a 7 := b 8 := fa -6. := fb 9. := f1 15.

:= λ .06666666667

:= g − + x .06666666667 x2 3.666666667

:= g → x − + x .06666666667 x2 3.666666667******************

:= x0 7.500000000 := n 5

:= x1 7.416666667 := x2 7.416203704 := x3 7.416198545 := x4 7.416198488 := x5 7.416198487

Ejercicio 18En este problema nos ocupamos de un caso típico de los que aparecen en las apliaciones de ingeniería, donde normalmente tenemos que tratar con fórmula complejas que dependen de varios coeficientes. Conocemos además el orden de magnitud de la solución. El orden de magnitud de f es 10( )−2 , entonces podemos tomar como intervalo inicial a=0.01 y b=0.1. Como valor incial, tomamos el punto medio, esto es x0=0.055.> re:=30000;

d:=0.1; e:=0.0025; f:=x->x-(1.14-2.0*log[10](e/d+9.35/(re*sqrt(x))))^(-2); a:=0.01; b:=0.1; fa:=evalf(f(a)); fb:=evalf(f(b)); f1:=(fb-fa)/(b-a); lambda:=1/f1; g:=x-lambda*f(x); g:=unapply(g,x); Page 21

Page 22: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

`******************`; x0:=evalf((a+b)/2); n:=3; for i from 0 to n-1 do x.(i+1):=evalf(g(x.i)); od;

:= re 30000 := d .1

:= e .0025

:= f → x − x1

⎝⎜⎜

⎠⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟log10 +

ed

9.35

re x

2

:= a .01 := b .1

:= fa -.04557044318 := fb .04618075627 := f1 1.019457772 := λ .9809136067

:= g + .0190863933 x.9809136067

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟ln + .02500000000

.0003116666666

x( )ln 10

2

:= g → x + .0190863933 x.9809136067

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟ln + .02500000000

.0003116666666

x( )ln 10

2

****************** := x0 .05500000000

:= n 3 := x1 .05412218746 := x2 .05411417540 := x3 .05411410321

Observamos que:- A pesar de la aparente complejidad del problema, el método converge muy rápidamente.

- En el enunciado no se especifica la precisión requerida para la solución. Si tenemos en cuenta que los coeficientes de la ecuación están especificados con 3 dígitos, parece razonable aceptar la aproximación x3, donde se han estabilizado los 6 primeros dígitos.

Para calcular la solución correspondiente al nuevo valor del coeficiente e=0.0001, simplemente modificamos este parámetro y repetimos los cálculos.> re:=3000000;

d:=0.1; e:=0.0001; f:=x->x-(1.14-2.0*log[10](e/d+9.35/re/sqrt(x)))^(-2); a:=0.01; b:=0.1; fa:=evalf(f(a)); fb:=evalf(f(b)); f1:=(fb-fa)/(b-a); lambda:=1/f1; g:=x-lambda*f(x); g:=unapply(g,x); `******************`; x0:=evalf((a+b)/2); n:=3; for i from 0 to n-1 do x.(i+1):=evalf(g(x.i)); od; Page 22

Page 23: Métodos Numéricos: Resolución de ejercicios con Maple Tema 5: …lacova.upc.es/~fpq/numerico/ejercicios/maple/num-ceros... · 2008-04-18 · Métodos Numéricos: Resolución de

:= re 3000000 := d .1

:= e .0001

:= f → x − x1

⎝⎜⎜

⎠⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟log10 +

ed

9.35

re x

2

:= a .01 := b .1

:= fa -.00976298714 := fb .08033741994 := f1 1.001115634 := λ .9988856093

:= g + .0011143907 x.9988856093

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟ln + .001000000000

.3116666666 10-5

x( )ln 10

2

:= g → x + .0011143907 x.9988856093

⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟ − 1.14 2.0

⎝⎜⎜

⎠⎟⎟ln + .001000000000

.3116666666 10-5

x( )ln 10

2

****************** := x0 .05500000000

:= n 3 := x1 .01971821008 := x2 .01972087610 := x3 .01972087200

Nuevamente, obtenemos la solución en tres iteraciones.>

Page 23