Monday, December 19, 2016

Moving Average Recursive

El principal defecto en su programa es que el cálculo recursivo es incorrecto. Para calcular el promedio, tiene que obtener la suma del valor actual y los valores restantes. Luego divida esa suma por el número de valores. El número de valores es num. El valor actual es cualquier calculatenumber () devuelve. La suma de los valores restantes es num-1 multiplicada por el promedio de los valores restantes. El promedio de los valores restantes se calcula haciendo una llamada recursiva al promedio (). Por lo tanto, escribimos lo siguiente: Un programa completo que use esa función podría tener este aspecto: Tenga en cuenta que esta no es una muy buena forma de calcular el promedio porque pierde precisión cada vez que divide la suma actual por num. Cuando este promedio se multiplica de nuevo a medida que vuelve la llamada recursiva, los dígitos significativos que perdió en la división no se restauran. Estás destruyendo la información dividiendo y luego multiplicando la suma. Para una mayor precisión, usted querrá hacer un seguimiento de la suma a medida que vaya a través de los elementos, luego divida al final. Otro punto a considerar es lo que se entiende por un promedio móvil. Lo que hemos implementado anteriormente no es una media móvil sino un promedio fijo. Es el promedio de una ventana fija de elementos. Si mueve la ventana en una posición, tiene que empezar de nuevo y calcular de nuevo la suma. La forma correcta de implementar una ventana en movimiento es realizar un seguimiento de todos los elementos de la ventana. Cuando cambia la ventana una posición a la derecha, quita el elemento más a la izquierda de la ventana y resta su valor a la suma, luego agrega el nuevo elemento más a la derecha a la ventana y agrega su valor a la suma. Eso es lo que hace que sea una suma móvil. Dividir la suma móvil por el número de elementos le da el promedio móvil. La forma natural de implementar una ventana en movimiento es con una cola porque puede agregar nuevos elementos a la cabeza y eliminar elementos antiguos de la cola. La forma correcta de implementar una ventana en movimiento es hacer un seguimiento de todos los elementos de la ventana. Cuando cambia la ventana una posición a la derecha, quita el elemento más a la izquierda de la ventana y resta su valor de la sumquot como sería esto me interesó mucho y muchas gracias ndash cheroky Nov 22 14 at 18:17 Su respuesta 2016 Stack Exchange , Inc El científico y los ingenieros Guía para el procesamiento de señales digitales Por Steven W. Smith, Ph. D. Una tremenda ventaja del filtro de media móvil es que se puede implementar con un algoritmo que es muy rápido. Para entender este algoritmo, imagine pasar una señal de entrada, x, a través de un filtro de media móvil de siete puntos para formar una señal de salida, y. Ahora veamos cómo se calculan dos puntos de salida adyacentes, y 50 e y 51: Estos son casi los mismos puntos de cálculo x 48 a x 53 para y 50, y de nuevo para y 51. Si y 50 ya ha sido calculado , La forma más eficiente de calcular y 51 es: Una vez que se ha encontrado y 51 usando y 50, entonces y 52 se puede calcular a partir de la muestra y 51, y así sucesivamente. Después de que el primer punto se calcula en y, todos los demás puntos se pueden encontrar con sólo una sola suma y resta por punto. Esto se puede expresar en la ecuación: Observe que esta ecuación utiliza dos fuentes de datos para calcular cada punto en la salida: puntos de la entrada y puntos previamente calculados de la salida. Esto se llama una ecuación recursiva, lo que significa que el resultado de un cálculo se utiliza en los cálculos futuros. (El término recursivo también tiene otros significados, especialmente en informática). En el capítulo 19 se analizan más detalladamente diversos filtros recursivos. Tenga en cuenta que el filtro recursivo de media móvil es muy diferente de los filtros recursivos típicos. En particular, la mayoría de los filtros recursivos tienen una respuesta de impulso infinitamente larga (IIR), compuesta de sinusoides y exponenciales. La respuesta de impulso de la media móvil es un pulso rectangular (respuesta de impulso finito, o FIR). Este algoritmo es más rápido que otros filtros digitales por varias razones. En primer lugar, sólo hay dos cálculos por punto, independientemente de la longitud del núcleo del filtro. En segundo lugar, la suma y la resta son las únicas operaciones matemáticas necesarias, mientras que la mayoría de los filtros digitales requieren una multiplicación que consume tiempo. En tercer lugar, el esquema de indexación es muy simple. Cada índice de la ecuación 15-3 se encuentra añadiendo o restando constantes enteras que se pueden calcular antes de que comience el filtrado (es decir, p y q). Por último, todo el algoritmo puede realizarse con representación entera. Dependiendo del hardware utilizado, los enteros pueden ser más de un orden de magnitud más rápido que el punto flotante. Sorprendentemente, la representación entera funciona mejor que el punto flotante con este algoritmo, además de ser más rápido. El error de redondeo de aritmética de punto flotante puede producir resultados inesperados si no tiene cuidado. Por ejemplo, imagine una señal de muestra de 10.000 que se filtra con este método. La última muestra en la señal filtrada contiene el error acumulado de 10.000 adiciones y 10.000 sustracciones. Esto aparece en la señal de salida como un desplazamiento a la deriva. Los enteros no tienen este problema porque no hay error de redondeo en la aritmética. Si usted debe usar la coma flotante con este algoritmo, el programa en la tabla 15-2 muestra cómo utilizar un acumulador de doble precisión para eliminar esta deriva. La guía del científico y de los ingenieros al procesamiento digital de la señal por Steven W. Smith, Ph. D. Capítulo 21: Comparación de filtros Combinación 3: Media móvil versus polo individual Nuestra tercera competencia será una batalla de los filtros de dominio del tiempo. El primer luchador será un filtro de media móvil de nueve puntos. Su oponente para el partido de hoy será un filtro recursivo de un solo polo usando la técnica bidireccional. Para lograr una respuesta de frecuencia comparable, el filtro de un solo polo utilizará un decaimiento de muestra a muestra de x 0,70. La batalla comienza en la Fig. 21-6 donde se muestra la respuesta en frecuencia de cada filtro. Ninguno es muy impresionante, pero por supuesto, la separación de frecuencia no es lo que estos filtros se utilizan para. No hay puntos para ambos lados. La Figura 21-7 muestra las respuestas de paso de los filtros. En (a), la respuesta de paso media móvil es una línea recta, la forma más rápida de pasar de un nivel a otro. En (b), la respuesta del paso de los filtros recursivos es más suave, lo cual puede ser mejor para algunas aplicaciones. Un punto por cada lado. Estos filtros son bastante igualados en términos de rendimiento ya menudo la elección entre los dos se hace sobre la preferencia personal. Sin embargo, hay dos casos en los que un filtro tiene un borde ligero sobre el otro. Estos se basan en el equilibrio entre tiempo de desarrollo y tiempo de ejecución. En primer lugar, desea reducir el tiempo de desarrollo y está dispuesto a aceptar un filtro más lento. Por ejemplo, puede que tenga una sola necesidad de filtrar algunos miles de puntos. Dado que todo el programa se ejecuta en sólo unos pocos segundos, no tiene sentido pasar tiempo optimizando el algoritmo. El punto flotante casi seguramente será usado. La elección es utilizar el filtro de media móvil realizado por convolución, o un filtro recursivo de un solo polo. El ganador aquí es el filtro recursivo. Será un poco más fácil de programar y modificar, y se ejecutará mucho más rápido. El segundo caso es justo lo contrario, su filtro debe operar tan rápido como sea posible y está dispuesto a pasar el tiempo extra de desarrollo para obtenerlo. Por ejemplo, este filtro podría ser una parte de un producto comercial, con el potencial de ser ejecutado millones de veces. Es probable que utilice números enteros para la velocidad más alta posible. La elección de los filtros será la media móvil realizada por la recursión. O el filtro recursivo de un solo polo implementado con tablas de consulta o matemáticas enteras. El ganador es el filtro de media móvil. Se ejecutará más rápido y no será susceptible a los problemas de desarrollo y ejecución de aritmética entera. En las estadísticas un promedio móvil simple es un algoritmo que calcula la media no ponderada de las últimas n muestras. El parámetro n se llama a menudo el tamaño de la ventana, porque el algoritmo puede ser pensado como una ventana que se desliza sobre los puntos de datos. Mediante el uso de una formulación recursiva del algoritmo, el número de operaciones requeridas por muestra se reduce a una adición, una resta y una división. Dado que la formulación es independiente del tamaño de la ventana n. La complejidad de ejecución es O (1). Es decir constante. La fórmula recursiva de la media móvil no ponderada es, donde avg es la media móvil y x representa un punto de datos. Por lo tanto, cada vez que la ventana se desliza a la derecha, un punto de datos, la cola, sale y un punto de datos, la cabeza, se mueve pulg Implementación Una implementación de la media móvil simple tiene que tener en cuenta lo siguiente Inicialización del algoritmo Mientras La ventana no se llena completamente con valores, la fórmula recursiva falla. Almacenamiento Se requiere acceso al elemento de cola, que dependiendo de la implementación requiere un almacenamiento de n elementos. Mi implementación utiliza la fórmula presentada cuando la ventana está totalmente poblada con valores y, de lo contrario, cambia a la fórmula, que actualiza la media recalculando la suma de los elementos anteriores. Tenga en cuenta que esto puede dar lugar a inestabilidades numéricas debido a la aritmética de punto flotante. En cuanto al consumo de memoria, la implementación utiliza iteradores para realizar un seguimiento de los elementos de cabeza y cola. Esto conduce a una implementación con requisitos de memoria constante independientemente del tamaño de la ventana. Aquí está el procedimiento de actualización que desliza la ventana a la derecha. En la mayoría de las colecciones invalidan sus enumeradores cuando se modifica la colección subyacente. La implementación, sin embargo, se basa en enumeradores válidos. Especialmente en aplicaciones basadas en streaming, las necesidades de colección subyacentes se modifican cuando llega un nuevo elemento. Una forma de tratar con eso es crear una colección de tamaño fijo circular simple de tamaño n1 que nunca invalida sus iteradores y, alternativamente, agregar un elemento y llamar a Shift. Ojalá pudiera averiguar cómo implementar realmente esto, como la función de prueba es muy confuso para me8230 Necesito convertir los datos a la matriz, a continuación, ejecutar SMA sma nuevo SMA (20, matriz) durante un período de 20 SMA Cómo puedo manejar Shift () Es necesario implementar constructores. (perdon por la confusion). Ningún don8217t necesidad de convertir sus datos en una matriz, siempre y cuando sus datos implementa IEnumerable1 y el tipo enumerado es doble. En lo que respecta a su mensajería privada se trata de convertir el DataRow a algo que es enumerable de valores dobles. Su enfoque funciona. Mayús, desliza la ventana una posición a la izquierda. Para un conjunto de datos de, por ejemplo, 40 valores y un período de 20 SMA usted tiene 21 posiciones de la ventana se ajusta (40 8211 20 1). Cada vez que se llama a Shift () la ventana se mueve a la izquierda por una posición y Average () devuelve el SMA para la posición actual de la ventana. Es decir, el promedio no ponderado de todos los valores dentro de la ventana. Además, mi implementación permite calcular el SMA incluso si la ventana no está completamente llena al principio. Así que en esencia Espero que esto ayude. Cualquier otra pregunta NOTIFICACIÓN DE COPYRIGHT Christoph Heindl y cheind. wordpress, 2009-2012. El uso no autorizado y / o la duplicación de este material sin el permiso expreso y por escrito de este autor de blogs y / o propietario está estrictamente prohibido. Pueden utilizarse extractos y enlaces, siempre que se dé un crédito completo y claro a Christoph Heindl y cheind. wordpress con una dirección apropiada y específica al contenido original. Recent Recent Archives Las tendencias de las tendencias: el recursivo de media móvil las reglas de comercio y las poblaciones de Internet Resumen El reciente aumento y caída de los precios de las acciones de Internet ha dado lugar a las impresiones populares de una burbuja especulativa en el sector de Internet. Investigamos si los inversionistas podrían haber explotado el impulso en las existencias de Internet usando simples reglas de negociación de la media móvil (MA). Simulamos el comercio técnico en tiempo real usando una estrategia de comercio recursiva aplicada a más de 800 reglas de media móvil. La inferencia estadística tiene en cuenta la heteroscedasticidad condicional y las dependencias conjuntas. No hay evidencia de ganancias comerciales significativas. La mayoría de las existencias de Internet se comportan como caminatas al azar esto, combinado con alta volatilidad, puede ser la razón para el pésimo desempeño de las reglas del promedio móvil. Keywords Acciones de Internet Reglas de media móvil Estrategia recursiva Bootstrap Clasificación JEL Autor correspondiente. Tel. 65-6874-6693 fax: 65-6779-2083. Copyright copy 2004 Elsevier B. V. Todos los derechos reservados. Las cookies son utilizadas por este sitio. Para obtener más información, visite la página de cookies. Copyright 2016 Elsevier B. V. o sus licenciantes o contribuyentes. ScienceDirect es una marca registrada de Elsevier B. V.


No comments:

Post a Comment