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.

Tipos de soluciones