elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funcion exponencial con desarrollo de Taylor C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion exponencial con desarrollo de Taylor C++  (Leído 9,703 veces)
ElFontaneroGRNA

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Funcion exponencial con desarrollo de Taylor C++
« en: 19 Noviembre 2016, 23:11 pm »

Buenas noches a todos, estoy intentando calcular la funcion exponencial a través del desarrollo de Taylor en c++ y los valores que me dan no son los correctos. He estado repasando mucho rato y sigue sin funcionar.
Si podéis echarle un ojo al siguiente código y ayudarme os lo agradecería mucho. (El codigo no está muy claro xD).

Gracias. (PD: Estoy en 1ero de fisica y llevo poco tiempo programando)
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. double funcionexp (double x, int n);
  5. double potencia (double x, int n);
  6. double factorial (int n);
  7.  
  8. int main (void)
  9. {
  10.    int n;
  11.    double x, expo;
  12.    cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial\n";
  13.    cin>>x;
  14.    cout<<"\n Y el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl;
  15.    cin>>n;
  16.    cout<<endl<<endl;
  17.    expo=funcionexp(x,n);
  18.    cout<<expo;
  19.    system("PAUSE");
  20.    return 0;
  21. }
  22.  
  23.  
  24. double potencia (double x, int n)
  25. {
  26.    int h;
  27.    double pote=1.0;
  28.    for (h=1;h<=n;h++) pote*=x;
  29.    return pote;
  30. }
  31. double factorial ( int n)
  32. {
  33.    int k;
  34.    double fact=1.0;
  35.    for (k=1;k<=n;k++)
  36.    {
  37.        fact*=k;
  38.    }
  39.    return fact;
  40. }
  41. double funcionexp (double x, int n)
  42. {
  43.    int z;
  44.    double exp, sii;
  45.    exp=0.0;
  46.    sii=0.0;
  47.    for (z=0;z<=n;z++)
  48.    {
  49.        exp=(potencia(x,n))/(factorial(n));
  50.        sii+=exp;
  51.    }
  52.    return sii;
  53. }
  54.  
  55.  

Mod: los códigos deben ir en geshi


« Última modificación: 20 Noviembre 2016, 01:44 am por engel lex » En línea

aurquiel

Desconectado Desconectado

Mensajes: 32



Ver Perfil
Re: Funcion exponencial con desarrollo de Taylor C++
« Respuesta #1 en: 20 Noviembre 2016, 00:41 am »

Hola para la exponencial

porque mejor no usas pow(a,b)= a^b deberías incluir cmath

Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. double exponencial(double,unsigned long int); //cabecera de la funcion exponencial
  7. int factorial(unsigned long int); //cabezera de la funcion factorial
  8.  
  9.  
  10. int main()
  11. {
  12.    unsigned long int n=0; //nuemro n de la serie
  13.    double x=0; //valor de x
  14.  
  15.    cout<<"Ingrese n=";
  16.    cin>>n;
  17.    cout<<"Ingrese x=";
  18.    cin>>x;
  19.  
  20.    cout<<"Resultado es= "<<exponencial(x,n)<<endl;
  21. }
  22.  
  23. double exponencial(double x,unsigned long int n)
  24. {
  25.    double resultado=0; //varibale para devolver
  26.    for (unsigned int i=0;i<=n;i++) //desde n=0 hasta donde llegue la serie
  27.    {
  28.        resultado+=pow(x,i)/factorial(i);   //uso de la función pow de la libreia cmath se saca esa potencia y con la función factorial se obtiene ese denominador con ese valor de n
  29.    }
  30.    return resultado; //devuelvo valor
  31. }
  32.  
  33. int factorial(unsigned long int i)
  34. {
  35.    unsigned int resultado=1; //valor inicial 1
  36.    if (i==0)  //si es cero se devuelve factoril 1
  37.    {
  38.        return resultado;
  39.    }else     //sino se scaa el factorial
  40.    {
  41.        while(i>1)
  42.        {
  43.            resultado=resultado*i;
  44.            i--;
  45.        }
  46.  
  47.    return resultado;
  48.  
  49.    }
  50. }



« Última modificación: 20 Noviembre 2016, 03:12 am por aurquiel » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Funcion exponencial con desarrollo de Taylor C++
« Respuesta #2 en: 20 Noviembre 2016, 01:45 am »

Aquí un tema sobre las series de taylir que escribí hace algún tiempo , espero sea útil

https://foro.elhacker.net/programacion_cc/calculando_funciones_trigonometricas_sin_librerias_series_de_taylor_aporte-t443463.0.html
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
ElFontaneroGRNA

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Funcion exponencial con desarrollo de Taylor C++
« Respuesta #3 en: 20 Noviembre 2016, 12:21 pm »

Hola muchas gracias a los dos,

Aurquiel sé que podía hacerlo con la función pow de la biblioteca cmath, pero como el ejercicio no especificaba si se podian usar funciones predefinidas pues creé la mía. Pero de todas formas las dos funcionan más o menos igual xD.

engel lex, ya ví el artículo ese antes de crear mi tema, por si me podía ayudar, y entendía todo lo que hacías, lo que no entendía era por qué a mí no me funcionaba mi programa.

Ya he encontrado mi fallo, estaba en la funcion exponencial, dentro del for :
Código
  1.       exp=(potencia(x,n))/(factorial(n));
ahí en las n, abría que poner z, como es lógico...

El código bien hecho quedaría así, para quien le haga falta:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. double funcionexp (double x,int n);
  5. double potencia (double x, int n);
  6. double factorial (int n);
  7.  
  8. int main (void)
  9. {
  10.    int n;
  11.    double x, expo;
  12.    cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial:\n";
  13.    cin>>x;
  14.    cout<<"\nY el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl;
  15.    cin>>n;
  16.    cout<<endl<<endl;
  17.    expo=funcionexp(x,n);
  18.    cout<<"El valor de la funcion exponencial con x="<<x<<" y numero de terminos de la serie de Taylor, n="<<n<<" es: "<<expo<<endl;
  19.    system("PAUSE");
  20.    return 0;
  21. }
  22.  
  23.  
  24. double potencia (double x, int n)
  25. {
  26.    int h;
  27.    double pote=1.0;
  28.    for (h=1;h<=n;h++) pote*=x;
  29.    return pote;
  30. }
  31. double factorial ( int n)
  32. {
  33.    int k;
  34.    double fact=1.0;
  35.    for (k=1;k<=n;k++)
  36.    {
  37.        fact*=k;
  38.    }
  39.    return fact;
  40. }
  41. double funcionexp (double x,  int n)
  42. {
  43.    int z;
  44.    double exp, sii;
  45.    exp=0.0;
  46.    sii=0.0;
  47.    for (z=0;z<=n;z++)
  48.    {
  49.        exp=(potencia(x,z))/(factorial(z)); //Aquí estaba el fallo.
  50.        sii+=exp;
  51.    }
  52.    return sii;
  53. }
  54.  
Otra cosa, ¿sería mejor definir las variables como long o long long?
« Última modificación: 20 Noviembre 2016, 12:40 pm por ElFontaneroGRNA » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Funcion exponencial con desarrollo de Taylor C++
« Respuesta #4 en: 20 Noviembre 2016, 13:12 pm »

En muchos compiladores, long es igual a int, así que yo te diría long long.
De todos modos, los valores grandes ya los tienes almacenados en double, así que... No creo que quieras un n = 4e+9 :o
En línea

ElFontaneroGRNA

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Funcion exponencial con desarrollo de Taylor C++
« Respuesta #5 en: 20 Noviembre 2016, 16:45 pm »

Gracias ivancea96, es que no suelo utilizar nunca los long, long long, casi tampoco signed, unsigned, asi que no tengo mucho manejo con ellos.

Me acabo de dar cuenta que el ejercicio no estaba acabado, ya que para valores negativos no funciona xDD.
Este creo que ya es el codigo definitivo  ;-) :-*:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. double funcionexp ( double x, int n);
  5. double potencia ( double x, int n);
  6. double factorial (int n);
  7.  
  8. int main (void)
  9. {                        //exponega=(1/(funcionexp(x,n)));
  10.    int n;
  11.    double x, expo;
  12.    expo=0.0;
  13.    cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial:\n";
  14.    cin>>x;
  15.    cout<<"\nY el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl;
  16.    cin>>n;
  17.    cout<<endl<<endl;
  18.    if (x<=0) expo=(1/(funcionexp(x,n)));   //Lo añadido
  19.    else expo=(funcionexp(x,n));                //Lo añadido
  20.    cout<<"El valor de la funcion exponencial con x="<<x<<" y numero de terminos de la serie de Taylor, n="<<n<<" es: "<<expo<<endl;
  21.    system("PAUSE");
  22.    return 0;
  23. }
  24.  
  25.  
  26. double potencia ( double x, int n)
  27. {
  28.    if (x<=0) x=-x; //Lo añadido
  29.    int h;
  30.    double pote=1.0;
  31.    for (h=1;h<=n;h++) pote*=x;
  32.    return pote;
  33. }
  34. double factorial ( int n)
  35. {
  36.    int k;
  37.    double fact=1.0;
  38.    for (k=1;k<=n;k++)
  39.    {
  40.        fact*=k;
  41.    }
  42.    return fact;
  43. }
  44. double funcionexp ( double x,  int n)
  45. {
  46.    int z;
  47.    double exp, sii;
  48.    exp=0.0;
  49.    sii=0.0;
  50.    for (z=0;z<=n;z++)
  51.    {
  52.        exp=(potencia(x,z))/(factorial(z));
  53.        sii+=exp;
  54.    }
  55.    return sii;
  56. }
  57.  
  58.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SERIES DE TAYLOR C++
Programación C/C++
anita0421 6 40,563 Último mensaje 17 Septiembre 2013, 05:12 am
por flony
Desarrollo a medida de función hash
Criptografía
Synaptico 2 3,233 Último mensaje 6 Enero 2013, 18:41 pm
por Synaptico
desarrollo de pila, error en función apilar
Programación C/C++
JZtban 7 3,242 Último mensaje 1 Mayo 2013, 05:24 am
por JZtban
ayuda con la serie de Taylor
Programación C/C++
leonardo9307 2 3,682 Último mensaje 24 Mayo 2013, 07:19 am
por leosansan
Error en ejercicio de exponencial
Programación C/C++
andoporto 1 1,729 Último mensaje 4 Febrero 2015, 16:43 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines