Autor
|
Tema: funcion coseno (Leído 6,380 veces)
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Hola como hago para hacer la formula de Maclaurin pero enviando a esa funcion 1 solo parametro? Porque este no me da ademas son dos parametros que le mando, quiero mandar solo el angulo main() { int i, terminos=8; double x=1, coseno=0; for(i=1;i<=terminos;i++) coseno+=pow(-1,i)*(pow(x,2*i)/factorial(i)); cout<<"Coseno("<<x<<"): "<<coseno<<endl; }
int factorial(int n) { if(n==0) return 1; else return n*factorial(n-1); }
No se ve la funcion pero hagan de cuenta que lo del main es la funcion double coseno(terminos, x){...}
|
|
« Última modificación: 28 Marzo 2019, 04:13 am por Beginner Web »
|
En línea
|
7w7
|
|
|
K-YreX
|
Imagino que quieres una función que calcule el <cos(x)> usando el Polinomio de Taylor. La forma de pasar un único argumento es predefinir un número constante para <terminos>. Al fin y al cabo cuanto mayor sea <terminos>, mayor será la precisión/exactitud del resultado. Entonces puedes declarar como constante <terminos = 10> y usar siempre ese número.
Además me parece que el Polinomio de Taylor para la función <coseno> no es esa. La función <cos(x)> se aproxima usando el polinomio: P(x) = 1 - x²/2! + x⁴/4! - x⁶/6! + x⁸/8!... Y en tu caso estás calculando: P(x) = - x²/2! + x⁴/3! - x⁶/4!...
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Y como es la formula?
|
|
|
En línea
|
7w7
|
|
|
K-YreX
|
En C++ el bucle para calcular la fórmula sería algo así: double cos = 0; int exponente = 0; for(size_t i = 0; i < num_terminos * num_terminos; i += 2, exponente++) cos += pow(-1,exponente) * pow(x,i)/factorial(i);
Y si la función factorial la modificas un poco, te ahorras una llamada para calcular cada factorial: int factorial(int n){ if(n < 1) return 1; else return n * factorial(n-1); }
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
No me sale, en num_terminos que va? tengo esto no se que estoy haciendo mal #include <iostream> #include <stdlib.h> #include <math.h> using namespace std; int factorial(int n) { if(n<1) return 1; else return n*factorial(n-1); } long double coseno(int numero) { long double cos=0; int terminos=5, exponente=0; for(size_t i = 0; i < terminos * terminos; i += 2, exponente++) cos += pow(-1,exponente) * pow(numero,i)/factorial(i); return cos; } main() { cout<<"Coseno: "<<coseno(10)<<endl; }
|
|
|
En línea
|
7w7
|
|
|
K-YreX
|
Hay un problema con el factorial que si intentamos calcular factoriales muy grandes como por ejemplo 24! que llega a calcularse en ese programa que muestras, se produce un desbordamiento. El <num_terminos> muestra la precisión porque determina el número de términos que se van a calcular. Además hay que tener en cuenta que los ángulos se pasan en radianes. Por lo que 10 radianes es mucho. Para que funcione correctamente hay que reducir el ángulo a la primera vuelta. Reduciendo un poco el número de términos para evitar el desbordamiento del factorial, ya salen resultados bastante bien aproximados. // aproximacion del numero PI const double PI = 3.141592; long double coseno(double numero) { // reduce el angulo a la primera vuelta de forma simple while(numero > 2*PI) numero -= 2*PI; long double cos=0; int terminos=10, exponente=0; for(size_t i = 0; i < terminos; i += 2, exponente++) cos += pow(-1,exponente) * pow(numero,i)/factorial(i); return cos; }
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
En la calculadora me sale 0,984807753 y en la consola me sale -0,713883
|
|
|
En línea
|
7w7
|
|
|
K-YreX
|
Como comentaba antes, el programa recibe un ángulo en radianes. En la calculadora lo estás calculando en grados. angulo_grad = x andulo_rad = x * PI / 180
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Haa en algun lado lo vi, sabia que tenia que ver con eso,bueno muchas gracias por tu ayuda
|
|
|
En línea
|
7w7
|
|
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
En C++ el bucle para calcular la fórmula sería algo así: double cos = 0; int exponente = 0; for(size_t i = 0; i < num_terminos * num_terminos; i += 2, exponente++) cos += pow(-1,exponente) * pow(x,i)/factorial(i);
Y si la función factorial la modificas un poco, te ahorras una llamada para calcular cada factorial: int factorial(int n){ if(n < 1) return 1; else return n * factorial(n-1); }
No me convence tu algoritmo factorial porque aun sigue haciendo una llamada recursiva adicional
|
|
|
En línea
|
7w7
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como calcular el seno y el coseno en java???????????
Java
|
casidus
|
9
|
40,213
|
14 Septiembre 2011, 04:24 am
por armandor10
|
|
|
necesito un menu con un vector con un registro de seno, coseno y tangente
Programación C/C++
|
chrirv
|
1
|
2,859
|
16 Enero 2011, 22:34 pm
por Littlehorse
|
|
|
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
Programación C/C++
|
LobateZZZ
|
1
|
10,839
|
14 Abril 2013, 03:07 am
por rir3760
|
|
|
Ayuda para sacar coseno en C.
Programación C/C++
|
NicolasPileci
|
3
|
9,062
|
7 Noviembre 2016, 17:43 pm
por NicolasPileci
|
|
|
Calculo integral definida Coseno C++
Dudas Generales
|
djbraks
|
3
|
2,366
|
4 Febrero 2020, 20:52 pm
por engel lex
|
|