Curso de Matlab com aplicações em Oceanografia

Curso de Matlab com aplicações em Oceanografia

(Parte 1 de 5)

Curso de Matlab e suas Aplicações em Oceanografia

1. Introdução:

Este curso é direcionado para quem nunca utilizou o Matlab. As aulas são baseadas nas aplicações do Matlab para atuação na área de Oceanografia.

O Matlab é tanto uma linguagem de programação quanto um ambiente de computação técnica que possibilita a análise e visualização de dados, cálculos matemáticos e desenvolvimento de algoritmos, entre outras aplicações. Sua primeira versão foi escrita no final da década de 70 nas Universidades do Novo México e Stanford visando fornecer suporte a cursos de teoria matricial, álgebra linear e análise numérica. Hoje o Matlab encontra-se na versão 7.0.

2. Janelas:

No MS-windows® basta clicar no ícone e abre-se a interface gráfica do usuário (GUI).

No Linux, digite Matlab na linha de comando e surte o mesmo efeito. Para sair via menu, clique em File-->Exit Matlab, ou digite exit na janela de comando.

Trabalhar com a GUI é absolutamente dispensável, o essencial é apenas a janela de comandos. No Linux, para se livrar da GUI inicie o Matlab assim: Matlab –no desktop. A GUI tem várias sub-janelas, cinco neste exemplo. Se a sua não está assim, tente clicar em View-- >Desktop Layout-->Five Panel

Comandos de movimentação entre diretórios, comuns aos usuários de DOS e shell

(UNIX - LINUX), como dir, ls e cd diretório podem ser usados normalmente no prompt do Matlab. Outros comandos do ambiente DOS (ex.: del, md, rd, zip, etc) e LINUX (ex.: remove, mkdir, gzip, etc) podem ser utilizados de dentro do Matlab desde que prescritos do símbolo de interrogação (!).

Assim, se estamos trabalhando no ambiente Windows e queremos criar um diretório: >> !md teste E criamos o diretório teste.

No ambiente Linux

>> !mkdir teste E o diretório teste estará criado.

A Figura abaixo mostra as janelas disponíveis no ambiente Matlab Windows 7.0. A janela "Launch Pad" é uma série de "links" para os manuais e demonstrações do Matlab; "Command History" mostra os últimos comandos digitados; "Workspace" mostra o uso da memória; "Current Directory" mostra o conteúdo do diretório atual e por fim a mais importante, "Command Window" onde entramos com os comandos.

por Carlos Teixeira 1/1

Curso de Matlab e suas Aplicações em Oceanografia

3. O Comando Help

O comando help é o comando mais útil e mais usado dentro do Matlab, o mesmo provê informação para a grande parte dos tópicos do Matlab. Existem muitos comandos dentro do ambiente Matlab e saber todas é algo impossível. Com o tempo criamos uma listagem, na nossa memória, dos comandos mais freqüentes e para saber como utilizá-los usamos o comando help.

O comando sem nenhum argumento mostra uma lista de diretórios que contêm arquivos relacionados com Matlab. Cada linha mostrada lista o nome de um diretório seguido por uma descrição do conteúdo do mesmo. Alguns diretórios são associados com os comandos básicos do Matlab. Outros contêm toolboxes, tais como control e signal; esses possuem funções adicionais do Matlab cobrindo áreas de aplicações mais especializadas.

Para uma lista de funções relacionadas a um determinado diretório, digita-se help seguido pelo nome do mesmo. Aparece uma lista de comandos, funções e símbolos específicos do Matlab. O comando help seguido por estes comandos ou funções fornece informações sobre como utilizá-los em uma linha de comando.

>> help

O comando help mean o mesmo fornece uma descrição detalhada de como funciona o comando, nos dá um exemplo de sua utilização e outros comandos relacionados a mean.

For vectors, MEAN(X) is the mean value of the elements in X. For
matrices, MEAN(X) is a row vector containing the mean value of
each column. For N-D arrays, MEAN(X) is the mean value of the
elements along the first non-singleton dimension of X.
MEAN(X,DIM) takes the mean along the dimension DIM of X.

>> help mean MEAN Average or mean value. por Carlos Teixeira 2/2

Example: If X = [0 1 2; 3 4 5]
then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1 4]
See also median, std, min, max, cov.

Curso de Matlab e suas Aplicações em Oceanografia

Quando não sabemos o nome de um comando podemos usar o comando lookfor seguido do que se está procurando. Assim se queremos descobrir o comando que encontra os mínimos de um vetor:

>>lookfor minimum

O Matlab provavelmente irá nos dar como resposta uma série de comandos que tenham a palavra minimum no seu help. Cabe a nós descobrir qual é o comando.

4. Números, Caracteres:

O Matlab foi criado para operar com matrizes. Um número é uma matriz de uma linha e uma coluna. Um vetor é uma matriz de uma linha e várias colunas. Estas matrizes podem conter números inteiros, reais, binários, caracteres, etc. Podemos criar matrizes separando as colunas com espaços ou vírgulas e separando as linhas com ponto-e-vírgula:

1.0 0.14

>> x=[1 0.14] x =

>>y=[1,3.14];

O resultado de comandos terminados em ponto-e-vírgula não é mostrado. Isto é muito útil quando estamos trabalhando com matrizes muito grandes.

O comando whos descreve as variáveis da memória e nos dá algumas informações sobre esta variável.

>> whos Name Size Bytes Class y 1x2 16 double array

Limpamos a variável da memória com o comando clear seguido do nome da variável (clear x no exemplo abaixo). Se digitarmos o comando clear sem o nome de nenhuma variável ou seguido do comando all o mesmo limpa todas as variáveis presentes na memória do computador.

>>clear x >> clear all por Carlos Teixeira 3/3

Curso de Matlab e suas Aplicações em Oceanografia

Há vários tipos de números no ambiente Matlab. No exemplo abaixo a variável num contém um número (3.1415) e serve para fazermos contas. A variável nome contém os seis caracteres 3.1415 que não servem para fazermos contas. Isto é o que chamamos de string. Um string é criado colocando-se letras ou números entre aspas simples (' '). De forma similar meunome contém quinze caracteres que evidentemente não servem para fazermos contas.

>> num=3.1415; >> nome='3.1415';

>> meunome=’Carlos Teixeira';

>> whos Name Size Bytes Class nome 1x6 12 char array num 1x1 8 double array meunome 1x15 30 char array

Uma variável (no caso z) pode ter o resultado de uma operação (x+y). Definidas as variáveis é possível então efetuar operações matemáticas com elas. As operações básicas são listadas na tabela abaixo:

>> x=1; y=2;

>>z=x+y;

Operação Símbolo adição a+b subtração a-b multiplicação a*b Divisão a/b Potenciação a^b

Algumas regras devem ser obedecidas na definição de variáveis: • as variáveis são sensíveis a caracteres maiúsculos e minúsculos;

• devem conter no máximo 31 caracteres;

• os nomes devem começar com letras e caracteres acentuados não são permitidos.

Alguns exemplos de nomes para variáveis são: total_anual2000, media25, MEDIA25,

X1251330. Note que, segundo as regras acima, o segundo e o terceiro exemplo referem-se a variáveis diferentes. Algumas variáveis já são pré-definidas, como pi (π), i e j (número imaginário ou raiz de -1), realmin e realmax (menor e maior número real utilizável pelo Matlab, especificamente).

Outra forma de se construir vetor é especificando-se valores iniciais, finais e incrementos. No exemplo abaixo foi definido um vetor a variando de 1 a 5 (de um em um) e outro b indo de 1 a 9, mas de dois em dois.

por Carlos Teixeira 4/4

Curso de Matlab e suas Aplicações em Oceanografia

>> a=1:5, b=1:2:9 a= 1 2 3 4 5 b= 1 3 5 7 9

O comando linspace(i,f,n) fornece um vetor linha de n elementos entres os valores i e f. Assim, o vetor a do exemplo anterior pode ser redefinido da seguinte forma:

>> a=linspace(1,5,5) a= 1 2 3 4 5

O tamanho de um vetor pode ser verificado com o comando length, como no exemplo abaixo:

>>length(b) ans= 5

5. Operações aritméticas:

Ao fazermos operações matemáticas e lógicas devemos sempre atentar para o fato que estamos lidando com matrizes. Se definirmos as variáveis a e b como tendo apenas um elemento, qualquer uma das operações acima não gera problemas. Assim se quisermos podemos usar o Matlab como uma simples calculadora.

>>a=1,b=2; c=a+b; c=a*b,

a =1 2 3
3
4
b = 23 4
c = 35 7

Já no caso de vetores alguns cuidados devem ser tomados. Vejamos: >> a=[1 2 3] >> b=[2; 3; 4] b = 2 >> c=a+b ??? Error using ==> + Matrix dimensions must agree. >> b=[2 3 4] >> c=a+b

No primeiro caso criamos as matrizes a e b com três elementos cada, mas a é 1x3 (uma linha e três colunas) e b é 3x1 (três linhas uma coluna). O comando que criou a tem espaços (ou pode ter vírgulas) onde b tem pontos-e-vírgulas. Como soma de matrizes funciona elemento a elemento, o Matlab reclama. Na segunda tentativa a e b forma criadas do mesmo modo, as duas são 1x3 e tudo funciona como de forma correta.

a =1 2 3

>> a=[1 2 3] >> b=[2; 3; 4] por Carlos Teixeira 5/5

Curso de Matlab e suas Aplicações em Oceanografia

3
4
b =2 3 4
d =2 6 12

b = 2 >> c=a*b c = 20 >> d=a.*b ??? Error using ==> .* Matrix dimensions must agree. >> b=[2 3 4] >> d=a.*b

Como no exemplo anterior criamos as matrizes a e b com três elementos cada, uma em pé e a outra deitada. A multiplicação das matrizes * resulta em 20 (que pode se visto como uma multiplicação de matrizes), pois 1x2 + 2x3 + 3x4 =20. No caso seguinte colocamos um ponto antes do asterisco.* indicando para o Matlab que queremos fazer um produto escalar, ou seja, multiplicar elemento por elemento. Não dá certo porque as matrizes são de tamanhos diferentes. Recriando b no mesmo formato de a e fazendo o produto escalar obtemos d com o mesmo tamanho de a e b.

• A./B = [a1/b1 a2/b2an/bn];
• A.*B = [a1·b1 a2·b2an·bn];
• A.^B = [a1^b1 a2^b2an^bn];

Uma operação escalar entre matrizes possui a forma:

No caso anterior não precisaríamos reescrever b para transformá-lo de um vetor 3 x 1 (no caso de b=[2; 3; 4]) para um vetor 1 x 3 (no caso b=[2 3 4]), basta utilizar um apóstrofe após a variável e teremos a transposta da mesma. A transposta de uma matriz transforma matrizes-linha em matrizes-coluna e vice-versa. Assim:

3
4

>> b=[2; 3; 4] b = 2 >> b ' ans = 2 3 4

Operações matemáticas simples (adição, subtração, divisão, multiplicação) envolvendo escalares e matrizes seguem a mesma interpretação natural.

>> m=[8 1 6;3 5 7;4 9 2];

>> 3*m ans = 24 3 18 9 15 21 12 27 6 >>m+100 por Carlos Teixeira 6/6

Curso de Matlab e suas Aplicações em Oceanografia ans = 108 101 106 103 105 107 104 109 102

Já a potenciação de cada elemento é uma operação escalar. Assim, se queremos elevar cada um dos elementos da matriz m ao quadrado teremos?

ans = 64.01.0 36.0
9.025.0 49.0
16.081.0 4.0

>>m . ^2

6. Matrizes

Como vimos nos exemplos acima Matrizes são definidas no Matlab de forma análoga à definição dos vetores linhas ou colunas: usam-se vírgulas ou espaços para separar os elementos de uma linha e pontos-e-vírgulas para separar as linhas:

>> m=[8 1 6;3 5 7;4 9 2] m = 8 1 6 3 5 7 4 9 2

Os elementos, linhas e colunas de uma matriz podem ser acessados usando-se índices, que definem a posição do elemento dentro da matriz. Este processo chama-se indexação e tem como objetivo, localizar elementos dentro de uma matriz. É o processo mais importante dentro do Matlab e o mesmo é utilizado nas principais operações. Assim, o elemento da segunda linha na terceira coluna da matriz m pode ser acessado da seguinte maneira:

>> m(2,3) ans = 7 E o elemento da terceira linha primeira coluna da seguinte maneira:

>> m(3,1) ans = 4

Para a seleção de linhas ou colunas inteiras usa-se o operador dois pontos (:). O comando m(:,2) significa “todas as linhas da coluna 2”; m(3,:) retorna a linha 3, com todos os seus elementos.

ans =1.0

>>m(:,2) 5.0 9.0

ans =4.0 9.0 2.0

>> m(3,:) por Carlos Teixeira 7/7

Curso de Matlab e suas Aplicações em Oceanografia

À partir da matriz m é possível definir outra matriz : >> n=m(1:2,2:3) n = 1 6 5 7

No exemplo acima o operador dois pontos foi usado duas vezes: uma para delimitar o intervalo de linhas desejado (da linha 1 a 2) e outra para especificar o intervalo de colunas (da coluna 2 a 3).

Quando é necessário remover alguma linha ou coluna de uma matriz atribui-se a esta linha ou coluna a matriz nula [ ]. Dessa forma a matriz remanescente será composta apenas das linhas (ou colunas) remanescentes:

>> m(:,3)=[] m = 8 1 3 5 4 9

No exemplo acima foi atribuída à coluna 3 a matriz nula, resultando numa nova matriz m. É possível também montar grandes matrizes através de outras pequenas, como:

>> a=[1 1;1 1];b=[2 2;2 2];c=[a b;b a] c = 1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 1

O comando find encontra os índices da matriz de valores lógicos, o mesmo é muito utilizado para encontrar valores que obedecem a uma condição. Abaixo encontram-se alguns operadores lógicos que normalmente são usados com o comando find.

< menor que <= menor ou igual que > maior que

>= maior ou igual que == igual ~= diferente isnan Valor que são Nan ~isnan Valores que não são nan por Carlos Teixeira 8/8

Curso de Matlab e suas Aplicações em Oceanografia

A operação abaixo encontra os índices da matriz m que obedecem a condição “é nan”.

[lin,col]=find

O valor a = 5 corresponde ao quinto elemento da matriz m. Da mesma forma se desejamos obter o índice da linha e da coluna a construção do comando deve seguir a forma >>m=[-1 2 70; 5 nan -10; 50 1 2];

5.0

>>a=find(isnan(m)) a =

3.0
2.0
3.0
7.0

>>[lin,col]=find(m==1) lin = col = Se desejarmos saber quais os elementos da matriz são maiores do que dez. >>a=find(m>=10) a =

O índice a pode ser usado para substituir dados valores. Assim se queremos substituir todos os valores negativos da matriz m pelo valor zero.

1.0
8.0
0 2.0 70.0
5.0 NaN 0
50.0 1.0 2

>> a=find(m<0) a = >> m(a)=0 m =

O valor nan, significa “not a numeric number” é usado quando não se tem um valor de um determinado elemento de uma matriz. É o que conhecemos com um espaço vazio em planilhas eletrônicas.

Os operadores & e | correspondem aos operadores lógicos “e”, “ou”. Assim se queremos obter os valores maiores que zero e iguais a -10.

>>m=[-1 2 70; 5 nan -10; 50 1 2]; >>a=find (m>0 | isnan(m)) por Carlos Teixeira 9/9

Curso de Matlab e suas Aplicações em Oceanografia

2.0
3.0
4.0
5.0
6.0
7.0
9.0

7. Funções matemáticas e trigonométricas:

Abaixo são listadas algumas funções matemáticas e trigonométricas elementares que podem ser usadas tanto com vetores quanto matrizes. É importante notar que o Matlab não trabalha com ângulos e sim radianos. Assim se possuímos um valor em graus devemos dividir o mesmo por 180 e multiplicar por pi para obter os valores em radianos. O valor de pi já é uma variável do Matlab sendo carregada quando se inicia o programa.

1.0
90.0

>> sin(90/180*pi) ans = >> asin(1)*180/pi ans = por Carlos Teixeira 10/10

Curso de Matlab e suas Aplicações em Oceanografia

Algumas dessas operações podem ser aplicadas a vetores ou matrizes. Para a função de desvio padrão std(x), por exemplo, se o argumento x for um vetor o resultado será o desvio padrão desse vetor. Se x for uma matriz, será calculado o desvio para cada coluna dessa matriz. O mesmo ocorre com as funções sum, max e mean, entre outras.

1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
9.0 10.0
3.03

>> x=1:10 x = Columns 1 through 8 Columns 9 through 10 >> std(x) ans = >>

8.0 1.0 6.0
3.0 5.0 7.0
4.0 9.0 2.0
5.0 5.0 5.0

>> b=magic(3) b = >>mean(b) ans =

O Matlab tem uma série de matrizes especiais pré-fabricadas (ones, zeros, magic, etc), uma delas se chama magic e foi usada acima para se criar a matriz b. O comando magic cria uma matriz quadrática (no caso acima 3 x 3) onde todas as linhas e colunas possuem a mesma soma. Vamos ver:

15.0 15.0 15.0

Esta é a soma de todas as colunas. >>sum(b) ans =

Se fizermos a transposta, temos a soma de todas as linhas.

15.0 15.0 15.0

>>sum(b’) ans = por Carlos Teixeira 1/1

Curso de Matlab e suas Aplicações em Oceanografia

8. Controle de Fluxo num Programa

(Parte 1 de 5)

Comentários