TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Chaly29 en 20 de Febrero de 2006, 02:15:00

Título: Cálculo de seno y coseno
Publicado por: Chaly29 en 20 de Febrero de 2006, 02:15:00
Hola gente, mi pedido de socorro es el siguiente:

Necesito saber como se hace para calcular el seno y el coseno de un número, pero en binario, lo que ando buscando no es el código .asm para calcularlo, si no como se haría en el caso de tener que calcularlo en binario y con lápiz y papel o sea a mano, el dato (en rojo) que yo poseo son los grados, por ejemplo y en decimal:

sen (50°) = 0.76604444
cos (50°) = 0.64278760


El dato en grados podría llegar a ser con un decimal ejemplo: 50.5 pero si alguien los sabe sacar aunque sea sin decimales se lo agradecería si me enseñara.

Gracias de todas formas.

Un saludo a todos.

Atte. CARLOS

Título: RE: Cálculo de seno y coseno
Publicado por: Modulay en 20 de Febrero de 2006, 04:46:00
Holas Chaly.
Una forma muy usada para calcular senos y cosenos es aproximando por polinomios de Taylor.De hecho,las calculadoras y demás creo que lo hacen así.
El polinomio de Taylor,consistente en una suma de infinitos sumandos,de la función sen(x) sería una cosa así:

sen(x) = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + ....
           = x - (x^3)/6 + (x^5)/120 - (x^7)/5040 + ...

Como ya he dicho esto es una aproximación,y el error que cometas dependerá del número de sumandos que cojas(a más sumandos,mas exactitud).
Lo que no sabría decirte en este momento es si esta técnica es válida para medidas en grados o debe hacerse en radianes.De todas formas pasar de grados a radianes es una simple cuentecilla.
Cualquier cuestión de como calcular los sumandos o tratar el tema del error no dudes en plantearlo.
Un saludote
Título: RE: Cálculo de seno y coseno
Publicado por: Chaly29 en 20 de Febrero de 2006, 05:16:00
Hola Modulay, gracias por responder ya me pondré a sacar cuentas Giño y después comento los resultados.

Solo una pregunta mas por ahora, ¿de donde salen el 6, 120y 5040?

Gracias.

Atte. CARLOS

Título: RE: Cálculo de seno y coseno
Publicado por: Nocturno en 20 de Febrero de 2006, 06:04:00
Esas constantes resultan de calcular el factorial de los numeros 3,5,7...
Título: RE: Cálculo de seno y coseno
Publicado por: gONzAO en 20 de Febrero de 2006, 06:14:00
Hola, me imagino que preguntas ¿porqué salen esos números exactamente? y no cómo se calcula el polinomio. Te muestro a conntinuación el polinomio de Taylor del seno y del coseno:

sen(x) = x - (x^3)/3! + (x^5)/5! - (x^7)/7! + ... + ( (-1)^n  * x^(2n+1)  ) / (2n+1)!

cos(x) = 1 - (x^2)/2! + (x^4)/4! - (x^6)/6! + ... + ( (-1)^n  * x^2n  ) / (2n!)


Si tomas el ultimo elemento de cada uno, y das valores a n ( n = 0, 1, 2, 3, 4...) vas obteniendo los terminos del polinomio. Así puedes conseguir todos los terminos que quieras y reducir el error tanto como desees.

Un saludo

gONzAO
Título: RE: Cálculo de seno y coseno
Publicado por: Chaly29 en 20 de Febrero de 2006, 06:29:00
Hola nocturno66 y gONzAO, gracias por sus respuestas, ahora si que lo entendí de primera, ya realice los primeros cálculos y salieron muy próximos a lo real.

Nuevamente gracias a los tres.

Atte. CARLOS

Título: RE: Cálculo de seno y coseno
Publicado por: todopic en 20 de Febrero de 2006, 10:15:00
Hola Charly y Amig@s!
Charly, si lo tienes que hacer con un pic, creo que lo mas facil es emplear una tabla que retorne el valor ya calculado....
http://www.todopic.com.ar/asm/matematicas/cos-prim.zip


Suerte!

Norberto
Título: RE: Cálculo de seno y coseno
Publicado por: maunix en 20 de Febrero de 2006, 10:31:00
Carlos, te paso a comentar un poco

El argumento de las funcion de taylor debe estar en radianes.  Es decir el valor tomara de 0 a 2Pi .

Cuantos más terminos agregas al polinomio de taylor mayor precision obtendrás.

Las calculadoras y los software matemáticos usan esta forma para calcular el seno y el coseno asi que consideres "real" tendrás que verlo respecto a que... y a cuanta precisión.

Sin entrar en temas de precisión de operaciones con matemática binaria (hay libros completos escritos del tema) el hecho es que usar la calculadora o el excel para comparar los resultados no ayudará.  Simplemente uno debe asumir que la precisión usada es más o menos correcta y sino ponerse a trabajar con el matlab con precision de 512 decimales y ahí si podras cotejar mejor el resultado y estar tranquilo de cual es la mayor o menor precision.

Al operar con computadoras, al hacer un producto , una potencia, una subdivsión , etc se van cometiendo pequeños errores, tanto mayores cuantas mas operaciones se realicen.  Para obtener un error acotado, lo que se hace es aumentar la cantidad de decimales con la que se trabaja, logrando así reducir el error pero incrementando considerablemente el tiempo de cálculo y lo que se ocupa en memoria.

En un post sobre operaciones con coma flotante comenté que en los microcontroladores termina siendo más optimo el uso de tablas, tal cual también puso todopic, por el sencillo hecho que toma "mucho tiempo" hacer estos calculos.
De todas formas, habrá que ingeniarse como hacer estas tablas, ya que si tu  numero en coma flotante ocupa 4 bytes, pero tu puedes descartar el exponente ya que puedes asumir que siempre será el mismo (10^-1)  y por otra parte si te las ingenias y usas un pic que puede autoleerse, será más facil guardar los datos de a 14 bits (con tablas en flash) o de 16 bits en el caso de los pic 18.

Saludos