• No se han encontrado resultados

Métodos Numéricos: Tema 5: Resolución aproximada de ecuaciones Practica 1 Prof: Francisco Palacios EPSEM-UPC Abril 2008 Versión 1.

N/A
N/A
Protected

Academic year: 2021

Share "Métodos Numéricos: Tema 5: Resolución aproximada de ecuaciones Practica 1 Prof: Francisco Palacios EPSEM-UPC Abril 2008 Versión 1."

Copied!
8
0
0

Texto completo

(1)

Métodos Numéricos: Tema 5: Resolución aproximada de ecuaciones

Practica 1

Prof: Francisco Palacios

EPSEM-UPC

Abril 2008 Versión 1.4

Contenido

• Solución gráfica de ecuaciones f(x)=g(x). • Solución gráfica de ecuaciones f(x)=0. • Resolución exacta con Maple. Comando solve.

- Resolución con parámetros.

- Función RootOf.

- Función allvalues.

- Funciones especiales: LambertW.

• Resolución aproximada con Maple. Comando fsolve. - Ecuaciones polinómicas: raíces reales.

- Ecuaciones polinómicas: opción complex.

- Ecuaciones no polinómicas: determinación del intervalo de búsqueda. • Método de la bisección.

- Programa inicial, sin protección de raíz exacta.

- Programa con listado de aproximaciones mediante lprint.

- Protección de raíz exacta.

Solución gráfica de ecuaciones f(x)=g(x).

Dada la ecuación x=exp(-x).

- Representamos la dos curvas y=x, y=exp(-x).

- La solución es la coordenada x del punto de corte.

> plot([x,exp(-x)],x=0..1,color=[red,blue]); x 0.6 0.8 1 0.4 0.2 1 0.8 0.6 0.4 0.2 0

En el gráfico podemos estimar el valor aproximado de la solución α .56 =

Solución gráfica de ecuaciones f(x)=0.

Dada la ecuación x=exp(-x).

- La escribimos en la forma normal x-exp(-x)=0.

- Representamos la curva y=x-exp(-x).

- La solución es la coordenada x del punto de corte con el eje OX.

Page 1

(2)

> plot(x-exp(-x),x=0..1); x 1 0.8 0.6 0.4 0.2 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1

Solución con exacta. Comando solve.

Escribimos la ecuación.

> eq1:=x^2-3*x+1=0;

:=

eq1 x2 − + 3 x 1 = 0 Resolvemos con solve.

> s:=solve(eq1,x); := s 3 + , 2 1 2 5 − 3 2 1 2 5 Usamos evalf para obtener aproximaciones decimales.

> sf:=evalf(s);

:=

sf 2.618033989 .381966011,

sf es una secuencia con dos elementos. Accedemos a cada una de las soluciones con la sintaxis sf[1], sf`[2]. > sf[1];

2.618033989 > sf[2];

.381966011 Resolución con parámetros.

Cuando usamos solve, la ecuación puede contener más de una indeterminada. En ese caso podemos resolver respecto de una incógnita, el resto de los valores indeterminados actuarán como parámetros.

> eq2:=x^2-b*x+1=0;

:=

eq2 x2 − + b x 1 = 0 Resolvemos respecto de x. En este caso b actúa como un parámetro indeterminado. > sx:=solve(eq2,x); := sx 1 + , 2b 1 2 b − 2 4 1 − 2b 1 2 b − 2 4 También podemos resolver respecto de b. Ahora x actúa como parámetro indeterminado. > sb:=solve(eq2,b); := sb x + 2 1 x Función RootOf.

Cuando usamos solve puede aparecer la expesión RootOf(polinomio), que representa las raíces del polinomio. Obtenemos los valores con el comando allvalues y aproximaciones decimales con fsolve .

> eq3:=x^5-x^2-1=0; s:=solve(eq3,x); := eq3 x5 − − x2 1 = 0 := s RootOf(_Z5 − _Z2 − 1) Obtenemos las raíces con el comando allvalues.

> allvalues(s);

−.7515192324 − .7846159210 I,−.7515192324 + .7846159210 I,.1545896767 − .8280741332 I, +

.1545896767 .8280741332 I 1.193859111, Con evalf, se obtiene una solución.

> evalf(s);

−.7515192324 − .7846159210 I

(3)

> eq3:=x^4-x+1=0; s:=solve(eq3,x); := eq3 x4 − + x 1 = 0 := s RootOf(_Z4 − + _Z 1)

Pedimos a Maple que muestre las raíces, la notación %1, %2, %3 representa otras expresiones que se definene a continuación. > vs:=allvalues(s); vs 1 + 12%3 1 12 − + − 6 %2 288 %1 + / 2 3 48 %11 3 / 72 6 %1 / 1 3 %11 3 / %1 + / 2 3 48 %11 3 / , := − 1 12%3 1 12 − + − 6 %2 288 %1 + / 2 3 48 %11 3 / 72 6 %1 / 1 3 %11 3 / %1 + / 2 3 48 %11 3 / , − 1 + 12%3 1 12 − + + 6 %2 288 %1 + / 2 3 48 %11 3 / 72 6 %1 / 1 3 %11 3 / %1 + / 2 3 48 %11 3 / , − 1 − 12%3 1 12 − + + 6 %2 288 %1 + / 2 3 48 %11 3 / 72 6 %1 / 1 3 %11 3 / %1 + / 2 3 48 %11 3 / := %1 108 + 12 I 687 := %2 %1 + / 2 3 48 %11 3 / %1 / 2 3 := %3 6 %1 + / 2 3 48 %11 3 /

A la vista de la complejidad de las expresiones obtenidas, parece bastante razonable que Maple no las muestre salvo que el usuario lo pida explícitamente.

Podemos obtener una evaluación decimal con evalf. > vsf:=evalf(vs);

vsf := .7271360846 + .4300142883 I,.7271360844 − .4300142883 I,−.7271360845 − .9340992891 I, −.7271360845 + .9340992891 I

Observa que si usas evalf directamente sobre s (esto es, sin usar allvalues) sólo obtienes una solución. > evalf(s);

−.7271360845 − .9340992895 I Funciones especiales.

En la resolución exacta de ecuaciones con solve, Maple puede recurir a funciones especiales. Para obtener una evaluación decimal puedes usar evalf.

> eq4:=x-exp(-x)=0; := eq4 xe(−x) = 0 > s:=solve(eq4,x); := s LambertW 1( ) > sf:=evalf(s); := sf .5671432904

También puede aparecer una combinación de funciones, funciones especiales y RootOf. En este caso, puedes usar evalf o allvalues para obtener el valor de las raíces, pero no tienes garantía de obtenerlas todas. La siguiente ecuación tiene infinitas soluciones positivas.

> eq4:=exp(-x)=x*cos(x);

:=

eq4 e(−x) = xcos x( ) Si intentamos resolver con solve, obtenemos una expresión que contiene RootOf.

(4)

> s:=solve(eq4,x);

:=

s RootOf(cos _Z e( ) _Z_Z − 1)

Podemos intentar obtener las soluciones con allvalues, pero cuando el argumento de RootOf no es un polinomio no hay garantías de obtener todas las soluciones. En este caso sólo obtenemos una.

> allvalues(s);

1.390920331 Si usamos evalf, obtenemos la misma solución.

> evalf(s);

1.390920331

Si expresamos la ecuación en forma normal f(x)=0 y representamos la curva y=f(x), está claro que la ecuación tiene varias soluciones. La solución que hemos obtenido con solve es la segunda solución positiva.

> plot(exp(-x)-x*cos(x),x=-2..10); x 6 8 10 4 2 -2 8 6 4 2 0 -2 -4 -6

Resolución aproximada con fsolve.

Ecuaciones polinómicas.

El comando fsolve usa una combinación de métodos numéricos para aproximar la solución de la ecuación. En ecuaciones polinómicas, fsolve proporciona todas las raíces reales.

> p:=x^6-x^2+x-1.23; s:=fsolve(p=0,x); := p x6 − + − x2 x 1.23 := s -1.264842563 1.041007115, Para obtener las raíces complejas, debemos especificar la opción complex. > sc:=fsolve(p=0,x,complex);

sc := -1.264842563,−.3427827285 − 1.055736446 I,−.3427827285 + 1.055736446 I,.4547004523 − .7425862366 I, +

.4547004523 .7425862366 I 1.041007115,

Observamos que, además de las dos raíces reales, tenemos dos pares de raíces complejas conjugadas. Si dibujamos la curva y=p(x), podemos observar las dos raíces reales.

> plot(p,x=-1.5..1.5); x 1 1.5 0.5 -0.5 -1 -1.5 8 6 4 2 0 -2 Ecuaciones no polinómicas.

En ecuaciones no polínomicas, no hay garantía de que fsolve obtenga todas las raíces reales, normalmente sólo proporciona una raíz.

No obstante, con fsolve podemos indicar el intervalo de búsqueda para obtener la raíz deseada.

(5)

> eq:=exp(-x)=x*cos(x);

:=

eq e(−x) = xcos x( ) El comando fsolve nos proporciona una raíz.

> s:=fsolve(eq,x);

:=

s 1.390920331

Escribimos la ecuación enforma nomal f(x)=0 y representanos la curva y=f(x). Podemos ver que en el intervalo [0,5] hay 3 raíces reales. Observamos que el comando fsolve nos ha proporcionado la segunda.

> plot(rhs(eq)-lhs(eq),x=0..5); x 3 4 5 2 1 1 0 -1 -2 -3

Para obtener la primera raíz positiva, podemos especificar el intervalo [0,1]. > s1:=fsolve(eq,x=0..1);

:=

s1 .6549952596 Para obtener la tercera, especificamos el intervalo [4,5].

> s3:=fsolve(eq,x=4..5);

:=

s3 4.714290905

Método de la bisección.

El método de la bisección permite aproximar una solución de una ecuación en forma normal f(x)=0, donde f(x) cumple las condiciones del Teorema de Bolzano en el intervalo [a.b].

- f es continua en [a,b].

- f(a) y f(b) tienen signos diferentes.

En cada paso, se calcula el punto medio del intervalo y se descarta el semi-intervalo donde f no cambia signos. Como ejemplo, vamos a aproximar la primera solución positiva de la ecuación exp(x)=1+cos(x).

Recuerda que tenemos que escribir la ecuació en forma normal exp(x)-cos(x)-1=0. > f:=x->exp(x)-cos(x)-1;

:=

f xexcos x( ) − 1 Representamos para localizar un intervalo incial.

> plot(f(x),x=0..1); x 0.6 0.8 1 0.4 0.2 1 0.5 0 -0.5 -1

El intervalo [0,1] es adecuado para inicial el método. Programa para la bisección sin protección de raíz exacta.

Empezamos con una versión simplificada que no tiene en cuenta la posibilidad de que se obtenga la solución exacta. No obstante, basta con observar el valor fc para ver si en alguna iteración se ha alacanzado la solución exacta. > f:=x->exp(x)-cos(x)-1;

a:=0; b:=1; nmax:=3;

(6)

for j from 1 to nmax do `******** fase`,j,`********`; c:=evalf((a+b)/2);

fa:=f(a); fc:=f(c);

if fa*fc<0 then b:=c else a:=c fi od; := f xexcos x( ) − 1 := a 0 := b 1 := nmax 3 , , ******** fase 1 ******** := c .5000000000 := fa -1 := fc -.2288612909 , , ******** fase 2 ******** := c .7500000000 := fa -.2288612909 := fc .385311148 , , ******** fase 3 ******** := c .6250000000 := fa -.2288612909 := fc .057282838

Programa que lista todos los valores usados en la aplicación manual del método. > f:=x->exp(x)-cos(x)-1;

a:=0; b:=1; nmax:=3;

for j from 1 to nmax do `******** fase`,j,`********`; a; c:=evalf((a+b)/2); b; fa:=f(a); fc:=f(c); fb:=f(b);

if fa*fc<0 then b:=c else a:=c fi od; := f xexcos x( ) − 1 := a 0 := b 1 := nmax 3 , , ******** fase 1 ******** 0 := c .5000000000 1 := fa -1 := fc -.2288612909 := fb e − cos 1( ) − 1 , , ******** fase 2 ******** .5000000000 := c .7500000000 1 := fa -.2288612909 := fc .385311148

Page 6

(7)

:= fb e − cos 1( ) − 1 , , ******** fase 3 ******** .5000000000 := c .6250000000 .7500000000 := fa -.2288612909 := fc .057282838 := fb .385311148 Modificación del programa que sólo lista el valor de c.

El siguiente programa sólo lista el valor de c, permitiendo ver con mayor claridad las sucesivas aproximaciones.

Sin embargo, debes observar que ahora no puedes saber si se ha alcanzado una solución exacta en alguna iteración y, por lo tanto, podrías obtener una aproximación errónea.

> f:=x->exp(x)-cos(x)-1; a:=0;

b:=1; nmax:=25;

for j from 1 to nmax do `******** fase`,j,`********`; c:=evalf((a+b)/2);

fa:=f(a); fc:=f(c);

if fa*fc<0 then b:=c else a:=c fi; lprint(`fase `,j,` c=`,c); od: := f xexcos x( ) − 1 := a 0 := b 1 := nmax 25 fase 1 c= .5000000000 fase 2 c= .7500000000 fase 3 c= .6250000000 fase 4 c= .5625000000 fase 5 c= .5937500000 fase 6 c= .6093750000 fase 7 c= .6015625000 fase 8 c= .5976562500 fase 9 c= .5996093750 fase 10 c= .6005859375 fase 11 c= .6010742188 fase 12 c= .6013183594 fase 13 c= .6014404297 fase 14 c= .6013793946 fase 15 c= .6013488770 fase 16 c= .6013336182 fase 17 c= .6013412476 fase 18 c= .6013450623 fase 19 c= .6013469697 fase 20 c= .6013460161 fase 21 c= .6013464930 fase 22 c= .6013467314 fase 23 c= .6013468506 fase 24 c= .6013467910 fase 25 c= .6013467612

Verficamos el valor obtenido sustituyendo en la ecuación. > f(c);

-.161 10-7 Solución con fsolve

> s:=fsolve(f(x)=0,x=0..1);

:=

s .6013467677 Programa con protección para raíz exacta.

Usamos la ecuación 32x-1=0, que tiene una raíz exacta en x=1/32. > f:=x->32*x-1;

a:=0; b:=1; nmax:=25;

(8)

for j from 1 to nmax do c:=evalf((a+b)/2); fa:=f(a);

fc:=f(c);

if abs(fc)<10^(-15) then lprint(`Raíz exacta c=`,c);break fi; lprint(`fase `,j,` c=`,c);

if fa*fc<0 then b:=c else a:=c fi; od: := f x32 x − 1 := a 0 := b 1 := nmax 25 fase 1 c= .5000000000 fase 2 c= .2500000000 fase 3 c= .1250000000 fase 4 c= .6250000000e-1 Raíz exacta c= .3125000000e-1

>

Referencias

Documento similar

[r]

Objetivo del Proyecto: Fortalecer el proyecto educativo del Centro Fe y Alegría Chiantla, fortaleciendo los procesos que lo constituyen, en el marco de la calidad educativa del

En estas modificaciones se busca aumentar el orden, mejorar la rapidez de convergencia (m´ etodos aceleradores de la convergencia), tratar de eliminar el uso de derivadas, aplicar el

También se presentan métodos numéricos para resolver de manera aproximada problemas de valor inicial y/o de contorno para dichas ecuaciones.. Contexto

buscaron eso, lo sintieron y les llego y fueron también como un puente importante entre las comunidades y entre nosotros y los ancianos de sus pueblos, ellos se

[r]

[r]

Del mismo modo que en el caso 1, para evaluar apropiadamente los requerimientos del coste computacional, la solución ana- lítica (ALL) ha sido dividida en dos costes computacionales: