Monday, 5 December 2016

Moving Average Octave

Weighted Moving Average Em resposta a este post por Luca Delucchi Um método on-line para fazer wma (ou seja, onde você pode adicionar um único valor de uma só vez) com uma janela expinencial (que pesa mais recentes eventos mais fortes do que os menos recentes) funciona assim: xmean (T1) exp (-1 / tau) (xmean (t) x (t) / tau) isto dá-lhe um wma de x (t). Tau é algo como o comprimento da memória (eventos mais atrás do que tau não será quotrememberedquot muito bem). Eu posso fazer uma função na Média Móvel Ponderada onde o valor é gt pegue em modo automático esta minha idéia gt gt yy1, y2, y3, y4, y5 gt função wma Eu não poderia repetir a fórmula (y12y2y3) / 4 (porque se o longo do vetor gt é diferente eu devo mudar a função (y12y2y3) / 4 ), Mas têm apenas uma fórmula gt que usam a fórmula para todos os valores de vetor gt gt Espero Ive dado uma explicação clara gt gt Luca gt gt Ajuda-octave mailing list gt ocultos e-mail gt cae. wisc. edu/mailman/listinfo/help - octave Não é uma coisa de oitava, mas uma coisa de processamento de sinal. Um filtro FIR (resposta de entrada finita) é determinado pelo vetor dos coeficientes, então se o filtro tiver comprimento 4, a saída seria algo como: y (t) b (1) x (t) b (2) x Assim, quando b ones (1,4) / 4, é apenas a média dos últimos quatro elementos (t-1) b (3) x (t-2) b (4) Em oitava, você pode usar a função quotfilter para fazer exatamente isso, se x é seu sinal, você pode simplesmente fazer y filter (b, 1, x) P. S. Isto é quase o mesmo que a sugestão de Sren para usar a convolução (usando a função conv). A única diferença (eu acredito) é que o filtro dará a mesma saída como conv, mas truncado para o comprimento de x. Em 8/10/07, Luca Delucchi lthidden e-mail gt escreveu: 2007/8/10, Schirmacher, Rolf lthidden e-mail gt: gt Filtro com filtro FIR Coeficientes seria gt gt b 1 1 1 1 ./ 4 gt O que é isto Desculpe, mas I39m um novato de octave gt gt ----- Mensagem Original ----- gt gt De: Luca Delucchi mailto: e-mail escondido gt gt Enviado: sexta-feira, 10 de agosto de 2007 9:20 AM gt gt Para: octave Gt gt Assunto: Média Móvel Ponderada gt gt gt gt gt gt Oi, eu posso fazer uma função na Média Móvel Ponderada onde o valor é gt gt pegue em modo automático esta minha idéia gt gt gt gt yy1, y2, y3, y4, y5 Eu não poderia repetir a fórmula (y12y2y3) / 4 (porque, se a função (), (),,,,,,,,,,,,,,,,,, Longo do vetor gt gt é diferente eu tenho que mudar a função), mas tenho apenas uma fórmula gt gt que usam a fórmula para todos os valores do vetor gt gt gt gt Espero I39ve dado uma explicação clara gt gt gt gt Luca gt gt gt gt Ajuda - octave mailing list gt gt oculto e-mail gt gt cae. wisc. edu/mailman/listinfo/help-octave gt gt gt Em resposta a este post por Luca Delucchi Oi, eu posso fazer uma função em Weighted Moving Average onde o valor são take No modo automático esta minha idéia yy1, y2, y3, y4, y5 função wma (y) (y12y2y3) / 4 (y22y3y4) / 4 etc etc final função Eu não poderia repetir a fórmula (y12y2y3) / 4 (porque se o longo Do vetor é diferente eu devo mudar a função) mas só tenho uma fórmula que usa a fórmula para todos os valores de vetor Você tem que pensar sobre seus dados de uma maneira diferente se você quiser usar o Matlab / oitava eficientemente. Os dados são representados como vetores ou matrizes, e você deve fazer todas as operações em todos os dados --- não pense em elementos y1, y2, etc, mas sim lidar com todo o vetor y. Você terá que misturar elementos do vetor de posições diferentes, assim que você necessita construir versões deslocadas do vetor. Por exemplo, y (2: end) é o vetor cujo primeiro elemento é o segundo elemento de y. Quando você faz isso dessa maneira, ele força você a reconhecer vários problemas que são varridos sob o tapete caso contrário, por exemplo, qual é o significado de sua média ponderada para y1, que não tem um ponto de dados anterior Uma abordagem pode ser a duplicar o Primeiro e último ponto: temp y (1) yy (final) médio (temp (1: end-2) 2temp (2: end-1) temp (3: end)) 4 ou desistir e admitir que você só pode Calcular a média em um subconjunto de pontos: média (y (1: end-2) 2y (2: end-1) y (3: end)) / 4 Existe uma função de oitava chamada filter () que pode aplicar linear arbitrária Filtro seu bastante complicado porque permite a realimentação linear que você arent interessou em assim que o youd usa uma forma específica de um vetor do feedback b1 0 0 0 0 0. filtro médio (1 2 1 / 4,1, y)) Finalmente, Octave tem algum Filtros construídos no meu favorito é o Savitzky-Golay 2-momento preservando filtroDocumentação saída tsmovavg (tsobj, s, lag) retorna a média móvel simples por para o tempo financeiro série objeto, tsobj. Lag indica o número de pontos de dados anteriores usados ​​com o ponto de dados atual ao calcular a média móvel. A saída tsmovavg (vetor, s, lag, dim) retorna a média móvel simples para um vetor. Lag indica o número de pontos de dados anteriores usados ​​com o ponto de dados atual ao calcular a média móvel. A saída tsmovavg (tsobj, e, timeperiod) retorna a média móvel ponderada exponencial para a série de tempo financeiro objeto, tsobj. A média móvel exponencial é uma média móvel ponderada, em que timeperiod especifica o período de tempo. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. Percentual Exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1). Saída tsmovavg (vetor, e, timeperiod, dim) retorna a média móvel ponderada exponencial para um vetor. A média móvel exponencial é uma média móvel ponderada, em que timeperiod especifica o período de tempo. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. (2 / (intervalo de tempo 1)). A saída tsmovavg (tsobj, t, numperiod) retorna a média móvel triangular para a série de tempo financeiro objeto, tsobj. A média móvel triangular alisa os dados. Tsmovavg calcula a primeira média móvel simples com a largura da janela de ceil (numperíodo 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. Saída tsmovavg (vetor, t, numperiod, dim) retorna a média móvel triangular para um vetor. A média móvel triangular alisa os dados. Tsmovavg calcula a primeira média móvel simples com a largura da janela de ceil (numperíodo 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. A saída tsmovavg (tsobj, w, weights) retorna a média móvel ponderada para o objeto da série temporal financeira, tsobj. Fornecendo pesos para cada elemento na janela em movimento. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados ​​para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva a mudanças recentes. A saída tsmovavg (vetor, w, pesos, dim) retorna a média móvel ponderada para o vetor fornecendo pesos para cada elemento na janela em movimento. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados ​​para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva a mudanças recentes. A saída tsmovavg (tsobj, m, numperiod) retorna a média móvel modificada para o objeto da série de tempo financeiro, tsobj. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod como o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. A saída tsmovavg (vetor, m, numperiod, dim) retorna a média móvel modificada para o vetor. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod como o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. Dim 8212 dimensão para operar ao longo de inteiro positivo com valor 1 ou 2 Dimensão para operar ao longo, especificado como um inteiro positivo com um valor de 1 ou 2. dim é um argumento de entrada opcional, e se não for incluído como uma entrada, o padrão Valor 2 é assumido. O padrão de dim 2 indica uma matriz orientada a linha, em que cada linha é uma variável e cada coluna é uma observação. Se dim 1. a entrada é assumida como sendo um vetor de coluna ou uma matriz orientada a coluna, onde cada coluna é uma variável e cada linha uma observação. E 8212 Indicador para vetor de caracteres de média móvel exponencial A média móvel exponencial é uma média móvel ponderada, em que o tempo é o período de tempo da média móvel exponencial. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. Porcentagem Exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1) período de tempo 8212 Comprimento do período de tempo não-negativo inteiro Selecione Seu Paísvectorized media móvel y filter (1 / 10ones (1, 10), 1, x) Isso pressupõe que os valores em Tempo negativo (x (0), x (-1), etc) são todos zero. Assim, por exemplo, o primeiro valor de y seria x (1) / 10. Em sex, 7 de maio de 2010 às 3:33 PM, Tim Rueth e-mail lthidden gt escreveu: Eu olhei tanto conv () e filter (), mas can39t descobrir como fazer uma média móvel com eles. Talvez não compreenda corretamente as funções da entrada. Vamos dizer que eu tenho um array, um rand (1.100). Você pode me dizer como I39d usar conv () e filter () para tomar, digamos a média móvel de 10 dias, com uma ponderação de 0,5 gt ----- Mensagem Original ----- gt De: Andy Buckle Mailto: email escondido gt Enviado: quinta-feira, 06 de maio de 2010 12:06 gt Para: e-mail escondido gt Cc: e-mail escondido gt Tema: Re: vectorized mover média gt gt conv também é um arquivo m, Ifs em seguida, gt chama filtro para fazer o trabalho. Que é um arquivo oct. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Eu olhei para o código M gt ​​para movavg () gt gt e ele usa um para-loop, então I39m acho que provavelmente isn39t uma maneira, gt gt, mas eu pensei que I39d verificar. Obrigado. Gt gt gt gt --Tim gt gt gt gt Ajuda-oitava lista de discussão gt gt escondido gt gt gt www-old. cae. wisc. edu/mailman/listinfo/help-octave gt gt gt gt gt gt gt gt - gt / Andy fivela / gt Obrigado por mostrar como usar filter () para fazer uma média móvel simples. Eu implementei seu código, e ele concorda com movavg (x, 10,10,0), que calcula uma média móvel simples de 10 dias. Há apenas uma diferença nos primeiros 9 números devido a valores assumidos de tempo negativo (movavg calcula um período de rodagem). Como você deve se lembrar, estou tentando usar filter () para evitar movavg () s for-loop. Agora, o que estou tentando fazer é uma média móvel ponderada, idêntica ao parâmetro alfa de movavg (). Quando alpha0, é uma média móvel simples, e concorda com filter (). Se eu mudar alfa para 1, Im supor para obter um MA linear. Heres o código em movavg. m que faz a ponderação (chumbo é o número de dias para a média, igual a 10 no caso acima): chumbo (1: chumbo).alph Ajustar os pesos para igual a 1 chumbo chumbo / soma (chumbo ) Assim, para uma média móvel linearmente ponderada de 10 dias (chumbo 10, alfa 1). Os 9 dias e dias atuais devem ser ponderados da seguinte forma: 1/55, 2/55, 3/55. 10/55, com o maior peso (10/55) aplicado ao dia atual. Então, eu tentei um caso de teste simples com apenas um MA de 2 dias em um vetor de 6 elementos. Madays 2 alfa 1 len 6 a rand (1. len) Calcula MA usando movavg () ma movavg (a, madays, madays, alfa) Calcula MA usando filter () sweep (1: madays) ) F filter (normsweep, 1, a) Os resultados de movavg () e filter () são semelhantes, mas não iguais. Eu acho que eu não tenho os argumentos para o filtro () correto, mas eu não consigo descobrir o que eu fiz de errado. Particularmente, Im não sei o que o segundo argumento de filter () é suposto fazer. Ajuda Im não sei o que você quer dizer com a ponderação de 0,5, mas para fazer uma média de 10 dias simples, itd ser y filtro (1 / 10ones (1, 10), 1, x) Isso pressupõe que os valores em tempo negativo (x (0), x (-1), etc) são todos zero. Assim, por exemplo, o primeiro valor de y seria x (1) / 10. Em sex, 7 de maio de 2010 às 3:33 PM, Tim Rueth e-mail lthidden gt escreveu: Eu olhei tanto conv () e filter (), mas não consigo descobrir como fazer uma média móvel com eles. Talvez eu não estou entendendo as funções da entrada vars corretamente. Vamos dizer que eu tenho um array, um rand (1,100). Você pode me dizer como eu uso conv () e filter () para tomar, digamos a média móvel de 10 dias, com uma ponderação de 0,5 gt ----- Mensagem Original ----- gt De: Andy Buckle Mailto: email escondido gt Enviado: quinta-feira, 06 de maio de 2010 12:06 gt Para: e-mail escondido gt Cc: e-mail escondido gt Tema: Re: vectorized movendo média gt gt conv também é um arquivo m, Ifs em seguida, gt chama filtro para fazer o trabalho. Que é um arquivo oct. Gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Loop Eu olhei para o código M gt ​​para movavg () gt gt e ele usa um para-loop, então eu acho que provavelmente não é uma maneira, gt gt, mas eu pensei verificar Id. Obrigado. Gt gt gt gt --Tim gt gt gt gt Ajuda-oitava lista de discussão gt gt escondido gt gt gt www-old. cae. wisc. edu/mailman/listinfo/help-octave gt gt gt gt gt gt gt gt - gt / Andy fivela / gt gt Seu código de filtro abaixo funciona muito bem quando comparado com o que eu tinha sido gtdoing, com exceção de um número de dias iniciais, devido a quais valores são assumidos gtin tempo negativo. Eu estava usando o seguinte código: gt gt quotndaysquot é o número de dias a serem usados ​​ao calcular a média exponencial gtmoving de quotdataquot (dados é um vetor de coluna) gt dados repmat (data (1), ndays, 1) (1) ndays vezes no gtthe início dos dados para valores de tempo negativos gt alfa 2 / (ndays1) gt n comprimento (dados) gt avg zeros (n, 1) gt avg (1) dados (1) A instrução acima é tudo o que você Necessidade de quotinventquot passado memória para valores negativos. Você deve fazer o mesmo para a função de filtro, mas eu não poderia dizer como fazê-lo offhand. Gt para i 2. gt ao avg (i-1) gt avg (i) ao alfa (dados (i) - ao) gt end para gt gt trim fora do período de rodagem para valores de tempo negativos gt longma longma (lmadays1. ) Eu não entendo a instrução acima. O que é longma gtPara pequenos valores de ndays, o número de dias iniciais em que há uma gtdiscrepancy com sua implementação filter () é mínima, mas para maiores valores gt de ndays, o número de dias iniciais de discrepância cresce (obviamente, gtdue à natureza de Um MA exponencial com uma memória de cauda longa). Observe, I gtadd valores de tempo negativo semelhantes para a frente do vetor ao usar gtfilter () também. Im apenas não sei qual é a convenção quando se trata de gtcalculating exponencial médias móveis para pontos em quotdataquot onde quotndaysquot gtreaches voltar no tempo negativo. Obrigado novamente. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Área della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: email escondido (entrada 20, , Sala C71) Web: fly. isti. cnr. it/ Ajuda-octave mailing list email escondido www-old. cae. wisc. edu/mailman/listinfo/help-octave Eu não posso verificar isso atualmente, mas se bem me lembro, O argumento 4 para filtrar é condições iniciais. Então, algo como se você quiser que sua condição inicial seja o primeiro valor dos dados, eu acho que o comando seria: b alpha a 1, alpha-1 s filtro (b, a, x, x (1)) Só precisa Para ser um elemento neste caso, porque a única condição inicial que você precisa é s0. O Thu, 13 de maio de 2010 às 2:21, Francesco Potort lthidden e-mail gt escreveu: gtYour código de filtro abaixo funciona muito bem quando comparado com o que eu tinha sido gtdoing, com exceção de um número de dias iniciais, devido a quais valores são assumidos Gtin tempo negativo. Eu estava usando o seguinte código: gt gt quotndaysquot é o número de dias a serem usados ​​ao calcular a média exponencial gtmoving de quotdataquot (dados é um vetor de coluna) gt dados repmat (dados (1), ndays, 1) (1) ndays vezes no gtthe início dos dados para valores de tempo negativos gt alfa 2 / (ndays1) gt n comprimento (dados) gt avg zeros (n, 1) gt avg (1) dados (1) A instrução acima é tudo o que você Necessidade de quotinventquot passado memória para valores negativos. Você deve fazer o mesmo para a função de filtro, mas eu não poderia dizer como fazê-lo offhand. Gt para i 2. gt ao avg (i-1) gt avg (i) ao alfa (dados (i) - ao) gt end para gt gt trim fora do período de rodagem para valores de tempo negativos gt longma longma (lmadays1. ) Eu não entendo a instrução acima. O que é longma gtPara pequenos valores de ndays, o número de dias iniciais em que há uma gtdiscrepância com sua implementação filter () é mínimo, mas para maiores valores gt de ndays, o número de dias iniciais de discrepância cresce (obviamente, gtdue à natureza de Um MA exponencial com uma memória de cauda longa). Observe, I gtadd valores de tempo negativo semelhantes para a frente do vetor ao usar gtfilter () também. Só não sei qual é a convenção quando se trata de calcular médias exponenciais de pontos em quotdataquot onde quotndaysquot gtreaches volta para o tempo negativo. Obrigado novamente. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Área della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: email escondido (entrada 20, , Sala C71) Web: fly. isti. cnr. it/ Em resposta a este post por Francesco Potort A última instrução com quotlongmaquot deve ter lido: quotavg avg (n1. End) quot que efetivamente afasta os valores calculados de tempo negativo. Mas, como você diz, parece que eu não precisava fazer isso porque o histórico é completamente capturado em avg (1) dados (1), então não há necessidade de calcular um tempo quotrun-inquot. Obrigado Francesco. Sherman descobriu que eu posso definir a condição inicial especificando um parâmetro 4 no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente exatos) quando comparados com o loop for abaixo sem valores de tempo negativos. Mas esta pequena diferença dissipada dentro quotndaysquot e não é um grande negócio. Obrigado Sherman. Em resumo, para calcular a média móvel exponencial de quotdataquot para quotndaysquot, o seguinte código: alpha 2 / (ndays1) n comprimento (dados) avg zeros (n, 1) avg (1) dados (1) para i 2. n ao Avg (i-1) avg (i) ao alfa (dados (i) - ao) endfor está próximo, mas não completamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, dados, 1)) para aproximadamente os primeiros ndays de avg. Gt ----- Mensagem Original ----- gt De: Francesco Potort mailto: e-mail escondido gt Enviado: quarta-feira, 12 de maio de 2010 23:22 gt Para: e-mail escondido gt Cc: Octave-ML James Sherman Jr. Gt gt gt gt gtYour código de filtro abaixo funciona muito bem quando comparado com o que gt eu tinha sido gt gtdoing, com exceção de um número de dias iniciais, devido ao que os valores são gt ggtassumed em tempo negativo. Eu estava usando o seguinte código: gt gt gt gt quotndaysquot é o número de dias a serem usados ​​ao computar a gt média móvel gtexponencial de quotdataquot (dados é um vetor de coluna) gt gt dados repmat (data (1), ndays, 1 ) Dados repetição gt dados (1) ndias vezes em gt gt início de dados para valores negativos de tempo gt 2 / (ndays1) n gt gt comprimento (dados) avg zeros (n, 1) gt gt avg (1) dados ) Gt gt A instrução acima é tudo que você precisa para quotinventquot passado memória gt para valores negativos. Você deve fazer o mesmo para o filtro gt função, mas eu não poderia dizer como fazê-lo offhand. Gt gt gt para i 2. gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Longma longma (lmadays1. End) gt gt Eu não entendo a instrução acima. O que é longma gt gt gtPara pequenos valores de ndays, o número de dias iniciais onde gt há uma gt gtdiscrepancy com sua implementação filter () é mínima, mas para gt gtlarger valores de ndays, o número de dias iniciais de gt discrepância cresce gt gt (Obviamente, devido à natureza de uma MA exponencial com uma gt gtmemory gt de cauda longa). Observe, eu adiciono valores de tempo negativos similares para a frente gt do gtvector gt quando usando gt gtfilter () também. Eu só não sei o que é a convenção quando gt gtcomes para calcular médias exponenciais móveis para pontos gt em quotdataquot onde quotndaysquot gt gtreaches voltar no tempo negativo. Obrigado novamente. Gt gt - gt Francesco Potort (ricercatore) Voz: 39 050 315 gt 3058 (op.2111) gt ISTI - Área della ricerca CNR Fax: 39 050 315 2040 gt via G. Moruzzi 1, I-56124 Pisa Gt (entrada 20, 1 º andar, sala C71) Web: fly. isti. cnr. it/ gt Então, isso me incomodou, então eu olhei um pouco para a função de filtro, e acho que eu encontrei onde o erro foi na minha inicial sugestão. O vetor de condição inicial tem a ver com os estados internos do filtro não as saídas de tempo negativo do filtro (pelo menos não diretamente), para obter o que eu acho que é exatamente o que seu código com o loop for, a linha de filtro deve ser : É um pouco intuitivo porque o termo 1-alfa precisa estar lá, e eu não sei se há muito interesse nele, mas Ele não deve ser tão difícil (provavelmente eu só preciso abrir meus sinais e livros de sistemas) para escrever uma função para calcular as condições iniciais que a função de filtro espera apenas dando as saídas e entradas de tempo negativo. A última instrução com quotlongmaquot deve ter lido: quotavg avg (n1: end) quot que efetivamente limpa os valores calculados a partir de tempo negativo. Mas, como você diz, parece que eu não precisava fazer isso porque o histórico é completamente capturado em dados de avg (1) (1), então não há necessidade de calcular um tempo de quotrun-inquot. Obrigado Francesco. Sherman descobriu que eu posso definir a condição inicial especificando um parâmetro 4 no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente exatos) quando comparados com o loop for abaixo sem valores de tempo negativos. Mas esta pequena diferença dissipou-se dentro de quotndaysquot e isn39t um grande negócio. Obrigado Sherman. Em resumo, para calcular a média móvel exponencial de quotdataquot para quotndaysquot, o seguinte código: alpha 2 / (ndays1) n comprimento (dados) avg zeros (n, 1) avg (1) dados (1) para i 2. n ao Avg (i-1) avg (i) ao alfa (dados (i) - ao) é íntimo, mas não completamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, dados, )) Para aproximadamente os primeiros ndays de avg. Gt ----- Mensagem Original ----- gt De: Francesco Potort mailto: e-mail escondido gt Enviado: quarta-feira, 12 de maio de 2010 23:22 gt Para: e-mail escondido gt Cc: 39Octave-ML39 39James Sherman Jr. 39 gt Assunto: Re: média móvel vectorizada gt gt gtO seu código de filtro abaixo funciona muito bem quando comparado com o que gt eu tinha gt gtdoing, exceto por um número de dias iniciais, devido a quais valores são gt ggtassumed em tempo negativo. Eu estava usando o seguinte código: gt gt gt gt quotndaysquot é o número de dias a serem usados ​​ao computar a gt média móvel gtexponencial de quotdataquot (dados é um vetor de coluna) gt gt dados repmat (data (1), ndays, 1 ) Dados repetição gt dados (1) ndias vezes em gt gt início de dados para valores negativos de tempo gt 2 / (ndays1) n gt gt comprimento (dados) avg zeros (n, 1) gt gt avg (1) dados ) Gt gt A instrução acima é tudo que você precisa para quotinventquot passado memória gt para valores negativos. Você deve fazer o mesmo para o filtro gt função, mas eu não poderia dizer como fazê-lo offhand. Gt gt gt para i 2. gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Longma longma (lmadays1. End) gt gt Eu não entendo a instrução acima. O que é longma gt gt gtPara pequenos valores de ndays, o número de dias iniciais onde gt há um gt gtdiscrepancy com o seu filter () implementação é mínima, mas para gt gtlarger valores de ndays, o número de dias iniciais de gt discrepância cresce gt gt (Obviamente, devido à natureza de uma MA exponencial com uma gt gtmemory gt de cauda longa). Observe, eu adiciono valores de tempo negativos similares para a frente gt do gtvector gt quando usando gt gtfilter () também. I39m apenas não sei qual é a convenção quando gt gtcomes calculando médias móveis exponenciais para pontos gt em quotdataquot onde quotndaysquot gt gtreaches voltar no tempo negativo. Obrigado novamente. Gt gt - gt Francesco Potort (ricercatore) Voz: 39 050 315 gt 3058 (op.2111) gt ISTI - Área della ricerca CNR Fax: 39 050 315 2040 gt via G. Moruzzi 1, I-56124 Pisa Gt (entrada 20, 1 º andar, sala C71) Web: fly. isti. cnr. it/ gt Então, isso me incomodou, então eu olhei um pouco para a função de filtro, e acho que eu encontrei onde o erro foi na minha inicial sugestão. O vetor de condição inicial tem a ver com os estados internos do filtro não as saídas de tempo negativo do filtro (pelo menos não diretamente), para obter o que eu acho que é exatamente o que seu código com o loop for, a linha de filtro deve ser : É um pouco intuitivo porque o termo 1-alfa precisa estar lá, e eu não sei se há muito interesse nisso, mas Ele não deve ser tão difícil (provavelmente eu só preciso abrir meus sinais e livros de sistemas) para escrever uma função para calcular as condições iniciais que a função de filtro espera apenas dando as saídas e entradas de tempo negativo. A última instrução com longma deve ter lido: avg avg (n1: end) que efetivamente limpa os valores calculados a partir do tempo negativo. Mas, como você diz, parece que eu não preciso fazer isso porque o histórico é completamente capturado em avg (1) dados (1), então não há necessidade de calcular um tempo de execução. Obrigado Francesco. Sherman descobriu que eu posso definir a condição inicial especificando um parâmetro 4 no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente exatos) quando comparados com o loop for abaixo sem valores de tempo negativos. Mas esta pequena diferença dissipada dentro de ndays e não é um grande negócio. Obrigado Sherman. Em resumo, para calcular a média móvel exponencial de dados para ndias, o seguinte código: alpha 2 / (ndays1) n comprimento (dados) avg zeros (n, 1) avg (1) dados (1) para i 2. n ao Avg (i-1) avg (i) ao alfa (dados (i) - ao) é íntimo, mas não completamente igual a: alpha 2 / (ndays1) avg filtro (alfa, 1 alfa-1, dados, )) Para aproximadamente os primeiros ndays de avg.


No comments:

Post a Comment