Monday 26 November 2018

Octave moving average function


11.2 Definindo Funções Na sua forma mais simples, a definição de uma função denominada nome parece assim: Um nome de função válido é como um nome de variável válido: uma seqüência de letras, dígitos e sublinhados, não começando com um dígito. As funções compartilham o mesmo grupo de nomes que variáveis. O corpo da função consiste em declarações da Octave. É a parte mais importante da definição, porque diz o que a função deve realmente fazer. Por exemplo, aqui está uma função que, quando executada, tocará a campainha em seu terminal (assumindo que é possível fazê-lo): a instrução printf (veja Entrada e Saída) simplesmente diz a Octave que imprima a quantidade de quitação da string. O caractere especial lsquo a rsquo representa o caractere de alerta (ASCII 7). Veja Strings. Uma vez definida esta função, você pode perguntar à Octave para avaliá-la digitando o nome da função. Normalmente, você vai querer passar algumas informações para as funções que você define. A sintaxe para passar parâmetros para uma função em Octave é onde arg-list é uma lista separada por vírgulas dos argumentos functionrsquos. Quando a função é chamada, os nomes dos argumentos são usados ​​para manter os valores de argumento dados na chamada. A lista de argumentos pode estar vazia, caso em que este formulário é equivalente ao mostrado acima. Para imprimir uma mensagem junto com tocar a campainha, você pode modificar o despertar para se parecer com isto: Chamar essa função usando uma declaração como essa fará com que o Octave toque o seu sino do terminalrsquos e imprima a mensagem lsquo Rise e brilha rsquo, seguido por uma nova linha Personagem (o lsquo n rsquo no primeiro argumento para a instrução printf). Na maioria dos casos, você também deseja obter algumas informações de volta das funções que você define. Aqui está a sintaxe para escrever uma função que retorna um único valor: O símbolo ret-var é o nome da variável que manterá o valor a ser retornado pela função. Esta variável deve ser definida antes do final do corpo da função para que a função devolva um valor. As variáveis ​​usadas no corpo de uma função são locais para a função. As variáveis ​​chamadas em arg-list e ret-var também são locais para a função. Veja Variáveis ​​globais. Para obter informações sobre como acessar variáveis ​​globais dentro de uma função. Por exemplo, aqui está uma função que calcula a média dos elementos de um vetor: se tivéssemos escrito avg como este em vez disso, e então chamamos a função com uma matriz ao invés de um vetor como argumento, a Octave teria imprimido uma mensagem de erro Assim: porque o corpo da instrução if nunca foi executado e o retval nunca foi definido. Para evitar erros obscuros como este, é uma boa idéia ter sempre a certeza de que as variáveis ​​de retorno sempre terão valores e produzir mensagens de erro significativas quando forem encontrados problemas. Por exemplo, o avg poderia ter sido escrito assim: ainda existe um problema adicional com esta função. E se for chamado sem um argumento Sem verificação de erro adicional, a Octave provavelmente imprimirá uma mensagem de erro que o wonrsquot realmente o ajudará a rastrear a origem do erro. Para permitir que você capture erros como este, a Octave fornece cada função com uma variável automática chamada nargin. Cada vez que uma função é chamada, nargin é inicializado automaticamente para o número de argumentos que realmente foram passados ​​para a função. Por exemplo, podemos reescrever a função avg como esta: Embora a Octave não relate automaticamente um erro se você chamar uma função com mais argumentos do que o esperado, provavelmente indica que algo está errado. Octave também não denomina automaticamente um erro se uma função é chamada com muito poucos argumentos, mas qualquer tentativa de usar uma variável que não recebeu um valor resultará em um erro. Para evitar tais problemas e para fornecer mensagens úteis, verificamos as duas possibilidades e emitemos nossa própria mensagem de erro. Informe o número de argumentos de entrada para uma função. Chamado de dentro de uma função, retorna o número de argumentos passados ​​para a função. No nível superior, retornar o número de argumentos da linha de comando passados ​​para Octave. Se for chamado com o argumento opcional fcn mdasha nome da função ou handlemdashreturn o número declarado de argumentos que a função pode aceitar. Se o último argumento para fcn for varargin, o valor retornado é negativo. Por exemplo, a função union for sets é declarada como Nota de programação: nargin não funciona em funções compiladas (arquivos. oct), como funções embutidas ou carregadas dinamicamente. Retorna o nome do n-ésimo argumento para a função de chamada. Se o argumento não for um nome de variável simples, devolva uma string vazia. Como exemplo, uma referência a um campo em uma estrutura como s. field não é um nome simples e retornará quotquot. O nome de entrada só é útil dentro de uma função. Quando usado na linha de comando, ele sempre retorna uma string vazia. Consulte ou defina a variável interna que controla se a saída interna de uma função é suprimida. Se esta opção estiver desativada, a Octave exibirá os resultados produzidos pela avaliação de expressões dentro de um corpo de função que não são encerradas com um ponto e vírgula. Quando chamado de dentro de uma função com a opção quotlocalquot, a variável é alterada localmente para a função e as sub-rotinas que ele chama. O valor da variável original é restaurado ao sair da função. Média de Movimento Moverada Em resposta a esta publicação por Luca Delucchi Um método on-line para fazer wma (ou seja, onde você pode adicionar um único valor ao mesmo tempo) com uma janela de expinência (que pesa eventos mais recentes Mais fortes do que menos recentes) funciona assim: xmean (t1) exp (-1tau) (xmean (t) x (t) tau) isso lhe dá uma wma de x (t). Tau é algo como o comprimento da memória (eventos mais atrasados ​​do que o tau não será muito lembrado demais). Am 10.08.2007 um 09:19 schrieb Luca Delucchi: gt Oi, eu posso fazer uma função na Média de Movimento Ponderada onde o valor é gt tomar no modo automático esta minha idéia gt gt yy1, y2, y3, y4, y5 gt função wma (Y) gt (y12y2y3) 4 gt (y22y3y4) 4 gt etc gt etc gt final função gt gt Não consegui repetir a fórmula (y12y2y3) 4 (porque se o vetor longo do gt for diferente eu preciso mudar a função) mas tenho Apenas uma fórmula gt que usa a fórmula para todos os valores de vetor gt gt Espero ter dado uma explicação clara gt gt Luca gt gt Help-octave mailing list gt email escondido gt cae. wisc. edumailmanlistinfohelp-octave Não é uma coisa de oitava, mas Um processo de processamento de sinal. Um filtro FIR (filtro de entrada finito) é determinado pelo vetor dos coeficientes, portanto, se o filtro tiver o comprimento 4, a saída seria algo como: y (t) b (1) x (t) b (2) x ( T-1) b (3) x (t-2) b (4) x (t-3) Então, quando b (1,4) 4, é apenas a média dos últimos quatro elementos. Na oitava, você pode usar a função quotfilterquot para fazer exatamente isso, se x for seu sinal, você pode simplesmente fazer o filtro (b, 1, x) P. S. Isso é 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 que conv, mas truncado ao comprimento de x. Em 81007, Luca Delucchi enviou email gt escreveu: 2007810, Schirmacher, Rolf ltidden email gt: gt Filtrar com um filtro FIR Os coeficientes seriam gt gt b 1 1 1 1. 4 gt O que é isso Desculpe, mas I39m um novato de octave gt gt ----- Mensagem Original ----- gt gt De: Luca Delucchi mailto: email escondido gt gt Enviado: sexta-feira, 10 de agosto de 2007 9:20 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 de movimento ponderada onde o valor é gt gt tomar no modo automático esta minha idéia gt gt gt gt yy1, y2, Y3, y4, y5 gt gt função wma (y) gt gt (y12y2y3) 4 gt gt (y22y3y4) 4 gt gt etc gt gt etc gt gt função final gt gt gt gt Não consegui repetir a fórmula (y12y2y3) 4 (porque Se o longo vetor gt gt for diferente eu preciso mudar a função), mas tenho apenas uma fórmula gt gt que usa a fórmula para todos os valores do vetor gt gt gt gt Espero ter dado uma explicação clara gt gt gt gt Luca gt gt gt Gt Help-octave mailing list gt gt email escondido gt gt cae. wisc. edumailmanlistinfohelp-octave gt gt gt Em resposta a esta publicação por Luca Delucchi Oi, eu posso fazer uma função na Média de Movimento Ponderada onde o valor é assumido no automat Ic mode this my idea 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 tenho apenas uma fórmula que usa a fórmula para todos os valores do vetor. Você deve pensar sobre seus dados de uma maneira diferente se você quiser usar o Matlaboctave de forma eficiente. Os dados são representados como vetores ou matrizes, e você deve fazer todas as operações em todos os dados --- não pense nos elementos y1, y2, etc., mas sim lidar com todo o vetor y. Você terá que misturar elementos vetoriais de diferentes posições, então você precisa 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 forma, isso obriga você a reconhecer vários problemas que são varridos sob o tapete de outra forma, por exemplo, qual o significado da sua média ponderada para y1, que não tem um ponto de dados anterior. Uma abordagem pode ser duplicar a Primeiro e último ponto: temp y (1) yy (final) média (temp (1: final-2) 2temp (2: final-1) temp (3: fim)) 4 ou desista e admita que você só pode calcular A média em um subconjunto de pontos: média (y (1: fim-2) 2y (2: final-1) y (3: fim)) 4 Existe uma função de oitava chamada filtro () que pode aplicar um filtro linear arbitrário. Bastante complicado porque permite um feedback linear que você não está interessado em que você use uma forma específica de um vetor de feedback b1 0 0 0 0 0. filtro médio (1 2 14,1, y)) Finalmente, a Octave possui alguns filtros criados no meu O filtro de média móvel móvel vecturizado com filtro de retenção de 2 minutos de Savitzky-Golay (110ones (1, 10), 1, x) assume que os valores em tempo negativo (x (0), x (-1), etc. Tudo zero. Assim, por exemplo, o primeiro valor de y seria x (1) 10. No sexto, 7 de maio de 2018, às 15h33, Tim Rueth, o correio eletrônico gt escreveu: olhei para conv () e filtro (), mas não consigo descobrir como fazer uma média móvel com eles. Talvez eu não compreenda as funções dos controles de entrada corretamente. Let39s dizem que eu tenho uma matriz, um rand (1.100). Você pode me dizer como eu uso uso conv () e filtro () 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 2018 12:06 gt Para: email escondido gt Cc: email escondido gt Assunto: Re: vetor movimentado em média gt gt conv é também um arquivo m, mas ele só tem alguns Se estiver dentro, então ele gt chama filtro para fazer o trabalho. Que é um arquivo de outubro. Gt gt Andy gt gt On Thu, 6 de maio de 2018 às 6:28, Tim Rueth ltcito e-mail gt escreveu: gt gt Alguém sabe como usar uma média móvel ponderada de n-dia de um vetor gt gt sem usar um for - Loop eu olhei o código M gt ​​para movavg () gt gt e ele usa um loop for, então eu acho que provavelmente não há nenhuma maneira, gt gt, mas eu pensei que eu chequei. Obrigado. Gt gt gt gt --Tim gt gt gt gt Help-octave mailing list gt gt email escondido gt gt www-old. cae. wisc. edumailmanlistinfohelp-octave gt gt gt gt gt gt gt - gt andy fivela gt Obrigado por mostrar Como usar o filtro () para fazer uma média móvel simples. Eu implementei seu código, e concorda com movavg (x, 10,10,0), que calcula uma média móvel simples de 10 dias. Existe 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ê pode lembrar, estou tentando usar o filtro () 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 o filtro (). Se eu mudar alfa para 1, suponho que obtenha um MA linear. É o código em movavg. m que faz a ponderação (o lead é o número de dias em média, igual a 10 no caso acima): lead (1: lead).aa Ajuste os pesos para igualar 1 lead lead sum (lead) Então, para uma média móvel de 10 dias linearmente ponderada (lead 10, alpha 1). Os 9 dias anteriores e o dia atual devem ser ponderados da seguinte forma: 155, 255, 355. 1055, com o maior peso (1055) aplicado no dia atual. Então, tentei um caso de teste simples com apenas um MA de 2 dias em um vetor de 6 elementos. Madays 2 alpha 1 len 6 a rand (1. len) Calcular MA usando movavg () ma movavg (a, madays, madays, alfa) Calcular MA usando filtro () varredura (1: madays).alpha normsweep sweepsum (varredura) f Filtro (normsweep, 1, a) Os resultados de movavg () e filter () são semelhantes, mas não iguais. Eu acho que não tenho os argumentos para o filtro () correto, mas não consigo descobrir o que fiz de errado. Particularmente, não tenho certeza do que o segundo argumento do filtro () deveria fazer. Ajuda Eu não sei o que você quer dizer com uma ponderação de 0,5, mas para fazer uma média simples de 10 dias, itd be y filter (110ones (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. No sex. 7 de maio de 2018, às 15h33, Tim Rueth escreveu o correio eletrônico: escrevi: olhei para conv () e filtro (), mas não consigo descobrir como fazer uma média móvel com eles. Talvez eu não entenda as funções dos controles de entrada corretamente. Digamos que eu tenho uma matriz, um rand (1.100). Você pode me dizer como eu uso conv () e filtro () 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 2018 12:06 gt Para: email escondido gt Cc: email escondido gt Assunto: Re: vetor movimentado em média gt gt conv é também um arquivo m, mas ele só tem alguns Se estiver dentro, então ele gt chama filtro para fazer o trabalho. Que é um arquivo de outubro. Gt gt Andy gt gt On Thu, 6 de maio de 2018 às 6:28, Tim Rueth ltcito e-mail gt escreveu: gt gt Alguém sabe como usar uma média móvel ponderada de n-dia de um vetor gt gt sem usar um for - Loop Eu olhei o código M gt ​​para movavg () gt gt e ele usa um loop for, então eu acho que provavelmente não há um jeito, gt gt, mas eu pensei que estava de acordo. Obrigado. Gt gt gt gt --Tim gt gt gt gt Help-octave mailing list gt gt email escondido gt gt www-old. cae. wisc. edumailmanlistinfohelp-octave gt gt gt gt gt gt gt gt - gt andy fivela gtTodo código de filtro Abaixo funciona bem quando comparado com o que eu estava fazendo, exceto por um número de dias iniciais, devido a quais valores são assumidos em tempo negativo. Eu estava usando o seguinte código: gt gt quotndaysquot é o número de dias a ser usado ao calcular a média exponencial de gtmoving de quotdataquot (dados é um vetor de coluna) gt data repmat (dados (1), ndays, 1) dados de repetição de dados (1) horários de nove dias no início dos dados para valores de tempo negativos gt alpha 2 (ndays1) gt n comprimento (dados) gt avg zeros (n, 1) gt avg (1) data (1) A instrução acima é tudo que você precisa Para não dispor de memória passada para valores negativos. Você deve fazer o mesmo para a função de filtro, mas não consegui dizer como fazê-lo de forma indiferente. Gt for i 2. n gt ao avg (i-1) gt avg (i) ao alpha (dados (i) - ao) gt final para gt gt trim off run-in período para valores de tempo negativos gt longma longma (lmadays1. End ) 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 de filtro () é mínima, mas para valores maiores de ndays, o número de dias iniciais de discrepância cresce (obviamente, gtdue para a natureza de Um MA exponencial com uma memória de cauda longa). Note-se que eu gtadd valores de tempo negativos semelhantes à frente do vetor quando usando gtfilter () também. Eu não tenho certeza de qual é a convenção quando se trata de calcular as médias exponenciais exponenciais para pontos em quotdataquot onde quotndaysquot gletsche novamente em tempo negativo. Obrigado novamente. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Area della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: email escondido (entrada 20, 1º andar , Sala C71) Web: fly. isti. cnr. it Help-octave mailing list hidden email www-old. cae. wisc. edumailmanlistinfohelp-octave Eu não posso verificá-lo atualmente, mas se me lembro corretamente, o 4º argumento para filtrar é inicial Condições. Então, algo como se você quisesse que sua condição inicial fosse o primeiro valor de dados, acho que o comando seria: b alpha a 1, filtro alpha-1 (b, a, x, x (1)). Só precisa Para ser um elemento neste caso porque a única condição inicial de que você precisa é s0. Em Thu, 13 de maio de 2018 às 2:21 da manhã, o correio eletrônico de Francesco Potort, gt escreveu: o seu código de filtro abaixo funciona bem quando comparado ao que eu estava fazendo, exceto por um número de dias iniciais, devido a quais valores são assumidos Gino tempo negativo. Eu estava usando o seguinte código: gt gt quotndaysquot é o número de dias a ser usado ao calcular a média exponencial de gtmoving de quotdataquot (dados é um vetor de coluna) gt data repmat (dados (1), ndays, 1) dados de repetição de dados (1) horários de nove dias no início dos dados para valores de tempo negativos gt alpha 2 (ndays1) gt n comprimento (dados) gt avg zeros (n, 1) gt avg (1) data (1) A instrução acima é tudo que você precisa Para não dispor de memória passada para valores negativos. Você deve fazer o mesmo para a função de filtro, mas não consegui dizer como fazê-lo de forma indiferente. Gt for i 2. n gt ao avg (i-1) gt avg (i) ao alpha (dados (i) - ao) gt final para gt gt trim off run-in período para valores de tempo negativos gt longma longma (lmadays1. End ) 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 de filtro () é mínima, mas para valores maiores de ndays, o número de dias iniciais de discrepância cresce (obviamente, com a natureza de Um MA exponencial com uma memória de cauda longa). Note-se que eu gtadd valores de tempo negativos semelhantes à frente do vetor quando usando gtfilter () também. Eu não tenho certeza de qual é a convenção quando se trata de calcular as médias exponenciais móveis para pontos em quotdataquot onde quotndaysquot gtreaches volta para o tempo negativo. Obrigado novamente. - Francesco Potort (ricercatore) Voz: 39 050 315 3058 (op.2111) ISTI - Area della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: email escondido (entrada 20, 1º andar , Sala C71) Web: fly. isti. cnr. it Em resposta a esta publicação por Francesco Potort A última instrução com quotlongmaquot deveria ter lido: quotavg avg (n1. End) quot que efetivamente destrói os valores calculados do tempo negativo. Mas, como você diz, parece que eu não precisava fazer isso porque o histórico foi completamente capturado em dados 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 4º parâmetro no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente) quando comparados com o loop for abaixo com valores de tempo negativos. Mas essa pequena diferença se dissipou dentro de quotndaysquot e não é um grande problema. 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 (data (i) - ao) endfor é próximo, mas não é igual a: alpha 2 (ndays1) filtro avg (alfa, 1 alfa-1, dados, dados (1) ) Para aproximadamente os primeiros dias da avg. Gt ----- Mensagem Original ----- gt De: Francesco Potort mailto: email escondido Enviado: quarta-feira, 12 de maio de 2018 11:22 PM gt Para: email escondido gt Cc: Octave-ML James Sherman Jr. Gt Assunto: Re: média movida vectorizada gt gt O seu código de filtro abaixo funciona bem quando comparado ao que gt eu tinha gt gtdoing, exceto por um número de dias iniciais, devido a quais valores são gt gtassumed em tempo negativo. Eu estava usando o seguinte código: gt gt gt gt quotndaysquot é o número de dias a ser usado ao calcular a média móvel gt gtexponencial de quotdataquot (dados é um vetor de coluna) gt gt data repmat (dados (1), ndays, 1 ) Dados repetir dados gt (1) tempos de dias em gt o início dos dados para valores de tempo negativos alpha gt 2 (ndays1) n gt gt comprimento (dados) valores médios (n, 1) gt gt avg (1) dados (1) Gt gt A instrução acima é tudo o que você precisa para garantir a memória anterior gt para valores negativos. Você deve fazer o mesmo para a função gt do filtro, mas não consegui dizer como fazê-lo de uma maneira diferente. Gt gt gt for i 2. n gt gt ao avg (i-1) gt gt avg (i) ao alfa (dados (i) - ao) fim de gt gt gt gt trim trim do período de execução para valores de tempo negativos 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 em que gt existe, uma gt gtdiscrepancy com sua implementação de filtro () é mínima, mas para gt gtlarger valores de ndays, o número de dias iniciais de gt discrepancy cresce gt gt (Obviamente, devido à natureza de um MA exponencial com um gt gtmemory de longa duração). Observe que eu adiciono valores de tempo negativos semelhantes à frente gt do gtvector gt quando também uso gt gtfilter (). Eu não tenho certeza de qual é a convenção quando gt gt vem ao cálculo de médias móveis exponenciais para pontos gt em quotdataquot onde quotndaysquot gt retorna de volta ao 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 Email: email escondido 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 encontrei o erro na minha sugestão inicial . 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 é exatamente qual seu código com o loop for, a linha do filtro deve ser : Filtro avg (alfa, 1 alfa-1, dados, dados (1) (1-alfa)) É bastante inícuo por que o termo 1-alfa precisa estar lá, e eu não sei se há muito interesse nisso, mas Não deveria ser tão difícil (provavelmente 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 dar as saídas e as entradas do tempo negativo. Em Thu, 13 de maio de 2018, às 8:38 PM, Tim Rueth lthidden email gt escreveu: A última instrução com quotlongmaquot deveria ter lido: quotavg avg (n1: end) quot que efetivamente destrói os valores calculados do tempo negativo. Mas, como você diz, parece que não precisei fazer isso porque o histórico é completamente capturado em dados 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 4º parâmetro no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente) quando comparados com o loop for abaixo com valores de tempo negativos. Mas essa pequena diferença se dissipou dentro de quotndaysquot e não é um grande problema. 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 alpha (data (i) - ao) é próximo, mas não é igual a: alpha 2 (ndays1) filtro avg (alfa, 1 alfa-1, dados, dados (1)) Por aproximadamente os primeiros dias da avg. Gt ----- Mensagem Original ----- gt De: Francesco Potort mailto: email escondido gt Enviado: quarta-feira, 12 de maio de 2018 11:22 PM gt Para: email escondido gt Cc: 39Octave-ML39 39James Sherman Jr. 39 gt Assunto: Re: média movida vectorizada gt gt. Seu código de filtro abaixo funciona bem quando comparado ao que gt eu tinha gt gtdoing, exceto por um número de dias iniciais, devido a quais valores são gerados em tempo negativo. Eu estava usando o seguinte código: gt gt gt gt quotndaysquot é o número de dias a ser usado ao calcular a média móvel gt gtexponencial de quotdataquot (dados é um vetor de coluna) gt gt data repmat (dados (1), ndays, 1 ) Dados repetir dados gt (1) tempos de dias em gt o início dos dados para valores de tempo negativos alpha gt 2 (ndays1) n gt gt comprimento (dados) valores médios (n, 1) gt gt avg (1) dados (1) Gt gt A instrução acima é tudo o que você precisa para garantir a memória anterior gt para valores negativos. Você deve fazer o mesmo para a função gt do filtro, mas não consegui dizer como fazê-lo de uma maneira diferente. Gt gt gt for i 2. n gt gt ao avg (i-1) gt gt avg (i) ao alfa (dados (i) - ao) fim de gt gt gt gt trim trim do período de execução para valores de tempo negativos gt gt Longma longma (lmadays1. End) gt gt Não entendi a instrução acima. O que é longma gt gt gtPara pequenos valores de ndays, o número de dias iniciais em que gt there39s gt gtdiscrepancy com sua implementação de filtro () é mínimo, mas para gt gtlarger valores de ndays, o número de dias iniciais de gt discrepancy cresce gt gt (Obviamente, devido à natureza de um MA exponencial com um gt gtmemory de longa duração). Observe que eu adiciono valores de tempo negativos semelhantes à frente gt do gtvector gt quando também uso gt gtfilter (). Eu não tenho certeza de qual é a convenção quando gt gtcome ao cálculo de médias móveis exponenciais para pontos gt em quotdataquot onde quotndaysquot gt retorna novamente em 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 Email: email escondido 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 encontrei o erro na minha sugestão inicial . 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 é exatamente qual seu código com o loop for, a linha do filtro deve ser : Filtro avg (alfa, 1 alfa-1, dados, dados (1) (1-alfa)). É bastante inícuo porque o termo 1-alfa precisa estar lá, e eu não sei se há muito interesse nisso, mas Não deveria ser tão difícil (provavelmente eu só preciso abrir meus sinais e livros de sistema) para escrever uma função para calcular as condições iniciais que a função de filtro espera apenas dar as saídas e entradas de tempo negativo. Em Thu, 13 de maio de 2018, às 8:38 PM, Tim Rueth lintou o email gt escreveu: A última instrução com longma deve ter lido: avg avg (n1: end) que efetivamente destrói os valores calculados do tempo negativo. Mas, como você diz, parece que não precisava fazer isso porque o histórico foi completamente capturado em dados avg (1) (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 4º parâmetro no filtro () igual ao primeiro ponto de dados. Eu tentei isso e obtive resultados muito semelhantes (mas não exatamente) quando comparados com o loop for abaixo com valores de tempo negativos. Mas essa pequena diferença se dissipou dentro de dias e não é um grande problema. Obrigado Sherman. Em resumo, para calcular a média móvel exponencial dos dados por dias, 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 alpha (data (i) - ao) é próximo, mas não é igual a: alpha 2 (ndays1) filtro avg (alfa, 1 alfa-1, dados, dados (1)) Por aproximadamente os primeiros dias da avg.

No comments:

Post a Comment