Skip to main content

Matlab Moving Average Sem Laço


Estou tentando concluir um projeto de atribuição Matlab com a seguinte pergunta: Escreva uma função chamada movingaverage que leva um escalar chamado x como um argumento de entrada e retorna um escalar. A função usa um buffer para armazenar entradas anteriores, eo buffer pode conter um máximo de 25 entradas. Especificamente, a função deve salvar as mais recentes 25 entradas em um vetor (o buffer). Cada vez que a função é chamada, ela copia o argumento de entrada para um elemento do buffer. Se já houver 25 entradas armazenadas no buffer, descarta o elemento mais antigo e salva o atual no buffer. Depois de ter armazenado a entrada no buffer, ele retorna a média de todos os elementos no buffer. A solução que eu forneço é a seguinte: De acordo com o auto grader minha função funciona corretamente quando os valores 1-50 estão passando consecutivamente, mas falha quando os valores de uma onda senoidal barulhenta estão passando consecutivamente (o que eu tenho sido informado que pode ser devido a alguns Tipo de um erro de arredondamento). Gostaria de ser grato se algum de vocês pudesse me fornecer algumas dicas sobre os possíveis passos de erro no meu código (anexado acima). Obrigado antecipadamente Preciso calcular uma média móvel em uma série de dados, dentro de um loop for. Eu tenho que obter a média móvel em N9 dias. O array Im computing in é 4 séries de 365 valores (M), que são valores médios de outro conjunto de dados. Eu quero traçar os valores médios dos meus dados com a média móvel em um gráfico. Eu pesquisei um pouco sobre as médias móveis eo comando conv e encontrei algo que eu tentei implementar no meu código. Então, basicamente, eu computo o meu médio e plotá-lo com uma média móvel (errada). Eu escolhi o valor de wts fora do site mathworks, de modo que está incorreto. (Fonte: mathworks. nlhelpeconmoving-average-trend-estimation. html) Meu problema, porém, é que eu não entendo o que este wts é. Alguém poderia explicar Se tem algo a ver com os pesos dos valores: que é inválido neste caso. Todos os valores são ponderados da mesma forma. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com ele Meus mais sinceros agradecimentos. September 23 14 at 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, wts é o quanto você está pesando cada valor (como você adivinhou). A soma desse vetor deve ser sempre igual a um. Se você deseja pesar cada valor uniformemente e fazer um filtro de tamanho N em movimento, então você gostaria de fazer Usando o argumento válido em conv resultará em ter menos valores em Ms do que você tem em M. Use o mesmo se você não se importar com os efeitos de Zero preenchimento. Se você tiver a caixa de ferramentas de processamento de sinal, você pode usar o cconv se quiser experimentar uma média móvel circular. Algo como Você deve ler a documentação conv e cconv para obter mais informações se você já não tem. Download movAv. m (ver também movAv2 - uma versão atualizada permitindo a ponderação) Descrição Matlab inclui funções chamadas movavg e tsmovavg (tempo de série média móvel) no Financial Toolbox, o movAv é projetado para replicar a funcionalidade básica destes. O código aqui fornece um bom exemplo de gerenciamento de índices dentro de loops, o que pode ser confuso para começar. Ive deliberadamente mantido o código curto e simples para manter este processo claro. O movAv executa uma média móvel simples que pode ser usada para recuperar dados ruidosos em algumas situações. Funciona tomando uma média da entrada (y) sobre uma janela de tempo deslizante, cujo tamanho é especificado por n. Quanto maior for n, maior a quantidade de suavização do efeito de n é relativa ao comprimento do vetor de entrada y. E efetivamente (bem, tipo de) cria um filtro de freqüência lowpass - veja a seção de exemplos e considerações. Como a quantidade de suavização fornecida por cada valor de n é relativa ao comprimento do vetor de entrada, sempre vale a pena testar diferentes valores para ver o que é apropriado. Lembre-se também de que n pontos são perdidos em cada média se n é 100, os primeiros 99 pontos do vetor de entrada não contêm dados suficientes para uma média de 100pt. Isto pode ser evitado um pouco empilhando médias, por exemplo, o código eo gráfico abaixo comparam um número de diferentes médias de janela de comprimento. Observe como liso 1010pt é comparado a uma única 20pt média. Em ambos os casos, 20 pontos de dados são perdidos no total. Criar xaxis x1: 0.01: 5 Gerar ruído noiseReps 4 ruído repmat (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) reestruturação de ruído (ruído, 1, X) 10noise (1: length (x)) Médias de Perfrom: y2 movAv (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt (X, y, y2, y3, y4, y5, y6) legenda (dados brutos, média móvel 10pt, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel Y) título (Comparação de médias móveis) movAv. m função de execução do programa movAv (y, n) A primeira linha define o nome das funções, entradas e saídas. A entrada x deve ser um vetor de dados para realizar a média em, n deve ser o número de pontos a executar a média sobre a saída conterá os dados médios retornados pela função. Prealocar a saída outputNaN (1, numel (y)) Encontrar o ponto médio de n midPoint round (n2) O trabalho principal da função é feito no loop for, mas antes de iniciar duas coisas são preparadas. Em primeiro lugar a saída é pré-alocada como NaNs, isso serviu dois propósitos. Em primeiro lugar, a pré-alocação é geralmente uma boa prática, pois reduz a memória que o Matlab tem de fazer, em segundo lugar, torna muito fácil colocar os dados médios em uma saída do mesmo tamanho do vetor de entrada. Isto significa que o mesmo xaxis pode ser usado mais tarde para ambos, o que é conveniente para plotar, alternativamente, os NaNs podem ser removidos mais tarde em uma linha de código (output output (A variável midPoint será usada para alinhar os dados no vetor de saída. N 10, 10 pontos serão perdidos porque, para os primeiros 9 pontos do vetor de entrada, não há dados suficientes para tomar uma média de 10. Como a saída será menor do que a entrada, ele precisa ser alinhado corretamente. Ser usado para que uma quantidade igual de dados seja perdida no início e no fim e a entrada seja mantida alinhada com a saída pelos buffers NaN criados quando a saída de pré-alocação for. Over (a: b) ban Calcular a saída média (amidPoint) mean (y (a: b)) end No loop for, uma média é tomada em cada segmento consecutivo da entrada. Definido como 1 até o comprimento da entrada (y), menos os dados que serão perdidos (n).Se a entrada é 100 pontos lo Ng e n é 10, o ciclo irá decorrer de (a) 1 a 90. Isto significa a proporciona o primeiro índice do segmento a ser calculado a média. O segundo índice (b) é simplesmente an-1. Assim, na primeira iteração, a1. N10. Assim b 11-1 10. A primeira média é tomada sobre y (a: b). Ou x (1:10). A média desse segmento, que é um valor único, é armazenada na saída no índice amidPoint. Ou 156. Na segunda iteração, a2. B 210-1 11. Assim a média é tomada sobre x (2:11) e armazenada na saída (7). Na última iteração do laço para uma entrada de comprimento 100, a91. B 9010-1 100 assim que a média é tomada sobre x (91: 100) e armazenada na saída (95). Isto deixa a saída com um total de n (10) valores de NaN no índice (1: 5) e (96: 100). Exemplos e considerações As médias móveis são úteis em algumas situações, mas nem sempre são a melhor escolha. Aqui estão dois exemplos onde eles não são necessariamente ótimos. Calibração do microfone Este conjunto de dados representa os níveis de cada freqüência produzida por um alto-falante e gravada por um microfone com uma resposta linear conhecida. A saída do alto-falante varia com a freqüência, mas podemos corrigir essa variação com os dados de calibração - a saída pode ser ajustada em nível para ter em conta as flutuações na calibração. Observe que os dados brutos são barulhentos - isso significa que uma pequena mudança de freqüência parece exigir uma grande alteração errática no nível a ser considerado. É este realista Ou é este um produto do ambiente de gravação É razoável, neste caso, para aplicar uma média móvel que suaviza a curva de nível de freqüência para fornecer uma curva de calibração que é ligeiramente menos errático. Mas por que isso não é o ideal neste exemplo? Mais dados seriam melhores - múltiplas calibrações executadas em média destruiriam o ruído no sistema (enquanto o seu aleatório) e fornecessem uma curva com menos detalhes sutis perdidos. A média móvel pode somente aproximar isto, e pode remover alguns mergulhos da freqüência mais elevada e os picos da curva que realmente existem. Seno ondas Usando uma média móvel em ondas senoidal destaca dois pontos: A questão geral de escolher um número razoável de pontos para realizar a média mais. Seu simples, mas há métodos mais eficazes de análise de sinal do que a média dos sinais oscilantes no domínio do tempo. Neste gráfico, a onda sinusoidal original é plotada em azul. O ruído é adicionado e plotado como a curva laranja. Uma média móvel é realizada em números diferentes de pontos para ver se a onda original pode ser recuperada. 5 e 10 pontos fornecem resultados razoáveis, mas não removam o ruído inteiramente, onde como um número maior de pontos começa a perder detalhe de amplitude como a média estende-se sobre fases diferentes (lembre-se que a onda oscila em torno de zero e média (-1 1) 0) . Uma abordagem alternativa seria construir um filtro passa-baixa que possa ser aplicado ao sinal no domínio da frequência. Eu não vou entrar em detalhes, pois vai além do escopo deste artigo, mas como o ruído é consideravelmente maior freqüência do que a freqüência das ondas fundamental, seria bastante fácil, neste caso, para construir um filtro passa-baixa que irá remover a alta freqüência Noise. Exponential Moving Average sem For Loop happydude ltanonymoussehotmailgt escreveu na mensagem lthe1oepfs61fred. mathworksgt. Gt obrigado por isso. Parece bastante próximo, mas ainda pode ser bastante diferente da EMA tradicional como usado em finanças. Gt gt de um número limitado de simulações parece ser bastante diferente do EMA para cerca de 60 datapoints ou assim. Gt gt qualquer idéia por que isso pode acontecer gt gt nb - o EMA tradicional usa um SMA como um valor inicial porque a fórmula EMA pede um valor EMA inicial. Como funciona a função de filtro em torno desta A resposta é que o filtro não obtém em torno dele. Para os primeiros 30 pontos, o filtro desaparecerá da borda principal do vetor todaysClose. Esses valores além da borda são definidos como 0. Isso distorce pelo menos os primeiros 30 pontos de sua EMA. Você pode ver o efeito por ter um preço de fechamento constante. (1: daysBack) nota 1-alfa Filtro EMA (coeficiente, soma (coeficiente)) 1-alfa Filtro EMA (coeficiente, soma (coeficiente) , TodaysClose) parcela (todaysClose) mantenha na parcela (EMA, r) Você poderia pad a borda principal da matriz, replicando o primeiro valor fora daysBack valores e, em seguida, tira-lo. Isso pode ajudar. Assim: todaysClose cumsum (randn (100,1)) diasBack 30 pad repmat (todaysClose (1), daysBack, 1) todaysClose padtodaysFechar alfa 2 (daysBack 1) calcular o coeficiente alfa alfa coeficiente repmat (1-alfa, 1, daysBack). (1: daysBack) nota 1-alpha Filtro EMA (coeficiente, soma (coeficiente), todaysClose) EMA EMA (31: fim) remover o pad pad (todaysClose Dar-lhe um tiro :) Assunto: Exponential Moving Average sem For Loop De: Bwana happydude ltanonymoussehotmailgt escreveu na mensagem lthe3krmglm1fred. mathworksgt. Gt obrigado ill dar-lhe um tiro :) Assunto: Exponential Moving Average sem For Loop De: david Bwana ltbwana. mukubwagmailgt escreveu na mensagem lti1fpb3noh1fred. mathworksgt. Gt happydude ltanonymoussehotmailgt escreveu na mensagem lthe3krmglm1fred. mathworksgt. Gt gt obrigado ill dar-lhe um tiro :) gt gt todos construídos em: mathworksaccesshelpdeskhelptoolboxfinancetsmovavg. html Alguém sabe por que a função de filtro descrito acima dá uma saída diferente para o construído na função movavg On Mar 15, 4:50 am, david ltdavidtr . Gmailgt escreveu: gt Bwana ltbwana. muku. Gmailgt escreveu na mensagem lti1fpb3no. Fred. mathworksgt. Gt gt happydude ltanonymou. Hotmailgt escreveu na mensagem lthe3krmgl. Fred. mathworksgt. Gt gt gt obrigado mal dar-lhe um tiro :) gt gt gt todos construídos em: mathworksaccesshelpdeskhelptoolboxfinancetsmovav. Gt gt Alguém sabe por que a função de filtro descrita acima dá uma saída diferente para o construído na função movavg Meu palpite é que o seu porque youve parafusado. Mas você não nos mostrou seu código, então como podemos saber Olá, o segundo parâmetro da função de filtro deve ser (1alpha-1) em vez de soma (coeficiente) talvez Se você expandir a fórmula recursiva da EMA, você verá que prazo. P. S. (1alfa-1) é o valor ao qual a soma do coeficiente converge. Por que usar um valor aproximado em vez do direito Ou eu estou faltando alguma coisa Matthew Whitaker ltmattlwhitakerREMOVEgmailgt escreveu na mensagem lthdv98tdcd1fred. mathworksgt. Gt tente este código: gt todaysFechar cumsum (randn (100,1)) gt diasBack 30 gt alfa 2 (daysBack 1) calcular o fator de alisamento gt alfa coeficiente repmat (1-alfa, 1, daysBack) nota 1 - alpha gt filtro EMA (coeficiente, soma (coeficiente), todaysClose) gt parcela (todaysClose) gt manter em gt parcela (EMA, r) gt gt Espero que isso ajuda gt Matt W gt gt gt gt gt happydude ltanonymoussehotmailgt escreveu na mensagem lthdv3c35um1fred. Mathworksgt. Gt gt Olá, eu estou tentando encontrar o rolling EMA de 30 dias para uma série de tempo sem usar um loop for (eu tenho um monte de dados). Gt gt gt gt Como um exampletest isso é algo como o que eu quero (abaixo), mas estou encontrando que o meu resultado final não é realmente perto de como ele deve olhar. Quando eu colocá-lo em conjunto no Excel ou com um para loop que sai corretamente, mas estou no escuro, se eu isso está usando filtro corretamente abaixo. Gt gt gt gt Alguém pode ajudar gt gt gt gt todaysFechar cumsum (randn (100,1)) gt gt diasBack 30 gt gt alfa 2 (daysBack 1) calcular o fator de alisamento alfa gt gt gt gt preparar um coeficiente para a função de filtro gt gt Coeficiente coeficiente (coeficiente) gt gt gt gt Filtro EMA (coeficiente, 1, todaysClose) gt gt gt gt gt gt gt este foi um dos postos I Observava-se groups. googlegroupcomp. soft-sys. matlabtreebrowsefrmthread7b5c0b3146432dd958e9d04b885a576arnum11donegroupcomp. soft-sys. matlabbrowsefrmthread7b5c0b3146432dd948bdf7f81cd8f1973Ftvc3D126doca1c5b8de7a7c428a gt gt gt gt isto é também onde I tem o filtro acima gt código gt groups. googlegroupcomp. soft-sys. matlabbrowsethreadthread1d8d10d5b835550dtvc2qexponentialmovingaveragefilter happydude Escreveu na mensagem lthdv3c35um1fred. mathworksgt. Gt Olá, eu estou tentando encontrar o rolling EMA de 30 dias para uma série de tempo sem usar um loop for (eu tenho um monte de dados). Gt gt Como um exampletest isso é algo como o que eu quero (abaixo), mas estou encontrando que o meu resultado final não é realmente perto de como ele deve olhar. Quando eu colocá-lo em conjunto no Excel ou com um para loop que sai corretamente, mas estou no escuro, se eu isso está usando filtro corretamente abaixo. Gt gt Alguém pode ajudar gt gt todaysFechar cumsum (randn (100,1)) gt diasBack 30 gt alfa 2 (daysBack 1) calcular o fator de suavização alfa gt gt preparar um coeficiente para a função de filtro gt coeficiente repmat (alfa, 1, daysBack) (Coeficiente 1: dias) gt coeficiente coeficiente (coeficiente) gt gt filtro EMA (coeficiente, 1, todaysClose) gt gt gt PS este foi um dos postos I Observava-se groups. googlegroupcomp. soft-sys. matlabtreebrowsefrmthread7b5c0b3146432dd958e9d04b885a576arnum11donegroupcomp. soft-sys. matlabbrowsefrmthread7b5c0b3146432dd948bdf7f81cd8f1973Ftvc3D126doca1c5b8de7a7c428a gt gt isto é também onde I tem a gt código filtro groups. googlegroupcomp. soft-sys. matlabbrowsethreadthread1d8d10d5b835550dtvc2qexponentialmovingaveragefilter Observe acima que os coeficientes Dados do passado não estão certos. A fórmula é: Preço (t) alfaPreço (t-1) alfa (1-alfa) Preço (t-2) alfa (1-alfa) 2. (1-N).repmat (k, 1, N) 1 O que é uma lista de observação Você pode pensar em Sua lista de observação como segmentos que você tem marcado. Você pode adicionar tags, autores, threads e até mesmo resultados de pesquisa à sua lista de observação. Desta forma, você pode facilmente acompanhar os tópicos que você está interessado polegadas Para ver a sua lista de observação, clique no link quotMas newsreaderquot. Para adicionar itens à sua lista de observação, clique no link quotadd para assistir listquot na parte inferior de qualquer página. Como adicionar um item à minha lista de observação Para adicionar critérios de pesquisa à sua lista de observação, pesquise o termo desejado na caixa de pesquisa. Clique no botão quotAdicionar esta pesquisa ao meu link de listagem de visualizações na página de resultados de pesquisa. Você também pode adicionar uma tag à sua lista de observação procurando a tag com a diretiva quottag: tagnamequot onde tagname é o nome da tag que você gostaria de assistir. Para adicionar um autor à sua lista de observação, acesse a página de perfil dos autores e clique no botão quotAdicionar este autor ao meu link de lista de atalhos na parte superior da página. Você também pode adicionar um autor à sua lista de observação, indo a um tópico que o autor postou e clicando no quotAdicionar este autor ao meu link listquot do relógio. Você será notificado sempre que o autor fizer um post. Para adicionar um tópico à sua lista de observação, vá para a página do tópico e clique no link quotAdicionar este tópico ao meu link de lista de observações na parte superior da página. Sobre Newsgroups, Newsreaders e MATLAB Central O que são newsgroups Os newsgroups são um fórum mundial aberto a todos. Os newsgroups são usados ​​para discutir uma enorme variedade de tópicos, fazer anúncios e trocar arquivos. As discussões são encadeadas ou agrupadas de forma a permitir que você leia uma mensagem postada e todas as suas respostas em ordem cronológica. Isto torna mais fácil seguir o fio da conversa e ver whatrsquos já foi dito antes de postar sua própria resposta ou fazer uma nova postagem. O conteúdo do grupo de notícias é distribuído por servidores hospedados por várias organizações na Internet. As mensagens são trocadas e gerenciadas usando protocolos de padrão aberto. Nenhuma entidade única ldquoownsrdquo os newsgroups. Existem milhares de newsgroups, cada um abordando um único tópico ou área de interesse. O MATLAB Central Newsreader publica e exibe mensagens no newsgroup comp. soft-sys. matlab. Como posso ler ou publicar nos newsgroups Você pode usar o newsreader integrado no site da MATLAB Central para ler e publicar mensagens neste newsgroup. MATLAB Central é hospedado por MathWorks. As mensagens enviadas através do Central Newsreader MATLAB são vistas por todos os grupos de notícias, independentemente de como eles acessam os grupos de notícias. Há várias vantagens em usar o MATLAB Central. Uma conta A sua conta MATLAB Central está ligada à sua conta MathWorks para fácil acesso. Use o endereço de e-mail da sua escolha O MATLAB Central Newsreader permite que você defina um endereço de e-mail alternativo como seu endereço de postagem, evitando a confusão em sua caixa de correio principal e reduzindo o spam. Controle de Spam A maioria do spam do newsgroup é filtrada para fora pelo newsreader central de MATLAB. Marcação As mensagens podem ser marcadas com um rótulo relevante por qualquer usuário conectado. As tags podem ser usadas como palavras-chave para encontrar determinados arquivos de interesse ou como uma maneira de categorizar suas postagens marcadas. Você pode optar por permitir que outras pessoas visualizem suas tags e você pode exibir ou pesquisar outras tags, assim como as da comunidade em geral. Tagging fornece uma maneira de ver tanto as grandes tendências e as menores, mais obscuros idéias e aplicações. Listas de vigilância A configuração de listas de observação permite que você seja notificado das atualizações feitas nos lançamentos selecionados por autor, segmento ou qualquer variável de pesquisa. As notificações da sua lista de observação podem ser enviadas por email (resumo diário ou imediato), exibidas em Meu leitor de notícias ou enviadas via feed RSS. Outras formas de aceder aos newsgroups Utilize um leitor de notícias através da sua escola, entidade patronal ou fornecedor de serviços Internet Pagar o acesso a grupos de notícias de um fornecedor comercial Utilizar Grupos do Google Mathforum. org fornece um leitor de notícias com acesso ao grupo de notícias comp. soft sys. matlab Execute o seu próprio servidor. Para obter instruções típicas, consulte: slyckng. phppage2 Selecione seu país

Comments

Popular posts from this blog

Fx Opções Gráficos

Euro Currency Options. Real-Time After Hours Pré-Mercado News. Flash Quote Resumo Citação Interactive Gráficos Default Setting. Por favor, note que uma vez que você faça a sua seleção, ele se aplicará a todas as futuras visitas a If, a qualquer momento, você está interessado em Retornando às nossas configurações padrão, selecione Configuração Padrão acima. Se você tiver dúvidas ou tiver problemas na alteração das configurações padrão, envie um e-mail. Confirme sua seleção. Você selecionou para alterar sua configuração padrão para a Pesquisa de Cotações. Ser sua página de destino padrão a menos que você altere sua configuração novamente ou exclua seus cookies Tem certeza de que deseja alterar suas configurações. Temos um favor a pedir. Desative o bloqueador de anúncios ou atualize suas configurações para garantir que o javascript e os cookies estejam Habilitado, de modo que nós podemos continuar a fornecê-lo com as notícias e os dados first-rate do mercado que você veio esperar de us. G...