Arquivo

Arquivo do Autor

Space Oddity com o Comandante Chris Hadfield

terça-feira, 14 maio 2013; \20\America/New_York\America/New_York\k 20 1 comentário

Apenas tentem assistir a esse vídeo sem se emocionar.

Categorias:Ars Physica

Extendendo Python com C/C++ via PyBindGen e CTypes

sábado, 5 nov 2011; \44\America/New_York\America/New_York\k 44 6 comentários

Depois de um tempo sem postar no Ars Physica vim postar sobre algo totalmente diferente do que eu costumo escrever por aqui: programação. Como grande parte dos físicos hoje em dia, meu dia-a-dia consiste em grande parte em escrever programas de computador para resolver problemas e fazer cálculos. Todo começo de projeto de programação impõe um dilema para quem vai dedicar as próximas semanas (ou meses, anos…) escrevendo uma nova ferramenta: que linguagem de programação usar? Eu escolhi a combinação de C/C++ e Python.

As razões para essa escolha são muitas: Python é uma linguagem bastante simples, que permite prototipagem rápida e desenvolvimento de soluções com pouca dor de cabeça, e com uma ampla gama de módulos e bibliotecas prontas para os mais diversos fins (numpy, scipy, matplotlib, entre centenas de outras…). Entretanto código escrito puramente em Python é extremamente lento, por diversas razões. Isso faz com que não seja possível escrever uma simulação em python puro se pretende-se ter resultado em um tempo razoável. O ideal portanto é usar como cavalo de carga uma outra linguagem, que seja capaz de produzir binários eficientes, que rodem rápido no seu computador. Essa linguagem deve ser usada nas partes onde eficiência e tempo de execução são críticos, enquanto o Python pode ser usado para lidar com partes que geralmente são chatas de se fazer nessas linguagens de mais baixo nível: lidar com strings, arquivos, operações de sistema, geração de código, parsing,…

Como exemplo, no meu atual projeto no doutorado eu uso C/C++ para fazer uma simulação de Monte Carlo, e o Python para organizar as simulações, rodar a simulação para diversos valores de parâmetros diferentes, salvar os resultados em arquivos organizadinhos, enviar os processos para rodar nos diversos nós do cluster do departamento, etc.

Existem dezenas de formas de integrar Python com outras linguagens, de C/C++ e Fortran até Haskell e Emacs Lisp. Entretanto até hoje eu usava a mais boba: compilava um programa em C ou C++ que aceitava parâmetros de linha de comando, e de dentro do código do python abria um pipe para chamar o executável C com os parâmetros adequados com uma chamada de sistema. É uma gambiarra que funciona, mas não deixa de ser uma gambiarra. O ideal é compilar o seu código como uma biblioteca compartilhada que exporta objetos que o interpretador do Python consegue ler. A forma padrão de fazer isso é importar o cabeçalho ‘Python.h’ e usar o API contido lá para criar esses objetos. Isso não é exatamente difícil de fazer, mas é um trabalho sacal e bem repetitivo. É bom ter formas de automatizar esse trabalho e apenas se preocupar em escrever bem seu código em C, sem se preocupar se ele vai ser ou não carregado no python depois.

CTypes

Se o seu código é em C (e não C++) a maneira mais fácil de fazer isso é usando o CTypes – um módulo presente na biblioteca padrão do Python capaz de carregar bibliotecas compartilhadas feitas em C. Por exemplo, suponha que você deseja criar uma função que some dois inteiros e retorne o resultado. O código fonte está nos arquivos teste.h e teste.c:

//arquivo: teste.h
int add(int x, int y);

//arquivo: teste.c
#include "teste.h"
int add(int x, int y){
  return (x + y);
}

Note que esse é um código em C “vanilla”, sem nenhuma referência ao fato de que ele será depois usado no Python. Tudo o que é preciso para disponibilizar a função ‘add’ no python é compilar esse código como uma biblioteca compartilhada:

gcc -fPIC -o libteste.o -c teste.c
gcc -shared -o libteste.so libteste.o

Isso deve gerar um arquivo ‘libteste.so’, que é um binário que possui as instruções da função ‘int add(int, int)’ de forma que pode ser acessado por outros binários em C. Para chamar esse binário dentro do Python com o CTypes é muito fácil:

from ctypes import cdll

libteste = cdll.LoadLibrary("./libteste.so")
# eh necessario passar o caminho completo para o binario pois ele nao esta no PYTHONPATH
x = libteste.add(5, 2)
print x

Esse script deve retornar o valor ‘7’, conforme esperado. Difícil, né?

Quando sua função retorna um tipo que não seja ‘int’, é necessário ainda informar ao Python qual é o tipo adequado para converter os objetos do python antes de passá-los para a função em C. O CTypes oferece uma gama de tipos correspondentes a todos os tipos que podem ser criados em C padrão:

Tipo no CType Tipo no C Tipo no Python
c_bool _Bool bool (1)
c_char char 1-character string
c_uint unsigned int int/long
c_long long int/long
c_float float float
c_double double float
c_char_p char * (NUL terminated) string or None

Por exemplo, considere a seguinte função:

//arquivo: teste.h
double c_raizq(double x);

//arquivo: teste.c
#include <math.h>
#include "teste.h"

double c_raizq(double x){
  return sqrt(x);
}

Nesse caso, ao abrir a biblioteca (compilada exatamente como antes) será necessário dar mais informação a respeito dos tipos dessa função:

from ctypes import cdll
from ctypes import *

libtest = cdll.LoadLibrary("./libtest.so")
raiz = libtest.c_raizq
raiz.restype  = c_double
raiz.argtypes = [c_double]

x = raiz(2)

print x

Toda função importada do C tem as duas propriedades ‘restype’ – que é o tipo que a função deve retornar – e ‘argtypes’ – que é uma lista dos tipos que essa função recebe como parâmetros, na ordem em que eles aparecem no código em C.

Quando for necessário usar ponteiros, arrays, structs ou enums, a coisa pode ficar um pouquinho mais complicada, mas nada que faça o código crescer muito mais do que isso. Por exemplo, suponha que queremos exportar o seguinte código para o Python:

//arquivo: teste.h

struct cvec{
  double x;
  double y;
};

typedef struct cvec vector;
double norm(vector * point);  

//arquivo: teste.c

#include "teste.h"
#include <math.h>

double norm(vector * point){
  return sqrt(point->x * point->x + point->y * point->y);
}

Precisamos de uma estrutura similar ao struct ‘vector’ e de portar a função ‘norm’. Note que o argumento dessa função é um ponteiro para a struct vector. O código Python para fazer isso segue abaixo:

from ctypes import cdll
from ctypes import *

#imitando a struct vector 
class vector(Structure):
    _fields_ = [("x", c_double) ,
                ("y", c_double)]

libtest = cdll.LoadLibrary("./libtest.so")
norm = libtest.norm
norm.restype  = c_double
norm.argtypes = [POINTER(vector)]

vecc = vector(5,2)
print norm(pointer(vecc))

A classe vector imita a estrutura do struct vector, e as funções POINTER e pointer são usadas respectivamente para informar que o tipo do argumento é um ponteiro e obter um ponteiro para o objeto ‘vecc’. Structs e unions deve ser replicadas no Python por classes que herdam das superclasses Structure e Union, respectivamente.

Enfim, o CTypes fornece um API completo para usar qualquer código C padrão dentro do Python com um mínimo de boilerplate e nenhuma interferência no código original. Não é preciso reescrever suas funções nem entender a estrutura do API do Python. Apenas compilar seu código como uma biblioteca compartilhada.

PyBindGen

Infelizmente o CTypes não é capaz de ler binários de C++. A razão é simples: não existe um padrão para os binários de C++ e cada compilador implementa interfaces diferentes para seus binários. A esperança é que com o estabelecimento do padrão C++11 isso possa ser resolvido, mas isso é uma questão para o futuro. No entanto existe uma biblioteca feita em Python capaz de gerar bindings de códigos em C++ sem interferir no código e com o mínimo de esforço. Por exemplo, suponha que temos uma classe feita em C++ que representa pontos em 2 dimensões, com alguns métodos úteis:

//arquivo Vector.hpp
#include <cmath>
class Vector {
private:
  double x;
  double y;
public:
  Vector(double _x, double _y) : x(_x), y(_y) {}; //construtor

  double norm();               // retorna tamanho do vector
  void reflectO();           // reflete o vetor através da origem
  void rotate(double theta); // roda o vetor em torno da origem por um angulo theta
};

//arquivo Vector.cpp
#include "Vector.hpp"

double Vector::norm() {
  return x*x + y*y;
}

void Vector::reflectO(){
  x = -x;
  y = -y;x
}

void Vector::rotate(double theta){
  double xx = cos(theta) * x - sin(theta) * y;
  double yy = sin(theta) * x + cos(theta) * y;
  x = xx;
  y = yy;
}

Essa classe cria um vetor com duas componentes, com métodos que calculam a norma, refletem o vetor através da origem e rodam por um certo angulo. Para tornar essa classe disponível para o Python é preciso criar um script que gera automaticamente os bindings que devem ser então compilados em um módulo. A estrutura do script é bem simples – primeiro você deve criar um módulo e adicionar ao módulo a classe que deseja exportar, e em seguida adicionar os métodos à classe:

#arquivo: setupBinding.py
#! /usr/bin/env python

import sys
import pybindgen
from pybindgen import param, retval

#Modulo Vector
mod = pybindgen.Module("Vector")

#o modulo inclui o header Vector.hpp
mod.add_include('"Vector.hpp"')

#Adicionando a classe:
klass = mod.add_class('Vector')

#Adicionando o construtor:
klass.add_constructor([param('double', '_x'), param('double', '_y')])

#Adicionando os metodos:
klass.add_method('norm', retval('double'), [])
klass.add_method('reflectO', None, [])
klass.add_method('rotate'  , None, [param('double', 'theta')])

#imprime o binding na tela
mod.generate(sys.stdout)

Note a sintaxe dos comandos:

  • add_constructor([param(‘tipo’, ‘nome’),…]) – essa função recebe uma lista com os parametros que o construtor recebe. Se houver mais de um construtor, eles devem ser todos adicionados em sequencia.
  • add_method(‘nome’, retval(‘tipo de retorno’), [param(‘tipo_do_parametro1’, ‘nome1’), …]) – essa função recebe o nome do método, o tipo do valor que o método retorna e uma lista com os tipos dos parametros de entrada.

Ao rodar esse script com ‘python setupBinding.py’, ele imprime na tela um código em C que é um binding para o código contido em ‘Vector.cpp’ e ‘Vector.hpp’. Ao compilar esses bindings, teremos um módulo Vector que pode ser importado dentro do python como qualquer outro módulo:

import Vector

foo = Vector.Vector(1,2)
print foo.norm()
foo.rotate(0.2)

Compilar esse módulo é só um pouquinho mais complicado do que no caso do CTypes. Em primeiro lugar é preciso compilar uma biblioteca compartilhada como anteriormente:

g++ -fPIC -c -o libvector.o  Vector.cpp
g++ -shared  -o libvector.so libvector.o

sh Isso cria os arquivos ‘libvector.o’ e ‘libvector.so’. E então devemos gerar os bindings:

python setupBinding.py > bindVector.c

sh E compilar uma biblioteca compartilhada com os bindings:

g++ -fPIC -I/usr/include/python2.7 -c -o bindVector.o bindVector.c
g++ -shared -o Vector.so -L. -lvector bindVector.o

Note que é preciso passar para o compilador o caminho para os headers do python no seu sistema – no meu caso a versão 2.7 do python no linux está em ‘usr/include/python2.7‘. Também é preciso passar para o linker o caminho atual, onde está os arquivos ‘libvector.so’ e ‘libvector.o’ – que é a pasta atual onde a compilação está sendo feita. Isso é feito com as flag “-L. -lvector”. Isso cria o arquivo Vector.so, que contém o módulo Python que pode ser carregado através do comando “import”. Note que o nome do arquivo deve ser o mesmo nome do módulo conforme adicionado no script que gerou os bindings.

Antes de tentar importar o arquivo no python, é preciso adicionar o caminho onde o arquivo ‘Vector.so’ se encontra nas variáveis de ambiente PYTHONPATH e LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
export PYTHONPATH=$PYTHONPATH:.

Agora o módulo Vector pode ser usado normalmente:

import Vector

foo = Vector.Vector(1,2)
print foo.norm()
foo.rotate(0.2)

Enfim. Espero que isso ajude quem, como eu, vem quebrando a cabeça com isso a muito tempo e já testou diversas ferramentas (SWIG, SIP, Cython/Pyrex, Boost::Python, etc, etc, etc… ). As documentações oficiais das ferramentas usadas nesse post podem ser encontradas aqui:

Org2Blog – integrando o org-mode do emacs ao seu blog do wordpress.

quinta-feira, 21 abr 2011; \16\America/New_York\America/New_York\k 16 13 comentários

Este é um teste do sistema de postagem org2blog, que transforma textos do org-mode do emacs para posts de blog do wordpress. Esse é o melhor sistema de postagem para wordpress que eu encontrei até agora. O org-mode é um modo de edição de arquivos de texto estruturados no editor de texto emacs. Uma das grandes vantagens do org-mode é a possibilidade de exportar seus textos para diversos formatos – como um documento em latex ou html, uma apresentação do beamer, um livro em docbook,… e agora, com o add-in org2blog, posts de blogs para o wordpress.

As vantagens são inúmeras:

  • EDITAR NO EMACS!!!
  • o org-mode tem uma sintaxe muito simples para estruturar textos com seções, subseções, incluir links, listas, tabelas e etc.
  • editar no emacs te permite usar macros e scripts para fazer geração dinâmica de textos,
  • o org-mode permite adicionar equações em latex, como se fosse em um documento latex normal, e traduz isso para a sintaxe do wordpress – \int e^{ikx} dk = 2\pi\delta(x).
  • o org-mode-babel permite adicionar código em diversas linguagens de programação e editá-las usando seu modo natural no emacs. O código é automaticamente colorido com syntax-highlighting (para a linguagem correta!) e postado usando as tags adequadas no wordpress. Veja por exemplo esse código em Haskell:
    sort :: (Ord a) => [a] -> [a]
    sort (x:xs) = (filter (<x) foo) ++ [x] ++ (filter (>=x) foo)
      where foo = quicksort xs

    O org-mode também pode executar o código, compilar e testar.

  • o org-mode possui dezenas e dezenas de ferramentas para lidar com texto,
  • exportar não apenas para wordpress mas para dezenas de outros formatos.

Enfim, essas são apenas algumas das vantagens. Eu comecei a usar o org-mode para editar apresentações de slides em beamer. Por muito tempo eu reclamei que não existia uma forma fácil de se fazer isso, e o org-mode foi a saída perfeita para mim. Agora o org2blog vem sanar uma outra séria deficiência de ferramentas na minha opinião: como editar de forma fácil posts de blog com código-fonte e latex simultaneamente.

Instalação do org-mode

Instalar o org-mode é muito fácil. Primeiro de tudo você precisa do emacs, claro. Vou assumir que você está no linux (sinceramente, se você está no windows eu recomendaria que instalasse o linux primeiro, porque eu nem sei fuçar no win-emacs 😛 ). Você deve baixar e descompactar o org-mode no site e colocá-lo na sua pasta de add-ons do emacs (tipicamente na pasta ‘~/.emacs.d/’). Abra então o terminal na pasta e dar os comandos típicos:

make
make doc
sudo make install

Depois adicione no seu arquivo de configuração do emacs (tipicamente ‘~/.emacs’ ou ‘~/.emacs.d/init.el’, o que você preferir) as seguintes linhas (ajustando para os diretórios adequados):

(setq load-path (cons "~/.emacs.d/org-mode/lisp" load-path))
(setq load-path (cons "~/.emacs.d/org-mode/contrib/lisp" load-path))
(require 'org-install)
(org-babel-do-load-languages
 'org-babel-load-languages
 '((R . t)
   (emacs-lisp . t)
   (haskell . t)
   (gnuplot . t)
   (latex   . t)
   )) ;; adicione aqui as linguagens que quiser que o org-mode reconheça. 

Para manter atualizado você pode baixar os arquivos do repositório git do org-mode, conforme as instruções no site. Veja o manual do org-mode para todas as instruções de como usá-lo. Para configurar o org-babel, a parte do org-mode que lida com códigos, veja essa página e essa pagina.

Instalação do org2blog

O org2blog, com instruções de instalação, pode ser encontrado no github do punchagan. Baixe os arquivos usando o git, conforme indicado no README, no seu diretório ‘~/.emacs.d’ do emacs. Siga o README para saber como configurar o seu emacs para logar automaticamente no seu blog e colocar o seu post.

Enfim. Não tem mais muito o que dizer. Eu fiquei muito empolgado com a possibilidade de editar meus posts no emacs com calma e só postar depois de pronto. O org-mode tem diversas ferramentas para lidar com texto que o tornam de longe a melhor ferramenta de editoração eletrônica para emacs – para textos em latex e apresentações particularmente. Além disso ele tem coisas como o record-mode e outras ferramentas para lidar com todo-lists e agendas. Vale a pena dar uma olhada.

Boa sorte.

Categorias:org2blog Tags:, , ,

The Joy of Haskell, parte 1 – Introdução

segunda-feira, 18 abr 2011; \16\America/New_York\America/New_York\k 16 1 comentário

Como alguns devem ter percebido, eu me tornei recentemente um entusiasta da linguagem de programação chamada Haskell. Eu até criei um blog para postar sobre isso, e coloquei propaganda dele aqui. O Rafael Lopes de Sá me convenceu de que não era necessário fazer isso e que eu poderia mesmo postar aqui sobre isso, então resolvi fazer um post introdutório sobre Haskell, para que os meus posts seguintes façam mais sentido.

Porque Haskell?

O que é tão atraente nessa linguagem para mim? É uma linguagem um pouco estranha, com uma curva de aprendizado um pouco complicada e as vezes parece necessário um esforço bem maior para fazer coisas que são simples em outras linguagens. Porque não C? O que Haskell faz que C não faz? Ora, nada. C e Haskell são duas formas diferentes de escrever essencialmente os mesmos comandos fundamentais. Mas há razões para eu preferir Haskell.

O primeiro é que Haskell é uma linguagem de altíssimo nível. Calma, isso não é um juízo de valor. Uma linguagem de baixo nível é uma linguagem que opera com poucas camadas de abstração entre o código e o que será de fato executado na máquina. C permite fazer operações de baixo nível: manipular memória, executar instruções asm, etc… Linguagens de alto nível escondem esses detalhes em abstrações lógicas, de modo você que nunca vai precisar se preocupar com detalhes de hardware. Haskell é uma linguagem que opera em níveis de abstrações muito mais altos que o normal. Haskell existe em um universo bastante independente do fato de que aquilo será compilado e executado em um computador físico. É uma linguagem bastante matemática e abstrata. E mesmo assim é eficiente. Há outras linguagens abstratas de alto nível – como Perl, Lisp, ML,… Mas os compiladores de Haskell são particularmente eficientes, e capazes de produzir códigos que rodam com pouca perda de desempenho se comparados a C.

O segundo é que Haskell agrega certas características que a tornam muito próximas de um sistema lógico-matemático. Muito de Haskell é baseado em uma formulação da matemática chamada Cálculo Lambda. O cálculo lambda é uma sistema formal alternativo ao sistema baseado em teoria de conjuntos. Ele pode ser usado para re-escrever a matemática que conhecemos em outras bases. Haskell é muito próximo de algo chamado cálculo lambda tipado. Isso por si é bem atraente, e há matemáticos que usam Haskell para criar sistemas formais para provar teoremas, etc. Mas para mim o melhor disso é que criar mesmo estruturas matemáticas úteis (espaços vetorias, grupos, espaços de probabilidade,etc…) em Haskell é bem natural.

Haskell é expressivo. Isso é um valor muito subjetivo, mas eu acho que o sistema de tipos de Haskell permite expressar conceitos de forma muito legível. O tipo de um objeto em Haskell traz muita informação sobre o que aquele objeto faz. Muitas vezes basta saber o tipo para saber exatamente como aquilo deve ser implementado.

Finalmente, Haskell é um exercício intelectual interessante. Eu acho estimulante programar em Haskell e acho que me fez um programador melhor mesmo quando estou usando outras linguagens.
Há outras vantagens no Haskell – como o fato de que a trasparência referencial e a avaliação não-estrita tornarem a paralelização de programas algo bem simples. Alguns dizem que linguagens influenciadas por Haskell (como as últimas versões de C#, Scala, OCaML, …) são linguagens do futuro, pois permitem fazer computação concorrente e paralela de forma trivial. Eu acho isso um overstatement, mas certamente elas vão ficar importantes.

Mas eu realmente não ligo muito pra isso. Eu gosto de Haskell como um fim em si. É quase como se fosse o meu Sudoku ou o meu Cubo de Rubik – um passatempo intelectual interessante. Isso tudo não faz de Haskell uma linguagem melhor por si só, mas quando combinado com um certo tipo de personalidade de programador, a combinação fica bem eficiente.

O que é Haskell?

Haskell é uma linguagem de programação com algumas características:

  • é funcional,
  • pura (com transparência referencial),
  • não-estrita,
  • com tipos estáticos,
  • polimorfica (com variáveis de tipo e typeclasses)

todas essas coisas serão entendidas ao longo de vários posts. São conceitos abstratos de computação que são mais fáceis de entender quando vemos um código.

Em primeiro lugar, antes de falar sobre isso, vamos ver como usar o Haskell. Você pode facilmente preparar seu computador para programar em Haskell instalando algo chamado Haskell Platform – no Ubuntu pode ser instalado via apt-get ou synaptic, no windows e em outros sabores de linux é só baixar do site o binário (http://hackage.haskell.org/platform/). O haskell platform vem com várias ferramentas, entre elas o compilador Glasgow Haskell Compiler (GHC), que contém também um modo interativo chamado GHCi, e o gerenciador de pacotes Cabal, que é usado para instalar bibliotecas de maneira bem simples.

O GHCi é um modo interativo, bem parecido com o que se encontra em outras linguagens como Python. É um loop com um cursor que recebe comandos. Você pode colar um pedaço de código lá e ele será executado. É a melhor forma de começar a aprender. Você pode começar digitando uma expressão matemática qualquer e receber a resposta assim que pressionar `Enter`:

/> 2 + 2
 4
/> 4 * 5 + 2
 22

Um programa em Haskell é essencialmente isso: uma expressão cujo valor deve ser encontrado através de um processo de “avaliação” (evaluation – não sei se essa é a melhor tradução). Essa é a essência de uma linguagem funcional – o fato de que o código é escrito como uma expressão, resultado da aplicação de funções sobre outras expressões, e o objetivo final do código é encontrar o valor daquela expressão. Algo como aqueles exercícios que você fazia na 6ª série: “Efetue: …” e uma expressão complicada com números e operadores era dada, para que você encontrasse o valor daquela expressão.

Todo objeto em Haskell é uma expressão, com um valor bem definido. E todo valor tem um tipo bem definido. Há tipos básicos, Int (inteiros), Char (caracteres), Double (ponto flutuante de dupla precisão), Bool (booleanos), etc… e tipos mais abstratos, sobre os quais vou falar mais tarde – os tipos algébricos, que são o “bread and butter” do Haskell. Você pode dar um nome para uma expressão, para resumir a construção de outras expressões. Se você editar um arquivo chamado “teste.hs” com o seguinte conteúdo:

> -- arquivo teste.hs
> x :: Int
> x = 20
> y :: Int
> y = 5

Você pode carregá-lo no GHCi da seguinte forma:

/> :l teste.hs
[1 of 1] Compiling Main ( foo.hs, interpreted )
Ok, modules loaded: Main.
/> x
20
/> x + y
25
/> let z = x + y
/> z
2

Para criar nomes dentro do GHCi é preciso usar a cláusula “let”. Em um arquivo separado não é preciso.

Note a sintaxe: x::Int. Isso significa “vou dar o nome x a uma expressão que tem tipo Int”. Isso não é uma declaração de variáveis como é comum em linguagens imperativas. Isso é só a definição de um nome. Não existem “variáveis” em Haskell como existe em C, um espaço reservado de memória cujo conteúdo pode ser manipulado. Um nome é um nome definitivo – aquele nome é um mero sinônimo para a expressão que ele representa. Um nome não pode mudar de valor. Se você tentar colocar:

> x :: Int 
> x = 10
> x = 20

em um arquivo, quando tentar carregá-lo obterá um erro:

Multiple declarations of `Main.x'
 Declared at: dah.hs:1:0
 dah.hs:3:0

Alguns tipos algébricos importantes são fornecidos na biblioteca padrão, chamada Prelude. Por exemplo, as listas:

> xs :: [Int]
> xs = [3,4,32]

Uma lista é uma sequencia ordenada de valores do mesmo tipo. Uma lista de objetos de tipo a tem tipo [a]. String é um sinônimo para [Char]:

/> :t "rafael"
"rafael" :: [Char]
/> :t ("rafael" :: String)
 ("rafael" :: String) :: String

Outro tipo composto comum é na verdade uma família de tipos chamados “tuplas”. São sequencias ordenadas de objetos de tipos que podem ser iguais ou não:

> tupla :: (Int, Double)
> tupla = (5, 3.14)

A principal diferença entre tuplas e listas é que listas de tamanhos diferentes tem o mesmo tipo, desde que os objetos internos seja do mesmo tipo:

> ys :: [Int]
> ys = [2,3,2,3,4,22,3,2,4,2,4]

Já tuplas de tamanhos diferentes têm tipos diferentes:

> tupla' :: (Int, Int, Double)
> tupla' = (5, 3, pi)

Tuplas e listas podem ser combinadas para fazer tipos bem complicados:

> foo :: [(Int, Double)]
> foo = [(1, 1.2), (3, 2.3)]
> bar :: (Int, (Int, Char), [String])
> bar = (1920, (0, 'a'), ["Haskell", "É", "Legal"])

Se eu não posso alterar que expressão um nome armazena, como faço computação em Haskell? Eu crio funções. Funções são objetos que recebem uma entrada e retorna uma saida. Por isso elas têm tipo (a -> b) onde a é o tipo do valor de entrada e b o tipo do valor de saída:

> succ, pred :: Int -> Int
> succ x = x + 1
> pred x = x - 1

Uma computação em Haskell é feita através da aplicação de funções sobre expressões – múltiplas funções são combinadas para que, quando aplicadas a uma expressão de entrada, produzirem o resultado desejado. Em Haskell funções são expressões como outras quaisquer. Elas podem ser entradas e saídas de outras funções. Eu posso ter uma função que recebe outra função como parâmetro ou retorna outra função como resultado. Por exemplo, eu posso ter uma função:

> foo' :: (Int -> Int) -> Int
> foo' f = (f 0)

Para qualquer função f::(Int -> Int), essa função retorna o valor de f calculado em 0. No futuro veremos casos mais úteis disso. Eu disse que funções são expressões como outras quaisquer. Se eu posso escrever expressões sem ter que dar um nome para elas, tem que haver um jeito de fazer isso com funções também, né? São as chamadas expressões lambda (também conhecidas como “closures” em outras linguagens). Eu posso aplicar a função foo’ em uma função anonima assim:

/> foo' (\ x -> x + 1)
1

A expressão (\ x -> expr ) deve ser interpretada assim: uma função que, quando recebe um número x, retorna expr. Portanto (\ x -> x + 1) é a função que quando aplicada em x, retorna x+1. Se eu avaliar a expressão foo’ (\ x -> x + 1) terei:

foo' (\ x -> x + 1)
(\x -> x + 1) 0
0 + 1
1

As vezes funções que recebem ou retornam funções são chamadas de funções de segunda ordem.

Eu disse que funções tem apenas uma entrada e uma saída. Mas e quando eu preciso de mais de um dado de entrada para produzir um resultado? Eu posso usar tuplas:

> soma :: (Int, Int) -> Int
> soma (x,y) = x + y

Não parece muito prático. Mas existe um teorema em cálculo Lambda que diz o seguinte: uma função de duas entradas é isomórfica a uma função que recebe apenas uma entrada e retorna uma função. Como assim? . Imagine que eu reescrevesse a função soma assim:

> soma :: Int -> (Int -> Int)
> soma x = (\y -> x + y)

O que acontece quando eu aplico essa função em um número? O resultado de (soma 1) é (\y -> 1 + y). Ou seja, (soma 1) é uma função que quando aplicada em y, me retorna 1 + y. Então ((soma 1) 2) = 3. Para facilitar a vida do programador, o compilador de haskell entende que (soma 1 2) significa: aplique soma ao número 1 e depois aplique a função resultante ao número 2. O compilador também permite escrever:

> soma :: Int -> Int -> Int
> soma x y = x + y

O compilador também entende a sintaxe (\ x y -> expr…). Isso é traduzido automaticamente para (\ x -> (\ y -> expr…)). A aplicação da função sobre um valor retornando uma função que aguarda outro valor é por vezes denominada aplicação parcial.

Note que o tipo a -> b -> c deve ser sempre interpretado como a -> (b -> c), nunca como (a -> b) -> c. Note a diferença: o primeiro recebe um valor e retorna uma função, o segundo recebe uma função e retorna um valor.

Você já percebeu nesse momento uma coisa: todos os nomes de expressões são em minúsculas e os nomes de tipos em maiúsculas. E também já percebeu que de vez em quando eu uso a, b, c para denotar um tipo qualquer. O compilador de Haskell entende isso. Isso é chamado polimorfismo paramétrico. Para entender vamos dar uma olhada na função de segunda ordem que implementa o padrão mais tipico do Haskell: a composição de funções. Suponha que eu queira aplicar as funções succ e pred em sequencia sobre um número. Eu posso fazer:

/> pred (succ 0 )
 0

Note que eu posso aplicar a combinação (pred (succ x)) em qualquer x. Eu posso ter a função

> bar' = (\ x -> pred (succ x))

Esse é um padrão independente do que fazem as funções pred e succ. Aliás, é independente do fato de que eu estou falando de números inteiros. Apenas depende de um fato: eu tenho duas funções cujos tipos são compatíveis: o tipo que succ retorna é compatível com o tipo de entrada de pred. Considere a seguinte função de segunda ordem:

> composicao f g x = f (g x)

Ela recebe duas funções (f e g) e um valor (x) e retorna a aplicação sucessiva dessas funções ao valor dado. Qual é o tipo dessa função? Vamos deixar o compilador inferir para nós:

/> :t composicao
composicao :: (t1 -> t2) -> (t -> t1) -> t -> t2

Ou seja: quaisquer que sejam as funções f e g, essa função faz sentido, desde que o tipo de saida de g seja o tipo de entrada de f. Essa função já existe na biblioteca padrão, e é chamada (.). Sua definição é:

> (.) :: (b -> c) -> (a -> b) -> a -> c
> (f . g) x = f (g x)

A aplicaçao parcial de (.) sobre duas funções retorna a função composta (no sentido matemático mesmo). Ou seja: (f.g) = (\ x -> f (g x)). Isso funciona para quaisquer tipos a,b e c e quaisquer funções que satisfaçam os tipos da declaração de (.). Isso quer dizer que (.) é uma função polimórfica – ou seja, uma família de funções que pode ser especializada para vários tipos diferentes. Exemplos:

> foo = sin . cos
> bar = succ . length

A função foo é a composição das funcções sin :: Double -> Double e cos :: Double -> Double. O resultado de (foo x) é sin(cos x). A função bar é a composição de succ, que calcula o sucessor de um número inteiro, com a função length, que calcula o tamanho de uma lista de um tipo qualquer:

> length :: [a] -> Int
> succ :: Int -> Int
> (succ . length) :: [a] -> Int

Funções desse tipo – que compõe operações simples para realizar operações complexas, são o arroz com feijão da programação funcional. Quase todas as funções importantes da biblioteca básica são funções polimórficas de segunda ordem. Veremos várias em breve – map, ($), (>>=), replicate, concat, concatMap, zip, …

Enfim. Acho que é o suficiente por hoje. Na próxima vou falar das coisas mais legais do Haskell que são os tipos algébricos e as classes. Depois vou discutir um pouco sobre as características da linguagem – o fato de ser fortemente tipada, de ter transparência referencial e avaliação não-estrita.

Categorias:Ars Physica

Verdades, mentiras e estatisticas na campanha eleitoral

quarta-feira, 13 out 2010; \41\America/New_York\America/New_York\k 41 3 comentários

Peço licença aos meus co-blogueiros para falar sobre as eleições presidenciais. Uma vez que eu não vou emitir nenhum juízo sobre nenhum dos candidatos, nem explicitar preferência alguma, creio que não há problema. Na verdade o tema eleitoral é só uma desculpa para falar sobre estatística :P. Caso haja problema, por favor me avisem.

Nessa campanha presidencial – como, aliás, deve ser em qualquer campanha eleitoral – tem acontecido uma fenômeno interessante nas propagandas e discursos de aliados de cada um dos candidatos do segundo turno. Ambas as campanhas tentam comparar os governos de Lula e FHC apresentando todo tipo de números e estatísticas. O interessante é que o cenário parece estranhamente ambíguo: para cada estatística que mostra Lula melhor que FHC existe outra que mostra o exato contrário. Para dois exemplos interessantes desse tipo de campanha, veja esses dois links:

Esse fenômeno pode parecer estranho para os espectadores da campanha menos acostumados aos números. Afinal, quem foi melhor para o ensino superior, FHC que aumentou o número de matrículas ou Lula que criou mais universidades? Quem diminuiu mais a pobreza, FHC que aumentou 4 vezes mais o IDH ou Lula que criou 3 vezes mais empregos?

Não há nada de estranho aí. O que está por trás dessa estranheza é uma falácia estatística que pode ser chamada “falácia do atirador”. Imagine um homem que quer demonstrar que é um excelente atirador e te mostra um alvo pintado em um campo de tiro, com 10 tiros certeiros na mosca. Você pode achar que ele é um grande atirador mesmo, mas sabe como ele produziu esse resultado?

O atirador ergueu uma enorme parede de madeira, de 10 metros de largura e 5 de altura, colocou-se na posição de tiro e descarregou 500 tiros contra a parede, sem tentar mirar particularmente em nenhuma posição. Claro que depois disso a parede estará cravejada de buracos e em alguns lugares haverá buracos de tiro mais próximos um dos outros. O atirador escolhe convenientemente 10 buracos que, ao acaso, ficaram bastante próximos entre si e desenha e pinta o alvo em torno deles. Então ele corta o resto da madeira e recoloca o alvo em sua posição original, com 10 tiros “certeiros” na mosca.

O homem não é um excelente atirador. Ele apenas escolheu o alvo depois de ter os resultados. Ele selecionou os “bons” resultados e descartou os ruins. Ele transformou uma distribuição bastante larga em uma distribuição mais estreita apenas descartando certos resultados e mostrando outros.

Como isso se aplica à campanha eleitoral?

Para cada aspecto de um governo que você queira avaliar, existe um sem número de estatísticas que podem ser usadas. Se, por exemplo, eu quero avaliar a evolução da renda, posso mostrar o crescimento do PIB per capita, ou de algum índice de salários, ou da fração do PIB correspondente aos salários, ou quanto subiram os salários em comparação com a taxa básica de juros, ou comparar com taxas “reais” praticadas no mercado. Posso comparar esses números em dólares ou reais, posso comparar o poder aquisitivo real, ou quanto essa renda compra de uma certa cesta de produtos essenciais. Posso focar apenas no crescimento da renda da classe C, ou em quanto cresceu (ou caiu) a razão da renda da classe C pela renda da classe A. Posso comparar quantos bens de consumo essenciais as pessoas conseguem comprar, ou posso comparar quanto o crescimento de suas rendas se compara com o rendimento de um certo investimento padronizado. Todas essas são formas de comparar quanto a renda cresceu.

Deu para perceber que existe um grande número de estatísticas para comparar dois governos, mesmo que fiquemos apenas no restrito conjunto de estatísticas referentes ao aumento da renda. Se eu comparar todos esses números entre o governo A e o governo B, alguns resultados serão pró-A e outros serão pró-B. É natural que seja assim por uma razão simples: há uma flutuação incrível nesses números. Flutuações temporais, flutuações causadas por diferentes metodologias ou mesmo flutuação que resulta do processo de amostragem. A incerteza nesses números as vezes é muito grande, e medidas em semanas diferentes podem causar flutuações de vários pontos percentuais. Não temos um valor determinado para esses números, temos uma distribuição de probabilidades que representa o quanto sabemos sobre eles. E essa distribuição é relativamente larga.

Então existe uma probabilidade de que cada estatística seja pró-A ou pró-B, ainda que os governos A e B tenham sido mais ou menos parecidos. E mesmo que o governo A tenha sido muito melhor que o governo B em certo sentido, ainda assim teremos uma certa probabilidade de ter um certo número de estatísticas pró-B. Mas eu sempre posso escolher que fração das estatísticas que eu pretendo mostrar será pró-A ou pró-B. Eu posso apenas mostrar 100% de estatísticas pró-A e argumentar assim que o governo A foi incrível. Isso é bem ilustrado pela famosa propaganda da Folha de São Paulo de alguns anos atrás, em que se apresenta diversas estatísticas positivas do governo de Adolf Hitler na Alemanha, que certamente foi um governo desastroso!!!

Então é impossível comparar dois governos com estatísticas? Claro que não. É perfeitamente possível. Apenas é necessário fazê-lo de forma sistemática, com métodos claros, com padrões e referências bem definidos. Existem procedimentos para se evitar a falácia do atirador em estudos estatísticos. Por exemplo, pode-se escolher que estatísticas serão calculadas de antemão, antes da colheita de dados, de acordo com um método bem definido. Isso evita que se “desenhe o alvo” em torno do resultado desejado. Pode-se fazer uma análise de sensitividade, mostrando que ainda que a metodologia fosse diferente, o resultado não seria tão diferente assim. Enfim, existem técnicas para isso.

Mas isso é algo que campanhas eleitorais nunca serão capazes de fazer. Elas são enviesadas por princípio, a cesta de índices que escolhem para mostrar é viciada e sua interpretação errônea e vazia. E isso vale para qualquer campanha, independente da orientação ideológica do candidato. É inevitável. Não chega nem a ser desonestidade, é da natureza da propaganda. O ideal seria que, ao invés de usar os números de forma leviana, fossem contratados estatísticos profissionais e neutros para criar essas análises. Mas isso nunca vai acontecer. 😉

O melhor é que o eleitor esteja atento às formas com que os números podem ser usados contra ele. Números adequadamente escolhidos podem defender qualquer estória que se deseje contar. Mas não fique achando que toda estatística é resultado de manipulação. Há métodos adequados para se evitar a manipulação, mesmo a manipulação involuntária.

Há uma citação de natureza ética difundida entre os estatísticos adequada para fechar essa discussão. Infelizmente não me lembro o autor ou a exata fraseologia, mas a essência é: é sempre possível mentir usando a estatística, mas é impossível dizer a verdade sem ela.

A física da pesquisa e a física da sala de aula

quarta-feira, 29 set 2010; \39\America/New_York\America/New_York\k 39 2 comentários

Disclaimer: esse post é uma opinião muito pessoal de seu autor, e pode ser que os outros membros do blog não concordem.

Como eu já disse por aqui, eu fico bastante entusiasmado com a idéia de cursos abertos online e disponibilização de material em vídeo, como na iniciativa OpenCourseWare, por exemplo. E eu sou um usuário adicto desses materiais. Já devo ter ouvido as aulas de mais de uma dezena desses cursos, por diversão mesmo, em áreas muito diversas (história, estudos religiosos, biologia, antropologia…). Mas não comecei esse texto para falar desses cursos, mas para falar de algo que esses cursos me fizeram notar a respeito de uma diferença fundamental entre o ensino de física e o ensino em outras áreas do conhecimento, de forma particular, mas não restrita, nas ciências médicas e biológicas.

Para exemplificar o que quero dizer, vou me referir à terceira aula do curso de biologia geral dado na primavera de 2010, na Universidade da Califórnia em Berkeley, cujas aulas em vídeo e éudio estão disponíveis para download no site de webcasts da universidade (http://webcast.berkeley.edu). Em certo ponto dessa aula, a professora diz “e realmente nos últimos 5 ou 6 anos muita pesquisa foi feita para entender a estrutura interna e função do ribossomo, e eu vou mostrar para vocês uma imagem…” e passa a discorrer sobre assunto de pesquisa muito recente, sobre o qual ainda há dúvidas e questões em discussão. Cenas como essa são comuns em todos os cursos que ouvi. Assuntos de pesquisa são citados na sala de aula rotineiramente e discutidos nos trabalhos e dissertações que os alunos tem de entregar para ser avaliados. Isso me chocou. Me chocou como algo completamente alheio com a minha experiência de sala de aula, que acredito ser não muito diferente da experiência de todos os físicos formados no Brasil, e provavelmente no mundo todo. É inconcebível na nossa experiência que um professor de Física I (ou de Physics 101) entre na sala de aula e dê como exercício de casa a uma turma mista de dezenas e dezenas ingressantes de diversos cursos – engenharia, física, química, … – a leitura de um artigo de pesquisa publicado a menos de 10 anos. Nenhum assunto discutido em uma aula de física, mesmo nos últimos anos da faculdade, é mais recente do que a década de 40. Em compensação, poucos assuntos discutidos em uma aula de biologia celular são mais antigos que a década de 70, e muitos tem menos de 10 ou 15 anos de idade! E por que é assim?

Tudo bem, há uma série de explicações muito plausíveis para isso. Talvez a mais forte seja que os conceitos físicos e as ferramentas matemáticas usadas na pesquisa são muito mais avançados do que os que estão sendo estudados na graduação, e que é necessário um período longo de treinamento para sair da primeira aula sobre as leis de movimento de Newton e chegar na mecânica quântica, passando por todos aqueles passos intermediários. A maturação de um físico é um processo longo e lento, nessa visão. Vai da primeira aula de Física I até mais ou menos o meio do doutorado. A física é uma ciência mais antiga e madura, dizem os que defendem essa idéia, e um estudante de física tem que estudar toooodas essas coisas com detalhes, desde o nascimento da mecânica newtoniana até a mecânica quântica e suas aplicações mais elementares. Além disso, um ingressante em física ainda não foi exposto nem ao ferramental matemático básico para prosseguir aprendendo física – o cálculo, a algebra linear e etc…

Apesar de acreditar que há alguma verdade nisso, sinceramente acho que ela é exagerada e super-simplificada pela típica autosuficiência e arrogância dos físicos (eu me incluo nessa conta) e pela inércia do sistema educacional. Faz anos que é assim, foi assim que fizemos no passado, é assim que faremos no futuro porque é assim que se ensina física. E bem, veja só, é mais difícil aprender física, não é?

Não. Não é. Sinceramente, não é. Aprender biologia pra valer é tão difícil quanto aprender física. Ou mais! Pode ter um pouco menos de matemática, mas nas duas ou três primeiras aulas do curso introdutório para a graduação da UC Berkeley que assisti já há uma série de mecanismos celulares complicados, relações entre as organelas, estruturas moleculares complicadas, como as isomerias e as simetrias afetam a função das moléculas, e se o carbono alfa está assim, então a isomeria faz com que o poro da membrana nuclear fique assado… 😯 😯 😯

Não é fácil, definitivamente. E não é “coleção de selos”, é uma sequencia lógica de mecanismos e estruturas bem entendida até certo ponto. Eu não estou acompanhando direito.

Porque um ingressante de biologia está pronto para discutir a biologia molecular dos poros da membrana nuclear de maneira tão detalhada e um estudante de física não está pronto para discutir fenômenos críticos e transições de fase, ou entender, pelo menos num nível qualitativo, o que é decoerência, o que são teorias de campo conforme e porque a correspondência AdS/CFT é tão importante, quais são as alternativas para explicar energia escura, porque o grafeno é um material tão especial, porque é tão difícil ter materiais semicondutores que sejam ferromagnéticos, o que a física por trás de folding de proteínas tem a ver com a física de cristais magnéticos, quais são os melhores candidatos para física além do modelo padrão, como podemos detectar radiação Hawking?

E se tocamos nesse assunto, porque não ir mais fundo? Se os estudantes de física não chegam à metade do século passado, os estudantes do colegial param muito antes disso. A física que fingimos ensinar nas escolas tem pelo menos 150 anos de idade, e é absolutamente inútil para essas pessoas da forma como é ensinada, em todos os aspectos. Não estimulam curiosidade científica, não as ajudam a entender o ambiente tecnológico em que vivem, não fornecem ferramentas de trabalho úteis e nem as preparam para a universidade.

O ensino de Física está, em minha opinião, caduco em todos os níveis e precisando de urgente reforma. E quanto mais a pesquisa avança, mais urgente essa mudança se torna. Se queremos pessoas prontas para integrar os quadros de pesquisa, se queremos estudantes motivados e se queremos desenvolver o quanto antes o gosto pela pesquisa, precisamos forçar a fazer o que os biólogos fizeram de forma natural, e trazer a física da pesquisa de volta para as salas de aula.

Um pouco de propaganda…

terça-feira, 3 ago 2010; \31\America/New_York\America/New_York\k 31 Deixe um comentário

Bem, eu vou propagandear aqui outro blog que criei aqui no wordpress para falar principalmente sobre programação funcional, Haskell e as relações dessa linguagem com matemática e física. Como essa comunidade é bastante específica, escrever em português não atingiria muita gente então eu criei um blog para escrever sobre isso em inglês (broken english…). Além disso é um assunto bem distante daqui e então não faz muito sentido colocar no mesmo lugar.

De qualquer forma eu óbviamente não vou deixar de escrever aqui, e quando eu achar que tem algo desse assunto que seja suficientemente geral para caber aqui, vou postar aqui também, em português.

Enfim, para quem se interessar: http://randomagent.wordpress.com/ é o endereço do outro blog, onde já há um tutorial sobre monad transformers usando processos estocásticos como exemplo. 🙂

Categorias:Ars Physica

Regulamentação de profissões, e da profissão de Físico em particular

terça-feira, 27 jul 2010; \30\America/New_York\America/New_York\k 30 Deixe um comentário

O Rafael Lopes de Sá, escreveu recentemente sobre isso aqui no Ars Physica, e como no caso dele, esse post é a minha visão pessoal sobre o assunto. Pode ser que outras pessoas que escrevem aqui discordem. Minha opinião é muito similar à dele, então se você tiver preguiça de ler mais um texto contra a regulamentação da profissão de físico, basta ler o dele! 🙂 Esse texto na verdade foi escrito na comunidade de Física do orkut uns meses atrás, e o assunto surgiu novamente em outras discussões e então eu resolvi resgatá-lo e recauchutá-lo para ser digno de post de blog. Fiz isso mais para ter um link para mandar para quem pergunta minha opinião do que por qualquer outra razão, mas acho que ficou suficientemente bom para ser útil para vocês.  Enfim, ao texto…

Eu acredito que estamos melhor sem regulamentação. Vou dar duas séries de argumentos – uma de porque eu sou contra o sistema de regulamentações como um todo e outra de porque eu sou contra a regulamentação da profissão de físico ainda que o sistema de regulamentações não seja desmantelado.

O sistema de regulamentação de profissões.

Só existe uma razão objetiva para regulamentar uma profissão: impedir que pessoas não qualificadas exerçam atividades que representam um risco sério caso sejam mal executadas. Qualquer regulamentação que não se baseie nisso só tem um objetivo: criar um clubinho de pessoas que controlam uma série de atividades e impedir o acesso de outras pessoas a essas atividades, gerando uma reserva de mercado. Esse segundo tipo de regulamentação é, na minha opinião, perverso e prejudicial.

Prejudicial ao mercado: inibe a geração de empregos e inibe o crescimento de novas áreas de aplicação de conhecimentos antigos, além de aumentar artificialmente o custo de contratação.

Prejudicial para os profissionais: uma vez regulamentada a profissão, ficam estabelecidos limites claros para o que aquele profissional faz e o que ele não faz e é muito provável que se isso se cristalize no mercado profissional. Isso limita as atividades que você pode desenvolver: há atividades que você é capaz de fazer por causa de sua formação específica, mas não há vagas para pessoas com a sua formação nessa área.

Finalmente, prejudicial para a formação das pessoas. A existência de atividades privativas faz com que os conselhos profissionais obriguem os cursos a ensinarem algumas disciplinas, engessando as estruturas curriculares e preenchendo a grade horário dos estudantes com disciplinas  mal colocadas. Por exemplo isso acontece com os cursos de engenharia: por conta da grande quantidade de atividades que são privativas de engenheiros de todas as áreas, todos os cursos são obrigados a ministrar, por exemplo, matérias associadas a construção civil e a projeto de sistemas elétricos, ainda que isso não esteja nem próximo das intenções profissionais de um típico estudante de engenharia de controle e automação ou de engenharia metalúrgica.

A profissão de físico em particular.

Acima eu dei razões pelas quais eu sou radicalmente contra o sistema de regulamentação de profissões – que eu acho que deveria ser estritamente limitado a profissões que trazem risco. Mas isso está aí e não há muitas chances de que esse sistema de regulamentação seja posto de lado. Por isso, para que eu estabeleça meus argumentos, ainda são necessárias razões para não se regulamentar a profissão de Físico ainda que o sistema de regulamentações continue.

Regulamentar a Física como profissão exige a delimitação de que atividades serão privativas de um físico, que só ele poderia desempenhar. Entretanto, um coisa que salta aos olhos é o fato de que não existe realmente um corpo de atividades acima das quais você pode colocar o rótulo “Física”. Física não é um conjunto de atividades ou técnicas mas um conjunto de conhecimentos. Não é como a Medicina, a Fisioterapia, a Engenharia Elétrica, a Enfermagem ou a Geologia –  que, além de seus respectivos conjuntos de conhecimentos associados, possuem um arsenal de técnicas e atividades práticas que as caracterizam. Certamente um físico está habilitado por seus conhecimentos a desempenhar diversas tarefas úteis, mas não são tarefas privativas que qualquer outro profissional não possa aprender e desempenhar com a mesma eficiência.

Pode-se objetar a essa observação dizendo que há sim uma tarefa que envolve grandes riscos e que seria primordialmente tarefa dos físicos: dosimetria de radiações e manipulação de elementos radioativos. Eu discordo fortemente dessa visão. Essa é uma atividade que a gigantesca maioria das pessoas formadas em Física (eu inclusive) não está apta a desempenhar porque não há treinamento específico no curso. Os poucos físicos que são capazes de lidar com substâncias radioativas são aqueles que participaram algum projeto de pesquisa envolvendo essas substâncias. Finalmente: as técnicas  para se lidar com essas substâncias não exigem uma formação específica em física para serem aprendidas. Essas não são atividades que exigem todo o conhecimento adquirido em um curso de quatro anos de física, mas que qualquer profissional de física, química, engenharia ou áreas correlatas poderia desempenhar depois de um curso técnico específico.

Finalmente, qual seria o efeito de se regulamentar Física como profissão?

Seria criada uma reserva de mercado para certas atividades. Muitos vêem isso como vantagem, eu vejo como problema. Hospitais e departamentos de radiologia seriam obrigados a contratar físicos, para empregos incompatíveis com todo o treinamento que esses profissionais possuem. É ridículo supor que exige-se uma formação completa em física para se dosar a radiação de um aparelho de raios X. Basta uma formação de técnico em radiologia. E não se engane – a remuneração vai ser compatível com a de um técnico. Ninguém vai pagar salário de nível superior para fazer essa atividade.

Há quem argumente a favor da regulamentação pela criação de um piso salarial e aumento da remuneração de físicos. Mas físicos não ganham mal. Em uma recente pesquisa da FGV física era o 31º curso superior mais bem remunerado, com salário inicial médio de R$ 3500.

A necessidade de treinamento específico vai fazer com que se insira, nos cursos de bacharelado em física, disciplinas obrigatórias de instrumentação e dosimetria de radiações, e a grande maioria dos profissionais de física não vai trabalhar nessas áreas.

Diversas atividades que hoje são desenvolvidas com sucesso por pessoas formadas em física ficariam de fora da legislação: computação, finanças, projeto de produtos, … e vão sobrar para a física tarefas menos remuneradas e talvez mais facilmente conectáveis ao curso de graduação: metrologia, dosimetria, …

Finalmente, a Fisica não é, nunca foi e nunca será privativa de um clube de pessoas que resolvam delimitá-la. Por duas razões.

Em primeiro lugar, Física, como um corpo de conhecimentos teóricos, pode ser aprendida por qualquer um. Não é um processo de iniciação misterioso que está fora do alcance dos outros mortais. Qualquer um com tempo e disposição pode pegar os livros e entender do que se trata o assunto. Aliás, boa parte dos dois primeiros anos dos cursos de física que é aprendido pelos físicos nos cursos de graduação é compartilhado com quase todos os cursos de ciências exatas, e muito da parte mais avançada do curso é compartilhada com outros cursos como química, engenharia elétrica e outros.

Além disso, a Física não é delimitável. É IMPOSSÍVEL traçar uma linha e dizer que o que está lá dentro é Física e o que está fora não é. Isso não é uma característica apenas da física mas de todo campo que é eminentemente científico e não técnico. Também é impossível delimitar o que um biólogo faz, o que um químico faz, o que um matemático faz, o que um sociólogo faz, o que um estatístico faz. Há uma interface tão tênue e tão fluida entre essas áreas que qualquer um é capaz de estudar, aprender e ingressar em qualquer atividade que um físico for capaz de exercer.

É assim que é, e é assim que tem que ser. Essa é a nossa riqueza e o que realmente diferencia um profissional com uma forte formação científica e quantitativa: não há limitações no que ele pode aprender a fazer.

Informação, entropia, geometria e teorias de campo médio.

domingo, 15 nov 2009; \46\America/New_York\America/New_York\k 46 1 comentário

(eu perdi um sinal em algum lugar por aí, se você achar por favor indique no comentário)

Este post é uma espécie de continuação do post sobre Lógica Bayesiana, ainda que não exatamente. Mas estamos no mesmo espírito. Lá eu discuti a respeito de como raciocinar sobre informação incompleta. Entretanto, quando há informação incompleta uma coisa é certa: com o tempo podemos ganhar informação. E se há nova informação relevante para saber sobre algo, a probabilidade que atribuo – no sentido do post anterir, o registro quantitativo da minha crença racional sobre esse algo – deve certamente mudar.

A grande pergunta então parece ser: como eu devo mudar minha atribuição de probabilidades – minha crença racional – quando adquiro nova informação? Bem, isso sugere uma forma de quantificar informação: se informação causa mudança na minha atribuição de probabilidades, então se eu puder medir quão longe estão minhas atribuições prévia (prior, antes da nova informação) e posterior (posterior, depois da nova informação), então poderei medir quão importante é essa nova informação. Vamos fazer como antes então e propor uma medida de informação e vinculos que nos permitam restringi-la a uma medida única(1).

Leia mais…

Lógica Bayesiana

sexta-feira, 13 nov 2009; \46\America/New_York\America/New_York\k 46 6 comentários

Todo mundo conhece a lógica clássica, aquela segundo o qual proposições são julgadas verdadeiras ou falsas através de certos procedimentos de consistência. Mesmo que não conheça as regras da lógica formal, certamente já as usou e saberia reconhece-las. Poucos nunca ouviram o tal exemplo sobre a mortalidade ou não de Sócrates.  A lógica formal nos fornece uma forma de raciocínio: seguindo suas regras básicas eu consigo formas de, de posse de afirmações que eu julgo verdadeiras,  julgar a validade de outras. Mais ainda, na lógica não há espaço para ambiguidade e meia-certeza — o valor de uma proposição é verdadeiro ou falso, fim de papo. E note: ainda que eu não consiga determinar esse valor, está estabelecido desde o princípio que ele é verdadeiro ou falso.

Certamente isso fornece ferramentas úteis mas há uma grande limitação: como eu deveria raciocinar se eu não possuo informação completa sobre algo? A lógica formal não serve para isso. Eu não posso fazer perguntas como: “dado que eu acho a proposição P1 maaais ou menos certa, qual é o valor de P2?”. Há formas de lidar com essa questão de informação parcial? Isso é o que os probabilistas da escola bayesiana se perguntaram e o que eu pretendo dizer aqui é como responder positivamente essa pergunta.

A grande pergunta inicial é: como eu quantifico informação incompleta sobre algo? Em outras palavras, como eu digo a você quão fortemente eu acredito que algo é verdade? Uma vez determinada essa resposta a próxima pergunta é: como eu devo proceder, uma vez estabelecida o valor de uma proposição, para determinar o valor de outra proposição derivada dessa? Essas são as duas perguntas que eu vou tentar explicar como são respondidas pela teoria bayesiana.

Então para começo de conversa vamos estabelecer como se mede o grau de plausibilidade de algo (A. Caticha gosta de chamar de “degree of rational belief”, eu concordo com ele). Para cada proposição vamos criar uma função que associa a cada outra proposição um número real — a princípio irrestrito:

\Phi_{p} : \mathcal{P} \to \mathcal{R}, \forall p\in\mathcal{P}.

Aqui, \mathcal{P} é a coleção de proposições e \mathcal{R} o conjunto dos reais. Ao número \Phi_{P_1}(P_2) vamos chamar plausibilidade de P_2 no ambiente lógico (gerado por) P_1. Ou seja, esse número mede o quanto eu acredito em P_2 assumindo P_1 como “axioma”. Quanto maior o número maior minha crença.

Bem, não faz muito sentido apenas fazer isso. Preciso de algumas regras básicas para essa função. Essas regras devem me garantir que quando eu faço o “limite de certeza absoluta” eu recobre os resultados da lógica formal. Essas regras são chamadas axiomas de Cox e são bem simples e intuitivas. Melhor ainda: elas determinam \Phi_{p} quase univocamente (vamos entender esse quase adiante). Os axiomas de Cox são os seguintes:

A plausibilidade da negação de uma proposição é determinada assim que eu conheço a plausibilidade da própria proposição. Ou seja(2):

\Phi_{A}(\neg B) = F(\Phi_{A}(B)).

Parece razoável: quanto mais acredito em B, menos acredito em \neg B.  Note que há aqui a afirmação implícita de que a função que liga a plausibilidade de uma proposição com a plausibilidade da sua negação é única e independe de qual proposição estamos falando, nem do “ambiente lógico”.

A operação de negação é idempotente – ou seja, se eu aplicar a negação duas vezes, devo recuperar a proposição original(\neg \neg B = B). Essa propriedade nos fornece uma equação funcional para F(\cdot):

\Phi_{A}(\neg \neg B) = \Phi_{A}(B),

F(\Phi_{A}(\neg B)) = \Phi_{A}(B),

F(F(\Phi_{A}(B))) = \Phi_{A}(B).

Ou seja, para todos os valores u pertencentes à imagem de \Phi_{\cdot}(\cdot) devemos ter que:

F(F(u)) = u.

Ou seja, a função F(⋅) é idempotente também. Vamos reservar essa propriedade de F(\cdot) e prosseguir para o segundo axioma de Cox:

A plausibilidade da conjunção de duas proposições A\wedge B dada uma terceira proposição C (ou seja, \Phi_{C}(A \wedge B) ) deve depender apenas da plausibilidade de:

(1) plausibilidade de A dado C: \Phi_{C}(A);
(2) estabelecida a plausibilidade de A, quão plausível é B dado C : \Phi_{C\wedge A}(B).

Ou seja, estou assumindo a existência de mais uma “função universal”:

\Phi_{C}(A \wedge B) = G( \Phi_{C}(A) , \Phi_{C\wedge A}(B) ).

Também parece razoável: quando quero determinar se duas proposições são simultaneamente verdadeiras, estabeleço primeiro a validade da primeira e depois, dada a primeira, estabeleço a validade da segunda. É um pouco mais difícil tirar uma equação funcional para G(⋅ , ⋅) mas não é impossível. Considere a expressão:

\Phi_{B}(A_1 \wedge A_2 \wedge A_3).

Há duas formas diferentes de decompor essa expressão usando a função G(\cdot,\cdot): lembre-se que o conectivo \wedge é  associativo e comutativo e portanto:

\left(A_1 \wedge A_2\right) \wedge A_3 = A_1 \wedge \left(A_2 \wedge A_3\right).

Uma inferência consistente exige que essas duas formas dêem o mesmo resultado(3). Portanto:

G( \Phi_{B}(A_1 \wedge A_2) , \Phi_{B\wedge A_1 \wedge A_2}(A_3) ) = G(\Phi_{B}(A_1) , \Phi_{B\wedge A_1 }( A_2 \wedge A_3) ).

Aplicando novamente a definição de G(\cdot,\cdot):

G( G(\Phi_{B}(A_1),\Phi_{B \wedge A_1 }( A_2)) , \Phi_{B\wedge A_1 \wedge A_2}(A_3) ) = G(\Phi_{B}(A_1) , G(\Phi_{B\wedge A_1 }( A_2),\Phi_{B\wedge A_1 \wedge A_2 }( A_3)) ).

Se isso deve valer para quaisquer proposições então novamente tenho um equação funcional válida para quaiser u, v e w na imagem de \Phi_{\cdot}(\cdot)(4):

G(u,G(v,w)) = G(G(u,v),w).

Ou seja: a função G(⋅ , ⋅) também é associativa.

Um leitor apressado deve se perguntar nesse momento: e daí que você tem duas equações funcionais para essas funções arbitrárias F(⋅) e G(⋅ , ⋅) que você postulou do chapéu? O ponto é que essas duas equações funcionais generalíssimas definem univocamente estrutura de inferência! Sério mesmo. Não to brincando. E você conhece essa estrutura.

O coração da questão deriva de dois teoremas devidos a Cox. Para conseguir o primeiro teorema vamos usar o seguinte resultado (não vou provar aqui porque a prova é extensa e é encontrada na referência [2]).

Teorema da função associativa: dada qualquer função associativa G(u,v), existe uma função monotônica g(⋅) tal que:

g(G(u,v)) = g(u) g(v)

Isso é muito conveniente pois se escrevermos de novo a definição de G(\cdot,\cdot), temos:

\Phi_{C}(A \wedge B) = G( \Phi_{C}(A) , \Phi_{C\wedge A}(B) ),

e usarmos o teorema da função associativa, então obtemos:

g\left(\Phi_{C}(A \wedge B)\right) = g\left(\Phi_{C}(A)\right) g\left( \Phi_{C\wedge A}(B) )\right)

E agora posso simplesmente regraduar minha definição de plausibilidade. Uma vez que g() é monotônica, e portanto vai preservar a ordem com que eu classifico coisas como mais ou menos plausíveis, eu posso redefinir plausibilidade como:

\phi(A|B) = g(\Phi_{B}(A))

Mudei ligeiramente a notação para que o leitor possa apreciar melhor o que acontece com a antiga expressão que define G(⋅ , ⋅) com essa nova definição de plausibilidade:

\phi(A \wedge B | C) = \phi(B|C \wedge A) \phi(A|C)

Mas veja se essa não é a boa e velha regra do produto da teoria de probabilidades!!! Usando a comutatividade de \wedge eu ainda posso notar que:

\phi( B | C \wedge A) = \dfrac{\phi (A|C \wedge B) \phi (B|C)}{\phi (A|C)},

e essa não é nada mais que a regra de Bayes da teoria de probabilidades!

Mas calma, a nova função plausibilidade \phi(\cdot| \cdot) ainda não é uma probabilidade: não basta seguir essas duas regras, há uma série de condições na teoria axiomática de probabilidades para chamar algo com esse nome e a nossa função ainda não satisfaz todas. Tudo bem: ainda nos falta estudar as propriedades de F(\cdot)! Quem sabe isso ajude.

Novamente precisamos criar uma situação em que a demanda por consistência delimite as propriedades da função plausibilidade. Por exemplo temos a seguinte situação(5):

\phi(A \wedge B | C) = \phi(B|C \wedge A) \phi(A|C) =F\left(\phi(\neg B|C \wedge A)\right) \phi(A|C) .

Mas, pela regra do produto que deduzimos acima:

\phi(\neg B |C \wedge A) = \dfrac{\phi(A \wedge \neg B |C)}{\phi(A|C) }

e então:

\phi( A \wedge B | C) =\phi(A|C) F \left( \dfrac{\phi(A \wedge \neg B |C)}{\phi(A|C) }\right)

Mas lembre-se que a conjunção A \wedge B é simétrica, portanto toda essa expressão fica invariante se eu trocar A por B. E assim:

\phi(A|C) F \left( \dfrac{\phi(A \wedge \neg B |C)}{\phi(A|C) }\right)=\phi(B|C) F \left( \dfrac{\phi(B \wedge \neg A |C)}{\phi(B|C) }\right)

Se isso deve valer independente de quais são as proposições A, B e C, então eu posso, por exemplo, escolher uma particular proposição \neg B = A\wedge D. Note que com essa escolha temos as seguintes identidades: A\wedge \neg B = \neg B\neg A \wedge B = \neg A. Então:

\phi(A|C) F \left( \dfrac{\phi(\neg B |C)}{\phi(A|C) }\right)=\phi(B|C) F \left( \dfrac{\phi(\neg A |C)}{\phi(B|C) }\right)

\phi(A|C) F \left( \dfrac{F\left(\phi( B |C)\right)}{\phi(A|C) }\right)=\phi(B|C) F \left( \dfrac{F\left(\phi(A |C)\right)}{\phi(B|C) }\right)

O que finalmente resulta em mais uma equação funcional para F(⋅):

uF \left( \dfrac{F\left(v\right)}{u }\right)=v F \left( \dfrac{F\left(u\right)}{v }\right)

Novamente sem demonstrar, vou simplesmente afirmar que a solução mais geral dessa equação, submetida à condição de idempotência que deduzimos acima, é dada por:

F(u)^\alpha=(1-u^\alpha).

Note que para um \alpha qualquer isso restringe o dominio da função F(⋅), e portanto a imagem da função \phi(\cdot|\cdot), ao intervalo [0,1]. E veja o que acontece então com a regra que define F(⋅):

\phi(\neg A | B) ^\alpha + \phi(A|B)^\alpha = 1

Uma nova regraduação permite definir uma função Pr(A|B) =\phi(A|B)^\alpha com as seguintes propriedades:

  • Pr(A|B)\in[0,1]
  • Pr(A|B) + Pr(\neg A|B) = 1
  • Pr(A_1\wedge A_2|B) = Pr(A_2| B \wedge A_1)Pr(A_1 |B)

Esses não são exatamente os axiomas de Kolmogorov para a teoria de probabilidades mas… close enough para um post de blog. Isso tudo pode ser refinado com o devido grau de rigor matemático para satisfazer os exatos axiomas da teoria da probabilidade.

O que foi obtido com essa massagem matemática toda?

  1. É possível definir um sistema lógico de inferência baseado em informação incompleta e incerteza que atribui uma plausibilidade a cada proposição.
  2. Esse sistema lógico é único, a menos de uma regraduação monotônica da função plausibilidade. Isso faz com que uma ordenação segundo a plausibilidade seja única, uma vez que regraduações monotônicas não alteram essa ordem.
  3. A função plausibilidade satisfaz todas as regras que uma probabilidade legitima deve satisfazer (aqui não provei isso, mas apenas mostrei algumas coisas – para fazer isso rigorosamente precisa-se definir uma “sigma-álgebra de proposições”).

E qual é a utilidade prática disso? Bem… o mundo está cheio de situações de inferência baseada em informação incompleta. Particularmente, todo problema que depende de dados empíricos é, em essência, um problema dessa natureza e todo problema de inferência em ciência é assim. Uma vez que o único sistema de inferência para informação incompleta – como aí mostrado – é aquele que usa as regras  da teoria da probabilidade é razoável se supor que efetivamente usar essas regras explicitamente oferece vantagens sobre os métodos estatísticos ad hoc frequentemente usados, como os métodos de mínimos quadrados e outras formas de fitting de dados. Na verdade esse processo de inferência vai muito além disso – ele oferece ferramentas de modelagem física, de interpretação de modelos, de planejamento de experimentos e ainda mais. Mas disso eu vou tratar em um próximo post.

Notas:

(1) — Se você se interessa por nomes, o que se segue é devido a um certo número de pessoas — Edwin Jaynes, Harold Jeffreys e particularmente Richard Cox.

(2) — Estou usando os seguintes simbolos para os conectivos lógicos:

  • \neg — negação: \neg \mbox{Verdadeiro} = \mbox{Falso}
  • \wedge — o conectivo E (conjunção): \mbox{Verdadeiro} \wedge \mbox{Falso} = \mbox{Falso}
  • \vee — o conectivo OU (disjunção inclusiva): \mbox{Verdadeiro} \vee \mbox{Falso} = \mbox{Verdadeiro}

(3) — Lembre-se: queremos um sistema racional de atribuir um grau de confiança a algo.

(4) — Que pode ser obtida fazendo: u = \Phi_{B}(A_1), v = \Phi_{B \wedge A_1 }( A_2)) e w = \Phi_{B\wedge A_1 \wedge A_2 }( A_3).

(5) Note que eu tinha definido F(⋅) para a função original \Phi_{A}(B). Entretanto fizemos uma regraduação monotônica então nada me impede de abusar da linguagem e redefinir F(x) \to F(g(x)).

Referências:

[1] E. T. Jaynes, Probability Theory, the Logic of Science.
[2] A. Caticha, Lectures on Probability, Entropy, and Statistical Physics — arXiv:0808.0012v1 [physics.data-an]
[3] A. Caticha,  Quantifying Rational Belief — arXiv:0908.3212v1 [physics.data-an]

O Nobel de Física de 2009

terça-feira, 6 out 2009; \41\America/New_York\America/New_York\k 41 4 comentários

Saiu há algumas horas os nomes laureados com o Premio Nobel de física de 2009. O chinês Charles Kao ficou com metade do prêmio por suas contribuições à comunicação com fibras óticas. A outra metade foi dividida entre o canadense Willard Boyle e  o americano George E. Smith, pela invenção dos dispositivos CCD (Charge-coupled Device)  . Para dizer a verdade conheço pouco a respeito dos nomes, mas considero a decisão de dar o prêmio para essas duas áreas muito acertada.

As duas descobertas/invenções são extremamente técnicas e podem não aparentar tão interessantes à primeira vista. Entretanto são duas descobertas técnicas que transformaram a face da Terra. Não apenas influenciaram nossa capacidade tecnológica, mas ampliaram a nossa capacidade de descobrir mais sobre o universo, afetaram de maneira irreversível nossa cultura e, eu diria sem medo de exagerar, aumentaram o potencial da nossa civilização.

Ambas são tecnologias ubíquas. Quase todos nós as usamos diariamente.

As fibras óticas, não preciso dizer, estão em um dos pilares da nossa rede global de comunicação. Nenhuma ideologia, religião, teoria economica ou doutrina política revolucionou tanto o mundo quanto a criação dessa rede. Praticamente todas as transações bancárias, chamadas telefônicas de longa distância, a comunicação entre empresas, entre pessoas, entre governos, notícias, fofocas de celebridades, bobagens, informações valiosas, colaborações científicas, informações industriais, cartas de amor…  tudo isso hoje chega ao seu destino por fibras óticas. Os diferentes cantos do planeta se comunicam instantaneamente por causa das fibras óticas e isso transformou um planeta dividido em uma civilização global. É impossível conceber o mundo funcionando como funciona hoje sem essa tecnologia.

Os dispositivos CCD, menos conhecidos talvez, estão em todas as máquinas fotográficas digitais. Mas revolucionaram muito mais do que a arte da fotografia e os álbuns de família. Talvez seja mais difícil apreciar como a difusão de uma método extremamente barato de produzir imagens instantaneamente é capaz de mudar a maneira como pensamos, conhecemos o mundo, fazemos ciência, produzimos bens e os consumimos. A revolução da imagem é sorrateira, mas eu duvido que você que lê esse texto não tem pelo menos meia dúzia de fotos suas convertidas em bits, circulando agora pelas fibras óticas que ligam o mundo!

Talvez haja tempo para depois escrever  aqui sobre os detalhes técnicos ligadas a essas técnicas, mas para apreciar o que essas técnicas fizeram pela humanidade basta olhar em volta de você.

Leia mais…

O guia do astronomo amador, parte I

quarta-feira, 29 abr 2009; \18\America/New_York\America/New_York\k 18 7 comentários

”Quero comprar um telescópio! Será que esse aqui é bom??”

Essa é uma pergunta feita dezenas e dezenas de vezes em fóruns de internet e comunidades do Orkut sobre astronomia. Muitas pessoas se interessam por astronomia e a indústria fornece equipamentos das mais variadas qualidades e preços por aí. Existem dezenas de guias na internet de como se escolher um telescópio, mas como eu escrevi recentemente sobre isso na comunidade de física do orkut, resolvi fazer um refactoring do resultado e colocar aqui no blog, para ficar mais acessível.

Também notei uma falta muito grande de novos textos sobre o assunto. O Atlas Celeste[1] do Ronaldo Rogério de Freitas Mourão (que tinha um prefácio do Drummond!!) e programas como o ”Olhando para o Céu” da TV Cultura, e os livros do Isaac Asimov (Alpha Centauri, principalmente) eram meu deleite na infância e adolescência. Infelizmente não vejo mais textos novos de divulgação de astronomia, que estimulem esse hobby maravilhoso da astronomia amadora.

Por isso decidi escrever uma série longa de posts sobre o assunto (dessa vez eu vou cumprir a promessa) e tentar resgatar isso.

Para começar no espírito do que a astronomia amadora pode proporcionar de emoção e desse sentimento de maravilhamento com o mundo que eu acho tão essencial para se engajar na ciência, ou pelo menos para apreciá-la, minha epígrafe para esse post (que chique!) é do Olavo Bilac:

“Ora (direis) ouvir estrelas! Certo
Perdeste o senso!” E eu vos direi, no entanto,
Que, para ouvi-Ias, muita vez desperto
E abro as janelas, pálido de espanto …

E conversamos toda a noite, enquanto
A via láctea, como um pálio aberto,
Cintila. E, ao vir do sol, saudoso e em pranto,
Inda as procuro pelo céu deserto.

Direis agora: “Tresloucado amigo!
Que conversas com elas? Que sentido
Tem o que dizem, quando estão contigo?”

E eu vos direi: “Amai para entendê-las!
Pois só quem ama pode ter ouvido
Capaz de ouvir e de entender estrelas.”


Lição 1 – Não compre um telescópio ainda!!!

A primeira informação que você precisa saber é que um telescópio que custe em torno de 200 reais ou menos (em 2009) em uma loja não-especializada certamente é ruim. Telescópios são objetos caros, de manufatura complicada. Se você deseja um bom equipamento amador, vai ter que fazer um pequeno investimento. Há muitos telescópios baratos por aí, mas a maioria deles são para uso terrestre – para olhar paisagens à distância.  Para uso astronômico, talvez sirvam para ver mais ou menos a lua e nada mais. Não têm qualidade ótica nem abertura suficiente para que olhar para objetos astronômicos seja uma experiência de fato agradável.

Para entender porque, é necessário perceber que os objetos celestes, apesar de serem enormes e emitirem vastíssimas quantidades de energia luminosa, são pontos de luz muito tênues quando vistos no nosso céu. Estão muito distantes, fazendo com que a quantidade de luz proveniente desses objetos que atinge os nossos olhos muito pequena. Para se ter uma idéia, imagine brilho de uma lampadinha daquelas que usamos para enfeitar árvores de natal. Elas tipicamente emitem uma potência em torno de 1W cada uma. Se você ficar a dois metros de distância de uma dessas lâmpadinhas e olhar em sua direção, a potência luminosa que vai entrar no seu olho proveniente dela será da ordem de 2 milionésimos de um watt.

Toda a luz que entra no seu olho quando você olha para Sirius, a estrela  mais brilhante do nosso céu,  uma estrela gigantesca e bastante próxima da Terra para os padrões astronômicos, equivale a 5 \times 10^{-13} watts, ou 0.0000000000005 W. Ou seja: uma lampadinha de natal a 2 metros de distância é, aparentemente, 4 milhões de vezes mais brilhante que a estrela mais brilhante do céu !!

Isso ocorre por causa da tremenda distância que nos separa dessa estrela. Na realidade, a totalidade da luz emitida por Sirius equivale a um número tão grande de lampadinhas de natal que é difícil até de imaginar. Sirius emite pouco mais de 25 vezes mais luz que o nosso Sol, e equivale a 10^{28} lampadinhas – isso é 1 seguido de 28 zeros. O problema é que a nossa distância a essa estrela é tão grande, que a fração da área total para onde essa luz está se dispersando que corresponde ao nosso olho é ínfima.

Essa quantidade pequena de luz que recebemos é o grande fator limitante para a observação. O fator mais importante em toda construção de muitos equipamentos astronomicos é que a quantidade de radiação (luz, ou qualquer outro tipo) que nos atinge proveniente dessas fontes é muito menor do que a quantidade de radiação emitida por fontes mais próximas: principalmente o Sol e as fontes localizadas na Terra.

Por isso a variável mais importante a se observar em um telescópio é o que chamamos de abertura – qual é o diâmetro em milímetros da abertura por onde a luz entra no seu telescópio para ser manipulada. Quanto maior a abertura, mais luz o seu telescópio é capaz de captar e projetar no seu olho, tornando melhores dois aspectos: a resolução da imagem e a capacidade de observar objetos cada vez mais tênues. A nossa pupila tem em torno de 1cm² de área. Portanto, se temos um telescópio com 250mm de abertura, teremos uma área de captação  quase 4000 vezes maior, aumentando nessa mesma proporção a quantidade de luz que nosso olho recebe.

Essa é a principal causa de frustração com telescópios mal escolhidos. Um telescópio com abertura incompatível com o aumento que você deseja usar não vai mostrar nada além de borrões. E é o que acontece com esses equipamentos de baixo custo vendidos em lojas não-especializadas, com raríssimas exceções.

O que pode ser ainda frustrante, mesmo que você tenha um equipamento de primeira linha, é tentar usar um telescópio sem uma experiência prévia com astronomia. Não são equipamentos fáceis de manejar no começo. Leva um certo tempo a se acostumar com o campo de visão diminuto que um telescópio razoável possui e bastante treino até conseguir achar mesmo os objetos mais fáceis.

Por causa dessas duas coisas, comprar um telescópio antes da hora pode ser um tiro fatal no seu gosto por astronomia amadora. Mas não fique desanimado. Astronomia amadora é muito mais do que telescópios. Aqui eu pretendo ter um pequeno guia de como se tornar um astronomo amador bem sucedido e como se preparar para em pouco tempo poder aproveitar bem o que bons equipamentos astronômicos amadores podem oferecer.


Lição 2 – Como começar?

O primeiro passo para se tornar um astronomo amador é familiarizar-se com o céu. Escolha uma noite sem lua de céu bem limpo para olhar para o alto e observar por um tempo. Ao longo do tempo você vai perceber um lento movimento do céu, como se a esfera celeste girasse  constantemente do leste para o oeste – do nascente para o poente. No leste novas estrelas surgem, no oeste as que estão no céu somem. Esse movimento diário é conhecido de todos nós e é meramente devido à rotação da Terra em torno do seu eixo.

Outro movimento é um pouco mais sutil e exige mais do que apenas uma noite de observação. Se você marcar mentalmente a posição de alguns grupos de estrelas e observá-los seguidamente por várias noites no mesmo horário, perceberá que a cada dia que passa eles estão cada vez mais à oeste naquele mesmo horário. Se você olhar por um ano inteiro, verá que depois de um ano (sideral) aquele grupo de estrelas estará de novo na mesma posição naquele horário marcado. Aos que já conhecem isso, surpreendam-se com o fato de que muita gente ignora esse movimento do céu resultante da translação da Terra em torno do Sol. É fácil não perceber esse movimento sutil  com tantas luzes na cidade e tão pouco tempo para olhar para o céu. Aos que desconheciam esse efeito note no que ele implica: existem épocas certas do ano para observar certos objetos astronômicos!!

É fundamental que se entenda isso – esse fato básico levou ao início do interesse prático do homem pelo céu. Ao observar o movimento anual das estrelas as antigas civilizações podiam prever com muita precisão quando a estação das cheias chegaria e quando começaria a estiagem. As estrelas eram para eles um calendário natural – você pode dizer em que época está do ano sabendo que grupo de estrelas está  em certa porção do céu em um certo horário naquele dia.

Enquanto estiver procurando no céu as pegadas dos movimentos da Terra no sistema solar, procure observar que os grupos de estrelas são fixos – elas não se movem perceptivelmente umas com relação às outras. Formam figuras estáticas, sempre deslocando-se rigidamente para o oeste. Asterismo é o nome que se dá a um certo grupo de estrelas e certas figuras são associadas a esses grupos para facilitar sua identificação. Não confunda asterismos e constelações – originalmente ambos eram nomes para grupos de estrelas, hoje os astronomos usam o termo constelação não para identificar uma figura formada por um grupo de estrelas, mas uma certa região do céu. Apesar da distinção você vai provavelmente me ver usar os dois termos de forma intercambiável por vício pessoal. Mas mantenha na cabeça a distinção.

Agora que você está familiar com o céu, procure identificar as constelações mais notáveis. As três mais fáceis são o Cruzeiro do Sul, o Órion e o Escorpião. Suas estrelas formam figuras bem fáceis de acompanhar e são bem brilhantes. É muito útil ter uma carta celeste para saber quais constelações estarão no céu nesse dia e qual é a figura que você deve procurar. Quais estrelas estarão no céu em uma certa data depende da sua longitude, do dia do ano e do horário. Por isso um programa de computador ajuda nessas horas. Alguns sites de internet fornecem cartas celestes gratuitamente também. Na final do post vou comentar alguns sites e programas de computador que tornam a astronomia amadora muito mais fácil hoje do que no tempo dos anuários astronômicos e listas de efemérides.


Lição 3 – Cartas celestes

Carta celeste para o dia 1º de Maio as 22:00 na cidade de São Paulo

Carta celeste para o dia 1º de maio as 22:00 na cidade de São Paulo. Figure reproduced from http://www.heavens-above.com

Uma carta celeste é uma representação dos objetos astronômicos que estarão no céu em um certo horário de um certo dia do ano, em uma certa localização. É o objeto mais útil para se aprender a localizar estrelas, constelações e outros objetos. Apesar da carta ser exata apenas para o dia e horário em que foi feita, não é difícil usá-la para dias próximos – o movimento anual do céu é lento o bastante para que uma carta seja útil por vários dias.

Na figura ao lado vemos uma carta celeste para a cidade de São Paulo no dia 1º de maio de 2009, as 22:00. Os pontinhos escuros são as estrelas, que estão conectadas por tracinhos para facilitar o reconhecimento das constelações. A posição do  planeta Saturno e da Lua também estão marcados.

Usar a carta é bem fácil – coloque-a em posição horizontal, paralela à linha do horizonte, alinhando as marcações N, E, S e W com o Norte, Leste, Sul e Oeste respectivamente. Agora o que você vê no papel deve ser o exato reflexo do que está no céu nesse momento. Comparando o papel com o céu você pode identificar as constelações. Em breve, com um pouco de prática, você não vai precisar mais dela para constelações mais comuns e brilhantes.

Para obter uma carta como essa registre-se no site http://www.heavens-above.com, coloque a latitude e longitude de sua cidade (provavelmente já existe no banco de dados deles) e clique em ”whole sky chart”. Coloque a data e hora e pronto. Eis a sua carta celeste. Outra forma de obter uma é através do programa gratuito e open-source chamado Stellarium (http://www.stellarium.org/ – versões para windows, linux e mac). Esse programa realmente mostra uma simulação bem realista do céu noturno com muitos detalhes. Realmente vale a pena dar uma fuçada, mas eu acho que na hora de procurar mesmo um objeto uma carta celeste bem feita da região desejada no heavens-above ajuda muito mais.

Outro lugar para encontrar cartas celestes é o site da revista Astronomy (www.astronomy.com), onde também há muitos artigos e dicas sobre astronomia. Infelizmente ainda é difícil achar links em português. O site do CDA – Centro de Divulgação de Astronomia, um mini-observatório de divulgação de astronomia da USP de São Carlos [2]é  bom. O site da revista eletrônica Café Orbital, produzida pelo Observatório Nacional, também é muito bom e costuma ter bons cursos online gratuitos de astronomia (http://www.on.br/revista/).

Para terminar esse primieiro post, a lição número 4 será bem destacada:

Lição 4 – PROCURE UM GRUPO OU CLUBE DE ASTRONOMIA!!!!

Muitas cidades possuem clubes de astronomia, grupos de astronomos amadores e até mesmo observatórios de divulgação científica. Nesses lugares você vai encontrar a coisa que você mais precisa – pessoas experientes que podem te dar dicas e ajudar, e vai encontrar o que você mais quer – telescópios apontados para o céu

Fecho o primeiro post dessa série com uma pequena lista de lugares a visitar para os que moram no estado de São Paulo. Eu não conheço muita coisa fora do estado, então exigiria um pouco mais de pesquisa. Mas eu prometo que no próximo post vou tentar colocar mais contatos sobre o assunto pelo Brasil.

Grupos, clubes e centros de divulgação de astronomia no estado de São Paulo

CDA/CDCC – Centro de Divulgação de Astronomia – Centro de Divulgação Científica e Cultural
O CDA possui um pequeno observatório no campus da USP em São Carlos. O observatório abre durante os fins de semana para o público de forma totalmente gratuita. É só chegar e entrar. Monitores estão disponíveis para mostrar os telescópios e responder perguntas. Procure saber sobre as palestras de sábado a noite.

CASP – Clube de Astronomia São Paulo – http://www.astrocasp.com/home
Provavelmente o maior clube de astronomia do Brasil. Realiza cursos e eventos com frequencia na cidade de São Paulo e fora dela. Têm listas grandes de discussão por e-mail e seus membros chegam até a fazer pesquisa acadêmica séria!! (sim! A astronomia é uma ciência que ainda é muito beneficiada pelos amadores).

Grupo de astronomia Sputnik – http://sputnikers.blogspot.com/
Um grupo ainda pequeno criado por amigos estudantes da USP mas que frequentemente levam telescópios para a praça do relógio, no campus Butantã da Universidade de São Paulo na capital.

CEU – Centro de Estudos do Universo  – http://www.fundacaoceu.org.br
Uma fundação privada de divulgação científica localizada em Brotas-SP. Recebe turmas de estudantes e excursões. Possui telescópios, um planetário e monitores treinados para receber todo tipo de visitantes.

Mini-observatório INPE – Instituto Nacional de Pesquisas Espaciais – http://www.das.inpe.br/miniobservatorio/
Em São José dos campos há um observatório de divulgação científica com um belo telescópio Schmidt-Cassegrain de 280mm de abertura. Para agendar visitas com turmas telefone para o Departamento de Astronomia – (12) 3945-7200 falar com Valéria.

Notas

[1] Era um livro muito querido do meu pai, e ele me deu o exemplar dele quando eu era adolescente. Talvez tenha sido o melhor presente que eu já ganhei, pelo valor que tinha para ele e pela ânsia com o qual eu o queria.

Mulheres na Ciência – Grant ABC-L’Oréal-Unesco para Mulheres na Ciência

terça-feira, 28 abr 2009; \18\America/New_York\America/New_York\k 18 Deixe um comentário

(divulgado aqui graças ao post do Brain no Orkut que eu reproduzo aqui integralmente)

Prezados(as),

Encontram-se abertas até 8 de maio as inscrições para o Programa de Bolsa Auxílio
Grant ABC-L’Oréal-Unesco Para Mulheres na Ciência. O Programa visa apoiar projetos
científicos de alto mérito a serem desenvolvidos durante 12 meses por pesquisadoras
brasileiras em instituições nacionais e destina-se a quem tenha concluído o
doutorado a partir de 1º de janeiro de 2005.

As candidatas selecionadas – nas áreas de Ciências Físicas (1 bolsa), Ciências
Biomédicas, Biológicas e da Saúde (4 bolsas), Ciências Matemáticas (1 bolsa) e
Ciências Químicas (1 bolsa) – receberão uma bolsa auxílio grant no valor equivalente
a US$ 20.000 (vinte mil dólares) cada.

IMPORTANTE:

Pesquisadoras que já tenham se candidatado anteriormente e não tenham sido
contempladas com a bolsa podem inscrever-se novamente.

Mais informações e inscrições em: http://www.abc.org.br/loreal

Categorias:Ars Physica

Fraude eletrônica no Net Virtua – cuidado ao acessar sites bancários no Net Virtua

domingo, 12 abr 2009; \15\America/New_York\America/New_York\k 15 3 comentários

Um dos endereços de DNS do Net Virtua sofreu um ataque de DNS Cache Poisoning e está fazendo com que os usuários desse DNS sejam redirecionados a sites fraudulentos quando tentam acessar suas contas bancárias do Bradesco.

O problema foi reportado por  Walrus no seu blog do Stoa – http://stoa.usp.br/walrus/weblog/47454.html e eu confirmei aqui que de fato está ocorrendo esse problema com um dos DNS da Net. O problema não é com todos os DNS no entanto.

Para entender o que está acontecendo é preciso entender como funciona o sistema de endereçamento na WWW. Cada site na internet está armazenado em um computador e cada computador possuí um endereço que permite identificá-lo na rede. Esse endereço é chamado ”Endereço IP” e é uma sequência de quatro números. Por exemplo, o site  de busca do Google está localizado no endereço IP 64.233.163.103 (entre outros).

Entretanto, para fazer uma boa interface com usuários humanos que não querem decorar números, foi criada a URL – Universal Resource Locator – que é esse endereço que você escreve no seu navegador favorito (internet explorer ou firefox). Por exemplo, o URL do site de busca do Google é http://www.google.com .

Você já deve ter percebido que é preciso alguém que diga para o seu navegador qual é o endereço IP  que está associado com o URL que você digitou. Esse cara é o servidor DNS – Domain Name System. O DNS é um computador que tem um banco de dados onde ele associa URL’s e endereços IP de forma a informar o seu navegador em qual computador ele deve apontar para abrir o site que você pediu. Quando você conecta na internet normalmente se conecta automaticamente a um DNS do seu provedor de internet para resolver essas URL’s.

O que aconteceu é que alguém alterou definições de um dos servidores DNS do provedor Net Virtua e associou a URL que costumava apontar para o site do Bradesco (www.bradesco.com.br) para um IP de um computador que contém uma cópia do site do Bradesco. Nesse site eles requisitam uma série de dados e provavelmente salvam em seu banco de dados para usar depois de forma maliciosa.

A recomendação é que não seja usado nenhum site bancário se você usa o Net Virtua. Por enquanto só estamos sabendo de um DNS que foi atacado e apenas um banco que foi alvo desse ataque. Mas não se pode saber como a coisa está de verdade e é melhor esperar que essas instituições se manifestem dizendo que está tudo bem.

Enfim. De forma geral, tome cuidado com o tipo de informação que você compartilha em sites na internet. Se tiver duvidas sobre as informações que o site do seu banco está requisitando, não continue. Pare imediatamente e ligue para o SAC do seu internet banking perguntanto se é normal que site exija essas informações.

Em breve eu vou colocar um post com mais detalhes técnicos  e imagens do site fraudulento no meu blog  do Stoa e coloco um edit com o link aqui.

EDIT:

Mais detalhes sobre o problema e o site falso  http://stoa.usp.br/calsaverini/weblog/47466.html

Até esse momento (meia-noite e cinco, 13/abril/2009) 0 DNS que está envenenado continua de pé  e servindo o IP errado para o site do Bradesco.

Tentamos ligar na NET e no Bradesco, mas nenhum dos dois possuem serviços de atendimento adequados para receber esse tipo de report e nada parece ter sido feito até o momento pela NET.

Espalhem a notícia.

EDIT 2:

Aparentemente o problema foi corrigido no DNS afetado. Entretanto o Walrus, que reportou o problema em primeiro lugar encontrou relatos anteriores de poisoning nos servidores do Virtua. Isso significa que não é seguro usar o DNS do Virtua. O melhor é apelar para um servidor seguro e bem feito de DNS como o Open DNS (www.opendns.com). Isso resolve a coisa definitivamente.

Um gostinho amargo fica por duas razões:

1 – A NET não tem um sistema adequado de segurança para o serviço que presta e parece que ninguém está preocupado.

2 – Não há um canal decente de comunicação entre usuários mais avançados e o departamento técnico dos provedores de internet para que esse tipo de problema seja passado. Os atendentes do SAC não estão preparados para receber esse tipo de relatório de falha de segurança que precisa ser imediatamente passado para a área técnica.

No fim das contas: use o Open DNS, não importa qual seja o seu provedor. A verdade é que nenhum serviço desses presta.

Categorias:Ars Physica

Mecânica Estatística ou “como jogamos informação fora?”

quarta-feira, 25 fev 2009; \09\America/New_York\America/New_York\k 09 6 comentários

Uma pergunta me intriga mais que qualquer outra: como jogamos fora informação? Como selecionamos que pedaço de informação é mais crítico que outro?  Não estou me referindo a técnicas de memorização nem a interpretação de texto. Estou falando de física.

Uma grande área da física denominada Física Estatística é muitas vezes descrita como o estudo de como partimos da dinâmica microscópica de um sistema físico e descobrimos como ele se comporta macroscópicamente no limite termodinâmico – ou seja, no limite de muitos e muitos graus de liberdade. Quando fazemos isso partímos de um espaço de configurações com um certo número (grande) de graus de liberdade microscópicos:

\{x_{1},x_{2},\ldots,x_{N}\}      N\rightarrow\infty,

para um diagrama de fases macroscópico com um número pequeno de variáveis:

\{\theta_{1},\ldots, \theta_{p}\}.

É fácil ver que quantidade de informação que pode ser armazenada por p-variáveis, localizadas num volume \Omega_{p} p-dimensional, é da ordem de \log_{2}(\Omega_{p}) bits e portanto aproximadamente linear em p. Isso levanta a seguinte questão: para onde foi toda a informação contida nas variáveis x_{k} ???

Se as variáveis \theta_{k} são uma descrição macroscópico (N\rightarrow\infty) suficiente, a informação contida em x_{k} é tremendamente redundante?

Isso parece ser parte da resposta. Imagine novamente o exemplo que explorei no meu último post, da moeda lançada para cima. Naquela ocasião eu descrevi o espaço de configurações microscópico da moeda como uma série de atratores, caracterizados “macroscópicamente” por uma variável binária “cara” ou “coroa”. Para o que nos interessa com relação a várias perguntas macroscópicas, basta saber a que face para cima cada configuração corresponde. A mesma redução tremenda da quantidade de informação necessária é observada: a informação contida numa quantidade aparentemente infinita de órbitas possíveis para o moeda é resumida em apenas um mero bit: “cara” ou “coroa”.

Um sistema de spins (sem desordem – modelo de Ising) é algo similar. Da quantidade enorme de informação que podemos armazenar nas 2^N possíveis configurações de uma rede de spins (lembre-se sempre que no limite termodinâmico N\rightarrow\infty), apenas dois parâmetros interessam macroscópicamente para determinar todos os estados  macroscópicos – os acoplamentos K e H (alternativamente – a temperatura e o campo magnético, entropia e magnetização, ou qualquer outro par de variáveis termodinâmicas desse sistema).

O grupo de renormalização quando aplicado ao modelo de Ising oferece alguma luz: K e H são os dois únicos acoplamentos associados a operadores relevantes no ponto crítico desse modelo. Meu conhecimento limitado sobre o assunto entretanto não me permite enxergar mais do que isso… 😦 Eu ainda tenho muito o que estudar sobre isso (inclusive referências são bem vindas).

Então as perguntas são: como determinamos p – o número de variáveis adequadas para o tratamento microscópico de um sistema microscópico qualquer – e como, sabendo p, determinamos quais variáveis são as adequadas?

Na teoria de vidros de spin um problema similar surge. É fácil no modelo de Ising chutar quais são as variáveis relevantes macroscópicamente pelo feeling que temos de sistemas magnéticos: a energia livre tem dois mínimos que podem ser selecionados com a aplicação de um campo magnético. Em sistemas desordenados é beeeeem mais complicado. A energia livre tem um número infinito de mínimos, nem todos eles estáveis e pontos críticos – pontos em que um mínimo se multiplica em dois ou mais mínimos – ocorrem em continuamente para todos os valores abaixo de uma certa temperatura. A técnica de réplicas oferece uma forma de encontrar o parâmetro de ordem: a distribuição de overlaps. Note que o parâmetro de ordem é uma função, com infinitos graus de liberdade. Ela carrega bem mais informação que os dois acoplamentos do modelo de Ising.

Claro! Um vidro de spin é muito menos redundante. Há uma estrutura muito mais complexa de estados estáveis, que precisa de um número muito maior de parâmetros macroscópicos.

Isso tudo que eu falei é uma coisa muito superficial e muito geral. Eu não sei como responder a pergunta que eu coloquei para uma dinâmica qualquer. Eu percebo que o grupo de renormalização tem algo a dizer sobre isso, eu percebo que a teoria de réplicas tem algo a dizer sobre isso, percebo que a teoria da informação tem muito a dizer sobre isso, mas não consigo enxergar nenhum princípio agregador que torne universal a técnica de encontrar o menor número de variáveis que representa adequadamente um sistema macroscópico.

As vezes eu acho que a resposta já existe e eu estou aí vacilando. A falta de uma formação mais sólida em mecânica estatística mais moderna, sistemas dinâmicos e teoria da informação me atrapalha – até 1 ano atrás eu nem imaginava estar trabalhando com essas coisas.

Talvez não. Talvez a resposta não exista ainda. Se não existir é uma boa chance de se fazer contribuições interessantes à física estatística e à teoria da informação.

Probabilidade?

domingo, 22 fev 2009; \08\America/New_York\America/New_York\k 08 7 comentários

O conceito de probabilidade, e das grandezas associadas com a probabilidade, é uma dessas questões na ciência que levantou polêmicas, gerou inimizades e fomentou discussões das mais acaloradas. Como outros conceitos importantes, a idéia de probabilidade esteve no ar por séculos, antes que as primeiras construçoes matematicamente mais formais fossem produzidas. Já em 1657 foi publicado o Libellus de Ratiociniis in Ludo Aleae (livro de raciocínios sobre os jogos de azar) por Christian Huygens(*). Nessa época o foco da teoria das probabilidades era exatamente esse: como eu devo apostar de forma racional para ter lucro. Pode parecer um raciocínio talvez mundano ou indigno demais para alguns, ou algo que demonstra qualidades que muitos idealistas não esperam encontrar nos seus grandes ícones da história da ciência. Mas o fato é que esse foi um tema que preocupou as mentes mais brilhantes do século XVII em diante. Pascal, os Bernoulli, de Moivre, Euler e Laplace são alguns poucos dos nomes que investigaram sobre essa ciência indigna da aposta.

E então, que raios é uma probabilidade?

Duas coisas são normalmente subentendidas quando a palavra probabilidade é usada no nosso discurso cotidiano – e isso se reflete também no discurso científico. Quando eu digo que é muito provável que você me encontre na lanchonete do IF-USP nas segundas feiras as 14 horas quero dizer que na maior parte das segundas-feiras em que você me procurar nesse local e horário eu estarei lá . Estou fazendo uma afirmação sobre a freqüência de um certo evento num certo universo de situações repetitivas. Estou sendo frequentista.

Quando eu digo que é muito provável que sua namorada goste do anel que você comprou para pedí-la em casamento não estou fazendo o mesmo tipo de afirmação. Não estou dizendo a você que se procurar dar o presente para ela repetidas vezes, vai ter sucesso na maioria delas. Estou dizendo que, dado o conhecimento que eu tenho da sua namorada e do gosto dela por anéis, tenho um elevado grau de confiança no sucesso do anel como presente. Estou quantificando minha crença sobre algo de forma racional. Estou sendo bayesiano.

Thomas Bayes foi um clérigo inglês do século XVIII, que descobriu um teorema na teoria de probabilidades cuja interpretação divide até hoje as pessoas que usam probabilidades em seu cotidiano. O teorema de Bayes diz simplesmente que:

P(A|B) = \frac{P(B | A)\, P(A)}{P(B)}

Onde P(A|B) quer dizer a probabilidade do conjunto de eventos A tomando-se o conjunto de elementos B como dados. Um frequentista vê o teorema de Bayes como um truísmo derivado apenas de propriedades óbvias de conjuntos. Um bayesiano vê como uma ferramenta de raciocínio.

Suponha que desejássemos um método de estabelecer o quão confiamos em uma proposição, dado que confiamos em uma outra com um certo grau. Ou seja, queremos estabelecer um número C(P1|P2) que nos diz o quão confiável é a afirmação P1, dado que eu confio na afirmação P2. Há uma série de coisas que nós gostariamos que esse grau de confiabilidade respeitasse. É possível mostrar (**) que um conjunto bem razoável de exigências resulta em uma definição unívoca para as regras matemáticas que nossos números C(P1|P2) devem satisfazer (teorema de Cox). O que impressiona é que essas regras são transposições exatas dos axiomas de Kolmogorov para a teoria de probabilidade para o campo da lógica de sentenças. Trocando em miúdos, esse sistema lógico que atribui um grau de confiança para cada proposição é formalmente idêntico ao sistema lógico que associa probabilidades a eventos.

Isso é bem estranho para um físico. Nós estamos acostumados a chamar de probabilidades propriedades físicas do nosso sistema físico em questão. São coisas intrinsecas aos nossos sistemas físicos que dependem apenas da sua dinâmica interna. Qual é a probabilidade de um certo decaimento nuclear ocorrer nos próximos 30 segundos é algo que não deve depender de quanto eu acho confiável que isso aconteça! Qual é a probabilidade daquela partícula visitar tal região do espaço de fase deveria depender apenas da sua dinâmica e não da minha capacidade de aferir confiabilidades!

Acalme-se. Não estamos falando da mesma coisa. É claro que existe uma propriedade física associada à sua partícula que quantifica quão frequentemente ela visita uma certa região do espaço de fases. É a probabilidade frequentista!!! Ou melhor, vamos dar um nome mais adequado a ela: é a freqüência!!! Você não precisa abdicar da objetividade do seu universo para ser bayesiano. O que você precisa fazer é reconhecer que existem duas coisas: as freqüências e as probabilidades, e que as duas podem ser usadas para muitas coisas.

E o que eu ganho com isso? O que eu ganho usando probabilidades como um sistema formal de lógica? Eu ganho uma ferramenta de raciocínio no teorema de Bayes. Na visão levantada pelo teorema de Cox, o teorema de Bayes é a forma correta de atualizar sua confiança ou crença em algo quando obtém novas informações. Isso abre possibilidades. O que isso tem a ver com o aprendizado de sistemas que processam informação (como o cérebro por exemplo) ?  Nosso raciocínio segue a regra de Bayes? Sistemas computacionais que aprendem usando a regra de Bayes são eficientes? (SIM!) O que isso tudo tem a ver com teoria de informação? Onde em física estamos falando de freqüências e onde estamos falando de probabilidades? Isso serve para alguma coisa?

E o que eu perco pensando só em termos de freqüências? Há situações em que as vezes pensamos estar falando de freqüências, quando estamos de fato julgando possibilidades segundo informações prévias – portanto usando uma forma mais evidencial de probabilidade. Quando eu digo, por exemplo, que espero obter com \frac{1}{2} de probabilidade uma certa face de uma moeda quando a lanço para cima, estou falando de freqüências? Se eu estivesse, eu deveria em primeiro lugar perguntar: de onde vem a variabilidade de resultados do lançamento de uma moeda? É claro para mim que a variabilidade está nas condições iniciais. Também é claro que o sistema tem uma série de atratores no seu espaço de configurações – alguns correspondentes à face cara para cima, outros correspondentes à face coroa para cima. É claro ainda que, dada uma boa distribuição de condições iniciais, eu posso sortear igualmente atratores de qualquer um dos dois tipos. Então parece que eu estou falando mesmo de freqüências uma vez que eu estabeleço como eu pretendo jogar  a moeda. Eu espero que de fato metade das órbitas que eu sorteio no processo de lançamento resultem em cara, e metade em coroa e portanto espero que no limite de muitos lançamentos eu acabe terminando com 50% de caras e 50% de coroas. Bastante objetivo e racional.

Mas veja a quantidade de coisas que eu tive que assumir para concluir isso: um lançador “ergódico” e honesto de moedas, uma estrutura do espaço de fases da moeda. Tudo isso para mim soa como informação que eu estou assumindo ao tentar atribuir um grau de confiabilidade para o resultado cara ou coroa. Qualquer pessoa bem treinada pode “quebrar a ergodicidade” da moeda e sortear muito mais caras que coroas. Eu mesmo já consegui, mesmo tendo uma habilidade manual não tão grande.

Uma visão alternativa é: uma vez que a moeda é um objeto simétrico, e eu não tenho informação suficiente para supor uma assimetria do processo de lançamento da moeda, não é razoável dizer que eu não posso ter uma maior confiança injustificada em qualquer dos resultados? Se por acaso eu descobrisse que a moeda está sendo lançada de maneira assimétrica, eu poderia tentar estimar então o quão enviesados serão os resultados através da regra de Bayes

Enfim… eu não pretendia com esse post argumentar de maneira categórica em favor da visão bayesiana, mas levantar curiosidade sobre algumas relações interessantes:

  1. Probabilidades podem ser vistas não como freqüências físicas, mas também como níveis de confiança a respeito de proposições.
  2. Probabilidades podem ser vistas ainda como forma de codificar informação: por exemplo informação sobre a simetria da moeda.
  3. E se probabilidades podem ser vistas dessa forma, é importante ter em mente, quando usamos a palavra, se estamos de fato nos referindo à probabilidade bayesiana ou às freqüências físicas.
  4. Freqüências são difíceis de se definir na prática: eu não posso fazer infinitos repetidos experimentos e portanto terei incerteza quanto às freqüências. Mas incertezas são justamente representadas como probabilidades! Então freqüências e probabilidades são coisas diferentes ou então eu tenho uma definição circular.
  5. Se eu estou falando de informação, o que a entropia de Shannon tem a ver com isso?

Enfim. Isso é tudo um aperitivo para estimular curiosidade para…

… ler mais …

e buscar palavras-chave.

  • Inferência:
  • Probabilidade:
  • Jaynes, Laplace, Cox, Bayesian Inference
  • laws of physics as inference tools
Notas:
  • (*) Este livro do Huygens é dito o mais antigo livro sobre probabilidades pelo livro de cálculo do Tom Apostol. Não fui atrás de nenhuma referências sobre estória da matemática para verificar isso por não pretender fazer nenhuma revisão histórica sobre o assunto mas apenas apresentar minha percepção dessas coisas. Uma fonte sobre a história da probabilidade está aqui.
  • (**) Jaynes, E. T. Probability Theory: The Logic of Science, Cambridge University Press (2003).  Esse livro deveria ser leitura obrigatória para qualquer pessoa que ousasse emitir a palavra probabilidade pelos lábios. Não é meramente um livro-texto sobre teoria de probabilidade. É um livro sobre como raciocinar de forma adequada.  Versão parcial pode ser acessada aqui.

Surpresas

quinta-feira, 12 fev 2009; \07\America/New_York\America/New_York\k 07 10 comentários

Uns dias atrás em um post do blog Cosmic Variance o Sean Carroll estava se perguntando sobre  grandes surpresa na ciência.  Entre perguntas sobre qual foi a coisa mais surpreendente que já descobrimos e qual seria a próxima coisa mais surpreendente que poderíamos descobrir no futuro, diversas grandes surpresas foram levantadas pelos comentadores.

Quando falamos sobre coisas chocantes a respeito do universo tendemos a falar de micro-coisas e de mecânica quântica. Coisas estranhas acontecem nessa escala de tamanho, fenômenos incompatíveis com nossa experiência cotidiana da natureza e até difíceis de descrever para pessoas não-iniciadas em física moderna e contemporânea.

Apenas uma das pessoas qeu comentou se lembrou de uma coisa que foi históricamente muito mais chocante e que levou séculos e séculos de gradual aumento da nossa compreensão das coisas para se conhecer: a ordem de grandeza do tamanho e da idade do nosso universo, a distância até as estrelas próximas, a estrutura heterogênea na escala das galáxias, a estrutura homogênea na escala cosmológica, … tudo isso levou 500 anos ou mais de pesquisa para ser estabelecido. E mais e mais fatos sobre a estrutura de larga escala do universo têm sido descobertos, em intervalos de tempo cada vez mais curtos. Que nós possamos conhecer tanto sobre essa estrutura do universo nas diversas escalas grandes de tamanho (com relação ao nosso tamanho) que compreendem a primeiro a Terra, depois  o sistema solar, as galáxias,  as estruturas cosmológicas,  …  acho que essa é a maior supresa que a ciência já revelou. Maior que a estranheza do mundo microscópico.

Não que eu esteja diminuindo a surpresa que o mundo microscópico revelou. Mas eu acho que essas descobertas sobre o nosso macrocosmo são as que mais chocariam as pessoas mais brilhantes dos séculos passados se fossem reveladas prematuramente. Dizer para Galileu que as estrelas mais próximas estão a 10^{14} quilômetros de distância e que conseguimos saber detalhes da estrutura de objetos que estão a 10^{20} ou 10^{21} quilômetros de distância e que temos evidências confiáveis de que o universo tem algo em torno de 10^{10}  anos de idade seria muito mais chocante do que tentar falar da estrutura atômica da matéria ou da inexistencia de trajetórias definidas para partículas microscópicas. E acho que o principal motivo para isso é que ele poderia entender isso. Talvez eu esteja errado e essas duas coisas, conhecimento das escalas do universo e a natureza microscópica da matéria sejam uma tão surpreendente quanto a outra. Certamente a segunda causou muito mais impacto de curto prazo na história do mundo, se isso é sinônimo de surpresa.

E as surpresas futuras? Algumas coisas foram sugeridas nos comentários, a maioria delas relacionadas à física de altas energias, algumas brincadeiras, poucas coisas que de fato me supreenderiam. Com o perdão da grande parte dos meus colegas arsphysicistas que trabalham nessa área, eu acho que  a física de altas energias e o mundo microscópio já são coisas tão estranhas  que a existência de alguma coisa ainda mais estranha ainda em escalas maiores de energia não me surpreenderia tanto.

O que realmente me surpreende? O quão rápido está evoluindo a neurosciência.

Um livro que 20 anos atrás dissesse que em 100 anos dominariamos a interface do cérebro com máquinas artificiais e que seriamos capazes de controlar, apenas com o pensamento, máquinas e computadores e até nos comunicarmos à distância usando redes sem fio ligadas aos nossos cérebros seria um livro de ficção científica. E seria daquelas ficções de mais remota realização. Hoje seria um livro de futurologia, daqueles até que bastante plausíveis.

Toda semana a Nature publica um ou dois artigos com feitos experimentais que seriam quase inacreditáveis alguns anos atrás. Pequenos circuitos neurais controlando pequenos robôs, neuronios crescendo estruturas em volta de eletrodos, pequenos sensores capazes de detectar o sinal elétrico emitido por um único neurônio in vivo  no cérebro de um ratinho, um macaco capaz de controlar máquinas complexas com sinais elétricos de seu cérebro a milhares de quilometros de distância através da internet. Daria calafrios nos mais imaginativos escritores de ficção-científica de 20 ou 30 anos atrás saber que essas coisas estavam tão perto de se realizar.

Claro que eu só estou falando de feitos tecnológicos e pouco de neurociência. A questão é que esses feitos vieram com a grande aumento compreensão rápido do funcionamento do cérebro. E ainda estamos nos princípios dessa compreensão. Por isso eu acho que as próximas grandes surpresas estarão associadas ao quanto podemos saber sobre como funcionam nossos próprios cérebros.

Cursos online que valem a pena.

domingo, 18 jan 2009; \03\America/New_York\America/New_York\k 03 2 comentários

Uma tendência já estabelecidade entre as universidades americanas é a disponibilização online de vídeos das aulas dos seus cursos, ou de alguns de seus cursos. A qualidade das interfaces varia, a qualidade dos vídeos varia, mas em geral vale muito a pena gastar um tempinho com isso. Nesse post eu vou  fazer um reviewzinho do que tem disponível por aí, comentando alguns cursos que eu assisti.

Open Yale Courses  – http://oyc.yale.edu/

A Yale University disponibiliza cursos no seu site Open Yale Courses. São 15 cursos divididos em departamentos, a maioria nas áreas de humanidades.Além dos vídeos alguns cursos trazem leituras e todas as aulas estão transcritas em inglês, inclusive as perguntas feitas pelos alunos. Isso facilita muito para quem não tem compreensão oral de inglês mas consegue ler. As aulas estão disponíveis online, em um player de vídeo em flash (similar ao do youtube) ou para download em formato quicktime em baixa ou alta resolução. Eu prefiro assistir online, apesar da inconveniência de ter que esperar o vídeo carregar sem poder avançar, o que torna mais difícil assistir apenas parte de uma aula e continuar mais tarde.

Frontiers and Controversies in Astrophysics
http://oyc.yale.edu/astronomy/frontiers-and-controversies-in-astrophysics/

É um curso sobre achados e questões modernas da astrofísica dedicado a estudantes fora das áreas de ciências (non-science majors). O conceito é um pouco estranho para os universitários brasileiros, acostumados com seus departamentos estanque que não oferecem esse tipo de interação com outras áreas. Mas é muito interessante de fato e um curso que certamente ajudaria alunos de colegial e aficcionados por astronomia a entender os temas modernos de pesquisa em astronomia e astrofísica. O professor é Charles Bailyn, um cientista muito produtivo nessa área.

Introduction to Ancient Greek History
http://oyc.yale.edu/classics/introduction-to-ancient-greek-history

Esse curso eu assisti inteiro. É a história dos povos gregos desde a civilização de Micenas até a ascensão de Filipe da Macedônia e o fim da autonomia das cidades gregas. O professor é ilustre, Donald Kagan, famoso autor de livros importantes sobre a grécia antiga e conhecido pensador e scholar americano. As aulas são fascinantes. O professor demonstra o quanto conhecer esses caras ajuda a entender o homem e a história. Recomendadíssimo o curso.

Financial Markets
http://oyc.yale.edu/economics/financial-markets

Um curso introdutório sobre o funcionamento do mercado financeiro. Inclui algumas palestras de oradores ilustres na área, incluindo David Swensen, o cara dito responsável por multiplicar em muitas vezes o endowment da universidade de Yale usando técnicas modernas de portfolio management.

Esse é um curso que eu recomendo fortemente, especialmente as primeiras aulas, para que as pessoas percam o preconceito com relação aos mercados financeiros, entendam qual é o seu importante papel na organização da sociedade, e percebam como essa tecnologia funciona. A crise atual é bem discutida em algumas aulas. O professor é o  Bob Schiller, um famoso economista e pesquisador, autor de diversos livros, tanto técnicos quanto para leigos.

Death
http://oyc.yale.edu/philosophy/death

Um curso introdutório de metafísica. O professor é Shelly Kagan. Um curso muito interessante para quem é completamente leigo no assunto como eu. A pretexto de discutir sobre a morte e sobre os efeitos dela, o professor introduz diversos assuntos como metafisica platonica, teoria da identidade pessoal, filosofia da mente e até uma discussão filosófica sobre o suicídio.

Modern Poetry
http://oyc.yale.edu/english/modern-poetry

O tímido professor Langdon Hammer fala sobre os difíceis poetas americanos do período moderno. Frost, Ezra Pound, T. S. Elliot, Yeats… todos esses caras que eu nunca consegui entender direito mas sempre fico fascinado com seus textos são explicados. Claro que eu não entendo muita coisa mesmo assim [:p]. Mas ajuda a entender o gênio desses caras. Recomendado a todos os leitores amadores de poesia como eu.

Fundamentals of Physics
http://oyc.yale.edu/physics/fundamentals-of-physics

Um curso introdutório de física superior. Os temas abordados são muito amplos na minha opinião, vão desde o básico de mecanica e chegam até relatividade, passando por gravitação, ondulatória e termodinâmica. Mas é interessante para alunos adiantados de colegial e até pessoas que simplesmente gostam de física. O professor é Ramamurti Shankar.

Introduction to the Old Testament
http://oyc.yale.edu/religious-studies/introduction-to-the-old-testament-hebrew-bible

Esse é o melhor curso disponível no site. A professora Christine Hayes discorre em 24 aulas sobre os textos que compõe a bíblia judaica, o antigo testamento das bíblias modernas. As origens dos textos, suas motivações, o uso dos textos por parte dos povos semitas, a semelhanças, e principalmente as diferenças, com relação a outros textos do antigo oriente próximo, tudo isso é discutido. Mas sabe quando você percebe que o professor não apenas conhece o assunto completamente, mas é também apaixonado pelo tópico? A profa. Hayes é assim. Excepcionalmente clara, com uma oratória absorvente. Eu assisti cada aula desse curso com muita empolgação e planejo assistir novamente. Vale a pena.

Stanford Engineering Everywhere – http://see.stanford.edu/see/courses.aspx

Aulas dos cursos de engenharia de Stanford. O site tem os vídeos disponíveis em várias plataformas: direto no youtube (o que é excelente), no iTunes, em um player próprio feito usando o silverlight, em um site da própria Stanford chamado Vyew, e para download em wmv ou mp4. A melhor plataforma na minha opinião é o youtube. O Vyew é interessante mas não funciona direito no meu computadora. O player em silverlight é bom, tem até opções de compartilhamento no Facebook, lugar para anotações e marcações de trechos do vídeo feitas pelo próprio professo, mas o esquema de buffering é ruim e o vídeo fica parando de tempos em tempos (ou meu clone do silverlight para linux não é muito bom). De qualquer forma, a qualidade dos vídeos é excelente, inclusive havendo versões de alta resolução no youtube.Também tem as aulas transcritas para facilitar o acesso para quem não ouve bem inglês.

Machine Learning
http://see.stanford.edu/see/courseinfo.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1

Um curso do professor Andrew Ng (um doce para quem souber pronunciar o sobrenome dele), um pesquisador  jovem e já muito importante nessa área de Machine Learning. Aliás, para quem não sabe, machine learning é uma abordagem de inteligencia artificial que envolve tentar fazer que o computador aprenda por si mesmo ao invés de ficar tentando dizer a ele o que fazer. São algoritmos de aprendizagem computacional que estão por trás de sistemas de navegação de robôs, algoritmos de análise inteligente de imagens, sistemas de busca sofisticados (como o Google), e outras maravilhas da ciência da computação moderna. Como diz o professor na primeira aula do curso, Machine Learning é o campo mais empolgante da ciência da computação hoje, e talvez um dos maiores feitos da humanidade. Não é preciso muita matemática,  nem  é preciso saber programar muito bem para acompanhar o curso. Tudo pode ser feito no Matlab ou no Octave e basta saber o básico de algebra de matrizes e cálculo.

Programming Abstractions
http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e

Parece ser um apanhadão de programação avançada, estruturas de dados, orientação ao objeto e outras coisinhas. Parece interessante para maus programadores como eu finalmente aprenderem essas coisas interessantes, pelo menos verbalmente. Ainda não vi nenhuma aula, entretanto.

Programming Paradigms
http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee

As diferenças entre programação imperativa, orientada ao objeto, funcional e programação concorrente. Outro que eu pretendo ver no futuro, mas dá uma preguicinha.

UC@Berkeley no Youtube – http://www.youtube.com/user/ucberkeley

Há vários cursos da Universidada da Califórnia em Berkeley no youtube. Um deles eu comecei a assistir  e achei interessante: The Structure and Interpretation of Computer Science, que apesar do nome pomposo, é um curso de programação funcional (é interessante que lá eles estudem programação funcional antes de estudar qualquer outro paradigma de computação).

MIT – Open Course Ware – http://ocw.mit.edu/OcwWeb/web/home/home/index.htm

Um dos primeiros projetos do tipo, iniciou-se no MIT e agora tem dezenas de universidades aderindo ao redor do globo. Há conteúdo em vídeo para download ou visualização no youtube para uma pequena fração de todo o material disponível, o que já é uma grande quantidade de videos, e alguns são muito bons. O único que eu me meti a assistir um maior número de aulas foi o curso de introdução à biologia (http://www.youtube.com/watch?v=lm8ywGl9AIQ) bem legalzinho. Para encontrar os cursos com material audio/video disponível ver aqui: http://ocw.mit.edu/OcwWeb/web/courses/av/index.htm .

Outros sites e recursos:

http://videolectures.net/

Videos galore. Centenas de aulas em vídeo, palestras e etc. sobre os mais variados assuntos. Tem alguma concentração em computação, mas tem muita coisa em outros assuntos também. O site é bem confuso e mal organizado, mas dá pra se divertir.

TED Talks – http://www.ted.com/index.php/talks

Um site fantástico com palestras muito boas sobre os mais variados assuntos, desde ciência e tecnologia a política e meio ambiente, passando por arte, computação e quadrinhos. Vale a pena ver quase todas as palestras.

Kavli Institute for Theoretical Physics – http://www.kitp.ucsb.edu/talks/

Palestras do KITP gravadas e disponibilizadas online. Palestras técnicas sobre todo tipo de assunto em física teórica.

Videoteca do IF/USP – http://video.if.usp.br/

O Instituto de Física da USP grava todas as palestras que acontecem lá e disponibilizam o vídeo no site acima. Tem de tudo, inclusive as aulas do último curso de verão.

Princeton Webmedia – http://www.princeton.edu/WebMedia/lectures/

Palestras e etc. Ainda não tem as aulas, mas parece que terá em breve.

Podcast da UC@San Diego – http://podcast.ucsd.edu/

Podcast da Universidade da California em San Diego.

Cern Summer School Lectures – http://indico.cern.ch/tools/SSLPdisplay.py?stdate=2008-06-30&nbweeks=6

Aulas da escola de verão do CERN.

ICTP.tv – http://www.ictp.tv/

Aulas do programa de cursos do International Centre for Theoretical Physics ‘Abdus Salam’.

Enfim… como diz um amigo nosso, é diversão garantida.

Open Source Physics (other sciences too) Lab

terça-feira, 16 dez 2008; \51\America/New_York\America/New_York\k 51 6 comentários

Hoje, enquanto matutava sobre uma idéia antiga que eu tenho desde os tempos da minha graduação em física (não faz tanto tempo assim na verdade :P) ocorreu-me a seguinte coisa: há algum projeto de laboratórios didáticos de física de conteúdo aberto?

Me explico. Eu sempre gostei da idéia de criar experimentos didáticos para alunos de colegial e faculdades de física e sempre achei os que já existem tremendamente chatos e desinteressantes. E eu sempre fiquei muito empolgado ao ver projetos de ciência na internet e pessoas que construiram diversos aparatos bastante complicados e que fizeram parte de experimentos chave na história da física apenas com componentes comprados no Radio Shack. A quantidade de experimentos bacanas de verdade que se pode fazer em casa é grande. Eu já vi lasers, pequenos aceleradores de partículas, bombas de vácuo, telescópios, … uma infidade de coisas feitas em casa. Há projetos na internet como o Open Source EEG – um aparato de eletroencéfalografia de projeto totalmente aberto na web.

Então me ocorreu a idéia: porque não abrir um Open Source Lab, um projeto de desenvolvimento de experimentos didáticos de física sérios, com projetos detalhados abertos na internet com licença copyleft – totalmente aberta ao uso e modificação por qualquer pessoa – focado em recriar experimentos interessantes da história da física.

Há diversas coisas que, estou certo, são possíveis de serem feitas por pessoas que tem um jeito para por a mão na massa e poderiam ser usadas por escolas, universidades em países de terceiro mundo e até empresas que queiram produzir esses materiais para vender a escolas particulares e etc (o que não é proibido por uma licença copyleft).

A idéia é recriar experimentos famosos através de projetos de experimentos didáticos usando a tecnologia moderna, a moderna acessibilidade a recursos que até poucas décadas atrás eram caros e tornar isso um projeto colaborativo através da web de conteúdo totalmente aberto e de acesso gratuito.

A única coisa que me impede de fazer isso tudo é o maldito lado prático da vida. Eu, como legítimo acadêmico, não sei fazer as coisas andarem e não tenho idéia de quem ou o que financiaria um projeto desse tipo e como se viabilizaria uma coisa dessas sem capital próprio (que no meu caso é bem escasso). Universidades teriam interesse? Empresas teriam interesse? Agencias governamentais teriam interesse? Você que está lendo teria interesse?

Ao leitor que estiver interessado e souber lidar com esse tipo de coisa, souber onde se busca patrocínio para esse tipo de projeto e tiver jeito para por a mão na massa em desenvolver projetos desse tipo:  o que estamos esperando?!!

Micromotivos e macrocomportamento, parte I

sexta-feira, 31 out 2008; \44\America/New_York\America/New_York\k 44 5 comentários

Escolhendo como título o nome do livro famoso de um laureado pelo prêmio Sveriges Riksbank de Ciências Econômicas em Memória de Alfred Nobel [1], Thomas Schelling [2], pretendo discutir um pouco a minha área de pesquisa recente: modelagem quantitativa em ciências sociais e economia. Apesar de parecer um assunto novo, esse tipo de modelagem é na verdade bastante antigo, remontando a  Pierre de Laplace, Thomas Malthus,  David Ricardo, passando por Léon Walras, John Von Neumann e companhia. Essa é no entanto uma área de modelos bastante primários e ainda muito qualitativos. Ao longo desse período de história da modelagem quantitativa de fenômenos sociais houve um diálogo intenso (e negligenciado pelos dois lados)  com a física, particularmente a termodinâmica e a nascente mecânica estatística no final do século XIX. Ao longo das últimas duas décadas essa relação se intensificou novamente e o paradigma da mecânica estatística passou a integrar um programa de pesquisa em ciências sociais e economia com a criação de modelos microscópicos para diversos aspectos como dinâmica de opiniões, tráfego de automóveis,  negociações no mercado financeiro e outros.

A mecânica estatística é a área da física que lida com a ponte entre a dinâmica microscópia dos constituíntes da matéria e as observações macroscópicas que fazemos sobre ela. Por exemplo ela é capaz de, assumindo-se as leis de Newton para o movimento das moléculas de um gás, mostrar que as propriedades macroscópicas do mesmo devem satisfazer certas equações de estado (por exemplo a famosa lei dos gases ideias PV = nRT). É importante notar que essa ponte é feita admitindo-se um certo grau de ignorância sobre o estado microscópico do sistema e a forma correta de se fazer isso é associar uma distribuição de probabilidades aos possíveis estados microscópicos.

O primeiro problema na direção de um modelo estatístico para problemas economicos deve ser então identificar qual é a dinâmica microscópica – a forma com que cada agente economico se move no espaço de configurações. Para as moléculas dos gases temos leis newtonianas de movimento, para partículas menores temos a mecânica quântica. O que temos para pessoas tomando decisões de consumo e poupança, empresas tomando decisões de produção, governos intervindo e bancos decidindo taxas de empréstimo?

Nesse ponto é que paramos para a primeira grande crítica a esse tipo de modelagem. Partículas microscópicas não são conscientes, não aprendem, não tomam decisões racionais nem usam critérios objetivos para mover-se. São diferentes das pessoas. São mesmo? A história da modelagem das decisões economicas começou no século XIX com Léon Walras, Vilfredo Pareto e uma analogia com a mecânica. Walras criou uma teoria de equilíbrio, em analogia com o equilibrio mecânico. Claro que ninguém está propondo que pensemos nas partículas como pequenos seres racionais, mas a analogia com a mecânica e com a termodinâmica levou os economistas a admitir a idéia de que decisões racionais são tomadas através de problemas otimização (maximização de lucros, minimização de custos, etc.).

Na teoria microeconomica neoclássica as pessoas agem segundo escalas de preferência ordenadas através de um função chamada Utilidade. Construiu-se um modelo segundo o qual as pessoas agem para maximizar uma função que diz quão “felizes” elas estão com a decisão que tomaram, sujeito a vínculos que dependem das decisões das outras pessoas. A evolução dessa linguagem levou à construção do modelo de agente econômico ubíquo: o chamado Homo economicus, um agente ultra-racional, capaz de maximizar uma função  utilidade complicada de diversos parâmetros e escolher dentre todas as estratégias a que mais lhe traz benefício. Esse agente ideal tem poder computacional infinito e completo conhecimento de seu espaço de possíveis estratégias.

Esse modelo, apesar de ter bem servido à economia por um século, passou a ser questionado através de problemas em que era claro que, mesmo que houvesse um agente com esse grau de racionalidade, não há estratégias ótimas a se seguir diante da limitada informação disponível ao agente. Um desses modelos é o El Farol Bar. Hoje há modelos de agentes economicos tendem a ser mais realistas e focam-se na capacidade de aprendizado e desenvolvimento de estratégias “on-the-fly”, trocando o agente ultra-racional por um com racionalidade limitada.

Mas mesmo que nos mantenhamos no problema de agentes ultra-racionais, ainda resta a pergunta: como ligamos os modelos microscópicos de maximização de utilidade ao comportamento macroscópico da economia? Nesse campo a análise economica ofereceu poucas respostas. Há poucos estudos teóricos [3] anteriores à década de 90 por exemplo sobre quais são as propriedades de uma economia de escambo de duas mercadorias com muitos agentes neo-clássicos – que maximizam a utilidade em cada transação atingindo um equilíbrio local de Pareto. Os livros clássicos de microeconomia tratam de um problema com dois agentes e os de macroeconomia usam esses resultados para tirar conclusões globais (!). Hoje em dia é um exercício trivial simular isso em computador, mas esse é um problema que  deve ter solução analítica – não passa de um gás de agentes que quando se chocam trocam mercadorias conservadas segundo uma regra de espalhamento bem definida com taxas de transição conhecidas ainda que a regra de maximização de utilidade seja razoavelmente relaxada.

Depois desse blablablá todo (parece mesmo que estou virando economista: em dois posts usei apenas uma equação, e a mais simples que eu conheço :P), permita-me ao menos deixá-los com um tira gosto. No meu próximo post vou comentar um pequeno modelo com solução analítica em que se pode ilustrar o uso de agentes com racionalidade limitada e uma agregação que remete à mecânica estatística – apesar das analogias imperfeitas. É um pequeno modelo de decisão de tráfego, baseado no jogo da minoria. Apesar do contexto diferente, é um modelo que possui claras analogias com problemas de decisão binária que podem ser observadas no mercado financeiro (comprar ou vender?) e que possui a característica fundamental de que o agente gostaria de estar sempre na minoria.

Notas:

[1] Com freqüência denominado erroneamente de Nobel de Economia.

[2] Micromotives and Macrobehavior, Thomas Schelling.

[3] Talvez o problema não seja a escassez de resultados teóricos, mas uma falta de capacidade minha de encontrá-los.

Update:

Dias atrás o físico Jean-Phillipe Bouchaud, professor da École Polytechnique, na França, Chairman do fundo de investimentos francês CFM e pioneiro em pesquisa na interface entre economia e física estatísica escreveu um ensaio para a revista Nature apontando a necessidade desse tipo de modelagem:  Economics need a scientific revolutionNature 455, 1181 (30 October 2008).

Dúvida, pseudo-ciência e liberdade de expressão

sábado, 18 out 2008; \42\America/New_York\America/New_York\k 42 6 comentários

Todos os aficcionados por ciência tem por hobby delatar e atacar os divulgadores de bad-science, ou pseudo-ciência – aqueles estudos com ares pretenciosos de ciência mas que no fundo não têm sustentação objetiva. Alguns até diriam que é o papel dos acadêmicos da ciência tomarem a frente nessa batalha e capitanear os esforços pela erradicação da pseudo-ciência, inspirados em Carl Sagan, Richard Dawkins e outros heróis. Entretanto esbarramos aí em questões complicadas, às quais eu pretendo discutir sem dar respostas – uma vez que eu não as tenho. Creio aliás que são questões onde é mais útil pensar sobre o assunto com cuidado do que ter respostas (1).

A primeira questão é a óbvia questão demarcatória: que é pseudo-ciência? Que venham os falsificacionistas, os kuhnianos, os lakatosianos, Hume, Feyerabend e todos os filósofos da ciência de mãos dadas admitir que nunca resolveram essa questão. Não parece, pelo menos por enquanto, ser possível definir ciência sem excluir ou incluir coisas que não gostaríamos que estivessem lá. Ciência e não-ciência não são classes de equivalência de sistemas lógicos. O que podemos fazer é outra pergunta: que atitudes são esperadas de um cientista, e quais atitudes são esperadas de um pseudo-cientista? E logo depois podemos nos perguntar porque as atitudes do cientista são preferíveis às do pseudo-cientista.

Para atacar essa pergunta vou citar, o que é um péssimo costume pessoal, um grande cientista:

É a nossa responsabilidade como cientistas, sabendo do grande progresso que vem de uma satisfatória filosofia da ignorância, (…) ensinar como a dúvida não deve ser temida mas bem-vinda e discutida; e demandar essa liberdade, como nosso dever perante todas as futuras gerações.

Richard P. Feynman, What Do You Care What Other People Think(3)

Meus grifos e minha tradução (perdoem-me por qualquer erro). Essa citação, usada numa bela palestra do Prof. Nestor Caticha sobre a vida de Feynman semana passada no Convite à Física (2), aponta na direção do que é considerado entre os cientistas um padrão de comportamento desejável (porém nem sempre seguido): honestidade intelectual, particularmente honestidade com a dúvida. Ter dúvida e não se sentir constrangido, admitir não saber e admitir que a nossa capacidade de conhecer é limitada e que seu produto é sujeito à revisão é a atitude esperada de cientista. Essa dúvida entretanto não é passiva. O estado de dúvida é o estado de busca da sanação dessa dúvida.

O pseudo-cientista arquetípico não age assim. Ele brande a certeza em uma verdade revelada, que lhe foi transmitida por meios misteriosos e que todos os outros não conseguem enxergar. Ele crê ter o mundo contra sí, contra a sua verdade auto-evidente.

Por que é bom agir como um cientista e não como um pseudo-cientista? Eu não sou um estudioso de ética para atacar essa pergunta. Eu estaria muito mais disposto a responder: o que a sociedade ganha se as pessoas agirem como cientistas e não como pseudo-cientistas? Há dezenas de possíveis lucros para a sociedade: governantes dispostos a revisarem suas crenças e projetos são mais capazes de prever, evitar e consertar erros administrativos, modelos de gestão adaptativos que se revisam periodicamente são mais eficientes, pessoas com dúvidas são curiosas e aprendem mais, … enfim, um mundo onde as dúvidas são expressas e sanadas é mais eficiente que um mundo onde as dúvidas são suprimidas em favor da verdade revelada.

Outro ponto, muito mais complicado que esse é: devem os pseudo-cientistas ter liberdade de expressão para sair pelo mundo propagando suas crenças? Essa pergunta é uma dentre uma classe de perguntas muito difíceis. Por sorte essa não é tão difícil quanto as piores dentre essa classe (e.g., “deve um militante anti-democrático ser beneficiado pelas liberdades que a democracia preconiza?”). Essa pergunta é difícil por uma única razão: sua resposta não pode ser justificada sem apelar para valores subjetivos. A minha resposta para essa pergunta é um grande, sonoro, veemente e incondicional SIM. Liberdade de expressão é um valor que eu considero inegociável e incondicional. Qualquer pergunta que comece como “deve fulano ter liberdade de expressão … ?” é por mim respondida com sim antes de ouvir as condições. Mas eu não consigo justificar essa resposta sem apelar para as minhas crenças sobre o mundo (4). Porém liberdade de expressão não é liberdade para exigir qualquer tipo de apoio por parte de quem quer que seja, quanto mais apoio público, para propagação das suas idéias.

Ahá, diria um atento: o cientista tem apoio e financiamento público não só para propagar suas idéias como para ensiná-la às criancinhas, pesquisá-las, aprofundá-las, publicá-las e divulgá-las como quiser!!! Isso é fato. Mas o cientista só o tem sob duas condições, pelo menos na minha opinião:

  • a ciência, calcada na busca da sanação objetiva das dúvidas, produz progresso técnico, intelectual e filosófico. Iniciativas baseadas na certeza pseudo-científica geralmente conduzem ao estacionamento e até ao regresso;
  • ao desenvolver a sua atividade o cientista deve aprofundar a cultura da dúvida e da pesquisa objetiva, propagando essa cultura entre os seus alunos e entre os contribuintes que o financiam, para o lucro da sociedade.
Diante de toda essa pintura idealizada, cabe-me agora atacar os cientistas pela sua não-realização. Os cientistas brasileiros, guardando-se célebres exceções,  não têm divulgado satisfatóriamente suas pesquisas, não têm procurado desenvolver uma satisfatória “filosofia da ignorância” (para citar Feynman novamente) , não têm estimulado em seus alunos essa cultura de ter dúvidas e procurar resolver as boas dúvidas. Não têm sido bem sucedidos em promover o ensino de ciência, que não é o ensino de uma zoologia de fórmulas matemáticas, mas a propagação da idéia de que a admissão da dúvida e da busca de sua sanação como elementos fundamentais do progresso.
Quando a academia toma para si suas obrigações não é preciso lutar contra a pseudo-ciência. Ela simplesmente não se sustenta diante de uma visão do mundo que admite a ignorância. Em contraste, quando a academia não faz a sua obrigação, a sociedade não se vê disposta a financiá-la, não sente os benefícios de desenvolver ciência madura em suas universidades e volta-se às verdades reveladas e às certezas destrutivas.

Notas:

(1) E isso não é verdade para qualquer questão filosófica?

(2) Convite a Física são palestras semanais no Instituto de Física da USP. São destinadas ao público leigo. Aberta ao público, entrada franca. Por favor: lotem essas palestras.

(3) Leia mais sobre o papel da dúvida na ciência segundo Feynman aqui: http://laserstars.org/bio/Feynman.html

(4) E alguém pode objetar: alguém consegue justificar alguma resposta sem apelar para suas crenças ? Mas acho que vocês entenderam o que eu quis dizer…

%d blogueiros gostam disto: