Existe uma maneira de prever o valor da função desconhecida com base em seus valores anteriores

StackOverflow https://stackoverflow.com/questions/1150862

  •  18-09-2019
  •  | 
  •  

Pergunta

Eu valores devolvidos pela função desconhecida como por exemplo

# this is an easy case - parabolic function
# but in my case function is realy unknown as it is connected to process execution time
[0, 1, 4, 9]

existe uma maneira de prever próximo valor?

Foi útil?

Solução

Veja também esta questão .

Outras dicas

Não necessariamente. Seu "função parabólica" pode ser implementado como esta:

def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end

Você pode dar um palpite, mas para prever com certeza é impossível.

Você pode tentar usar neural redes abordagem. Há muito muitos artigos que você pode encontrar pelo Google consulta "função de aproximação rede neural". Muitos livros também estão disponíveis, por exemplo, esta .

Se você quer apenas pontos de dados

A extrapolação de dados fora de pontos conhecidos pode ser estimada , mas você precisa aceitar as diferenças de potencial são muito maiores do que com interpolação de dados entre pontos conhecidos. A rigor, ambos podem ser arbitrariamente imprecisas, como a função poderia fazer nenhuma loucura entre os pontos conhecidos, mesmo que seja uma função contínua bem-comportado. E se ele não bem-comportado, todas as apostas já fora ;-p

são

Há uma série de abordagens matemáticas para isso (que têm aplicação directa em ciência da computação) - qualquer coisa de álgebra linear simples de coisas como estrias cúbicos; e tudo mais.

Se você quiser que a função

Obter esotérica; outro modelo interessante aqui é programação genética; pela evolução de uma expressão ao longo dos pontos de dados conhecidos, é possível encontrar uma aproximação adequadamente-fim. Às vezes funciona; às vezes isso não acontece. Não é o idioma que você está procurando, mas Jason Bock mostra algum código C # que faz isso no .NET 3.5, aqui: Evolving LINQ Expressões .

Acontece que eu tenho seu código "a mão" (Eu usei-o em algumas apresentações); com algo como a => a * a ele vai encontrá-lo quase que instantaneamente, mas deve (em teoria) ser capaz de encontrar praticamente qualquer método - mas sem qualquer comprimento prazo máximo definido ;-p Também é possível entrar em um beco sem saída (falando evolutiva) onde você simplesmente nunca se recuperar ...

Sim. Talvez.

Se você tem alguns valores de entrada e saída, ou seja, no seu caso [0,1,2,3] e [0,1,4,9], você poderia usar superfícies de resposta (função basicamente montagem eu acredito) para ' acho que a função real (no seu caso f (x) = x ^ 2). Se você deixar sua função supondo ser f (x) = c1 * x + c2 * x ^ 2 + c3 existem algoritmos que irão determinar que c1 = 0, c2 = 1 e c3 = 0 dado a sua entrada e saída e dada a resultante função que você pode prever o próximo valor.

Note que a maioria das outras respostas a esta pergunta são válidos também. Estou apenas supondo que você quer caber alguma função para dados. Em outras palavras, acho que sua pergunta bastante vaga, por favor, tente colocar suas perguntas o mais completo possível!

Em geral, não ... a menos que você sabe que é uma função de uma forma particular (por exemplo polinômio de algum grau N) e não há informação suficiente para restringir a função.

por exemplo. para um contra-exemplo mais "comum" (ver resposta de Chuck) para que você não pode necessariamente presumir n ^ 2 w / o sabendo que é uma equação quadrática, você poderia ter f (n) = n 4 - 6n 3 + 12n 2 - 6n, que tem para n = 0,1,2,3,4,5 f (n) = 0,1,4,9 , 40145.

Se você sabe que é uma forma particular, há algumas opções ... se o formulário é uma adição linear de funções de base (por exemplo f (x) = a + b cos (x) + c sqrt (x)), em seguida, usando mínimos quadrados você pode obter os coeficientes desconhecidos para o melhor ajuste usando essas funções de base.

Você pode aplicar métodos estatísticos para tentar adivinhar a resposta seguinte, mas que pode não funcionar muito bem se a função é como um presente (c):

int evil(void){
  static int e = 0;
  if(50 == e++){
    e = e * 100;
  }
  return e;
}

Esta função irá retornar agradáveis ??números simples aumentando então ... BAM.

Isso é um problema difícil.

Você deve verificar se o href="http://en.wikipedia.org/wiki/Recurrence_relation" rel="nofollow noreferrer"> recorrência equação relação

scroll top