Mostrando entradas con la etiqueta Bolzano. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bolzano. Mostrar todas las entradas

jueves, 24 de octubre de 2013

Métodos iterativos para resolver ecuaciones (III): el método de bisección

Esta entrada pertenece a la serie "Métodos iterativos para resolver ecuaciones" (parte I, parte II).

El método de bisección conceptualmente es uno de los más sencillos. Por el teorema de Bolzano sabemos que si una función es continua y encontramos dos abscisas cuyas imágenes tienen signo opuesto, entonces existe por lo menos una abscisa enmedio cuya imagen es nula. O traducido al sentido común, si para ir de un punto que está en una parte del eje X a otro punto que está en la otra parte del eje X tengo que hacerlo sin levantar el bolígrafo del papel, a la fuerza tengo que cortar el eje por lo menos una vez.

Este resultado suele utilizarse en 2º de Bachillerato en ejercicios que piden demostrar que una ecuación (f(x)=0) tiene alguna solución (basta que la función f(x) sea continua y encontrar dos abscisas a y b tales que f(a)·f(b)< 0).

El método de bisección es simplemente ir estrechando el cerco a la solución (léase el entorno en el que se aplica Bolzano), hasta que los extremos del intervalo difieren tan poco como queramos (es decir, cuando alcancemos la precisión deseada). En cada iteración se coge el punto medio del intervalo anterior y se evalúa el signo de la imagen de la función en dicho punto. Si el punto medio no es solución de la ecuación, de los dos intervalos resultantes de partir por la mitad el anterior, nos quedamos el que sigue cumpliendo las condiciones del teorema de Bolzano, es decir, el que conserva la condición de que las imágenes de sus extremos tienen signos opuestos.

Si llevamos a cabo esta idea con la ecuación que aparece en la primera entrada de esta serie

La función es una función continua (por ser polinómica) por tanto sólo nos queda encontrar dos abscisas cuyas imágenes tengan signos opuestos.

Vamos a trabajar con wxMaxima. Definimos el polinomio:
p(x):=x^5+3*x^4−2*x^3−x^2+5*x−3;
Y vamos probando valores hasta encontrar imágenes con signos opuestos:
p(0);
-3
p(1);
3


Entonces ya podemos asegurar que dentro del intervalo (0, 1) existe una solución a dicha ecuación. Tomamos el punto medio, 0.5, y calculamos su imagen:
p(0.5);
−0.78125

El signo es negativo, por lo que el extremo del intervalo anterior que debo mantener es el que tenía imagen positiva, es decir, el 1. Así pues, ahora sé que la solución está en el intervalo (0.5, 1).

Repetimos el proceso unas cuantas veces:
p(0.75);
0.5302734375
Sabemos que la solución está en el intervalo (0.5, 0.75).
 

(0.5+0.75)/2;
0.625
p(%);
−0.200775146484375
Sabemos que la solución está en el intervalo (0.625, 0.75).
 

(0.625+0.75)/2;
0.6875
p(%);
.1387434005737305
Sabemos que la solución está en el intervalo (0.625, 0.6875).

En este punto ya podemos asegurar que una aproximación decimal a las décimas (por truncamiento) de la solución es 0.6, dado que todos los números del intervalo (0.625, 0.6875) cumplen esa condición. Si queremos más cifras decimales de precisión debemos continuar con las iteraciones del procedimiento hasta que los extremos del intervalo coincidan en tantas cifras decimales como precisión queramos en la aproximación decimal de la solución.

Podemos automatizar el método de bisección en wxMaxima de la siguiente manera:

- Definimos la precisión que deseamos:
prec:10^(-4);

- Introducimos los extremos del intervalo en el que queremos aplicar el método:
a:0; b:1;

- Comprobamos que el intervalo introducido cumple que las imágenes de sus extremos tienen signos opuestos y definimos el bucle que calcula el punto medio del intervalo y selecciona el que mantiene la alternancia de signos para continuar con la siguiente iteración, salvo que ese punto medio sea la solución buscada. Las iteraciones continúan hasta que la diferencia entre los extremos del intervalo es menor o igual que la precisión definida.
if p(a)*p(b) < 0 then
while abs(a-b)>prec do (c:(a+b)/2, if p(c)=0 then return(c), if p(a)*p(c) < 0 then b:c else a:c);


- Una vez ejecutado el bucle, si no devuelve la solución exacta, pedimos a wxMaxima que nos muestre el intervalo resultante de la última iteración:
float(a); float(b);
0.66290283203125
0.6629638671875

Por tanto, podemos asegurar que la aproximación decimal (por truncamiento) con cuatro cifras de precisión de la solución de la ecuación es 0.6629.

Observando el dibujo de la función, prueba con otros intervalos para encontrar aproximaciones decimales de las otras funciones.


martes, 22 de octubre de 2013

Métodos iterativos para resolver ecuaciones (I): introducción

En la Educación Secundaria nos enseñan a encontrar la solución de las ecuaciones de primer grado y también un método para encontrar, en caso de existir, la/s solución/ones de ecuaciones de segundo grado.

Para resolver ecuaciones de orden superior nos enseñan un método de tanteo que utiliza el teorema del resto y el procedimiento de Ruffini. 

Curiosidades: ¿sabías que también existe una forma analítica de resolver ecuaciones de tercer grado? ¿y también para ecuaciones de cuarto grado? ¿Y sabías que está demostrado que no es posible encontrar métodos de este tipo para ecuaciones de grado mayor que 4?

Supongamos que estamos interesados en conocer la/s solución/ones real/es de la siguiente ecuación:
Pregunta: ¿Por qué podemos estar seguros de que tiene por lo menos una solución real?

Tras probar los valores 1, -1, 3 y -3 mediante el procedimiento de Ruffini podemos concluir que la ecuación no tiene soluciones racionales. (¿No sabes por qué? Aquí la explicación.)

Pedimos a wxMaxima que resuelva directamente la ecuación anterior:
solve(x^5+3*x^4−2*x^3−x^2+5*x−3=0,x);
Seguimos sin respuesta.
(Nota: otros programas dan las soluciones de la ecuación anterior cuando se les pide directamente que la resuelvan, pero lo hacen utilizando los métodos que vamos a comentar a continuación.)

Entonces, es momento de recurrir a otro tipo de métodos (que no se enseñan en ESO) para obtener una aproximación decimal de la/s solución/ones reales de la ecuación: los métodos iterativos.

Dos de los métodos más conocidos (y sencillos) son el método de bisección (una aplicación del teorema de Bolzano que se enseña en 2º de Bachillerato) y el método de Newton (que se enseña en algunos estudios universitarios).

http://ma1.eii.us.es/miembros/ajimenez/AN/TEO/Anima/img_tema1/V9_AN_Tema1_an35.gif

Los métodos anteriores también pueden aplicarse a funciones no polinómicas, pero tienen limitaciones importantes. Por ejemplo el método de bisección exige continuidad para asegurar la convergencia y el método de Newton exige derivabilidad y en algunos casos puede entrar en ciclos que no convergen.

En las próximas entradas de esta serie veremos estos métodos y cómo implementarlos en wxMaxima.


Entradas relacionadas: