O objetivo do desafio é plotar aproximadamente o atrator do mapa logístico em função de seu parâmetro r (também chamado de diagrama de bifurcação ) ou uma sub-região dele. A aparência do gráfico pode ser vista na seguinte imagem da Wikipedia:
fundo
O mapa logístico é uma função matemática que pega uma entrada x k e mapeia para uma saída x k + 1 definida como
x k + 1 = r x k (1− x k )
onde r é o parâmetro do mapa, assumido como estando no intervalo [0, 4].
Dado r em [0,4], e um valor inicial x 0 , no intervalo [0,1], é interessante para aplicar repetidamente a função para um grande número N de iterações, produzindo um valor final x N . Note que x N também estará necessariamente em [0,1].
Como exemplo, considere r = 3,2, N = 1000. O valor inicial x 0 = 0,01 fornece x 1000 = 0,5130. Para x 0 = 0,02, o resultado é x 0 = 0,7995. Para quaisquer outros valores iniciais x 0, os valores finais x 1000 são extremamente próximos de 0,5130 ou 0,7995. Isso é visto no gráfico como a altura das duas linhas na posição horizontal r = 3,2.
Isso não significa que para r = 3,2 cada sequência converja para um desses dois valores. De fato, para os dois valores iniciais considerados acima, as seqüências são (observe o comportamento oscilante):
x 0 = 0,01, ..., x 1000 = 0,5130, x 1001 = 0,7995, x 1002 = 0,5130, ...
x 0 = 0,02, ..., x 1000 = 0,7995, x 1001 = 0,5130, x 1002 = 0,7995 , ...
O que é verdade é que, para N suficientemente grande e para quase todos os valores iniciais x 0 , o termo x N estará próximo de um dos elementos do conjunto {0,5130, 0,7995}. Esse conjunto é chamado de atrator para esse r específico .
Para outros valores do parâmetro r, o tamanho do conjunto de atratores, ou seus elementos, será alterado. O gráfico plota os elementos no atrator para cada r .
O atrator para um r específico pode ser estimado por
- testando uma ampla gama de valores iniciais x 0 ;
- deixando o sistema evoluir para um grande número de N de iterações; e
- tomando nota dos valores finais x N que são obtidos.
O desafio
Entradas
N : número de iterações.
r 1 , r 2 e s . Eles definem o conjunto R de valores de r , ou seja, R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }.
Procedimento
O conjunto X dos valores iniciais x 0 é fixo: X = {0,01, 0,02, ..., 0,99}. Opcionalmente, 0 e 1, podem também ser incluídos em X .
Para cada R , em R e cada x 0 em X , iterar a logística mapa N vezes para produzir x N . Registre as tuplas obtidas ( r , x N ).
Saída
Traçar cada tuplo ( r , x N ) como um ponto no plano com R como eixo horizontal e x N como eixo vertical. A saída deve ser gráfica (não arte ASCII).
Regras adicionais
- O procedimento indicado define o resultado necessário, mas não é imposto. Qualquer outro procedimento que processe o mesmo conjunto de tuplas ( r , x N ) pode ser usado.
- A entrada é flexível, como de costume.
- Erros de ponto flutuante não serão mantidos contra o atendedor.
- A saída gráfica é necessária, em qualquer um dos formatos aceitos . Em particular, a saída pode ser exibida na tela ou um arquivo gráfico pode ser produzido ou uma matriz de valores RGB pode ser impressa. Se estiver produzindo um arquivo ou uma matriz, publique um exemplo da aparência quando exibida.
- Os gráficos podem ser vetoriais ou rasterizados. Para gráficos raster, o tamanho da imagem deve ser de pelo menos 400 × 400 pixels.
- Cada ponto deve ser mostrado como um único pixel ou como uma marca com tamanho da ordem de um pixel (caso contrário, o gráfico fica rapidamente confuso).
- A faixa do eixo deve ser [0,4] para r (eixo horizontal) e [0,1] para x N (eixo vertical); ou pode ser menor, desde que inclua todos os pontos obtidos.
- As escalas de eixo são arbitrárias. Em particular, a escala não precisa ser a mesma para os dois eixos.
- Linhas de grade, rótulos de eixos, cores e elementos semelhantes são aceitáveis, mas não são necessários.
- O menor código em bytes vence.
Casos de teste
Clique em cada imagem para obter uma versão de alta resolução.
N = 1000; r1 = 2.4; r2 = 4; s = 0.001;
N = 2000; r1 = 3.4; r2 = 3.8; s = 0.0002;
N = 10000; r1 = 3.56; r2 = 3.59; s = 0.00002;
Reconhecimento
Obrigado a @FryAmTheEggman e @AndrasDeak por seus comentários úteis enquanto o desafio estava na caixa de areia.