Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ayuda con polinomio de taylor c++

Estas en el tema de ayuda con polinomio de taylor c++ en el foro de C/C++ en Foros del Web. asdf... buenas, tengo q hacer un algoritmo y me piden que calcule sen(x) usando el polinomio de taylor q es: sen(x)=x − (x^3/3!) + (x^5/5!) ...
  #1 (permalink)  
Antiguo 09/02/2010, 21:44
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
ayuda con polinomio de taylor c++

asdf... buenas, tengo q hacer un algoritmo y me piden que calcule sen(x) usando el polinomio de taylor q es:

sen(x)=x − (x^3/3!) + (x^5/5!) − (x^7/7!) +...

no puedo usar recursividad ni acciones nominadas... no tengo la menor idea de como trabajar esa formula solo con "for", "while" o "if"... agradeceria mucho cualquier ayuda, gracias de antemano
  #2 (permalink)  
Antiguo 09/02/2010, 22:49
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: ayuda con polinomio de taylor c++

En http://www.forosdelweb.com/f96/probl...e-senx-688936/
ya se le da la solución al problema que planteas.

Y si el valor que ingresas lo das en grados solo realiza la conversión para poder realizar los cálculos ya que las funciones de c++ trabajan en radianes:

180º = PI

PI
------ x valor en grados = valor en radianes
180º


Y para la conversión del resultado a grados:

180º
------ x valor en radianes = valor en grados
PI
__________________
En programación hay mil y un formas de hacer lo mismo...
  #3 (permalink)  
Antiguo 10/02/2010, 08:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con polinomio de taylor c++

muchas gracias fradve... man, pero el codigo q colocaste en el otro tema... ese "ex" y "sig" q usas en sig*(pow(ang,ex)/fact)); exactamente que son?? xq no estan declaradas como variables

Última edición por esalas; 10/02/2010 a las 10:26
  #4 (permalink)  
Antiguo 10/02/2010, 16:36
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: ayuda con polinomio de taylor c++

Están declaradas como variables a la entrada del main.

ex : es el exponente al que hay que elevar el ángulo y se inicializar en tres ya que es ahi donde empieza y posteriormente se incrementa en dos, para ir luego a 5, 7, 9, etc;

sig: es la variable de signo está inicializada con -1, simplemente porque los signos de la serie son alternados, hay que irla modificando cada iteración.
__________________
En programación hay mil y un formas de hacer lo mismo...
  #5 (permalink)  
Antiguo 10/02/2010, 18:24
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con polinomio de taylor c++

tengo unas dudas sobre tu codigo, por cierto yo no uso conio ya q uso kate y no tiene esa libreria


int main()
{
float ang=0,serie1=0,serie2=0,ex=3,sig=-1,fact=6;//aqui pones fact=6 por 3!, no?

printf("CALCULO DEL SEN(X) MEDIANTE SERIES\n\n");
printf("INGRESA EL VALOR DEL ANGULO EN RADIANES: ");
scanf("%f",&ang);

serie2=ang // aqui le asignaste el angulo a serie2, es realmente necesario?

// aqui no se podria poner serie1!=ang??? y en el resto del algoritmo suplantar el serie2 por ang?

while(serie1!=serie2){

serie1=serie2;
serie2=serie2+(sig*(pow(ang,ex)/fact));
ex+=2;
sig=sig*-1;
fact=1;//aqui xq le asignas 1 a fact??

//si a fact le asignas 1 y luego i=1, no estarias multiplicando 1*1?? y luego 1*2 y asi sucesivamente hasta llegar a ex??
for(int i=1;i<=ex;i++)
fact=fact*i;
}
printf("El Seno de %f es: %.3f",ang,serie2);

}

gracias por estar ayudandome y disculpa la preguntadera xD, por cierto, me darias tu msn y por ahi hablamos sobre c++ de vez en cuando??
  #6 (permalink)  
Antiguo 10/02/2010, 23:17
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: ayuda con polinomio de taylor c++

1. Bueno, en este caso el uso o no de la librería conio es irrelevante.

2. Correcto

3. Claro que es necesario ya que la serie empieza precisamente desde el valor del ángulo, es dicir:

sen(x)=x-x^3/3! + ....

Entonces sino le asigno el valor del ángulo a la variable que acumula los valores de los términos de la serie el resultado estaría incorrecto.

4. Se le asigna 1 a fact para inicializarlo nuevamente y calcular el factorial de otro número, ya que si lo dejamos con el valor de 6 el valor de factorial que calculará será erróneo y no el que buscamos.

5. No, ahi te equivocas, a asignar el producto a la misma variable que es factor estoy haciendo una multiplicatoria, así:

fact=1
i = 1

fact=1*1

fact=1
incrementa i=2

fact=1*2

fact=2
incrementa i=3

fact=2*3

fact=6
incrementa i=4

fact=6*4

fact=24
incremente i=5

fact=24*5

fact=120
incrementa i=6

como ves no estoy haciendo la tabla del 1, sino calculando el factorial de ex, y así hasta que se cumpla la condición del for.

6. Y no te preocupes siempre que se pueda ayudar ahi estaremos, puedes acceder al perfil, ahi está mi correo. Cualquier otra duda házmela saber.
__________________
En programación hay mil y un formas de hacer lo mismo...
  #7 (permalink)  
Antiguo 17/02/2010, 14:35
 
Fecha de Ingreso: febrero-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: ayuda con polinomio de taylor c++

hey fradve, man tu codigo no me funciono me da valores raros... y hoy descubri q el limite de la serie es n... que es la cantidad de veces q se hara eso de ex+=2 y el factorial... usando tu codigo logre armar uno pero por alguna razon me esta devolviendo el valor que se le ingresa a x desde el comienzo

#include <stdio.h>

int main (){

int i,j,n,sig,fact=6,n,ex=1,p=1;
float s1=0,s2=0,x;

printf("ingrese valor de n ");
scanf("%d",&n);

printf("ingrese valor de x ");
scanf("%f",&x);

s2=x;

for(i=1;i<=n;i++){

//calculo de x elevado a ex
for(i=1;i<=ex;i++){
p=p*x;
}

s1=s2;
s2=s2+(sig*(p/fact));
ex+=2;
sig=sig*-1;
fact=1;

//calculo del factorial
for(i=1;i<=ex;i++){
fact=fact*i;
}



}

printf("El Seno de %.3f es %.3f\n",x,s2);
}
  #8 (permalink)  
Antiguo 18/02/2010, 08:51
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años
Puntos: 7
Respuesta: ayuda con polinomio de taylor c++

Es que no empleas de manera correcta el código que se te dá, ya que por lo visto te faltan muchas nociones de programación. El código que planteas está incorrecto tiene varias incoherencias, la mas notoria es la del for donde tienes for internos y usas la misma variable de contador principal para los for internos. Tú código corregido es el siguiente:

Código C++:
Ver original
  1. #include<stdio.h>
  2.  
  3. void main ()
  4. {
  5.   int i=0,j=0,sig=1,n,ex=1;
  6.   long double fact=1; //ya que si el número de términos n es muy alto el resultado será muy alto
  7.   float s2=0,x,p=1;
  8.  
  9.   printf("ingrese valor de n ");
  10.   scanf("%d",&n);
  11.  
  12.   printf("ingrese valor de x ");
  13.   scanf("%f",&x);
  14.  
  15.   for(i=1;i<=n;i++)
  16.   {
  17.     for(j=1;j<=ex;j++)
  18.      p=p*x;
  19.  
  20.     s2=s2+(sig*(p/fact));
  21.     ex+=2;
  22.     sig=sig*-1;
  23.     fact=1;
  24.     p=1;
  25.  
  26.     for(j=1;j<=ex;j++)
  27.      fact=fact*j;
  28.   }
  29.  
  30.   printf("El Seno de %.3f es %.3f\n",x,s2);
  31. }

Un consejo sano y espero no lo tomes a mal, a riesgo de sonar como pepe grillo pero te digo estudia, repasa, investiga todo lo que puedas sobre cualquier tema sea lo que sea, en programación lo que tienes que desarrollar es tú lógica puedes encontrar un millar de programas en internet que se asemejen a lo que tú quieres hacer, entonces debes de estar en la capacidad de poder modificarlo para que se ajuste a tus necesidades, no esperar a encontrar justo lo que buscas o requieres, porque no todo es así de fácil...
__________________
En programación hay mil y un formas de hacer lo mismo...

Última edición por fradve; 18/02/2010 a las 10:28

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:54.