O Lorenz Attractor em RISC OS na Raspberry Pi

Interessado em um novo projeto Raspberry Pi? O atrator de Lorenz praticamente sozinho originou todo um ramo da teoria da ciência do caos. Parece apropriado que um homem que trabalhou por grande parte de sua vida em Cambridge, Massachusetts, ser lembrado por um programa que é executado em um sistema operacional projetado em Cambridge, Inglaterra.

Edward Lorenz estava trabalhando em sistemas para prever o tempo. Ele havia construído um modelo matemático simples de como a atmosfera de convecção devem se comportar. Ele se resumia a um sistema de três equações diferenciais ordinárias. Ele estava usando um dos primeiros computadores da década de 1950 para resolver estas equações por métodos numéricos, porque não há nenhuma maneira analítica para resolvê-los. Isto envolveu repetido cálculos ou iterações de valores, a fim de casa em no resultado. A saída de um conjunto de cálculos foi alimentada para a entrada de um outro. Esta é uma técnica bem conhecida primeira inventado por Isaac Newton-os resultados tanto em casa sobre a resposta correta, ficando menor e menor, ou disparar para o infinito.

O que Lorenz encontrou foi uma classe de equações que nem se deteve sobre um resultado nem desviar para o infinito, mas fez algo entre os dois. Produziu o que parecia ser um resultado de bicicleta com os mesmos valores de repetição num padrão. No entanto, uma inspeção mais minuciosa revelou que, embora os resultados fez ciclo, eles nunca repetido - em outras palavras, eles pedalaram sem fim, mas permaneceu dentro de certos limites. Uma espécie de interminável, nunca repetindo conjunto finito de números.

Este padrão de números consistiu de três valores que mudariam umas em relação às outras. Se você fosse usar esses números para traçar uma posição no espaço tridimensional, eles descrevem uma linha ou órbita que nunca repetiu mas passou para sempre. Esta forma mais tarde foi baptizado um fractal, e esta classe de fractais é conhecido como um atrator estranho. Não importa o que as condições de partida iniciais eram, as equações sempre acabava nesta curva (daí o nome atrator, e porque é uma coisa estranha acontecer, a palavra estranho).

A forma desta curva é um entrançado em forma de oito circuito conhecido como uma curva de borboleta, ou o atractor de Lorenz. Em 1969, Lorenz descreveu o efeito borboleta, que afirma que uma mudança quase insignificante em condições iniciais (como o bater de asas de uma borboleta) poderia causar uma grande mudança no resultado de um sistema iterado.

Tudo o que Lorenz tinha de visualizar seus números com era um teletipo bruto, mas hoje em dia temos computadores de alta velocidade com telas gráficas Lorenz nunca sonhou. É relativamente fácil de ver a sua curva de forma mais detalhada que Lorenz jamais poderia.

image0.jpg

A implementação da linguagem BASIC em RISC OS torna mais fácil escrever um programa para exibir o atrator de Lorenz muito rapidamente e em grande detalhe. Isto é mostrado no seguinte código.

 10: REM O Lorenz Attractor - por Mike Cook20: MODO 2830: CLS: CLG40: PROC_Size50: S = Ymax% / 80: SX = Xmax% / 70: SZ = 260: N% = 70: F% = 0: INC = 4E-370: SX% = Xmax% / 2: SY% = Ymax% / 2: SZ% = 080: X = -6.5: Y = -8,8: Z = 2090: P1 = 10: P2 = 28: P3 = 2,66666100 : 110: REPEAT120: N% = N% + 1130: IF N%> 200 ENTÃO N% = 0: GCOL 0, RND (63) TINT 255140: D1 = P1 * (YX) 150: D2 = P2 * XYX * Z160 : D3 = X * Y-P3 * Z170: X = X + D1 * INC180: Y = Y + D2 * INC190: Z = Z + D3 * INC200: PROC_PLOT (X, Y) 210: TIME = 0220: REPEAT230: ATÉ TIME> 0240: B% = ADVAL (-1) 250: ATÉ B% lt;> 0260: A $ = GET $ 270: SE A $ = "s" ENTÃO * Screensave Attract280: END290: 300: DEF PROC_PLOT (X, Y ) 310: X% = X * SX: Y% = Y * S320: X% = X% + SX%: Y% = Y% + SY% 330: SE F% = 0 depois mover X%, Y% DESENHO MAIS X%, Y% 340: F% = 1: movimento REM apenas o primeiro time350: ENDPROC360: 370: DEF PROC_Size380: SYS "OS_ReadModeVariable", - 1,3 TO ,, Ncolours% 390: SYS "OS_ReadModeVariable", - 1, 4 A ,, xFact% 400: SYS "OS_ReadModeVariable", - 1,5 a ,, yFact% 410: SYS "OS_ReadModeVariable", - 1,11 TO ,, XLim% 420: SYS "OS_ReadModeVariable", - 1,12 TO ,, YLim% 430: Xmax =%% XLim lt;

As posições de partida iniciais são dadas em linha 80, e os parâmetros da equação são dadas em linha 90. O loop principal do programa passa da linha 110 para a linha 280. Isso simplesmente repete até que você pressione qualquer tecla do teclado. Se a tecla pressionada é um S, em seguida, uma cópia do ecrã é feito para guardar uma imagem da tela no formato do sprite. O circuito funciona por linhas 140 a 160 encontrar a diferença de valores a partir do último com a presente iteração. O cálculo iteração é então escalado com a variável INC, que é configurado para ser 0.004 nas linhas 170 a 190, e o número resultante é representada no ecrã. Observe como apenas o x e y Os valores são plotados, dando uma vista olhando para o z-eixo. Você pode alterar as duas variáveis ​​passadas na PROC ENREDO chamar para ser quaisquer dois valores para obter uma visão diferente sobre a curva. Você pode combinar a x, y, e z valores nesta chamada para dar qualquer ângulo de projeção ortográfica, se quiser. Por exemplo, fazendo as seguintes alterações no código vai dar uma vista isométrica da curva:

 42: C1 = 0,707107: C2 = 0,40824143: C3 = 0,816597: = C4 -C2200: PROC_PLOT (C1-C1 * X + Z *, C2 + C3 * X * Y + C4 * Z)

Linhas 210 a 230 simplesmente fazer um intervalo de tempo, tornando-se mais tempo, aumentando o número no final da linha 230 ou eliminá-lo completamente, ignorando estas três linhas.

o ENREDO procedimento em si simplesmente dimensiona os dois pontos e, em seguida, desloca-os para o meio do ecrã. Finalmente, se é a primeira trama do tempo, dá uma mover Comando- caso contrário, ele dá um empate do último comando de ponto de gráficos.

o Tamanho procedimento obtém o tamanho da tela em pixels que o gráfico preenche a tela, e as linhas 120 e 130 adicionar um pouco de variedade, alterando a cor da linha de cada 200 pontos.

menu