Autor
|
Tema: Funcion exponencial con desarrollo de Taylor C++ (Leído 9,703 veces)
|
ElFontaneroGRNA
Desconectado
Mensajes: 8
|
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) #include <iostream> #include <cstdlib> using namespace std; double funcionexp (double x, int n); double potencia (double x, int n); double factorial (int n); int main (void) { int n; double x, expo; cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial\n"; cin>>x; cout<<"\n Y el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl; cin>>n; cout<<endl<<endl; expo=funcionexp(x,n); cout<<expo; system("PAUSE"); return 0; } double potencia (double x, int n) { int h; double pote=1.0; for (h=1;h<=n;h++) pote*=x; return pote; } double factorial ( int n) { int k; double fact=1.0; for (k=1;k<=n;k++) { fact*=k; } return fact; } double funcionexp (double x, int n) { int z; double exp, sii; exp=0.0; sii=0.0; for (z=0;z<=n;z++) { exp=(potencia(x,n))/(factorial(n)); sii+=exp; } return sii; }
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
Mensajes: 32
|
Hola para la exponencial porque mejor no usas pow(a,b)= a^b deberías incluir cmath #include <iostream> #include <cmath> using namespace std; double exponencial(double,unsigned long int); //cabecera de la funcion exponencial int factorial(unsigned long int); //cabezera de la funcion factorial int main() { unsigned long int n=0; //nuemro n de la serie double x=0; //valor de x cout<<"Ingrese n="; cin>>n; cout<<"Ingrese x="; cin>>x; cout<<"Resultado es= "<<exponencial(x,n)<<endl; } double exponencial(double x,unsigned long int n) { double resultado=0; //varibale para devolver for (unsigned int i=0;i<=n;i++) //desde n=0 hasta donde llegue la serie { 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 } return resultado; //devuelvo valor } int factorial(unsigned long int i) { unsigned int resultado=1; //valor inicial 1 if (i==0) //si es cero se devuelve factoril 1 { return resultado; }else //sino se scaa el factorial { while(i>1) { resultado=resultado*i; i--; } return resultado; } }
|
|
« Última modificación: 20 Noviembre 2016, 03:12 am por aurquiel »
|
En línea
|
|
|
|
engel lex
|
|
|
|
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
Mensajes: 8
|
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 : 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: #include <iostream> #include <cstdlib> using namespace std; double funcionexp (double x,int n); double potencia (double x, int n); double factorial (int n); int main (void) { int n; double x, expo; cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial:\n"; cin>>x; cout<<"\nY el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl; cin>>n; cout<<endl<<endl; expo=funcionexp(x,n); cout<<"El valor de la funcion exponencial con x="<<x<<" y numero de terminos de la serie de Taylor, n="<<n<<" es: "<<expo<<endl; system("PAUSE"); return 0; } double potencia (double x, int n) { int h; double pote=1.0; for (h=1;h<=n;h++) pote*=x; return pote; } double factorial ( int n) { int k; double fact=1.0; for (k=1;k<=n;k++) { fact*=k; } return fact; } double funcionexp (double x, int n) { int z; double exp, sii; exp=0.0; sii=0.0; for (z=0;z<=n;z++) { exp=(potencia(x,z))/(factorial(z)); //Aquí estaba el fallo. sii+=exp; } return sii; }
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
Mensajes: 3.412
ASMático
|
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
|
|
|
En línea
|
|
|
|
ElFontaneroGRNA
Desconectado
Mensajes: 8
|
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 : #include <iostream> #include <cstdlib> using namespace std; double funcionexp ( double x, int n); double potencia ( double x, int n); double factorial (int n); int main (void) { //exponega=(1/(funcionexp(x,n))); int n; double x, expo; expo=0.0; cout<<"Introduce dos valores, el primero sera el valor de x de la funcion exponencial:\n"; cin>>x; cout<<"\nY el segundo el numero de terminos que se consideraran en la serie de Taylor: "<<endl; cin>>n; cout<<endl<<endl; if (x<=0) expo=(1/(funcionexp(x,n))); //Lo añadido else expo=(funcionexp(x,n)); //Lo añadido cout<<"El valor de la funcion exponencial con x="<<x<<" y numero de terminos de la serie de Taylor, n="<<n<<" es: "<<expo<<endl; system("PAUSE"); return 0; } double potencia ( double x, int n) { if (x<=0) x=-x; //Lo añadido int h; double pote=1.0; for (h=1;h<=n;h++) pote*=x; return pote; } double factorial ( int n) { int k; double fact=1.0; for (k=1;k<=n;k++) { fact*=k; } return fact; } double funcionexp ( double x, int n) { int z; double exp, sii; exp=0.0; sii=0.0; for (z=0;z<=n;z++) { exp=(potencia(x,z))/(factorial(z)); sii+=exp; } return sii; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
SERIES DE TAYLOR C++
Programación C/C++
|
anita0421
|
6
|
40,563
|
17 Septiembre 2013, 05:12 am
por flony
|
|
|
Desarrollo a medida de función hash
Criptografía
|
Synaptico
|
2
|
3,233
|
6 Enero 2013, 18:41 pm
por Synaptico
|
|
|
desarrollo de pila, error en función apilar
Programación C/C++
|
JZtban
|
7
|
3,242
|
1 Mayo 2013, 05:24 am
por JZtban
|
|
|
ayuda con la serie de Taylor
Programación C/C++
|
leonardo9307
|
2
|
3,682
|
24 Mayo 2013, 07:19 am
por leosansan
|
|
|
Error en ejercicio de exponencial
Programación C/C++
|
andoporto
|
1
|
1,729
|
4 Febrero 2015, 16:43 pm
por eferion
|
|