You are on page 1of 23

Mtodos Numricos: Resolucin de ejercicios con Maple

Tema 5: Resolucin aproximada de ecuaciones


Prof. Francisco Palacios
EPSEM-UPC
Abril 2008. Versin 1.3

Ejercicio 1.
(a) Representamos conjuntamente las funciones de los dos miembros de la ecuacin x=exp(-x). La raz es la x del punto de corte de
las grficas.
> plot([x,exp(-x)],x=0..1);
1

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

(c) Si exigimos 4 decimales exactos en la aproximacin mediante el mtodo de la biseccin, resulta la siguiente inecuacin:
> inec:=1/2^n<0.5*10^(-4);
1

< .00005000000000
2n
Resolvemos graficamente la inecuacin, vemos que hacen falta 15 pasos.
> plot(inec,n=0..20);
inec :=

1
0.8
0.6
0.4
0.2

10
n

15

Programa elemental para calcular 5 pasos de biseccin.


> f:=x->x-exp(-x);
a:=0;
b:=1;
n:=5;
for i from 1 to n do
`******** iteracin`,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
******** iteracin, 1, **************
c := .5000000000
******** iteracin
, 2, **************
Page
1

20

c := .7500000000
******** iteracin, 3, **************
c := .6250000000
******** iteracin, 4, **************
c := .5625000000
******** iteracin, 5, **************
c := .5937500000

Ejercicio 2.
Si realizamos el grfico con Maple, podemos representar directamente y=x-exp(-x) y observar el corte con OX. Fjate 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);
0.6
0.4
0.2
0.2

0.4

0.6

0.8

0
-0.2
-0.4
-0.6
-0.8
-1

De la grfica, podemos estimar el valor aproximado 0.57 para la solucin.


Determinamos el nmero 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);
1
0.8
0.6
0.4
0.2
0 20

22

24

26

28

30

Necesitamos 25 iteraciones.
> n7:=25;
n7 := 25
Usamos el programa anterior para calcular el valor de las 25 iteraciones. Observa que hemos puesto : despus de od, eso evita que
se impriman los clculos realizados dentro del bucle. Hemos aadido una comando print al final que imprime el valor obtenido en
la ltima iteracin.
> f:=x->x-exp(-x);
a:=0;
b:=1;
n:=n7;
for i from 1 to n do
`******** iteracin`,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 aproximacin =`,c);
f := x x e( x )

Page 2

a := 0
b := 1
n := 25
Valor de la aproximacin = , .5671432916
Calculamos la solucin con fsolve.
> s:=fsolve(f(x),x=a..b);
s := .5671432904
Calculamos 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 ecuacin considerada, Maple puede calcular la solucin exacta usando la funcin especial
LambertW.
> s:=solve(f(x),x);
s := LambertW( 1 )
> sf:=evalf(s);
sf := .5671432904

Ejercicio 3.
Dibujamos una representacin conjunta.
> plot([1/x,ln(x)],x=1..2,color=[red,blue]);
1

0.8

0.6

0.4

0.2

01

1.2

1.4

1.6

1.8

Calculamos el nmero 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 grficamente.
> plot(inec,n=0..30);
1
0.8
0.6
0.4
0.2

10

15
n

20

25

30

Cambio de signo en 17.54, hacen falta 18 iteraciones.


Tambin podemos resolver con solve.
> solve(inec,n);
RealRange( Open( 17.60964047 ), )
Vemos que la inecuacin 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

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

1
x

ln( x )

a := 1
b := 2
n := 4
******** iteracin, 1, **************
c := 1.500000000
******** iteracin, 2, **************
c := 1.750000000
******** iteracin, 3, **************
c := 1.875000000
******** iteracin, 4, **************
c := 1.812500000
Valor de la iteracin 18.
> f:=x->1/x-ln(x);
a:=1;
b:=2;
n:=18;
for i from 1 to n do
`******** iteracin`,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 aproximacin =`,c);
f := x

1
x

ln( x )

a := 1
b := 2
n := 18
Valor de la aproximacin = , 1.763225557
Resolucin con fsolve.
> s:=fsolve(f(x),x=a..b);
s := 1.763222834
Error, 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).
Tambin en este caso, Maple obtiene una solucin exacta con solve, usando la funcin especial LambertW.
> s:=solve(f(x),x);
s :=

1
LambertW( 1 )

> sf:=evalf(s);
sf := 1.763222834

Problema 4
Representacin conjunta.
> plot([ln(x),exp(-x)],x=1..2,color=[red,blue]);

Page 4

0.7
0.6
0.5
0.4
0.3
0.2
0.1
01

1.2

1.4

1.6

1.8

El intervalo tiene longitud 1, necesitamos 18 iteraciones. Los clculos son los mismos que en el ejercicio anterior. Observa que la
cota de error slo depende de la longitud de intervalo y el nmero 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
`******** iteracin`,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
******** iteracin, 1, **************
c := 1.500000000
******** iteracin, 2, **************
c := 1.250000000
******** iteracin, 3, **************
c := 1.375000000
******** iteracin, 4, **************
c := 1.312500000
Valor de la iteracin 18.
> f:=x->ln(x)-exp(-x);
a:=1;
b:=2;
n:=18;
for i from 1 to n do
`******** iteracin`,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 aproximacin =`,c);
f := x ln( x ) e( x )
a := 1
b := 2
n := 18
Valor de la aproximacin = , 1.309803011
Valor 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 solucin real con solve.

Page 5

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

_Z

(e )

RootOf _Z e
1

> evalf(s);
.8912828692 5.493407989 I

Problema 5
Escribimos la ecuacin en forma normal f(v)=0 y definimos la funcin 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, -.00232175098
Tenemos un cambio de signo en [30,40]. Representamos la funcin en ese intervalo.
Observa que aunque hemos utilizado v para definir la funcin, podemos usar cuaquier variable "limpia" para dibujar la grfica. En
particular, podemos usar f(x).
> plot(f(x),x=30..40);

0.006

0.004

0.002

0 30

32

34

36

38

40

-0.002

Tomamos el valor aproximado de la raz v=37.7


Nmero 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);
1
0.8
0.6
0.4
0.2

10
n

15

Cambio de signo en x=10.96, necesitamos 11 iteraciones.


Confirmamos el resultado resolviendo la iecuacin 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
`******** iteracin`,i,`**************`;
Page 6

20

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
******** iteracin, 1, **************
c := 35.
******** iteracin, 2, **************
c := 37.50000000
******** iteracin, 3, **************
c := 38.75000000
Valor de la iteracin 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
`******** iteracin`,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
******** iteracin, 1, **************
c := 35.
******** iteracin, 2, **************
c := 37.50000000
******** iteracin, 3, **************
c := 38.75000000
******** iteracin, 4, **************
c := 38.12500000
******** iteracin, 5, **************
c := 37.81250000
******** iteracin, 6, **************
c := 37.65625000
******** iteracin, 7, **************
c := 37.73437500
******** iteracin, 8, **************
c := 37.77343750
******** iteracin, 9, **************
c := 37.75390625
******** iteracin, 10, **************
c := 37.74414063
******** iteracin, 11, **************
c := 37.73925782
Clculo de la raz con fsolve y verificacin del error.
> s:=fsolve(f(x),x=a..b);
error:=abs(s-c);
s := 37.73457794

Page
7
error :=
.00467988

Intentamos resolver con solve.


> solve(f(x)=0,x);
37.73457794
En este caso, solve tambin nos proporciona la solucin.

Problema 6
Expresamos la ecuacin 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.);
.2542893409
Hay 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 raz 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
`******** iteracin`,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 aproximacin =`,c);
f := x tan( .1 x ) 9.2 e( x )
a := 3
b := 4
n := 18
Valor de la aproximacin = , 3.292926791
Calculamos el valor de f(x), tiene que ser prximo a cero.
> f(c);
.9867 10-6
Comparacin 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 I
Vemos que solve no obtiene la solucin real buscada.

Problema 7
Si resolvemos el problema de forma manual, dibujaremos las curvas correspondientes a los miembros de la ecuacin.
> plot([x,exp(-x)],x=0..1,color=[red,blue]);

Page 8

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

Observamos que hay una solucin cercana a 0.6.


En la resolucin con Maple, podemos escribir la ecuacin en forma normal f(x)=0, y representar una sola curva. La solucin es
ahora el corte con el eje OX.
> f:=x->x-exp(-x);
plot(f(x),x=0..1);
f := x x e( x )

0.6
0.4
0.2
0.2

0.4

0.6

0.8

0
-0.2
-0.4
-0.6
-0.8
-1

Podemos tomar x0=0.5. Realizamos 3 iteraciones con el mtodo 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.510^(-8). Vamos a verificar que, en efecto, x4 aproxima la solucin de la
ecuacin con 8 decimales exactos.
> t:=8;
delta:=0.5*10^(-t);

Page 9

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 teora, podemos asegurar que la solucin es correcta.

Problema 8
Expresamos la ecuacin 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 solucin 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 solucin 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 solucin es exacta. El motivo de este valor es que nuestro programa
proporciona el mismo valor que fsolve.

Problema 9
4 primeras iteraciones.
> f:=v->9.81*0.002-1.4E-5*v^1.5-1.15E-5*v^2;
Page 10

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 solucin con 3 decimales exactos.

Problema 10
Tomamos la ecuacin x^2-41=0 y aplicamos el mtodo 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.510^(-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

t := 6
:= .5000000000 10-6
a := 6.403123738
b := 6.403124738
-.640 10-5
.641 10-5
Hay cambio de signo, x4 aproxima la raz con 6 decimales exactos. Verificamos esta afirmacin comparando con sqrt(41)
> sqrt(41.)-x4;
-.1 10-8
Problema 11
Usamos la ecuacin x^5-23=0 y aplicamos el mtodo 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 dgitos.
Verificamos el resultado comparando con 23^(1/5).
> 23.^(1/5)-x6;
0
Problema 12
Tomamos la ecuacin 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

f := x
f1 :=

1
x

1
x2

x + c x2
x

2 x x2 c
Vemos que efectivamente, despus de simplificar, la frmula de recurrencia del mtodo de Newton-Raphson no contien divisiones.
Aproximacin 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 := .1111111111
Error con 10 dgitos
> er:=1/c-x4;
er := 0
Para 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 dgitos.
> er:=1/c-x5;
er := 0
Para 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 Page
:= .001288
13

x2 := .001451235968
x3 := .001474545740
x4 := .001474926156
x5 := .001474926253
Error con 10 dgitos.
> er:=1/c-x5;
er := .1 10-11

Problema 13
Definimos la funcin de iteracin.
> g:=x->(x+cos(x))/2;
1

g := x

x+

cos( x )

Calculamos la derivada y la representamos.


> g1:=diff(g(x),x);
1

g1 :=

sin( x )

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

0.4

0.3

0.2

0.1
0

0.2

0.4

0.6

0.8

Vemos que g' es positiva, por lo tanto, g(x) creciente, cuando x varia en [0,1], entonces g(x) vara en [g(0),g(1)].
> g(0);
1
2
> 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 funcin objetivo es g'.
> h:=g1;
h1:=diff(h,x);

h1 :=

h :=

1
2

sin( x )

cos( x )
2
La derivada de h es negativa, por lo tanto, h es decreciente y tomar el mximo en el inicio del intervalo.
>
> M1:=subs(x=0,h);#podemos comprobar el valor en el grfico
> M1:=evalf(M1);
M1 :=

1
2

sin( 0 )

M1 := .5000000000
Determinamos el nmero 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 := n

Page 14

> ineq:=M1^n<0.5*10^(-5);
ineq := .5000000000n < .5000000000 10-5
Resolucin grfica de la inecuacin.
> plot(ineq,n=10..40,thickness=3);
1

0.8

0.6

0.4

0.2

0 10

15

20

25
n

30

35

40

En el grfico observamos que la desigualdad es cierta a partir de 17.8; necesitamos 18 iteraciones.


Clculo 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

1
2

x+

1
2

cos( x )

x0 := .5
n := 5
x1 := .6887912810
x2 := .7304030635
x3 := .7376543073
x4 := .7388512527
x5 := .7390469553
Valor de la iteracin 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

1
2

x+

1
2

cos( x )

x0 := .5
n := 18
.7390851332
Comparacin con el valor caculado por fsolve.
> s:=fsolve(x=g(x));
error:=abs(s-x18);
s := .7390851332
error := 0
De hecho, el mtodo converge mucho antes de lo previsto. El valor de g'(x) cerca de la raz es aprox. 0.2, con ese valor de M1, el
nmero de iteraciones sera n=8.
> n:='n';
n := n 15
Page

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

0.8

0.6

0.4

0.2

10

12

14

>
Si tomamos como valor incial x0=0.73, vemos que el mtodo converge en 8 iteraciones. A continuacin 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

1
2

x+

1
2

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
:= .23816
10-7
Page

Observamos que en la iteracin 8, el error estimado es claramente inferior a 0.5*10^(-5).


Problema 14
El problema es muy parecido al anterior. Definimos la funcin de iteracin.
> g:=x->(x+exp(-x))/2;
1
x + e( x )
2
2
La funcin de iteracin es claramente continua. Para estudiar si se cumplen las hiptesis del teorema de convergencia en la
iteracin de punto fijo, debemos verificar que:
1) g(x) cae dentro de [0.5,1] para todo x en [0.5],
2) El mximo de |g'(x)| sobre [0.5,1] es menor que 1.
Empezamos por calcular la derivada de la funcin de iteracin
> g1:=diff(g(x),x);
g := x

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

1
0.8
0.6
0.4
0.2

-3

-2

-1

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 funcin de
iteracin es creciente en el intervalo. Calculamos los valores de g en los extremos del intervalo.
> g(0.5);
.5532653299
> g(1.);
.6839397206
Cuando x vara en [0.5,1], g(x) toma valores en [g(0.5),g(1)]. Por lo tanto se cumple la condicin (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 funcin objetivo es h(x)=g'(x).
> h:=g1;#la derivada es positiva
h1:=diff(h,x);
h :=

1
2

e( x )

h1 :=

e( x )

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

0.3

y0.2

0.1

0 0.5

0.6

0.7

0.8

Por lo tanto h es creciente y toma el mximo en x=1.


> M1:=subs(x=1.,h);

Page 17

0.9

M1:=evalf(M1);
M1 :=

1
2

1
2

e( -1. )

M1 := .3160602794
Calculamos el nmero 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
1
0.8
0.6
0.4
0.2

02

10

12

14

La inecuacin 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

1
2

x+

1
2

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 Page
:= .0000784982
18

***********************
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 aproximacin x10 tiene los 5 decimales exactos exigidos.
Si observamos el valor de los errores estimados, vemos que un programa controlado por el error estimado habra detenido las
iteraciones en x8. En ese caso el error real, sera
> err8:=abs(s-x8);
err8 := .10157 10-5

Punto fijo x-Lf(x)


Ejercicio 15
En este ejercicio nos proporcionan el intervalo que contiene la solucin. En primer lugar debemos expresar la ecuacin 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 expresin
y, despues, la transformamos en funcin 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

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 precisin 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.292924615
El error exacto es:
> er9:=abs(s-x9);
er9 := .1 10-8
Ejercicio 16
Resolvemos 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

20
x9 :=Page
.7390851375

x10 := .7390851325
Hemos 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 17
En 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 18
En este problema nos ocupamos de un caso tpico de los que aparecen en las apliaciones de ingeniera, donde normalmente
tenemos que tratar con frmula complejas que dependen de varios coeficientes. Conocemos adems el orden de magnitud de la
solucin. 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

`******************`;
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 x

e
9.35
1.14 2.0 log10 +

d re x

a := .01
b := .1
fa := -.04557044318
fb := .04618075627
f1 := 1.019457772
:= .9809136067
g := .0190863933 x +

.9809136067

.0003116666666 2


ln .02500000000 +

1.14 2.0

ln( 10 )

g := x .0190863933 x +

.9809136067

.0003116666666 2

.02500000000 +

ln

1.14 2.0

ln( 10 )

******************
x0 := .05500000000
n := 3
x1 := .05412218746
x2 := .05411417540
x3 := .05411410321

Observamos que:
- A pesar de la aparente complejidad del problema, el mtodo converge muy rpidamente.
- En el enunciado no se especifica la precisin requerida para la solucin. Si tenemos en cuenta que los coeficientes de la ecuacin
estn especificados con 3 dgitos, parece razonable aceptar la aproximacin x3, donde se han estabilizado los 6 primeros dgitos.
Para calcular la solucin correspondiente al nuevo valor del coeficiente e=0.0001, simplemente modificamos este parmetro y
repetimos los clculos.
> 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

re := 3000000
d := .1
e := .0001
f := x x

9.35
e
1.14 2.0 log10 +
d

re x

a := .01
b := .1
fa := -.00976298714
fb := .08033741994
f1 := 1.001115634
:= .9988856093
g := .0011143907 x +

.9988856093
-5

.001000000000 + .3116666666 10
ln

1.14 2.0
ln( 10 )

g := x .0011143907 x +

.9988856093
-5

.001000000000 + .3116666666 10
ln

1.14 2.0

ln( 10 )

******************
x0 := .05500000000
n := 3
x1 := .01971821008
x2 := .01972087610
x3 := .01972087200
Nuevamente, obtenemos la solucin en tres iteraciones.
>

Page 23

You might also like