Mostrando postagens com marcador Simulação numérica. Mostrar todas as postagens
Mostrando postagens com marcador Simulação numérica. Mostrar todas as postagens

sexta-feira, 8 de março de 2013

Softwares gratuitos de análise estatística

Hoje vi este site: http://www.analyticbridge.com/forum/topics/list-of-free-statistical e achei que seria muito interessante difundir todo o trabalho desenvolvido para a elaboração de softwares estatísticos gratuitos.

Segue a lista de softwares em ordem alfabética.

A
ADaMsoft - Data mining, data management and reporting. Has web based features.
Ade4 - It contains Data Analysis functions to analyse Ecological and Environmental data in the framework of Euclidean Exploratory methods, hence the name ade4.
ADePT - Developed to automate and standardize the production of analytical reports.
ADMB - Non-linear statistical modelling.
AM  General stats package.
AnSWR - A software system for coordinating and conducting large-scale, team-based analysis projects that integrate qualitative and quantitative techniques.
Apophenia - General stats package but with more flexibility to be creative in model building.
Arc - Applied regression including computing and graphics.
Assistat - General stats package.

B
Bayesian Filtering Library - Bayesian software for use in advanced machine and robot control.
BiNGO - Bioinformatics software. Biological Network Gene Ontology.
BioEstat - Ecological statistics program (only available in Portuguese).
Biogeme - Stands for: Bierlaire's Optimization Toolbox for GEV (Generalized Extreme Value) Model Estimation.
Biomapper - A GIS-toolkit to model ecological niche and habitat suitability.
BKD - Bayesian Knowledge Discoverer
BlockTreat - A general frequentist Monte Carlo program for block and treatment tests, tests with matching, k-sample tests, and tests for independence.
BrightStat - General stats package.
BV4.1 - A procedure for the decomposition and seasonal adjustment of monthly and quarterly economic series. Used by the German Federal Statistical Office.

C
Calcugator - Calculator, plotting engine, and programming environment.
Caleydo - Bioinformatics data visualisation software.
CCOUNT - Designed for market research purposes, including: data cleaning, manipulation, cross tabulation and data analysis. Similar to SPSS.
CDC EZ-Text - Developed to assist researchers create, manage, and analyze semi-structured qualitative databases.
Chronux - Developed for the analysis of neural data.
Conc - Text concordance program.
Concorder - Text concordance program. Allows you to take given texts and find out the frequency of words.
Correlate -
CSPro - Census and Survey Processing System (CSPro) is a questionnaire-oriented statistical package for Windows.
Cytoscape - Bioinformatics software platform for visualizing molecular interaction networks and integrating these interactions with gene expression profiles and other state data.

D
DAP - Alternative to SAS.
Dataplot - General stats package. Designed for science and engineering.
DAVID - Bioinformatics software. Database for Annotation, Visualization and Integrated Discovery.
dChip - Bioinformatics software. dChip Software: Analysis and visualization of gene expression and SNP microarrays
Demetra - Time series package.
Dia - Diagram drawing program. Allows the drawing of entity relationship diagrams, UML diagrams, flowcharts, network diagrams, and many others.
Draco - Econometrics package with spreadsheets.

E
EASE - Bioinformatics software. Expression Analysis Systematic Explorer.
EasyReg Int. - Econometrics package.
EasySample - Simple sampling program.
EDGAR - Experimental design programs.
ELKI - Environment for developing KDD-applications supported by index-structures. Compares data mining algorithms.
EMMIX - Fortran software to fit mixture models.
Epi Info - Designed for epidemiologists and other public health and medical professionals.
Epidata - Epidemiology package.
EqPlot - Equation graph plotter.
ErmineJ - Bioinformatics software. Performs analyses of gene sets in expression microarray data or other genome-wide data that results in rankings of genes.
ESA - Event Structure Analysis (ESA) is an on-line Java program that helps you analyze sequential events.
ESS - Emacs Speaks Statistics. Add-on package for emacs text editors.
Esta+ - General (and simple) stats package.
Euler - Similar to Matlab.
EVE - Embedded Vector Editor. Vector graphics program.
Excellent Analytics - Excel plug-in that lets you import web analytics data from Google Analytics into a spreadsheet.
EzANOVA - Simple ANOVA program.

F
Factor - Simple factor analysis program.
Firebird - Relational database management system (RDBMS).
Fityk - Nonlinear least squares curve fitting.
Freemat - Similar to Matlab and IDL.

G
G Power - Power and sample size calculator.
G7 - Econometrics package. Allows the building and useage of data banks.
GATE - Text mining program. General Architecture for Text Engineering.
Gemma - Bioinformatics software. Database and software system for the meta-analysis of gene expression data.
GEMS - Bioinformatics software (online forms). Gene Expression Module Sampler.
GenePattern -Bioinformatics software. Genomic analysis platform that provides access to more than 125 tools for gene expression analysis, proteomics, SNP analysis and more.
GenMAPP - Bioinformatics software. Designed to visualize gene expression and other genomic data on maps representing biological pathways and groupings of genes.
GeoDa - Geospatial analysis and computation.
GGobi - Data visualisation.
Gist - Bioinformatics software. Contains software tools for support vector machine classification and for kernel principal components analysis.
Gnumeric - Spreadsheet program.
Gnuplot - Command driven graphing program.
GoMiner - Bioinformatics software. A tool for biological interpretation of 'omic' data, including data from gene expression microarrays.
Gostat - Bioinformatics software (online forms). Find statistically overrepresented Gene-Ontology (GO) terms within a group of genes.
Gretl - Stands for Gnu regression, econometrics and time-series library. Alternative to EViews. REVIEWED!!!
Grocer - An econometric toolbox for Scilab.
GUIDE - Multi-purpose machine learning algorithm for constructing classification and regression trees.

H
HLM - Hierarchical linear and nonlinear modelling.

I
IHMC CmapTools - Concept mapping program.
Instats - General stats package.
Interactive Statistical Unit -
Inverse Symbolic Calculator - An online form where the output is a list of possible sources for the number you enter (such as simple equations or well known constants).
IRRIStat - General stats package. Designed for analysis of agricultural field trials data.
IVEware - Imputation and Variance Estimation.

J
JAGS - Stands for just another Gibbs sampler. Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC).
jHepWork - Mathematics and statistics package.
JMulTi - Time series and econometrics package.

K
Kyplot - Graphs program.

L
Lisp-stat - General stats package with emphasis on graphics.
LISREL - Originally limited to structural equation modelling (SEM) but now has other functions.

M
MacAnova - General stats package.
MacSHAPA - Macintosh-based software environment that supports observational data analysis, including the analysis of video.
Matrixer - Econometrics package.
Matrix2png - Bioinformatics software. A simple program for making visualizations of microarray data and many other data types.
Matvec - Current capabilities range from matrix and vector manipulation to the analysis of linear and generalized linear mixed models.
Maxima - A computer algebra system. Mathematics program.
MicroConcord - Text concordance program.
MicrOsiris - Statistical and data management package.
Ministep - Constructs Rasch measures from simple rectangular data sets.
MINUIT - Physics analysis tool for function minimization.
Mondrian - Data visualisation.
MorePower - Statistical power calculator for hypothesis tests.
Mx - Matrix algebra interpreter and numerical optimizer for structural equation modelling and other types of statistical modelling of data.
MYSTAT - Free SYSTAT version for students.

N
NLTK - Text mining program. Natural Language Toolkit.
NORM - Multiple imputation of multivariate continuous data under a normal model.

O
Octave - Similar to Matlab.
Onto-Tools - Bioinformatics programs. Onto-Express, Onto-Compare, Onto-Design, Onto-Translate, Onto-Miner, Pathway-Express, Promoter-Express, nsSNPCounter, OE2GO, KUTE-BASE.
OpenBUGS - Bayesian inference using Gibbs sampling.
Open Code - A tool for coding qualitative data generated from text information such as interviews, observations or field notes.
OpenEpi - Epidemiology package.
OpenOffice - Open source alternative to Microsoft Office. Includes Calc, an alternative to Excel.
Openstat - General stats package.
Orange - Data mining through visual programming or Python scripting. Extensions for bioinformatics and text mining.

P
PAM -
PAMCOMP - Person-years And Mortality COMputation Program.
PAST - Statistics program for palaeontology.
PCP - Pattern Classification Program.
PINT - Power analysis IN Two-level designs (for determination of standard errors and optimal sample sizes in multilevel designs with 2 levels).
Ploticus - Graphs program.
PopTools - Population modelling program.
POSDEM - A program to choose between sampling plans based on the population frame.
PostgreSQL - Relational database management system (RDBMS).
PQRS - Stands for probabilities, quantiles and random samples.
Program Mark - Ecological statistics program. Advanced mark-recapture modelling.
PS - Power and sample size calculator.
PSPP - Alternative to SPSS.

Q
QCA - Qualitative Comparative Analysis is a special-purpose program designed to analyze quantified data from multiple cases.
QPL - Questionnaire Programming Language.
Quail - Quantitative analysis in Lisp.

R
R - Widely used alternative to SPlus.
R Commander - GUI interface for R.
RapidMiner - Data mining.
Red R - Visual programming interface for R.
Regress+ - Mathematical modelling for the Macintosh.
RMAexpress - Bioinformatics software. A standalone GUI program to compute gene expression summary values for Affymetrix Genechip data.
Rosetta - A rough set toolkit for data analysis / data mining.
Rule Discovery System - Data mining program.
Rundom Pro - General stats package with emphasis on resampling procedures.
Rweb - An online form that processes R commands.

S
|STAT - General stats package.
Sage - Mathematics software.
SalStat - General stats package designed for the analysis of science and psychology data.
SAM - Bioinformatics software. Sequence Alignment and Modeling System.
Scilab - Numerical computation.
Shogun - A large scale machine learning toolbox.
Simfit - Simulation, curve fitting, statistics, and plotting.
Simplex Method Tool - An online form that solves linear programming problems.
SimulME - A Java ME (J2ME) application with queuing calculator, Monte Carlo simulation and more. Compatible with Sony-Ericsson, Samsung, Motorola and other cell phones.
SL Gallery - Statistical distribution graphs and calculations.
SOCR - Stands for statistics online computational resource. General stats package.
SOFA Statistics - Statistics, analysis and reporting program.
Software for Permutation Methods: A Distance Function Approach
Sonar - Survey administration and data collection system.
SpreadCE - Spreadsheet program.
SSP (Smith's Statistical Package) - General stats package.
StatCalc - A Calculator that computes table values of 34 statistical distributions. It also computes moments, and many other statistics.
StatEasy - General stats package.
Statext - Statistics expressed in text (even the graphs).
Statibot - An interactive www-based expert system for basic statistical analysis.
Statist - General stats package.
Statistical Lab - R based general stats package.
Statistics 101 - Simulations / resampling methods.
STATPerl - General stats package based on Perl.
Stattucino - Web spreadsheets with data analysis functions.

T
TAMS - Text mining program. Text Analysis Mark-up System. Identifies themes in texts.
Tanagra - Data mining.
TELPACK - Teletraffic Analysis Package.
Tetrad - Search algorithms and statistical modelling.
TextStat - Text concordance program. A program for the analysis of texts.
TimesLab - Time series analysis program.
TMeV - Bioinformatics software. Normalized and filtered expression files can be analyzed using TIGR Multiexperiment Viewer (MeV).
TSW - Time series and econometrics package.
TWOMOK - Non-parametric scale analysis for two-level data (ecometrics).

U
UIMA - Text mining program. Unstructured Information Management Architecture.
Ultrafind - Text concordance program. Extremely fast text search.

V
VARBRUL - Designed to facilitate analysis of linguistic variables and social variables.
VisiCube - Data visualisation tool.
ViSta - Visual statistics system with work maps, guide maps and interactive graphics.
VStar - Data visualisation and analysis tool for astronomy.

W
Weft QDA - A tool to assist in the analysis of textual data such as interview transcripts, written texts and field notes.
Weka - Machine learning software written at the University of Waikato.
WinBUGS - Bayesian analysis using Markov chain Monte Carlo methods.
WinIDAMS - General stats package.
Winpepi - Epidemiology package.
WordNet - A large lexical database of English.

X
X-12-ARIMA - Seasonal adjustment software produced, distributed, and maintained by the US Census Bureau.
XDAT - Visualization and analysis of multidimensional data.
XL Statistics - A set of Microsoft Excel (ver 97+) workbooks for statistical analysis of data.
XL Toolbox - Data analysis add-on for Excel.
Xnumbers - Multi precision floating point computing and numerical methods for Excel.
XploRe - Interactive statistical methods and data exploration.
Xpro - Exact parametric inference.
Xtremes - Graphics and analysis program for extreme values.

Y
Yxilon - Statistical programming language.

Z
Zaitun Time Series - Time series software. Has the capability to deal with stock market data.
Zelig - Based on R. Automates various processes.

A fonte original, com os links de cada software está aqui: http://l-lists.com/en/lists/dz3a5t.html

terça-feira, 9 de outubro de 2012

Matemática pode revolucionar tecnologia das baterias de lítio

Matemática pode revolucionar tecnologia das baterias de lítio

Modelos de simulação computacional são a melhor forma de se testar um sistema ou um conceito, permitindo a observação do fenômeno, uma vez que o modelo esteja fiel à realidade, sem a necessidade de investimentos em dispositivos físicos.

terça-feira, 28 de julho de 2009

Tutorial Scilab - 8 [Usando arquivos]

[English version here.]

Quanto tempo hein? Mas finalmente estou retomando os meus compromissos (dentre eles, o MultiSign).

Pois bem, vamos ver algo sobre manipulação de arquivos com o Scilab agora.

No Scilab, existem diversas funções para manipular arquivos tanto arquivos ASCII quanto binários.

Os aquivos são importantes para melhor gerenciar dados de entrada e resultados obtidos (óbvio não acham?).

Como a maioria deve saber o que é um arquivo, vamos dar continuidade ao post.

Uma boa forma de conhecer as formas de manipulação de arquivos no Scilab é com o help, olhe como acessar o help na figura abaixo:


Na tela de ajuda, digite: file manage e selecione a primeira opção file(.).

Esta função é semelhante à função fopen(.) da linguagem C.

No help, é possível ver várias informações sobre a função file(.).

Algumas das outras funções funções de manipulação de arquivos no Scilab são:

  • save;
  • load;
  • mopen;
  • mclose;
  • writeb;
  • readb.
No momento, vamos nos limitar as funções:

  • read;
  • write.

A função write(.) cria arquivos ASCII e a função read(.) carrega os arquivos em variáveis.

As variáveis envolvidas nestas funções geralmente são matrizes e/ou vetores. Vamos aos exemplos agora:


-->x = rand(5,5)
x =

0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361

-->write("test_data.dat", x);

-->y1 = read("test_data.dat", 1, 2) // 1 linnha e 2 colunas
y1 =

0.2113249 0.6283918

-->y2 = read("test_data.dat", 2, 2) // 2 linhas and 2 colunas
y2 =

0.2113249 0.6283918
0.7560439 0.8497452

-->y3 = read("test_data.dat", -1, 1) // -1 indica que se deve ler todas as linhas
y3 =

0.2113249
0.7560439
0.0002211
0.3303271
0.6653811

-->>y4 = read("test_data.dat", -1, 5) // lê o arquivo inteiro
y4 =

0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361


O arquivo test_data.dat é apresentado na figura a seguir (clique na figura para vê-la em tamanho real).

sábado, 16 de maio de 2009

Desafio 01

Eu estava pensando umas coisas esses dias e acabei por me lembrar da época de ensino médio, em que eu participava das olimpíadas de física e matemática.

Haviam tantos problemas interessantes. Eu sei que a maioria das pessoas não valoriza os problemas clássicos da matemática, por exemplo, mas estudá-los e tentar resolver os problemas da base do conhecimento abre a mente para aprender cada vez mais, e, além do benefício pessoal, também é possível que outras pessoas usem suas idéias para resolver outros problemas.

Eu mesmo já usei conceitos de teoria dos números, algo que é da base da matemática, para resolver problemas em processamento de sinais e imagens.

Uma vez meu primeiro professor de cálculo disse: "o único conhecimento que você não usa é aquele que você não possui", e isso é verdade.

Eu vou então propor o problema que eu me lembrei enquanto almoçava na 4ª feira desta semana:

Você tem 1001 bolinhas e uma balança de pratos (que serve para comparar dois pesos e determinar o mais leve).
Uma destas bolinhas tem uma massa diferente das outras 1000 bolinhas.

Como determinar se a massa desta bolinha, que é diferente das outras, é maior ou menor que a massa das outras bolinhas usando a balança, no máximo, duas vezes?

---------------------------

Se os leitores se mostrarem interessados por esta minha iniciativa, eu pensei em recompensar as soluções. Talvez transferências para contas corrente sejam interessantes.

Quem tiver uma solução, favor compartilhá-la conosco fazendo um comentário neste post.

quarta-feira, 6 de maio de 2009

Tutorial Scilab - 7 [Operações elemento a elemento]

[English version here.]

Estão vendo como é difícil atualizar o MultiSign e escrever a dissertação? Mas assim que possível iremos regularizar a situação.

Vamos abordar as operações elemento a elemento usando o Scilab.

Este post será basicamente de exemplos.

Vamos supor que temos duas matrizes de mesmo tamanho (X e Y) e queremos multiplicar (Z1) e dividir (Z2) os elementos correspondentes:

X = [x11 x12 x13;
x21 x22 x23;
x31 x32 x33].

Y = [y11 y12 y13;
y21 y22 y23;
y31 y32 y33].

Z1 = [x11*y11 x12*y12 x13*y13;
x21*y21 x22*y22 x23*y23;
x31*y31 x32*y32 x33*y33].

Z2 = [x11/y11 x12/y12 x13/y13;
x21/y21 x22/y22 x23/y23;
x31/y31 x32/y32 x33/y33].

Não existe um operador matemático matricial para tal operação, mas o Scilab tem um recurso para fazer isso. Observem a seguir.

-->X = zeros(3,3);

-->X(:) = [1:9]'
X =

1. 4. 7.
2. 5. 8.
3. 6. 9.

-->Y = ones(3,3) + X'
Y =

2. 3. 4.
5. 6. 7.
8. 9. 10.

-->Z1 = X.*Y
Z1 =

2. 12. 28.
10. 30. 56.
24. 54. 90.

-->Z1 = X./Y
Z1 =

0.5 1.3333333 1.75
0.4 0.8333333 1.1428571
0.375 0.6666667 0.9

As operações de soma e subtração matriciais operam elemento a elemento.


Operações lógicas

Agora vamos fazer operações lógicas com matrizes.

Os operadores:

  • & - AND;
  • | - OR;
  • ~ - NOT.
E um código de exemplo:

-->X = rand(3,3) > 0.2
X =

F T T
T F T
T T T

-->Y = rand(3,3,'normal') > 0.5
Y =

T T F
T F T
F F F

-->Z1 = X & Y
Z1 =

F T F
T F T
F F F

-->Z2 = X | Y
Z2 =

T T T
T F T
T T T

-->Z3 = ~X
Z3 =

T F F
F T F
F F F

-->Z4 = (~X) | Y
Z4 =

T T F
T T T
F F F

Com isso, fechamos a parte de operações matriciais básicas.

sexta-feira, 17 de abril de 2009

Tutorial Scilab - 6 [Vetores e Matrizes - 4]

[English version here.]

Primeiro gostaria de me explicar com os leitores do MultiSign. Eu passei estes dias (quase 3 semanas) sem fazer nenhuma postagem porque estava envolvido com as atividades da Semana Santa, festas pascais e um artigo que espero finalizar hoje.

Voltando ao assunto. Vamos ver agora como fazer operações lógicas com vetores e matrizes.

Um exemplo:

Vamos supor que o vetor a seguir corresponde a altura, em metros, de um conjunto de pesoas.

v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'

Precisamos então identificar as pessoas que têm mais de 1,80m.

Uma solução direta é analizar elemento por elemento:

v(1) > 1.80
v(2) > 1.80
v(3) > 1.80
v(4) > 1.80
v(5) > 1.80
v(6) > 1.80
v(7) > 1.80

Mas o Scilab tem uma forma mais prática de fazer isso:

v > 1.8 // esta operação não depende da dimensionalidade ou tamanho do vetor

Vamos fazer um script.

-->v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'
v =

1.55
1.82
1.48
1.71
1.62
1.94
2.

-->v > 1.8
ans =

F
T
F
F
F
T
T

Mas, se o que desejamos é saber a posição dos elementos (pessoas) com mais de 1,80m:

-->pos = find(v > 1.8)
pos =

2. 6. 7.

Os elementos em v que são maiores que 1,80 são o segundo (1,82), sexto (1,94) e sétimo (2,00).

Podemos fazer a mesma coisa com matrizes.

Um exemplo muito útil é criar uma matriz binária em que a probabilidade de um elemento ser 0 (zero) é a mesma dele ser 1 (um).

Olhem o script e me dêem um feedback.

-->x = rand(3, 3)
x =

0.5667211 0.0568928 0.7279222
0.5711639 0.5595937 0.2677766
0.8160110 0.1249340 0.5465335

-->y = x > 0.5
y =

T F T
T T F
T F T

Para instigá-los, eu pergunto por que tem tantos T's a mais que F's?

quinta-feira, 19 de fevereiro de 2009

Tutorial Scilab - 4 [Vetores e Matrizes - 3]

[English version here.]

Vamos agora abordar funções mais específicas para manipulação de matrizes.

As funções que mais uso são as seguintes:

  • eye(m,n) - matriz identidade;
  • zeros(m,n) - matriz de zeros (0's);
  • ones(m,n) - matriz de uns (1's);
  • det(X) - determinante;
  • inv(X) - matriz inversa;
  • pinv(A,[tol]) - pseudoinversa;
  • sum(x,[key]) - soma de vetor/matriz (todos os elementos ou sobre um eixo);
  • prod(x,[key]) - produto de vetor/matriz (todos os elementos ou sobre um eixo);
  • mean(x,[key]) - média de vetor/matriz (todos os elementos ou sobre um eixo);
  • stdev(x,[key]) - desvio padrãode vetor/matriz (todos os elementos ou sobre um eixo);
  • geomean(x,[key]) - média geometrica de vetor/matriz (todos os elementos ou sobre um eixo);
  • harmean(x,[key]) - média harmonica de vetor/matriz (todos os elementos ou sobre um eixo);
  • msd(x,[key]) - desvio médio quadrático de vetor/matriz (todos os elementos ou sobre um eixo);
  • rand(m1,m2,.. [,key]) - gerador de números aleatórios;
  • grand(m, n, dist_type [,p1,...,pk]) - gerador de números e sequências aleatórios;
  • find(X) - localiza os índices de valores não-nulos ou verdadeiros (para variáveis booleanas).

  • Como é de se esperar, "cada função é uma função".

    Agora, aos exemplos:

    -->eye(3,3) // matriz identidade 3 x 3*
    ans =

    1. 0. 0.
    0. 1. 0.
    0. 0. 1.

    -->rand(5,2) // matriz (5 linhas e 2 colunas) de números aleatórios com distribuição de probabilidade uniforme entre [0, 1]
    ans =

    0.0683740 0.5442573
    0.5608486 0.2320748
    0.6623569 0.2312237
    0.7263507 0.2164633
    0.1985144 0.8833888

    -->rand(2,5,'normal') // matriz (2 linhas e 5 colunas) de números aleatórios com distribuição normal (Gaussiana) de média = 0 e variância = 1
    ans =

    1.0478272 - 1.4061926 - 1.7350313 - 0.2143931 2.5891773
    - 1.3218008 - 1.0384734 0.5546874 - 2.0735088 0.0424792

    -->det(eye(4,4)) // determinante da matriz identidade 4 x 4
    ans =

    1.

    -->X = rand(5,5) // X é uma matriz (5 x 5) com valores aleatórios entre [0, 1]
    X =

    0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
    0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
    0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
    0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
    0.9184708 0.2806498 0.6856896 0.4094825 0.5896177

    -->det_X = det(X) // det_X é o determinante de X
    det_X =

    - 0.0799884

    -->[py px] = find(eye(3,3)) // px corresponde as posições (eixo - x) dos números não-nulos (diferentes de zero) e py corresponde as posições (eixo - y) destes números
    px =

    1. 2. 3.
    py =

    1. 2. 3.

    -->[py px] = find(~eye(3,3)) // o til '~' é a operação de negação lógica, então (~0) = 1 e (~1) = 0**
    px =

    1. 1. 2. 2. 3. 3.
    py =

    2. 3. 1. 3. 1. 2.


    -->X // a variável X (X = rand(5,5)) definida antes
    X =

    0.4368588 0.0437334 0.1280058 0.1531217 0.8784126
    0.2693125 0.4818509 0.7783129 0.6970851 0.1138360
    0.6325745 0.2639556 0.2119030 0.8415518 0.1998338
    0.4051954 0.4148104 0.1121355 0.4062025 0.5618661
    0.9184708 0.2806498 0.6856896 0.4094825 0.5896177

    -->sum(X,'r') // soma sobre as colunas de X (linha de valores)
    ans =

    2.6624119 1.4850001 1.9160468 2.5074436 2.3435661

    -->sum(X,'c') // soma sobre as linhas de X (coluna de valores)
    ans =

    1.6401323
    2.3403973
    2.1498187
    1.9002098
    2.8839105

    -->sum(X) // soma de todos os elementos de X
    ans =

    10.914469


    Ok, caso os leitores se manifestem, posso fazer novos posts aprofundando mais cada função.

    ------------------
    * Se o comando é dado sem o ponto-e-vírgula ';' então o resultado da comando é apresentado no prompt e armazenado na variável ans.

    ** Operações lógicas são cenas futuras que veremos aqui no MultiSign.

    segunda-feira, 16 de fevereiro de 2009

    Tutorial Scilab - 3 [Vetores e Matrizes - 2]

    [English version here.]

    Vamos começar com as funções que podem ser usadas em matrizes e vetores no Scilab.

    Como já se sabe, o Scilab tem várias funções matemáticas, por exemplo: sin, cos, tan, asin, acos, atan, exp, log, etc....

    Todas estas funções podem ser usadas em tensores, matrizes, vetores e escalares.

    Vamos agora ao primeiro exemplo:

    -->x = [1 0 1;
    -->0 1 0;
    -->1 0 1]
    x =

    1. 0. 1.
    0. 1. 0.
    1. 0. 1.

    -->y = cos(%pi*x) // o Scilab tem algumas constantes pré-definidas, eu conheco PI (%pi = 3.1415927) e E (%e = 2.7182818)
    y =

    - 1. 1. - 1.
    1. - 1. 1.
    - 1. 1. - 1.


    Lembrando que cos(%pi) = -1 e cos(0) = 1 (círculo trigonométrico).

    Dando continuidade ao post, operações com matrizes geram novas matrizes e estas novas matrizes podem ser usadas em outras operações e/ou funções.

    Segundo exemplo:

    -->x = [1 2 3]
    x =

    1. 2. 3.

    -->y = [3;
    -->2;
    -->1]
    y =

    3.
    2.
    1.

    -->z1 = exp(x*y)
    z1 =

    22026.466

    -->z2 = exp(y*x)
    z2 =

    20.085537 403.42879 8103.0839
    7.3890561 54.59815 403.42879
    2.7182818 7.3890561 20.085537


    A operação x*y resulta em:
    x*y = [1*3 + 2*2 + 3*1] = [3 + 4 + 3] = 10.

    E a operação y*x resulta em:
    y*x =
    [3*1 3*2 3*3;
    2*1 2*2 2*3;
    1*1 1*2 1*3] =
    [3 6 9;
    2 4 6;
    1 2 3].


    A função exp() retorna a exponencial natural (exp(x) = %e^x).

    domingo, 14 de dezembro de 2008

    Manipulação de iluminação pelo histograma

    Eu fiz um post sobre segmentação em que eu citei uma equalização de histograma, mas como atualmente estou fazendo alguns testes com realce de imagens e usando técnicas que envolvem o histograma das imagens, vou apresentar algo aqui.

    Para começar, tudo o que for apresentado aqui foi desenvolvido no Scilab com a biblioteca SIVP (informações podem ser encontradas facilmente nas tags do blog).

    Pois bem, para começar vamos manipular apenas um offset do histograma que consiste em acrescentar ou subtrair um valor constante em todos os pixels da imagem.

    Para ilustrar, vamos usar a imagem a seguir.


    Segue o histograma desta imagem.
    Obs.: Lembrando que o histograma é a incidência de pixels em cada nível (intensidade).

    Observando este histograma, percebe-se que ele está muito consentrado nos valores altos, o que se reflete em uma imagem muito clara.

    Vamos então reduzir 50 de cada pixel.

    Obtemos a imagem (original | nova).

    E o novo histograma.

    Neste caso, já percebe-se alguma diferença na imagem.

    Para fechar o post, faço 2 observações:
    1. As imagens podem ser vistas em tamanho original apenas clicando em cima.
    2. Novos posts sobre o assunto serão feitos caso os leitores mostrem interesse.

    terça-feira, 5 de agosto de 2008

    Algoritmos Genéticos - Dicas de implementação

    Para falar um pouco mais de algoritmos genéticos, agora citarei algumas dicas para a implementação.

    1. Criar uma grande população inicial de indivíduos;
    2. Descartar indivíduos pouco "adaptados", em alguns casos cada nova geração substitui a anterior;
    3. Buscar soluções na forma de vetores de números binários, isto facilita muito a manipulação dos "genes";
    4. Fazer com que os indivíduos "cruzem" da forma mais aleatória possível, para que o algoritmo apresente sempre bastante variabilidade;
    5. Quando o algoritmo encontra um "mínimo local", que representa uma condição da qual o algoritmo chega e não consegue sair, porém sabe-se que é possível chegar a um resultado melhor, usa-se o recurso da mutação que consiste em alterar aleatoriamente alguns genes dos indivíduos (todos ou alguns).
    Como citei no post anterior, Algoritmos Genéticos são baseados na Teoria da Evolução, então é interessante que o desenvolvedor realmente imagine o problema com esta visão, que existem os indivíduos que resolvem o problema e estes indivíduos se reproduzem gerando novos indivíduos que podem resolver melhor ou não o problema, se nenhum dos indivíduos estiver adaptado ao problema ocorrem mutações para que eles possam ficar mais capazes de "perseverar".

    Para fechar, o vídeo a seguir foi um trabalho que desenvolvi na disciplina de ICA (Inteligência Computacional Aplicada) usando algoritmos genéticos.



    Adianto que o vídeo é curto, porém interessante.

    segunda-feira, 4 de agosto de 2008

    Algoritmos Genéticos

    Para começar o período letivo 2008.2, o 1º post será sobre o assunto que deve ser também o primeiro da disciplina de ICA: Algoritmos Genéticos.

    O princípio dos algoritmos genéticos (ag's) é baseado na Teoria da Evolução (biologia).

    A idéia é a seguinte: primeiro deve-se analisar qual o problema e desenvolver uma solução representada por um vetor de numéros, preferencialmente binários. Depois disto, criam-se várias soluções (vetores de números binários) aleatoriamente (o conjunto de soluções denomina-se população e cada solução é denominada indivíduo), cada um destes indivíduos é então testado e atribui-se um grau de "adaptabilidade", que corresponde a quanto esta solução (indivíduo) satisfaz o problema. A partir da adaptabilidade, o indivíduo terá uma probabilidade de "cruzar" com outro indivíduo, quanto maior a adaptabilidade maior a probabilidade do indivíduo "cruzar".
    O cruzamento entre indivíduos ocorre da seguinte forma: como cada indivíduo corresponde a um vetor (de números binários), toma-se um ponto aleatório neste vetor e faz-se um crossing-over, em que serão gerados 2 novos indivíduos sendo um com o começo dos "genes" de um indivíduo anterior e o final dos "genes" do outro indivíduo.

    Para ilustra o problema, tomemos o seguinte problema:
    Tem-se uma sala que tem N lâmpadas e deseja-se determinar quais devem ficar acesas para melhor iluminar o ambiente com o menor gasto de energia (ag's são muito usados em problemas de otimização, como este).

    {Fazendo N = 10}

    Cada solução corresponde a um vetor de 10 posições: s = [l0 l1 l2 l3 l4 l5 l6 l7 l8 l9] em que cada posição representa o status de uma lâmpada (0 -> apagada e 1 -> acesa).

    Cria-se agora uma população de soluções, por exemplo:
    s1 = [0 1 1 0 0 0 1 1 1 1]
    s2 = [0 1 0 0 1 1 0 1 1 0]
    s3 = [1 1 0 1 1 0 0 0 1 0]
    s4 = [0 0 0 0 1 1 1 1 1 0]

    Para cada solução, avalia-se quão bem o ambiente é iluminado e quanto de energia é gasto de modo a determinar a adaptabilidade de cada indivíduo. Suponto que chegue em:

    adapt(s1) = 30%
    adapt(s2) = 60%
    adapt(s3) = 70%
    adapt(s4) = 10%

    Então cada indivíduo terá a probabilidade de "cruzar".

    Fazendo o cruzamento dos indivíduos s1 e s3:
    s1= [0 1 1 0 0 0 1 1 1 1] e s3 = [1 1 0 1 1 0 0 0 1 0]

    Determina-se um ponto aleatoriamente para ocorrer o crossing-over, por exemplo 6.
    s1' = [s1[0] s1[1] s1[2] s1[3] s1[4] s1[5] s3[6] s3[7] s3[8] s3[9]]
    s1' = [0 1 1 0 0 0 0 0 1 0]
    s2' = [s3[0] s3[1] s3[2] s3[3] s3[4] s3[5] s1[6] s1[7] s1[8] s1[9]]
    s2' = [1 1 0 1 1 0 1 1 1 1]

    São calculadas as adaptabilidades dos novos indivíduos e o processo é repetido até encontrar-se um indivíduo que satisfaça uma "adaptabilidade mínima".

    A forma abordada é a mais simples, porém o algoritmo pode ficar complexo se forem definidos vários pontos de crossing-over, se o problema não tiver solução de natureza binária, se forem inseridas técnicas de mutação caso o algoritmo não esteja fornecendo bons resultados, enfim: pode-se complicar do jeito que quiser.

    sexta-feira, 2 de maio de 2008

    Migração do SIRENE

    Essa semana eu comecei a traduzir o SIRENE para python.
    Por enquanto, estou com a segmentação da pele pronta, mas ainda não validei.

    As bibliotecas não nativas que estou usando: numpy, scipy e OpenCV.

    A questão agora é como exibir os resultados, se usarei alguma biblioteca tipo Qt ou Tkinter, ou se usarei apenas as interfaces do OpenCV, que são interessantes também.

    O ambiente de desenvolvimento que estou usando é o KDevelop.

    sábado, 12 de abril de 2008

    Informações sobre o jogo "controle a bolinha com as mãos"

    Este jogo foi um "sub-projeto" que apareceu com o andamento do SIRENE.
    O objetivo do jogo é apenas não permitir que a bolinha chegue nas bordas da tela.
    Como os leitores devem imaginar, fiz este protótipo no Scilab (detalhe: acho que não demorei 6 horas de implementação, pois já tinha as idéias em mente, e comecei tudo do zero), então pude ter um alto desempenho no desenvolvimento do programa, porém a execussão do mesmo fica comprometida.

    O Scilab é um ambiente de simulação, muito indicado para o desenvolvimento de algoritmos de forma rápida, porém a execussão do programa é muito lenta.

    No FISL irei fazer uma apresentação informal deste programa, porém não pretendo disponibilizá-lo antes de ver como fazer para colocá-lo sob as condições da GNU-GPL.

    quinta-feira, 10 de abril de 2008

    Plot 3D de pontos isolados

    Eu estava com um problema relativo à geração de gráficos tridimensionais no scilab. Especificamente, eu precisava plotar pontos isolados, mas nenhuma das funções que conhecia (plot3d(), plot3d1(), plot3d2() e plot3d3()) era capaz de gerar os pontos.
    Até mandei e-mail e postei comentários em blogs relacionados, mas fiquei satisfeito em encontrar a solução por mim mesmo.
    A função param3d1() é capaz de gerar os pontos de acordo com os parâmetros passados. Os gráficos gerados estão apresentados abaixo.
    param3d1(x, y, list(z, -4));

    param3d1([x1 x2], [y1 y2], list([z1 z2], [-1 -2]));

    Com isto, minha busca chega ao fim.

    Segmentação neural com 3 neurônios

    Nos últimos dias eu estive avaliando a segmentação usando a rede de Kohonen. Fiz algumas experiências com relação aos atributos, codificações de cor, quantidade de neurônios e outras coisas.
    Nas figuras a seguir apresento resultados obtidos com 3 neurônios, em que cada cor representa os pontos pertencentes a um dado neurônio após o treinamento da rede.


    Imagem 1.


    Imagem 2.


    Imagem 3.


    Imagem 4.


    Imagem 5.


    Nas imagens 2 e 5 a rede não conseguiu segmentar a mão, porém em todas as outras observa-se que a mão ficou bem evidenciada na imagem segmentada.
    Nestes casos, a codificação de cor usada foi RGB.

    quinta-feira, 3 de abril de 2008

    Momentos estatísticos

    Uma das áreas do conhecimento que mais uso é a estatística.
    E um assunto muito importante na estatística são os momentos estatísticos.

    Cada momento estatístico fornece uma informação diferente dos dados que estamos lidando. Estes momentos diferem-se pela ordem, podendo ser de 1a, 2a, 3a, 4a, etc... Sendo os mais usados os de 1a e 2a ordem, depois o de 3a e, raramente, de 4a; momentos de ordem superior são dificilmente usados.

    O momento de 1a ordem é definido como:Este mede o valor médio dos dados.

    O momento de 2a ordem é definido como:Este mede a dispersão dos dados em torno do valor médio.

    O momento de 3a ordem é definido como:Este mede a simetria dos dados em torno do valor médio.

    O momento de 4a ordem é definido como:Este mede a acuidade (concentração) dos dados em torno do valor médio.

    Estas informações são importantes para qualquer análise de sinais.

    O Scilab tem as funções mean(.) e variance(.) que calculam, respectivamente, os momentos de 1a e 2a ordem.

    No entanto, qualquer momento (de ordem p), sendo x a variável de interesse, pode ser calculado como sendo:
    sum((x - mean(x)).^p) / length(x)


    quarta-feira, 2 de abril de 2008

    Segmentação neural das mãos

    Ontem eu fechei um algoritmo de segmentação de pele usando uma rede neural muito interessante: a rede SOM.

    Segue o vídeo que fiz.


    Neste caso, basta separar o espaço de cores em 2 clusters: fundo e objeto. O que mais chama a atenção é a fase inicial em que observa-se a aprendizagem da rede.

    terça-feira, 25 de março de 2008

    FISL 9.0: Estaremos lá

    Assim como no ano passado, este ano terei a oportunidade de ir ao FISL em Porto Alegre - RS.
    Este ano irei tentar desenvolver umas aplicações para apresentar (informalmente) no evento.
    As aplicações funcionais:
    • Localizador de placas de veículos;
    • Previsor de séries temporais;
    • Canhão capaz de acertar o alvo automaticamente;
    • Foguete capaz de chegar ao destino automaticamente;
    • Interpolador neural de funções.
    Até o evento, pretendo desenvolver aplicações envolvendo a webcam:
    • Jogo de pedra-papel-tesoura;
    • Jogo de par-ou-ímpar.
    Caso alguém tenha interesse em conhecer as aplicações, sintam-se a vontade para entrar em contato.

    quinta-feira, 13 de março de 2008

    Visão computacional no Scilab

    Como vou entrar numa etapa de pesquisa, gostaria de compartilhar de alguns conhecimentos sobre Scilab e SIVP.

    Para os usuários do Ubuntu (e afins), o Scilab pode ser baixado e instalado automaticamente pelo gerenciador de pacotes (apt-get, synaptic, adept, etc....), não esquecer de selecionar o scilab-doc, e o SIVP pode ser baixado pelo site: http://sivp.sourceforge.net/

    Para instalar o SIVP, basta descompactá-lo e fazer a seguência de comandos no prompt (talvez seja necessário logar-se como root ou colocar o comando sudo antes dos 3 últimos comandos).:

    cd {diretorio onde encontra-se o SIVP}

    ./configure

    make

    make install

    Após este procedimento, o Scilab estará instalado e pronto para realizar aplicações de visão computacional.

    Vale lembrar que o SIVP usa a biblioteca Open CV, a qual também pode ser baixada pelo gerenciador de pacotes.

    Antes de qualquer coisa, instale o camorama (também pelo gerenciador de pacotes) e teste sua webcam.

    A tela inicial do Scilab é a seguinte, onde o botão de toolboxes está em destaque:


    Então é só clicar no botão de toolboxes e selecionar a SIVP.

    O código a seguir é uma sugestão de primeira aplicação (envolvendo a webcam).

    // Codigo para visualizacao de imagens provenientes da webcam

    Cam = camopen(); // abre a webcam
    nFrames = 1000; // determina quantos frames serao capturados

    for n = 1:nFrames, // laco principal
    im = avireadframe(Cam); // leitura do frame pela webcam e armazenamento da imagem na variavel im (como uma matriz de vetores RGB)

    imshow(im); // apresentacao da imagem no screen
    end;

    A partir deste exemplo é possível qualquer aplicação com a webcam.

    Inserção de novas técnicas

    Como a segmentação das mãos por limiarização não estava fornecendo resultados satisfatórios em casos suficientes, decidi por usar outras técnicas conjuntamente a limiarização.

    A idéia que surgiu foi usar contornos ativos (snakes) para segmentar as mãos.

    Neste caso surge alguns problemas:
    1. determinar um ponto que pertença a mão para inicializar o algoritmo;
    2. descobrir se existe alguma toolbox (ou similar) para o Scilab que faça a implementação do algoritmo;
    3. o tempo de estudo, pois não conheço a fundo o algoritmo.
    Pelo que tenho de conhecimento, Snakes tem um custo computacional elevado, então a otimização do código será crucial.

    Segundo o que sei a respeito, Snakes é semelhante aos mapas de Kohonen (que eu tenho uma experiência considerável) em que os dados (neste caso, a imagem) guia a organização da estrutura, como na figura abaixo (fonte: http://www.uib.no/med/avd/miapr/arvid/MOD3_2002/Konturdeteksjon/)


    Enfim, este fim de semana devo iniciar os estudos sobre os contornos ativos.