Evaluación de la función Exp(x) por desarrollo serie (II)
De Ejercicios
Contenido |
Enunciado
OTRA FORMA DE TERMINAR UN BUCLE
En el programa del calculo del polinomio de Taylor Exp (x), el bucle while terminaba al llegar al número de términos solicitado por el usuario. Vamos a emplear ahora otro criterio para terminar ese bucle. El programa que se presenta a continuación tiene tres variables importantes: serie1, serie2 y frac. Al final del bucle while tenemos dos variables que serán distintas: serie1 y serie2. La diferencia entre ambas está en frac. Como frac va disminuyendo su valor, habrá un momento en que los decimales de serie1 y serie2 coincidirán (el ordenador no puede tener información de todos los decimales). Por esta razón, lo que marca el límite del bucle es la comparación entre serie1 y serie2. Este programa se ha realizado sin emplear ninguna función. Guárdalo como serie2.c.
Soluciones
Programa en C por Angel
Solución comentada al Ejercicio:
/* fichero serie2.c */ #include <stdio.h> #include <math.h> void main(void) { double x, serie1, serie2, frac; int i; printf("Teclea el valor de x: "); scanf("%lf", &x); serie1=1.0; frac=x; serie2=serie1+frac; i=2; while (serie1!=serie2) { serie1=serie2; frac=frac*x/i++; serie2=serie1+frac; } printf("Valor estimado: %20.16e\n", serie2); printf("Valor exacto: %20.16e.\n", exp(x)); printf("Numero de terminos utilizados: %d\n", i); }
Comentario
Este ejercicio es similar al Exp(x). En este caso la diferencia estriba en la condición de finalización de las iteraciones. Para este ejercicio utilizamos un bucle while y dos series (con los nombres serie1 y serie2) cuya diferencia mutua esta en un término, es decir, serie2 tiene un término más que serie1. La razón de esta forma de calcular la serie la encontramos una vez más en la capacidad de almacenamiento de las variables tipo double: la fracción que calculamos y que añadimos a la serie es cada vez más pequeña y, por tanto, la diferencia entre las dos series también. Llega un momento en el que las cifras significativas que puede almacenar la variable no son apreciables y la fracción que sumamos no representa cambio en las variables: en ese momento las series toman el mismo valor, se igualan y, por tanto, se termina la ejecución del bucle.
Diseño en pseudocódigo
ALGORITMO Serie2 ENTRADAS: x: REAL (Valor sobre el que se quiere calcular la función Exp(x)) SALIDAS: serie2: REAL (Resultado de la función Exp(x)) VARIABLES: i: ENTERO serie1: REAL frac:REAL INICIO ESCRIBIR "Teclea el valor de x: " LEER x serie1<--1.0 frac<--x serie2<--serie1+frac i<--2 MIENTRAS serie1<>serie2 HACER serie1<--serie2 frac<-- frac*x/(i+1) serie2<--serie1+frac FIN_MIENTRAS ESCRIBIR "Valor estimado: ", serie2 ESCRIBIR "Valor exacto: ", Exp(x) ESCRIBIR "Número de términos utilizados: ", i FIN
Comentario
Suponemos que en pseudocódigo existe una función Exp
que nos devuelve el valor exacto de ex
.