Esse desafio é escrever um código rápido que possa executar uma soma infinita difícil computacionalmente.
Entrada
Uma matriz nby com entradas inteiras menores que no valor absoluto. Ao testar, fico feliz em fornecer informações ao seu código em qualquer formato que ele deseje. O padrão será uma linha por linha da matriz, espaço separado e fornecido na entrada padrão.nP100
Pserá definido positivamente, o que implica que será sempre simétrico. Fora isso, você realmente não precisa saber o que significa positivo definitivo para responder ao desafio. No entanto, isso significa que realmente haverá uma resposta para a soma definida abaixo.
No entanto, você precisa saber o que é um produto de vetor de matriz .
Saída
Seu código deve calcular a soma infinita:
para mais ou menos 0,0001 da resposta correta. Aqui Zestá o conjunto de números inteiros e Z^ntodos os vetores possíveis com nelementos inteiros e eé a famosa constante matemática que é aproximadamente igual a 2,71828. Observe que o valor no expoente é simplesmente um número. Veja abaixo um exemplo explícito.
Como isso se relaciona com a função Riemann Theta?
Na notação deste artigo sobre a aproximação da função Riemann Theta , estamos tentando calcular
. Nosso problema é um caso especial por pelo menos duas razões.
- Definimos o parâmetro inicial chamado
zno artigo vinculado como 0. - Criamos a matriz de
Pmaneira que o tamanho mínimo de um valor próprio seja1. (Veja abaixo como a matriz é criada.)
Exemplos
P = [[ 5., 2., 0., 0.],
[ 2., 5., 2., -2.],
[ 0., 2., 5., 0.],
[ 0., -2., 0., 5.]]
Output: 1.07551411208
Mais detalhadamente, vamos ver apenas um termo na soma deste P. Tomemos, por exemplo, apenas um termo na soma:
e x^T P x = 30. Observe que isso e^(-30)é sobre 10^(-14)e, portanto, é improvável que seja importante para obter a resposta correta até a tolerância especificada. Lembre-se de que a soma infinita realmente usará todo vetor possível de comprimento 4 onde os elementos são inteiros. Eu apenas escolhi um para dar um exemplo explícito.
P = [[ 5., 2., 2., 2.],
[ 2., 5., 4., 4.],
[ 2., 4., 5., 4.],
[ 2., 4., 4., 5.]]
Output = 1.91841190706
P = [[ 6., -3., 3., -3., 3.],
[-3., 6., -5., 5., -5.],
[ 3., -5., 6., -5., 5.],
[-3., 5., -5., 6., -5.],
[ 3., -5., 5., -5., 6.]]
Output = 2.87091065342
P = [[6., -1., -3., 1., 3., -1., -3., 1., 3.],
[-1., 6., -1., -5., 1., 5., -1., -5., 1.],
[-3., -1., 6., 1., -5., -1., 5., 1., -5.],
[1., -5., 1., 6., -1., -5., 1., 5., -1.],
[3., 1., -5., -1., 6., 1., -5., -1., 5.],
[-1., 5., -1., -5., 1., 6., -1., -5., 1.],
[-3., -1., 5., 1., -5., -1., 6., 1., -5.],
[1., -5., 1., 5., -1., -5., 1., 6., -1.],
[3., 1., -5., -1., 5., 1., -5., -1., 6.]]
Output: 8.1443647932
P = [[ 7., 2., 0., 0., 6., 2., 0., 0., 6.],
[ 2., 7., 0., 0., 2., 6., 0., 0., 2.],
[ 0., 0., 7., -2., 0., 0., 6., -2., 0.],
[ 0., 0., -2., 7., 0., 0., -2., 6., 0.],
[ 6., 2., 0., 0., 7., 2., 0., 0., 6.],
[ 2., 6., 0., 0., 2., 7., 0., 0., 2.],
[ 0., 0., 6., -2., 0., 0., 7., -2., 0.],
[ 0., 0., -2., 6., 0., 0., -2., 7., 0.],
[ 6., 2., 0., 0., 6., 2., 0., 0., 7.]]
Output = 3.80639191181
Ponto
Vou testar seu código em matrizes P escolhidas aleatoriamente de tamanho crescente.
Sua pontuação é simplesmente a maior npara a qual eu recebo uma resposta correta em menos de 30 segundos quando a média é superior a 5 execuções com matrizes Pdesse tamanho escolhidas aleatoriamente .
Que tal uma gravata?
Se houver empate, o vencedor será aquele cujo código executar mais rápido, em média, em 5 corridas. Caso esses horários também sejam iguais, o vencedor é a primeira resposta.
Como a entrada aleatória será criada?
- Seja M uma matriz aleatória de m por n com m <= n e entradas -1 ou 1. Em Python / numpy
M = np.random.choice([0,1], size = (m,n))*2-1. Na prática, vou começarma discutirn/2. - Seja P a matriz de identidade + M ^ T M. Em Python / numpy
P =np.identity(n)+np.dot(M.T,M). Agora temos a garantia de quePé definitivo positivo e as entradas estão em um intervalo adequado.
Observe que isso significa que todos os autovalores de P são pelo menos 1, tornando o problema potencialmente mais fácil do que o problema geral de aproximação da função Riemann Theta.
Línguas e bibliotecas
Você pode usar qualquer idioma ou biblioteca que desejar. No entanto, para fins de pontuação, executarei seu código na minha máquina, portanto, forneça instruções claras sobre como executá-lo no Ubuntu.
Minha máquina Os horários serão executados na minha máquina. Esta é uma instalação padrão do Ubuntu em um processador de 8 GB AMD FX-8350 de oito núcleos. Isso também significa que eu preciso poder executar seu código.
Respostas principais
n = 47em C ++ por Ton Hospeln = 8em Python por Maltysen
xde [-1,0,2,1]. Você pode elaborar sobre isso? (Dica: Eu não sou um guru matemática)

