sexta-feira, 11 de dezembro de 2015

Dica: Ajuste de curvas utilizando Python script - Parte I: visão geral e exemplos

Olá a todos,

Nesta dica vou ensinar como fazer ajustes de curvas no SciDAVis utilizando scripts em python.
Antes de começarmos, vale lembrar que as primeiras coisas a serem feitas são:
- abrir uma nota no SciDAVis em Arquivo → Novo → Nova nota/script;
- alterar a linguagem de programação para python em Programação → Linguagem de programação (script) → escolha Python e de um OK.

Uma vez que esteja tudo configurado, podemos começar a trabalhar.

De um modo geral, todos os ajustes de curva seguem a sintaxe:

TipoDeAjuste( camada, curva)

Os tipos de ajustes disponíveis para serem utilizados com scripts em python são:
  • LinearFit( camada, curva) - ajuste linear
  • PolynomialFit( camada, curva, ordem) - ajuste polinomial
  • ExponentialFit( camada, curva) - ajuste exponencial
  • TwoExpFit( camada, curva) - ajuste com dois crescimentos/decaimentos exponenciais
  • ThreeExpFit( camada, curva) - ajuste com três crescimentos/decaimentos exponenciais
  • GaussFit( camada, curva) - ajuste gaussiano com fórmula "y0+A*sqrt(2/PI)/w*exp(-2*((x-xc)/w)^2)"
  • GaussAmpFit( camada, curva) - ajuste gaussiano com fórmula "y0+A*exp(-(x-xc)^2/(2*w^2))"
  • LorentzFit( camada,curva) - ajuste lorentziano
  • SigmoidalFit( camada, curva) - ajuste sigmoidal
  • NonLinearFit( camada, curva) - ajuste não linear (pode ser utilizada qualquer fórmula que se desejar)
  • PluginFit( camada, curva) - ajuste utilizando curva definida em um plugin

A seguir vamos dar dois exemplos de como utilizar ajustes. Nos dois casos vamos supor que tenhamos um gráfico, nomeado como Gráfico1, com uma curva rotulada de Tabela1_2 (substitua estes termos conforme o seu caso). Vamos supor também que a curva Tabela1_2 no Gráfico1 seja aproximadamente linear (você pode criar uma curva linear facilmente, não é?).

Exemplo 1: ajuste linear
Na nota aberta, digite as seguintes linhas (pode ignorar o que estiver depois de um #) 

g = graph("Gráfico1") # para que o Gráfico1 seja acessado na nota
camada =  g.activeLayer() # para acessar a camada ativa do Gráfico1 *
f = LinearFit(camada,"Tabela1_2") # definindo o ajuste como linear
f.fit() # para executar o ajuste

* supondo que a curva Tabela1_2 esteja nesta camada. Se estiver em outra camada, utilize layer(número da camada) no lugar de activeLayer()

Depois disto, execute a nota (tecle Ctrl + Shift + j) e você verá no Gráfico1 que o ajuste de curva foi efetuado com sucesso. Os resultados detalhados do ajuste podem ser vistos no Registro de resultados. Depois do próximo exemplo, diremos como acessar os resultados do ajuste na nota/script.

Exemplo 2: ajuste polinomial
Neste caso, vamos utilizar um ajuste polinomial de ordem 4, apenas como exemplo. Não é muito diferente do primeiro exemplo. Note que no lugar de LinearFit vamos utilizar PolynomialFit, com sua respectiva sintaxe:

g = graph("Gráfico1")
camada =  g.activeLayer()
f = PolynomialFit(camada,"Tabela1_2",4) # definindo o ajuste como polinomial, de ordem 4
f.fit()

Execute a nota (tecle Ctrl + Shift + j) e veja os resultados no Gráfico1 e no registro de resultados.
Bem simples. Não é mesmo?

Depois que um ajuste é executado, existem alguns resultados que podem ser acessados na nota/script. São os seguintes:
  • f.results() - retorna um vetor com os resultados dos parâmetros ajustados
  • f.errors() - retorna um vetor com as incertezas nos parâmetros ajustados
  • f.chiSquare() - retorna o valor do teste de Chi^2
  • f.numParameters() - retorna o número de parâmetros utilizados no ajuste
  • f.parametersTable("params") - abre uma tabela com os parâmetros ajustados e suas respectivas incertezas
  • f.covarianceMatrix("cov") - abre a matriz de covariância do ajuste
Note que, para que os resultados apareçam na própria nota você deve teclar Ctrl + Enter depois de algo como f.results().

Bom, espero que esta dica seja útil! Na próxima dica, mostrarei algumas outras curvas de ajuste e alguns controles a mais no script de ajuste.

Até mais!

quinta-feira, 10 de dezembro de 2015

Atualização disponível - SciDAVis 1.D9 para Linux, Mac e Windows

No dia 24/11/2015 foi lançada a versão 1.D9 do SciDAVis. Esta versão corrige alguns bugs, mas não traz nenhuma novidade para o usuário final. Os pacotes binários para Windows e Mac, e também o código fonte, estão disponíveis em http://sourceforge.net/projects/scidavis/files/SciDAVis/1.D9/. Vale dizer que, infelizmente, o suporte a sctipts em Python na versão para Windows não está funcionando desde a versão 1.D8.

Entre as versões 1.D8 e 1.D9 houveram mudanças na estrutura do código, de modo que praticamente todo o código fonte fosse colocado em uma biblioteca (libscidavis).
Além disto, o código fonte do programa passou a ser armazenado e desenvolvido no GitHub e o repositório SVN no SourceForge foi depreciado. O principal objetivo desta mudança é atrair novos desenvolvedores. Pois, desta forma, qualquer um que queira contribuir precisa apenas criar um fork do projeto, fazer suas alterações e enviá-las de volta via pull request.

Consegui compilar com sucesso a versão 1.D9 do SciDAVis no meu Slackware 14.1. Porém, não pretendo disponibilizar o pacote na minha página de pacotes do SciDAVis para Slackware neste momento. O motivo é que existe um bug relacionado ao não aparecimento dos ícones nesta versão. As figuras abaixo mostram como deveria ser (primeira) e como está na versão 1.D9 (segunda):
Aparentemente, este problema com os ícones afeta Windows (testado via wine) e Linux, mas não a versão para Mac. Se alguém tiver ideia de como resolver isto, por favor, avisem a mim [ou contribuam com o projeto :-) ].

Até mais...