Um cientista em minha vida
Eu li lá no blog do Kentaro que o meme da semana era "Um Cientista em minha vida", onde deveríamos falar sobre algum cientista que fez a diferença pra você. Como eu adoro constrained writing, resolvi participar (na verdade, eu adoro constrained anything, por isso que vivo criando programas em uma linha, programas que rodam em computadores de 8 bits, e assim por diante).
Eu já falo de cientistas aqui todo o tempo. Olhando no histórico, eu já falei do Knuth, do Erdös, do prof. Routo, do prof. Henrique, e de vários outros. Em comum, todos eles foram cientistas que eu conheci depois de adulto. Achei apropriado então que eu falasse de um cientista que fez a diferença quando eu era criança, e pra isso vamos ter que rebobinar até a década de 80.
Se você perguntar pra alguém sobre revistas de computador na década de 80, invariavelmente irá ouvir sobre a Micro Sistemas ("a primeira revista brasileira sobre microcomputadores"). A Micro Sistemas era muito legal, mas o que eu gostava mesmo era de outra revista, menos conhecida, chamada Microhobby.
A diferença da Micro Sistemas pra Microhobby era mais ou menos a diferença de Informática pra Computação. Na primeira, nós ficávamos encantados com as notícias da maravilhosa terra além da reserva de mercado (onde aprendíamos que a Apple planejava lançar um novo computador chamado McIntosh, que vinha com um periférico estranho e esquisito chamado mouse), enquanto que na segunda aprendíamos a calcular geodésicas e a usar o método de Bolzano para achar raízes de uma equação.
Mas o diferencial mesmo da Microhobby eram as colunas escritas pelo Renato da Silva Oliveira. Uma googlada rápida revela que o Renato é formado em Física, trabalhou nos planetários de São Paulo, Campinas, Vitória e Tatuí, e atualmente trabalha em uma empresa que vende planetários infláveis (how cool is that?!). Mas é claro que eu não sabia disso na época, o que eu sabia era que ele contava historinhas!
Foi lendo as historinhas do Renato que eu descobri que era possível escrever sobre ciência e computação, com clareza e bom humor. Pena que isso ainda não é muito difundido, a julgar pela quantidade de crianças que ainda acham que ciência é uma coisa chata :(
As historinhas que ele escrevia sempre tinham o mesmo formato: um certo sr. Nabor Rosenthal, em suas viagens pelo mundo, deparava-se com alguma situação que sugeria uma análise matemática (os tópicos eram os mais variados e iam de teoria dos grafos até contatos com extraterrestres). Depois de ponderar sobre o problema sem conseguir resolvê-lo, o Nabor tomava uma dose do raro Suco de Ramanujan, que o colocava num transe que ampliava suas capacidades analíticas, e conseguia solucionar o problema.
Mas a coluna sempre acabava antes que o Nabor mostrasse qual a solução! Ao invés disso, o leitor tinha um mês pra conseguir resolver o problema, e só no mês seguinte a solução era apresentada. Na década de 80 ainda não tinha spoj, então as colunas do Renato eram o que bombava pra quem gostava de puzzles computacionais.
Um dos puzzles apresentados foi o segundo puzzle mais difícil da minha vida, eu levei mais de dez anos pra conseguir resolver. Em uma das Microhobby, o Nabor entrou em transe após tomar o Suco de Ramanujan, e durante o transe ele sonhou "com um método para calcular o número pi, usando apenas o gerador de números aleatórios de seu micro" (essa era a época onde o micro mais avançado era o TK-82C, com 2kb de RAM).
Na época eu pensei muito e não consegui solucionar, achando que ia precisar de alguma matemática que eu ainda não tinha aprendido. Eu nunca consegui achar a revista seguinte com a solução, tive que passar pelo primário, pelo colégio técnico, e só no meio da faculdade é que caiu a ficha (e eu percebi que poderia ter solucionado ainda no primário, se tivesse insistido o suficiente :)
O truque é o seguinte: você vai fazer N experimentos, cada um consistindo no sorteio de dois números aleatórios escolhidos uniformemente entre 0 e 1. Se soma dos quadrados dos números for menor ou igual a 1, incremente um contador (digamos, M). Ao final dos experimentos, pi=4*M/N. O script abaixo implementa esse algoritmo:
Script em python para calcular pi usando números aleatórios
O funcionamento é bem simples e baseia-se na figura ao lado. Você começa inscrevendo um quarto de círculo num quadrado de lado 1. Os dois números que você sorteia a cada iteração podem ser interpretados como um ponto dentro do quadrado, e o teste feito é equivalente a testar se o ponto está dentro do círculo ou não. Como a distribuição dos pontos é uniforme, espera-se que a razão M/N seja igual à razão entre as áreas da figura. A área do quadrado é 1, a área do círculo é pi*r2. Como o raio é unitário, então a área do quarto de círculo é pi/4. Isolando pi, chega-se em pi=4*M/N, QED.
A pergunta que deve ser feita ao encontrar qualquer algoritmo novo é: qual é sua complexidade? Infelizmente, esse método aleatório é bem ruim. No fundo, o que estamos fazendo é aproximar pi por uma fração, cujo denominador é N. Então a precisão máxima que podemos obter é 1/N, e se você quer calcular n dígitos de pi, esse método converge, no melhor caso, em O(10n), e na prática em bem menos que isso, porque os seus geradores de números aleatórios não são perfeitamente uniformes.
Eu nunca soube qual o método que o Nabor usou pra calcular o pi. Como ele tinha o Suco de Ramanujan e eu não, espero que tenha sido um método melhor que o meu :)
Marcadores: code, complexidade, math, monte carlo, puzzle, python, retro
17 Comentários:
Eu (minha mãe, na verdade) tinha um TK-90X e lembro de ter visto umas revistas dessas por aqui quando era jovem.
Talvez, se elas tiverem resistido a décadas de umidade e calor natalenses eu tenha essa edição.
O computador eu ainda tenho (e se todos os teclados fossem emborrachados como aquele, talvez minha tendinite não estivesse tão avançada)!
Por Igor Santos, Às 18 de junho de 2008 11:54
No site do datacassete tem um monte de Microhobbys scaneadas, mas justo o número do pi não tem :(
Por ricbit, Às 18 de junho de 2008 12:12
Nunca ouvi falar desta revista. Ela era famosa entre os computeiros da época?
Por Carlos Hotta, Às 18 de junho de 2008 13:57
Ela era razoavelmente conhecida na época dos TKs (por volta de 84). Mas até então computação pessoal era coisa pra engenheiro e filho de engenheiro; a coisa só popularizou mesmo depois do MSX, e nessa época (por volta de 87) a Microhobby já tinha acabado.
Por ricbit, Às 18 de junho de 2008 15:25
Eu tenho aqui em casa algumas Microsistemas e a coleção Input (também tenho essa coleção em PDF).
É *impressionante* como era alta a qualidade dessas revistas de informática na era da 'microinformática'.
Em tempo eu comecei com MSX mas tive acesso à computadores da linha Sinclair e Apple na época.
Uma outra informação: Um dos sócios do Renato Oliveira na AsterDomus é o Pierluigi Piazzi, autor de alguns livros famosos de MSX que foram publicados pela editora Aleph.
Por Osvaldo Santana Neto, Às 18 de junho de 2008 22:37
>na verdade, eu adoro constrained anything
Eu *tento* não ler essa frase com maldade, mas é difícil...
Por Wilerson, Às 19 de junho de 2008 15:04
Oi, tudo bem?
Esse não é o método Monte Carlo? Muito bacana! Isso mostra como, com pouco "poder" computacional, soluções simples aparecem. E realmente a eficácia do método é questionável nesse caso. Por isso ele é usado para obter integrais de funções, entre outras aplicações. Abraços
Por RobsonFrança, Às 20 de junho de 2008 15:50
Ah sim, o mesmo algoritmo pode ter duas interpretações diferentes, a minha interpretação original foi geométrica, mas você também pode interpretar como sendo um estimador monte carlo da integral definida de 0 a 1 da função sqrt(1-x*x). Analiticamente, isso vai dar pi/4 também.
Por ricbit, Às 20 de junho de 2008 16:06
Sempre que explico método de Monte Carlo eu uso uma interpretação geométrica, feito a sua pro Pi: calcular a área de uma ilha (você sorteia pontos no mapa e conta quantos caíram na ilha e quantos caíram na água).
Por muriloq, Às 21 de junho de 2008 10:40
Aqui Pierluigi Piazzi (do MSX e editor da Microhobby) amicíssimo do Renato e íntimo da Dinorah (amiga do Nabor). Existe outro método, usando a função de Gauss (o famoso sino, a função que é a transformada de Fourier de si mesma) mas que falha vergonhosamente com micros normais porque os números gerados não são verdadeiramente aleatórios.
Por PIER, Às 26 de agosto de 2008 20:28
Mês passado eu fui no Exploratorium em San Francisco, e lá tinha um terceiro experimento pra achar o Pi, dessa vez atirando moedas em um grid circular e vendo qual a taxa de moedas que intercepta o grid. Vou tentar reproduzir e postar o resultado :)
Por ricbit, Às 26 de agosto de 2008 21:12
O experimento descrito acima lembra o das agulhas de Buffon...
Por Renato da Silva, Às 28 de agosto de 2008 18:33
Eu tirei uma foto do experimento. O picasa é meio temperamental com links diretos pra fotos, pode ser que ele te leve pra primeira foto do álbum ao invés da foto correta.
Por ricbit, Às 28 de agosto de 2008 18:36
Via a foto do experimento e me parece mesmo uma reprodução mais segura d´"as agulhas de Buffon", tanto que as "moedas" têm uma diâmetro indicado. O link "http://pt.wikipedia.org/wiki/Agulha_de_Buffon" contém informações adicionais.
Por Renato da Silva, Às 29 de agosto de 2008 12:27
O melhor é ver que ainda hoje eu aprendo coisas com vocês :)
Por ricbit, Às 29 de agosto de 2008 13:59
Desculpe comentar num post tão velho, mas eu não posso deixar de observar: sim, você tem razão que você precisa de algo tipo 10^n para que a média tenha n casas decimais de precisão. No entanto, o Teorema Central do Limite diz que a variância cresce com 1/sqrt(n) -- ou seja, se você fizer 10^6 experimentos, a variância é algo da ordem de 10^-3.
Ou seja, mesmo com um milhão de lançamentos, você pode esperar um erro de um milésimo na sua conta. Para calcular π com precisão de n casas decimais, você precisa não de 10^n, mas sim de 10^2n lançamentos!
Por ctgPi, Às 14 de outubro de 2008 00:24
Tem razão, eu não tinha pensado nisso :)
Por ricbit, Às 14 de outubro de 2008 06:22
Postar um comentário
Links para esta postagem:
Criar um link
<< Início