Arranjo Médio Móvel


Seu interior é iterando toda a matriz, então é por isso que você sempre obtém a mesma média (uma para a matriz inteira), você deve iterar de 0 para o número atual do externo para em vez disso. Sua média móvel está sendo atualizada com base em j do seu interior, o que significa que irá anular os valores anteriores de cada novo loop, isso deve estar dentro do exterior para, em vez do interno, usando i como índice. Você está dividindo sumj para calcular médias, cada novo loop interno j você irá dividir por 0 a primeira soma. Eu acredito que você quisesse usar o j1 em vez disso, o índice não é o mesmo que o comprimento atual Dicas para solucionar problemas: Evite usar variáveis ​​para arrays de loop, você deve usar array. length em vez disso. Para uma questão de reproduzir o seu problema, você poderia nos dar o problema isolado em vez do seu código atual. Ou seja: Imagine se o erro está em suas entradas, como podemos acreditar que você realmente as usou, respondidas em 4 de outubro 13 às 20:54 Você está fazendo o loop de todos os dados sempre. Você deve ter para (int j (igtaverageLengthi-averageLength2: 0) jlt iaverageLength2 ampamp jltnumDataPoints j) (ou algo semelhante) para a sua média mais interna. Além disso, moveAverageisumj deve ser modificado para lidar com o caso quando j é 0. Em particular, provavelmente deve ser movingAverageisumaverageLength e deve ser aplicado ao slot movingAveragei fora do loop de média. Respondeu 4 de outubro 13 às 20:42 Na próxima vez, leve os comentários sobre a cessão da questão antes de publicá-la. Mas como você parece muito novo nisso, pense em como você passaria pelos dados, e faria isso. Você deve tentar certificar-se de que cada loop está parando no ponto correto e lembre-se de que se você parar quando não há mais números (como quando você está fazendo o loop interno e você só pode obter mais 3 números em vez de 4) O programa também precisa parar. Verifique se o seu código está a verificar isso. Respondeu 4 de outubro às 20:56 Sem detalhes adicionais, você provavelmente precisa de uma média móvel não ponderada. Em qualquer ponto Ai na matriz de entrada A de comprimento N (com 0ltiltN), isso é simplesmente a média das entradas K anteriores da matriz, até e incluindo Ai. Se não houver valores desse tipo, então, mude os valores (i1) de A0 para Ai. Inclusive. Um pouco de pensamento irá mostrar que você não precisa adicionar todos os valores K sempre. Basta manter a soma e, ao passar para o próximo ponto (esta é uma média móvel), subtrai o valor que está sendo substituído e adiciona o novo valor que irá substituí-lo. (Durante os primeiros pontos K-1, você simplesmente adicionará o novo valor à soma e aumentará seu contador em 1.) Em qualquer ponto desse processo, a média móvel é a soma atual dividida pelo valor atual da contagem. Respondeu 4 de outubro às 21:05 Em uma média móvel, você precisa ter algum tipo de tamanho de janela. O tamanho da sua janela é o comprimento médio, por isso parecerá algo assim: o loop for começa nos dados atuais e volta os pontos de dados da média e adiciona-os. Você só terá uma média móvel quando você tiver quando tiver pontos de dados suficientes e a média será a soma dividida pelo comprimento médio. Nota: Não testado apenas o código sudo, mas essa é a idéia. Respondeu 4 de outubro 13 às 21:05 Sua resposta 2017 Stack Exchange, Inc Eu preciso acompanhar os últimos 7 dias de horas de trabalho em um loop de leitura de arquivo plano. Está sendo usado para medir a fatigabilidade das listas de trabalho. Agora eu tenho algo que funciona, mas parece bastante detalhado e não tenho certeza se há um padrão que é mais sucinto. Atualmente, eu tenho uma classe Java com uma matriz estática para armazenar os últimos dados de x dias, então, ao ler o arquivo, retiro o primeiro elemento e mova os outros 6 (por um total de uma semana) de volta por um. O processamento desta matriz estática é feito em seu próprio método, ou seja. A minha pergunta: esta é uma abordagem de design razoável, ou há algo cegamente óbvio e simples para fazer esta tarefa. Obrigado, eles pediram 30 de agosto 11 às 14:33. Obrigado, pessoal: eu recebi a mensagem: use um objeto de nível superior e explore o Métodos relevantes ou um buffer circular. Excelentes respostas, todas elas. Quando você pensa sobre isso, você sempre precisa ter acesso a toda a matriz para que você possa se livrar daquela primeira entrada - da qual eu não tinha certeza por minha conta. Eu aliviei que eu não tivesse perdido algum liner e estava basicamente em uma faixa razoável, se não eficiente e fácil. Isto é o que eu adoro neste site: respostas de alta qualidade e relevantes de pessoas que conhecem o seu sht. Ndash Pete855217 30 de agosto 11 às 15:05 Por que você inicializa o runningTotal para null O que é seu tipo Onde é declarado Isso faria bem se você colocar alguns exemplos de código que se assemelham ao código Java real. Continuando, minha crítica seria a seguinte: sua função faz demais. Uma função ou método deve ser coeso. Mais apropriadamente, eles devem fazer uma coisa e uma coisa apenas. Pior ainda, o que acontece no seu loop for quando x 5 Você copia runningTotal6 em runningTotal5. Mas então você tem duas cópias do mesmo valor na posição 5 e 6. No seu projeto, sua função movesshuffles os itens em sua matriz calcula o material total de impressões para o erro padrão retorna o total. Faz demais. Minha primeira sugestão não é mover coisas na matriz. Em vez disso, implemente um buffer circular e use-o em vez da matriz. Isso simplificará seu design. A minha segunda sugestão é dividir as coisas em funções que são coesas: tenha uma estrutura de dados (um buffer circular) que lhe permita adicionar a ela (e isso diminui a entrada mais antiga sempre que ela atinja sua capacidade). Interator tem uma função que calcula o total no iterador (você não se importa se você estiver calculando o total de uma matriz, lista ou bufer circular). Não o chame total. Chame isso de soma, que é o que você está informando. Isso é o que eu faço :) Essa é a ótima informação de luis, no entanto, lembre-se de que esta função é uma pequena parte da funcionalidade da classe, e seria um excesso para adicionar muito código para torná-la perfeita. Você é tecnicamente correto, e eu entendo que meu código faz 39 muito muito39, mas, ao mesmo tempo, às vezes é melhor errar ao lado de um código menor e mais claro do que ir para a perfeição. Dadas as minhas habilidades em Java, mesmo fazer o pseudocódigo que você descreve a compilação me faria soprar meu orçamento neste (), mas obrigado pela descrição clara. Ndash Pete855217 31 de agosto 11 às 2:23 Hmmm, não é sobre a perfeição, mas sobre práticas industriais estabelecidas que conhecemos há 3 décadas. O código limpo é sempre um que é particionado. Temos décadas de evidências que indicam que este é o caminho a seguir no caso geral (em termos de custo-eficiência, redução de defeitos, compreensão, etc.). A menos que seja um código descartável por um tipo de coisa única. Nunca é dispendioso fazer isso quando se inicia qualquer análise de problema dessa maneira. Codificação 101, quebra o problema e o código segue, nem excesso nem dificuldade) ndash luis. espinal 31 de agosto 11 às 15:55 Sua tarefa é muito simples e o enfoque que você adotou é certamente bom para o trabalho. No entanto, se você quiser usar um design melhor, você deve se livrar de todo esse movimento numérico, você usa uma fila FIFO e faz bom uso de métodos push e pop, de modo que o código não reflete qualquer movimento de dados, apenas as duas ações de lógica De novos dados e remova dados com mais de 7 dias. Respondeu 30 de agosto 11 às 14: 49traderema a função traderema () não funciona corretamente. Ele calcula apenas a média das entradas do último período. Siga o seguinte código para traderema: função EMACalculator (limite, matriz) EMApreviousday array0 printr (array) multiplicador1 (2limit1) EMAarray () EMA array0 Fechar array1 while (limite) echoEMA é EMAN EMA (Close - EMApreviousday) multiplicador1 EMApreviousday EMApreviousday EMA limit - - retornar EMA onde limite aceitar o período de ema e matriz. Aceite uma série de dados para cálculo de ema.

Comments

Popular Posts