Wednesday 9 August 2017

Média Móvel Matlab Sem Loop


Estou tentando completar um projeto de atribuição matlab com a seguinte pergunta: Escreva uma função chamada motionaverage que leva um escalar chamado x como um argumento de entrada e retorna um escalar. A função usa um buffer para armazenar as entradas anteriores e o buffer pode conter no máximo 25 entradas. Especificamente, a função deve salvar as 25 entradas mais recentes em um vetor (o buffer). Cada vez que a função é chamada, ele copia o argumento de entrada em um elemento do buffer. Se já houver 25 entradas armazenadas no buffer, ele descarta o elemento mais antigo e salva o atual no buffer. Depois de armazenar 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 a graduação automática, minha função funciona corretamente quando os valores 1-50 estão passando consecutivamente, mas falham quando os valores de uma onda sinusoidal barulhenta estão passando consecutivamente (o que foi informado que pode ser devido a alguns Tipo de erro de redondeamento). Eu ficaria grato se algum de vocês pudesse me fornecer algumas dicas sobre as possíveis etapas de erro no meu código (anexado acima). Obrigado com antecedência. 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. A matriz de computação é uma série de 365 valores (M), que em si 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 gritei um pouco sobre as médias móveis e o comando conv e encontrei algo que eu tentei implementar no meu código .: então, basicamente, eu calculo o meu significado e traço-o com uma média móvel (errada). Eu escolhi o valor de Wts diretamente do site Mathworks, então isso é incorreto. (Fonte: mathworks. nlhelpeconmoving-average-trend-estimate. html) Meu problema, porém, é que eu não entendo o que é isso. Alguém poderia explicar Se isso tem algo a ver com os pesos dos valores: isso é inválido neste caso. Todos os valores são ponderados o mesmo. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com isso, meus mais sinceros agradecimentos. Perguntou 23 de setembro 14 às 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, é o quanto você está pesando cada valor (como você adivinhou). A soma desse vetor deve ser sempre igual a uma. Se você deseja pesar cada valor de forma uniforme e fazer um tamanho N, mover o filtro, então você gostaria de fazer. Usando o argumento válido em conv resultaria em ter menos valores na Ms do que 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ê não tiver havido. A média móvel expressa sem o Loop happydude ltanonymoussehotmailgt escreveu na mensagem lthe1oepfs61fred. mathworksgt. Obrigado por isso. Parece bastante fechado, mas ainda pode ser bastante diferente do EMA tradicional, como usado em finanças. Gt gt de um número limitado de simulações, parece ser bastante diferente da EMA por cerca de 60 pontos de dados ou assim. Gt gt quaisquer idéias por que isso pode acontecer gt gt nb - o EMA tradicional usa um SMA como um valor inicial porque a fórmula EMA exige um valor EMA inicial. Como a função Filtrar contornar isso. A resposta é que o filtro não o contorna. Para os primeiros 30 pontos, o filtro irá sair da borda principal do vetor de hoje fechado. Esses valores após a borda estão definidos para 0. Isso distorcerá pelo menos os primeiros 30 pontos do seu EMA. Você pode ver o efeito ao ter um preço de fechamento constante. De momento, alguns deles (100,1) 100 diasBack 30 alpha 2 (daysBack 1) calculam coeficiente de alisamento coeficiente alfa repmat (1-alpha, 1, daysBack). (1: daysBack) nota 1-alfa filtro EMA (coeficiente, soma (coeficiente) , Em seguida fechar) trama (fecho de hoje) segurar o enredo (EMA, r) Você poderia substituir a borda principal da matriz replicando o primeiro valor para fora dos valores do daysBack e, em seguida, tire-o. Isso pode ajudar. Então: todaysClose cumsum (randn (100,1)) daysBack 30 pad repmat (todaysClose (1), daysBack, 1) todaysClose padtodaysClose alpha 2 (daysBack 1) calcular coeficiente de alívio coeficiente alfa repmat (1-alpha, 1, daysBack). (1: daysBack) nota 1-alfa Filtro EMA (coeficiente, soma (coeficiente), hoje fechado) EMA EMA (31: fim) remove a trama da almofada (fecho de hoje (31: fim)) espera na trama (EMA, r) Dê um tiro :) Assunto: Exponencial Moving Average without For Loop From: Bwana happydude ltanonymoussehotmailgt escreveu na mensagem lthe3krmglm1fred. mathworksgt. Gt obrigado, dê um tiro :) Assunto: Exponential Moving Average without For Loop From: david Bwana ltbwana. mukubwagmailgt escreveu na mensagem lti1fpb3noh1fred. mathworksgt. Gt happydude ltanonymoussehotmailgt escreveu na mensagem lthe3krmglm1fred. mathworksgt. Gt gt obrigado, dê um tiro :) gt gt tudo construído: mathworksaccesshelpdeskhelptoolboxfinancetsmovavg. html Alguém sabe por que a função de filtro descrita acima dá uma saída diferente da função de movimentação incorporada. Em 15 de março, 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 thanks, dê um tiro :) gt gt gt gt tudo incluído: mathworksaccesshelpdeskhelptoolboxfinancetsmovav. Gt gt Alguém sabe por que a função de filtro descrita acima dá uma saída diferente da função de movimento incorporada. Meu palpite é que é porque você está ferrado. 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 somar (coeficiente) talvez Se você expandir a fórmula recursiva da EMA, você encontrará 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 estou faltando algo Matthew Whitaker ltmattlwhitakerREMOVEgmailgt escreveu na mensagem lthdv98tdcd1fred. mathworksgt. Gt tente este código: gt todaysFechar cumsum (randn (100,1)) gt daysBack 30 gt alpha 2 (daysBack 1) calcular o factor de alisamento alpha gt coeficiente repmat (1-alpha, 1, daysBack). (1: daysBack) nota 1 - alpha gt EMA filtro (coeficiente, soma (coeficiente), hoje fechado) gt trama (hoje fechado) gt espera no gt trama (EMA, r) gt gt Espero que isso ajude gt gt gt gt gt gt happydude ltanonymoussehotmailgt escreveu na mensagem lthdv3c35um1fred. Mathworksgt. Gt gt Olá, estou tentando encontrar o EMA de 30 dias para uma série de tempo sem usar um loop for (eu tenho muitos dados). Como exemplo, isto é algo como o que eu quero (abaixo), mas estou descobrindo que o meu resultado final não é muito próximo de como ele deveria procurar. Quando eu coloquem isso no Excel ou com um loop for, ele aparece corretamente, mas estou no escuro se eu estiver usando o filtro corretamente abaixo. Gt gt gt gt Alguém pode ajudar gt gt gt gt todaysFechar cumsum (randn (100,1)) gt gt daysBack 30 gt gt alpha 2 (daysBack 1) calcular o factor de suavização alpha gt gt gt gt preparar um coeficiente para a função de filtro gt gt Coeficiente repmat (alpha, 1, daysBack). (1: daysBack) gt gt coeficiente coeficiente (coeficiente) gt gt gt gt EMA filtro (coeficiente, 1, hoje fechado) gt gt gt gt gt PS 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á, estou tentando encontrar o EMA de 30 dias para uma série de tempo sem usar um loop for (eu tenho muitos dados). Como exemplo, isso é algo como o que eu quero (abaixo), mas estou descobrindo que meu resultado final não é muito próximo de como ele deveria procurar. Quando eu coloquem isso no Excel ou com um loop for, ele aparece corretamente, mas estou no escuro se eu estiver usando o filtro corretamente abaixo. Gt gt Alguém pode ajudar gt gt todaysFechar cumsum (randn (100,1)) gt daysBack 30 gt alpha 2 (daysBack 1) calcular o factor de suavização alpha gt gt preparar um coeficiente para a função de filtro gt coeficiente repmat (alpha, 1, daysBack) . (1: daysBack) gt coeficiente coeficiente (coeficiente) gt gt EMA filtro (coeficiente, 1, hoje fechado) 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 Para dados anteriores 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. Preço (t-daysBack) (1-alpha) daysBack coefficient1 repmat ((1-k), 1, N). (1: N).repmat (k, 1, N) 1 O que é uma lista de observação Você pode pensar Sua lista de observação como tópicos que você marcou. Você pode adicionar tags, autores, tópicos e até resultados de pesquisa à sua lista de exibição. Desta forma, você pode facilmente acompanhar os tópicos em que você está interessado. Para ver sua lista de observação, clique no link QuotMy Newsreaderquot. Para adicionar itens à sua lista de exibição, clique no link quotadd para assistir listquot na parte inferior de qualquer página. Como adiciono um item à minha lista de exibição Para adicionar critérios de pesquisa à sua lista de vigilância, procure o termo desejado na caixa de pesquisa. Clique no quot. Adicione esta pesquisa ao link da minha lista de vigilância na página de resultados da pesquisa. Você também pode adicionar uma tag à sua lista de observação procurando a tag com a quottag da diretiva: tagnamequot onde tagname é o nome da tag que você gostaria de assistir. Para adicionar um autor à sua lista de observação, vá para a página de perfil dos autores e clique no quot. Adicione este autor ao meu link de lista de exibição no topo da página. Você também pode adicionar um autor à sua lista de observação, indo para um tópico que o autor postou e clicando no quot. Adicione este autor ao meu link de lista de exibição. Você será notificado sempre que o autor fizer uma postagem. Para adicionar um tópico à sua lista de observação, vá para a página de discussão e clique no botão. Adicione este tópico ao meu link de lista de exibição no topo 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. Grupos de notícias são usados ​​para discutir uma grande variedade de tópicos, fazer anúncios e trocar arquivos. As discussões são enfiadas ou agrupadas de forma a que você possa ler uma mensagem postada e todas as suas respostas em ordem cronológica. Isso facilita o acompanhamento do tópico da conversa, e para ver o que já foi dito antes de publicar 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 única entidade ldquoownsrdquo os newsgroups. Existem milhares de grupos de notícias, cada um abordando um único tópico ou área de interesse. O MATLAB Central Newsreader publica e exibe mensagens no grupo de notícias comp. soft-sys. matlab. Como leio ou publico nos newsgroup Você pode usar o leitor de notícias integrado no site do MATLAB Central para ler e publicar mensagens neste newsgroup. MATLAB Central é hospedado por MathWorks. As mensagens postadas no MATLAB Central Newsreader são vistas por todos usando os grupos de notícias, independentemente de como eles acessam os newsgroup. Existem várias vantagens em usar o MATLAB Central. Uma Conta Sua conta do MATLAB Central está vinculada à sua Conta MathWorks para acesso fácil. Use o endereço de e-mail de 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 desordem na sua caixa de correio principal e reduzindo o spam. Controle de spam A maioria dos spam de newsgroup é filtrada pelo MATLAB Central Newsreader. As mensagens de marcação podem ser marcadas com um rótulo relevante por qualquer usuário conectado. As tags podem ser usadas como palavras-chave para encontrar arquivos específicos de interesse, ou como uma maneira de categorizar suas postagens marcadas. Você pode optar por permitir que outras pessoas vejam suas tags, e você pode visualizar ou pesquisar outras marcas de tag, bem como as da comunidade em geral. A marcação fornece uma maneira de ver as grandes tendências e as idéias e aplicações menores e mais obscuras. Watch lists A configuração de listas de vigilância permite que você seja notificado das atualizações feitas nas postagens selecionadas pelo autor, thread ou qualquer variável de pesquisa. As notificações da lista de vigilância podem ser enviadas por e-mail (resumo diário ou imediato), exibidas em Meu leitor de notícias ou enviadas via feed RSS. Outras formas de acessar os newsgroups Use um leitor de notícias através de sua escola, empregador ou provedor de serviços de internet Pague pelo acesso de grupo de notícias de um fornecedor comercial Use o Google Groups Mathforum. org fornece um leitor de notícias com acesso ao grupo de discussão comp. soft sys. matlab Execute o seu próprio servidor. Para instruções típicas, veja: slyckng. phppage2 Selecione seu país

No comments:

Post a Comment