• Lunes 29 de Abril de 2024, 07:12

Autor Tema:  funcion de taylor  (Leído 1458 veces)

sanlegas2000

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
funcion de taylor
« en: Domingo 19 de Junio de 2011, 16:54 »
0
Bueno me dejaron hacer la serie de taylor, me base en este libro(les adjuto la imagen)
el caso es que si funciona para ese problema(solo se pasa por unas centesimas) pero cuando pongo otros valores como 90, por ejemplo sen de 90 es uno, me deberia de dar no se un numero cercano a , pero me da 1.4 y tanto , siento que el problema es que me como muchos centecimos o no se donde este si pueden ayudarme gracias.
imageshack.us/photo/my-images/38/taylot.png(aun no cuento con privilegios de subir imagen xD)
Código: C
  1. #include <stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include <math.h>
  5. #define pi 3.141592654
  6. int factorial(int n)
  7. {
  8.     int i;
  9.     int fac=1;
  10.     for (i=1;i<=n;i++)
  11.     {
  12.         fac=fac*i;
  13.     }
  14.     return  fac;
  15. }
  16. int main()
  17. {
  18.     float x=90,a=45,suma=1;
  19.     float z=(x-a)/180*pi;
  20.     int i;
  21.     int iteraciones=15;
  22.     float e,r,t;
  23.     e=(float)1/90;
  24.     float param=90,resul;
  25.     resul=sin(param*pi/180);
  26.     for (i=1;i<iteraciones;i++)
  27.     {
  28.        
  29.     if(i%4==1 || i%4==2)
  30.        
  31.             suma=suma+pow(z,i)/factorial(i);
  32.        
  33.         if(i%4==3|| i%4==0)
  34.            
  35.         suma=suma+(-1)*(pow(z,i)/factorial(i));
  36.        
  37.         }
  38.         e=sin(a*pi/180);
  39.    
  40.     printf(" %.15fn",suma*e);
  41.  
  42.     return 0;
  43. }
  44.  

Checho360

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: funcion de taylor
« Respuesta #1 en: Miércoles 22 de Junio de 2011, 22:07 »
0
Es fácil. El código solucionado, si no me equivoco, es este:

Código: C++
  1. #include <stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include <math.h>
  5. #define pi 3.141592654
  6. int factorial(int n)
  7. {
  8.     int i;
  9.     int fac=1;
  10.     for (i=1;i<=n;i++)
  11.     {
  12.         fac=fac*i;
  13.     }
  14.     return  fac;
  15. }
  16. int main()
  17. {
  18.     float x=90,a=45,suma=1;
  19.     float z=(x-a)/180*pi;
  20.     int i;
  21.     int iteraciones=15;
  22.     float e,r,t;
  23.     e=(float)1/90;
  24.     float param=90,resul;
  25.     resul=sin(param*pi/180);
  26.     for (i=1;i<iteraciones;i++)
  27.     {
  28.        
  29.     if(i%4==1 || i%4==0)
  30.        
  31.             suma=suma+pow(z,i)/factorial(i);
  32.        
  33.         if(i%4==3|| i%4==2)
  34.            
  35.         suma=suma+(-1)*(pow(z,i)/factorial(i));
  36.        
  37.         }
  38.         e=sin(a*pi/180);
  39.    
  40.     printf(" %.15fn",suma*e);
  41.  
  42.     return 0;
  43. }
  44.  

El problema estaba en que si divides el número de la "iteración" entre 4 (utilizando ambos como enteros), y analizas el resto, se dan las cuatro opciones que tenías expresadas: 0, 1, 2, 3, pero sólo obtienes como resto 0 y 1 cuando la derivada enésima de la función es positiva (para el punto que escogiste), y, con lo cual, los restos 2 y 3 coinciden cuando el signo es negativo. Si intercambias eso la solución es: 0.999999940395355 que es una tolerancia bastante pequeña al menos para utilizar la serie de Maclaurin.

Un saludo!

sanlegas2000

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: funcion de taylor
« Respuesta #2 en: Jueves 7 de Julio de 2011, 04:40 »
0
gracias amigo por tomarte la molestia en responder, gracias por la aclaracion B)