MCalc – Calculadora para trabalhar com incertezas

Já faz algum tempo que venho trabalhado nesta ferramenta, e a quase um ano que ela esta praticamente terminada, mas por motivos diversos não a liberei. Este texto é exatamente para cumprir esta formalidade.

Esta MCalc é uma calculadora para cálculos com medidas física e incertezas, muito utilizado em Laboratórios. Essencialmente é uma interface gráfica para o módulo medidas.py, o qual publiquei em minha página de Física em abril de 2008, Módulo medidas.py.

Sumário:

1. Detalhes Indispensáveis

Antes de iniciar a apresentação deste aplicativo, devo fazer um observação muito importante a respeito do modelo matemático utilizado nos cálculos com incertezas:

O tratamento matemático utilizado no módulo medidas.py são muitos simplistas, devendo ser usados com muita ponderação em outras áreas que não o ensino. Caso deseje utilizá-lo em outras áreas, aconselho que leia atentamente o texto em Medidas.pdf para ter certeza de que estas simplificações empregadas lhe são adequadas.

O uso deste modelo, apesar de suas limitações, são justificadas dado os objetivos desejados em uma disciplina experimental, onde as discussões Físicas são o foco principal.

2. Algumas Mudanças no medidas.py

Quando iniciei a construção do módulo medidas.py, quem de fato realiza todas as operações matemáticas nesta ferramenta, tinha em mente manter a sintaxe das funções e entradas de parâmetros o mais próximos possível da sintaxe do Python. Mas depois de algum tempo vendo a utilização desta ferramenta pelos alunos, achei melhor fazer algumas adaptações, em alguns casos reescrevendo a sintaxe, em outros utilizando nomes mais intuitivos para as funções, principalmente com o uso de traduções para a língua portuguesa.

Nesta edição do módulo, alterei e adicionei alguns nomes de funções atendendo à estes critérios. A lista das alterações e adições à sintaxe das funções é apresenta na tabela abaixo:

[TABLE=35]

No demais, a utilização desde módulo segue as descrições no texto Módulo medidas.py, a qual já foi atualizada para estas mudanças.

2.1. Notas e atualizações

à versão 1.9.1

Esta versão marca o início das mudanças para adaptação do código para o uso do Python 3. O código ainda funciona apenas com o Python 2.7 mas estou iniciando as alterações para a nova versão, sem previsão para o término.

Aproveitei e corrigir mais um bug. A resposta anterior (Ans) estava sendo apagada sempre que uma chamada a uma memória era feita.

à versão 1.3.2

Nesta versão corrigir dois bugs com as funções e^ e 10^. Estas funções estavam calculando errado tanto o valor como a incerteza. Estas agora são tratadas como funções, com a implementação correta do método rpow da classe medidas.

Havia outro bug menor que na oportunidade foi corrigido. Este bug se deve superposição de dados no display de entrada. Após realizado uma operação, novas entradas estavam sendo adicionadas ao final da saída anterior, sem critério. Agora, quando a nova entrada é um número, a saída anterior é sobreposta.

à versão 1.2.1

Lancei uma nova versão 1.2.1 do MCalc e da biblioteca medidas.py. Nesta versão corrigi dois bugs e implementei um pequena funcionalidade que simplifica o uso da interface do MCalc.

Bugs:
  • A biblioteca medidas.py errava ao tentar fazer o truncamento de medidas com valores e incertezas menores que zero, quando a incerteza possuía a mesma ordem de grandeza do valor ou fosse de ordem maior.
  • Outro bug, já bem conhecido, ocorria quando a incerteza possuía um valor como 9,5×10^n, onde n é um inteiro qualquer. Nestes casos o truncamento deveria ocorrer na dezena (1 x 10^n+1), mas estava gerando (10 x 10^n). Esta exceção não era tratada, mas aproveitei para implementá-la nas mudanças acima.
  • Como resultado, a saída dos resultados no display ficou, preferencialmente, em notação científica.

    Implementação:

    Durante o uso do MCalc, percebi que ficava inconveniente pressionar a tecla >, sempre que usava funções com vírgulas, para separar os campos, como medida(,) e media(,). Para estes casos adicionei ao verificador de sintaxe, a verificação de repetição do caractere vírgula. Quando este acontece, o MCalc o remove e move o cursor para frente da vírgula. Com isto, pressionar vírgula, quando nas vizinhanças do cursor existe uma vírgula, resulta na mesma ação que pressionar o caractere >.

    3. O MCalc

    O MCalc é uma interface gráfica bem simples para o módulo medidas.py. A ideia foi baseada no Expression Evaluator do livro “Rapid GUI Programming with Python and Qt”. A interface gráfica apenas monta as equações para serem processadas pelo Python com as classes e funções do módulo medidas.py.

    3.1. Histórico de Comandos e Linha de Edição

    A lista na parte superior da calculadora é o histórico de comandos. Todos os comandos passados são enviados a esta lista, com capacidade intencionalmente limitada em 100.000 linhas. Na primeira linha de teclas, os botões com seta para cima e para baixo, podem ser usados para navegar pelas linhas do histórico, enviando-as para a linha de edição. As setas lateais movem o cursor na linha de edição.

    Outra forma de selecionar uma linha do histórico é clicando sobre a linha desejada. Para executar uma linha é necessário pressionar o botão igual.

    3.2. Constantes e a Aceleração da Gravidade

    A segunda linha, com os botões amarelos, são constantes comuns, matemáticas e físicas.

    A aceleração da gravidade é calculada utilizando a latitude e altitude, considerando a força de atração gravitacional e a aceleração centrífuga devido a rotação da Terra, Gravity of Earth.

    g_{\phi} = 9,780327[1 + 0,0053024\, sin^2(\phi) - 0,0000058\, sin^2(2 \phi) - 3,155 \times  10^{-7} h]

    onde $latex \phi$ é a latitude e $latex h$ a altitude em metros. Esta equação dá uma precisão de até 5 algarismos para a aceleração da gravidade, no entanto neste trabalho considero apenas 4 algarismos significativos, que são o suficiente para um laboratório de ensino.

    O MCalc utiliza como padrão os valores $latex latitude = -20.35640$ e $latex altitude = 0$, relativos à minha região. Um arquivo de configuração (.mcalc), no diretório padrão do usuário, é criado sempre que estes valores são alterados.

    3.3. Memórias

    As memórias pré-programadas da calculadora estão na terceira linha de botões, em cor laranja. Para armazenar um valor na memória, pressione a tecla STO seguido por uma das teclas de memória, A a F. Esta sequência executa todas as operações pendentes e ao final armazenando seu conteúdo na respectiva memória.

    O exemplo abaixo demonstra o uso das memórias:

     A = 12,4 \pm 0,3 \\ B = 34,56 \pm 0,01 \\ C = 1,2456 \pm 0,0007 \\ D = A^2 C / B

    Na calculadora execute a sequência:

    medida(12.4, 0.3) STO A
    medida(34.56, 0.01) STO B
    medida(1.2456, 0.0007) STO C
    A^2 x C / B STO D
    

    Isto irá gerar o resultado para $latex D = (5.5417666666666676 \pm 0.27286787229938281)$.

    3.4. Funções Inversas e Hiperbólicas

    Seguindo a sugestão do Tiago Berteli, os botões para funções inversas e hiperbólicas alteram o texto sobre os botões das funções que eles afetam, segundo a tabela abaixo:

    [TABLE=36]

    A figura a seguir ilustra estas mudanças.

    O botão HYP é persistente, devendo ser pressionado novamente para ser desabilitado. O usos destas funções seguem os padrões de uma calculadora convencional.

    3.5. Botões Especiais de Medidas

    Os botões de cor rosa (Trunc, Medidas e Media) são botões especiais para trabalhar com medidas (valor e incerteza). Tuas funções são apresentadas na tabela a seguir:

    [TABLE=37]

    Embora o botão |x| não esteja ligado aos demais, a função módulo é muito útil quando se está trabalhando com incertezas.

    3.6. Outros Botões

    Os demais botões possuem as mesmas funções que os correspondentes em calculadoras convencionais, não necessitando de nenhuma outra informação específica. Apenas como comentário, devo esclarecer que no Python, o símbolo usado para potência não é o acento circunflexo (^) e sim o duplo asterisco (**). Na calculadora optei por usar o acento circunflexo, pois é mais condizente com as denominações de outras linguagens. No entanto, este símbolo é substituído em tempo de execução pelo correspondente duplo asterisco. O mesmo ocorre com o símbolo do operado de multiplicação, ‘x’, que é substituído pelo asterisco (*).

    4. Instalação

    Fiz dois pacotes de instalação, sendo um para o GNU/Linux-Slackware, embora possa ser instalado em qualquer distribuição GNU/Linux, e um pacote zipado, para o Windows.

    4.1. Slackware e demais distribuições GNU/Linux

    Para instalar no Slackware, dê os comandos abaixo:

    wget http://localhost/linux/python/medidas/medidas-1.2.1-windows-1.zip
    [prompt]installpkg medidas-1.2.1-noarch-1.tgz
    

    onde 1.2.1 é a versão do pacote, no momento da criação deste texto. Para outras distro, utilize as fontes e instale com o make install:

    wget http://localhost/linux/python/medidas/medidas-1.2.1-tar.bz2
    [prompt]tar xvf medidas-1.2.1-tar.bz2
    [prompt]cd medidas-1.2.1
    [prompt]make install
    

    Caso queira remover o aplicativo, basta passar o comando uninstall para o make, de dentro do diretório com as fontes.

    4.2. Instalação no Windows

    Como a maioria do alunos iram utilizar este aplicativo no Windows, preparei um pacote zipado, com o MCalc ajustado para rodar nesta plataforma. Para isto é necessário instalar o python-2.7.6 (ou python-2.7.6.amd64.msi para sistemas 64bits) e a biblioteca gráfica PyQt4-4.10.4-gpl-Py2.7-Qt4.8.5-x32.exe (ou PyQt4-4.10.4-gpl-Py2.7-Qt4.8.5-x64.exe para sistemas 64bits). Baixe-os e os instale nos diretórios padrões (Importante: não mude estes padrões).

    Eventualmente estes links podem ser quebrados, devido a atualização ou modificações aos repositórios. Caso isto aconteça, entre nos sites oficiais e baixe a versão mais recente dos pacotes:

    Observe que o aplicativos foi escrito para a versão 2.7 do Python, portanto devem ser baixadas os pacotes para esta versão. Depois de instalado os dois programas acima, baixe a última versão do medidas zipado (neste momento medidas-1.9.1-windows-1.zip), descompacte na raiz do seu sistema, no C:\. Este pacote foi preparado para executar nesta pasta. Caso altere sua localização o programa não funcionará, a manos que faça algumas alterações no seu código.

    Após instalado, execute o arquivo bat: c:\medidas\mcalc.bat. A calculadora fica sem as cores das teclas, mas parece funcionar perfeitamente.

    5. Finalizando

    Por algum motivo paranormal não consigo criar mais linhas neste texto e por isto vou terminá-lo abruptamente. Caso tenha algum problema, entre em contato.

Este post tem 4 comentários

  1. Almir 'm3nd3s'

    Grande Rudson, sabe que continua sendo um professor pra mim né!?

    Amigo, mais uma vez parabéns pelo trabalho, assim que eu tiver mais conhecimento em Python desenvolverei algo bacana.. hehe.

  2. Reynaldo M. Barreto Jr.

    Mestre,cheguei agora, mas já estou gostando. Suas aula são maravilhosas, irei aprender muito.
    Parabéns!!!

  3. Manuel Neto

    Fala ae Rudinho!

    Se não for pedir muito, uma versão para tablets android e chromebooks seria muiiitooo bão! Mas não desenvolva para “ai”-phones, “ai”-pads, etc a menos que a apple lhe pague muito bem.

    Excelente trabalho.
    Congrats.

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.