quarta-feira, 12 de novembro de 2014

SoGoSurvey, solving our problems with online surveys !



Collecting data, one of the central issues for many academic works. When it comes to research, to have a well done data-set sometimes is more than half the work needed to have nice results.

Luckily, the internet really helps when comes to surveys. The time demanding struggle of handling questions one person at a time is something of the past, for the majority of cases.

Google forms is a very usual approach and most of the time is the first thing that comes in mind when the necessity to create a survey emerges. For simple cases it really does the job, neat and clean. But when you need to add a little bit of complexity to your research Google forms starts to show its limitations.

For my particular case, I needed the classification of hundreds of microscopy pictures, done by several experts on the field. To ask each one of them if they could please classify in three categories the 300 jpg files that are attached on an email is out of question, nobody would do that.

I could use Google forms to create the 300 questions (with the images), but then comes some statistical problems: First, no one would pay attention to all the 300 questions, maybe the first 10 if I was luck. Second, the sequence of the images could bias the results. The answer is simple, just  show the questions in a randomized order, and then with a nice number of answers I could get some statistical results for all of the data-set. But guess what ? It is impossible to randomize questions on Google forms.

Then I started a odyssey to find another platform that would do the job. There are lots survey systems available on the internet, and the majority of them could solve my problem. But to get the tools I needed (images on questions and randomization) there is always the need for the "pro" version of the services.

When I was almost giving up, and thinking about learning HTML and PHP to create my own survey system, I've found SoGoSurvey (http://www.sogosurvey.com/). It simply has all the features that I needed, with a really nice interface ! SoGoSurvey also uses the same "pro" mechanism as the majority of the other plataforms, but the prices are really apealing. And it comes with a special bonus: It is possible to ask for a one year free student registration.

I guess I just need to thank the SoGoSurvey team for saving my thesis ;)

segunda-feira, 25 de janeiro de 2010

Parar um código durante execução

Comumente, durante o desenvolvimento de programas, acabamos caindo em loops infinitos ou situações indesejadas.

Se deseja parar algum código do Matlab durante sua execução, basta pressionar Ctrl + C.

FOR, IF e WHILE

Sabendo-se criar M-Files, podemos passar a desenvolver loops e condicionais para nossos programas. Basicamente, a lógica é a mesma de qualquer linguagem de programação, basta lembrar que no Matlab os intervalos são criados com ' : ' (dois pontos).
Utilizaremos também o comando disp, que mostra o valor de alguma string ou variável no console:


%Estrutura utilizando loops e condicionais.
for i = 0:10
    disp ('Valor de i = ')
    disp (i)
    disp ('Valor de i elevado ao quadrado')
    q = i^2;
    disp (q)
    if i < 5 
    disp ('i é menor que 5') 
    else disp ('i é maior que 5')
    end
end

Algumas considerações:
- for é diferente de FOR ou For. O Matlab é case-sensitive !
- Note que o comando if não necessita de then, como em algumas linguagens
- todo loop ou condicional necessita de um end.

Utilização do while:


w = 0;
while w<2*pi
    s = sin(w);
    disp ('O seno de')
    disp (w)
    disp ('é igual a:')
    disp (sin(w))
    w = w + 0.1;
end




Com esse Tutorial, a maioria das funções básicas do Matlab está explicada e utilizando o conhecimento adquirido até agora já é possível resolver problemas simples de computação. O Blog continuará se aprofundando em questões mais complexas do Matlab, desde a criação de interfaces gráficas de usuário (GUI) até o desenvolvimento de Redes Neurais Artificiais (RNAs). Quaisquer sugestões sobre quais tópicos devem ser abordados é bem vinda !

sábado, 23 de janeiro de 2010

Criando M-Files (Arquivos .M)

Quando começamos a desenvolver idéias mais complexas, utilizar somente o console torna-se inviável. Para isso, temos a possibilidade de criar os chamados M-Files, onde podemos programar várias linhas de código para serem executadas, como em um método clássico de programação.

Para criar um novo M-File, pressione Ctrl+N ou clique no pequeno ícone que fica no canto superior esquerdo de sua janela:




Podemos fazer comentários colocando " %"  antes do início do mesmo e suprimir que a resposta de determinada linha seja mostrada no console colocando ";" no final de cada linha.

Para rodar seu programa, clique no ícone com uma seta verde, como na figura a seguir:




Para rodar o código, é necessário que ele antes seja salvo. O Matlab vai abrir automaticamente uma janela para isso.
Aqui temos um detalhe importante:  Todos os seus arquivos devem estar em diretórios reconhecidos pelo Matlab, chamados paths. Ao salvar um arquivo em algum local não reconhecido, o Matlab lhe fornecerá a opção "Add to path" que adiciona o local à lista.  Para organizar os paths, na janela principal do Matlab clique em File > Set path.  Lá você pode adicionar suas pastas que comumente utiliza para trabalhar.

sexta-feira, 8 de janeiro de 2010

Plotando gráficos - Parte IV

Da mesma maneira que podemos plotar curvas utilizando funções de variáveis simbólicas, podemos criar superfícies com esse tipo de equações. Veja o código a seguir:

%Declara as variáveis simbólicas
syms x y z
%Cria a função
z = (2*cos(x))^3 + y^2
%Cria um gráfico
ezsurf(z) 


Limpar a tela

Os dois comandos a seguir são bem úteis. O comando clear limpa as variáveis no workspace, e o clc limpa a tela de comando. Bem interessante para quando já passamos algumas horas programando, e tudo parece uma bagunça.

Plotando gráficos - Parte III

Também podemos facilmente criar gráficos tridimensionais.

A maneira mais simples é representando uma matriz em um espaço, de forma que o terceiro eixo é formado pelo valor de cala elemento da matriz. Teriamos portanto um eixo sendo as linhas, outro as colunas e um terceiro sendo o valor de cala elemento da matriz.  Veja o código a seguir :

%Cria um intervalo
A=[0:0.1:2*pi]
%Calcula o seno desse intervalo
B=sin(A)
%Calcula o cosseno desse intervalo
C=cos(A)
%Transposta de B, para multiplicar os dois vetores
B=B'
%Multiplica os dois vetores, criando uma matriz
M=B*C
%O comando surf cria uma superfície utilizando a matriz
surf(M)


quinta-feira, 7 de janeiro de 2010

Plotando gráficos - Parte II

Outra possibilidade é plotar os gráficos de uma função de variáveis simbólicas. Esse método é muito útil quando queremos visualizar funções, pois não precisamos criar os vetores. Diferentemente das variáveis normais do Matlab, as variáveis simbólicas precisam ser declaradas. Veja o exemplo:

%Declarar as variáveis simbólicas x e y
syms x y 
%Criar a função
y = x^3 -5*x^2
%Plotar
ezplot(y)

Esta função ezplot também permite que seja determinado o intervalo do gráfico:


%Declarar as variáveis simbólicas x e y
syms x y 
%Criar a função
y = x^3 -5*x^2
%Plotar
ezplot(y, [-2,2])

Plotando gráficos - Parte I

Existem várias maneiras de se plotar um gráfico, cada uma de acordo com a necessidade e dos tipos de variáveis envolvidas. analisaremos as principais técnicas e tipos de gráfico.

Basicamente, um gráfico é um conjunto de pontos ligados. Podemos, portanto, possui dois vetores e relacioná-los de forma que cada um represente um eixo, como no seguinte exemplo:

%Cria o vetor do eixo X, de 0 até 2*Pi
x = 0:0.5:2*pi
%Cria o vetor do eixo Y
y = sin(x)
%Plotar o gráfico
plot(x,y)

Seguindo este código teremos um gráfico, mas podemos observar que ele está todo "quadrado". Isso ocorre pois o vetor X possui poucos pontos, pois escolhemos um passo de 0.5 , valor muito grande. Veja o exemplo a seguir:


%Cria o vetor do eixo X, de 0 até 2*Pi
x = 0:0.01:2*pi
%Cria o vetor do eixo Y
y = sin(x)
%Plotar o gráfico
plot(x,y)

Utilizando o passo de 0.01, conseguimos uma curva senóide bem suave.

Como o Matlab está simplesmente criando coordenadas à partir dos dois vetores, qualquer tipo de gráfico pode ser plotado, desde que os vetores tenham o mesmo tamanho. Veja o exemplo a seguir:

a = 0:0.01:4*pi
x = (sin(2*a)).^3
y=(cos(3*a)).^5
plot(x,y)

terça-feira, 5 de janeiro de 2010

Matrizes úteis

Alguns tipos de matrizes podem ser feitas automaticamente, através de funções já prontas no Matlab. Essas matrizes são muito úteis, e acabam por economizar algumas linhas de código. Por exemplo:

Criar uma matriz 3x3 de zeros:
A = zeros(3,3)

Criar uma matriz  4x3 com o valor 1:
B = ones(4,3)

Criar uma matriz 5x5 com a diagonal principal valendo 1:
C = eye(5,5)

Criar uma matriz 10x10 de valores aleatórios entre 0 e 1:
D = rand(10,10)

Criando intervalos

No matlab também temos a possibilidade de criar para as nossas variáveis intervalos grandes de maneira automárica. 


Por exemplo, o vetor:


A = [ 1 2 3 4 5 6 7 8 9 10 ]


Poderia ser escrito da seguinte maneira:


A = 1:10


O comando poderia ser lido da seguinte forma:  " Faça A de 1 até 10". Os dois pontos representam que deve haver um intervalo.

Também é possível ajustar o passo desse intervalo. Digamos que seja de interesse o seguinte vetor:

B = [ 0 5 10 15 20 25 30 35 40 ]

Temos que o valor inicial é 0, o final 40 e o valor é incrementado em passos de 5.
O código ficaria da seguinte forma:

B = 0:5:40

Que pode ser lido como "Faça B de 0 até 40, em passos de 5"

De maneira genérica, temos:

N = ValorInicial : Passo : ValorFinal


Lembre-se que o valor inicial, o passo ou o valor final podem também assumir valores negativos. (desde que o intervalo seja coerente, caso contrário teremos uma matriz vazia.)

Essa lógica é muito utilizada no Matlab, inclusive nas funções for, como veremos nos próximos posts.

quinta-feira, 31 de dezembro de 2009

Matrizes e Operações Básicas

O Matlab (Acrônimo para matrix laboratory) atua basicamente com matrizes, uma maneira rápida e eficiente de se trabalhar dados.

Vejamos como criar uma matriz simples, digitando o código a seguir:

A = [ 1 2 3 ]



Notamos que para criar elementos em uma mesma linha da matriz, basta separá-los com um espaço (pode também ser utilizada uma vírgula)


Vejamos outro exemplo:

A = [1 ; 2 ; 3]

Para colocar elementos em linhas diferentes, basta separá-los com " ; "


Assim, podemos definir nossas matrizes :

A = [1 2 ; 3 4 ]











Caso a intenção seja obter uma variável com um único valor, será criada uma matriz 1x1:

A = 42









Todas as operações básicas podem ser feitas normalmente, mas lembre-se que estamos lidando com matrizes !


A = [ 1 2 ; 3 4 ];
B = [ 5 6 ; 7 8 ];
C = A + B
C =
     6     8
    10    12




Se utilizarmos matrizes 1x1, elas se comportarão como variáveis normais:


A = 84;
B = 2;
C = A/B
C =
    42




Agora uma dica muito  útil: Caso queira elevar todos os elementos de uma matriz a um determinado valor, utilize um ponto antes do sinal da operação:



A = [ 2 4 8 16 ];
B = A .^ 2

B =

     4    16    64   256


O ponto antes do sinal de operação indica que ela deve ser feita elemento a elemento da matriz (Lembrando que operações em matrizes possuem regras específicas !).


Para se calcular a inversa de uma matriz A:
A = A'




Inicialmente pode parecer que o fato do Matlab trabalhar com matrizes só dificulta as coisas. Entretanto, quando precisamos trabalhar com uma grande quantidade de dados, matrizes são indispensáveis.


quarta-feira, 30 de dezembro de 2009

Matlab ?

Basicamente, o Matlab é uma linguagem de programação em alto nível que permite que o usuário consiga resolver problemas complexos com um código bastante reduzido. Se você já está familiarizado com linguagens como Fortran, C ou Pascal, rapidamente irá pegar o jeito do Matlab. Se essa é sua primeira experiência em programação, sugiro que busque algum conhecimento básico em linguagens mais clássicas, para compreender a maneira lógica pela qual um programa se desenvolve. Se já conhece as estruturas lógicas básicas de programação ( como If, Then, While etc.) pode estar tranquilo de que com um pouco de empenho já será possível compreender as estruturas dos códigos feitos para o Matlab.

O Matlab possui uma estrutura básica, útil para resolução de problemas genéricos. Para casos mais específicos, ele possui os chamados Toolboxes. Existem vários toolboxes, com ferramentas GUI e funções específicas para resolução de problemas mais complexos. Nessas ferramentas é que estão a grande força do Matlab, que pode resolver em poucas linhas de código problemas que inicialmente aparentavam que levariam dias de programação.

Abaixo se encontra a janela principal do Matlab:



Não tenha medo de explorar o programa. Tente algumas linhas de código, abra os toolboxes que mais lhe interessa... Curiosidade é fundamental se você pretende se aprofundar cada vez mais nas inúmeras ferramentas disponíveis.

Agora, tenho que lhes apresentar aquele que será seu melhor amigo nesta empreitada.  Não, não será este blog, nem aquele sabe-tudo da sala, apostilas gigantescas ou algum professor. Com vocês, o help do Matlab :



No início pode ser difícil procurar pelos comandos básicos no help. Entretanto, quando for necessário compreender a fundo aquele complicado toolbox indispensável para sua monografia, o help mostrará todo o seu poder.  Com certeza várias horas de leitura lhe aguardam por aqui...

Resumindo, curiosidade e empenho são fundamentais para se iniciar o aprendizado no Matlab. Instale, Explore e Divirta-se !

terça-feira, 29 de dezembro de 2009

Introdução

Olá a todos !

Este blog surge para suprir uma evidente carência na internet brasileira à respeito dessa poderosa ferramenta que é o Matlab. A principal intenção aqui é inicialmente demonstrar as características básicas e gerais do software e, à medida que o conteúdo se desenvolve, mergulhar em aspectos mais específicos e complexos.


Vale lembrar que, em determinado momento, este blog será na realidade um relatório de descobertas. Nem de longe poderia me classificar como um expert no assunto, muito pelo contrário. Estou em fase de aprendizado, no início de meus estudos sobre o Matlab. Talvez, justamente por isso, consiga perceber quais pontos são mais interessantes para os iniciantes, e explicá-los aqui.

Todos estão convidados para participar com comentários e atenderei, na medida do possível, os pedidos de dúvidas e sugestões de tópicos.

Sejam Bem vindos !