1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1....

30
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

Transcript of 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1....

Page 1: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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

Page 2: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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. >> help mean MEAN Average or mean value. 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.

por Carlos Teixeira 2/2

Page 3: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

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. 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:

>> x=[1 0.14] x = 1.00 0.14 >>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

Page 4: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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

Page 5: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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, Já no caso de vetores alguns cuidados devem ser tomados. Vejamos: >> a=[1 2 3] a = 1 2 3 >> b=[2; 3; 4] b = 2 3 4 >> c=a+b ??? Error using ==> + Matrix dimensions must agree. >> b=[2 3 4] b = 2 3 4 >> c=a+b c = 3 5 7

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

Page 6: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

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

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. Uma operação escalar entre matrizes possui a forma: • A./B = [a1/b1 a2/b2 ... an/bn]; • A.*B = [a1·b1 a2·b2 ... an·bn]; • A.^B = [a1^b1 a2^b2 ... an^bn];

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: >> b=[2; 3; 4] b = 2 3 4 >> 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

Page 7: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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? >>m . ^2 ans = 64.00 1.00 36.00 9.00 25.00 49.00 16.00 81.00 4.00

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. >>m(:,2) ans = 1.00 5.00 9.00 >> m(3,:) ans = 4.00 9.00 2.00

por Carlos Teixeira 7/7

Page 8: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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

Page 9: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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”. 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 [lin,col]=find....

>>m=[-1 2 70; 5 nan -10; 50 1 2]; >>a=find(isnan(m)) a = 5.00 >>[lin,col]=find(m==1) lin = 3.00 col = 2.00 Se desejarmos saber quais os elementos da matriz são maiores do que dez. >>a=find(m>=10) a = 3.00 7.00 O índice a pode ser usado para substituir dados valores. Assim se queremos substituir todos os valores negativos da matriz m pelo valor zero. >> a=find(m<0) a = 1.00 8.00 >> m(a)=0 m = 0 2.00 70.00 5.00 NaN 0 50.00 1.00 2

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

Page 10: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

a = 2.00 3.00 4.00 5.00 6.00 7.00 9.00

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. >> sin(90/180*pi) ans = 1.00 >> asin(1)*180/pi ans = 90.00

por Carlos Teixeira 10/10

Page 11: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

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. >> x=1:10 x = Columns 1 through 8 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 Columns 9 through 10 9.00 10.00 >> std(x) ans = 3.03 >> >> b=magic(3) b = 8.00 1.00 6.00 3.00 5.00 7.00 4.00 9.00 2.00 >>mean(b) ans = 5.00 5.00 5.00

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: Esta é a soma de todas as colunas. >>sum(b) ans = 15.00 15.00 15.00 Se fizermos a transposta, temos a soma de todas as linhas. >>sum(b’) ans = 15.00 15.00 15.00

por Carlos Teixeira 11/11

Page 12: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

8. Controle de Fluxo num Programa

O controle de fluxo num programa escrito no Matlab é bem similar àquele usado em outras

linguagens de programação. Ele faz com que uma série de comandos seja executada repetidas vezes. Para isso utiliza-se o comando for. Devemos ter em mente que o Matlab é um programa que trabalha com matrizes e vetores. A vetorização de operações no Matlab torna a execução dos cálculos muito mais rápida. Vamos ver dois exemplos para o calculo de n: • A primeira utiliza loops com o comando for: >> for n=1:10 >>x(n)=sin(n*pi/10); >>end

O que estiver entre o for n=1:10 e o end será repetido tantas vezes quantos forem os elementos de n, sendo que em cada passada do loop n assume um valor.

• Na segunda o calculo de x foi vetorizado e obtemos os mesmo valores só que de forma muito mais rápida.

>>n=1:10; >>x=sin(n*pi/10);

Existe também outra forma de condicionar a execução de alguns comandos. Isso pode ser feito com o comando while: >> EPS=1; >> while (1+EPS)>1 >>EPS=EPS/2; >>end

Enquanto a soma (1+EPS) for maior do que 1 o comando EPS=EPS/2 é executado. Quando isso deixar de ser verdadeiro o ciclo termina. Esse programa só é possível porque quando EPS chega a 10-16 ele sai do limite de precisão finita do Matlab e é então considerado zero. Por fim, pode-se usar a estrutura if-else-end, que apresenta a seguinte forma: >> if expressão >>comandos executados se expressão for Verdadeira >>else >>comandos executados se Falso >>end

por Carlos Teixeira 12/12

Page 13: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

9. Escrevendo programas no Matlab Seqüências de comandos podem ser armazenadas em arquivos e executadas no

espaço de trabalho do Matlab. Para isso basta criar um arquivo com os comandos do Matlab em qualquer editor de texto e salvar o arquivo com a extensão "m". Os comandos digitados no prompt do Matlab podem ser guardados num arquivo, assim não precisamos reescrever tudo da próxima vez!

Estes arquivos m serão seus programas no Matlab. É recomendável que sempre se inclua comentários, de preferência um ou mais por linha de programa. Depois de alguns dias um programa sem comentários é uma sopa de letrinhas que ninguém - nem mesmo o programador - entende. Este hábito facilita a leitura e entendimento dos programas por você e quem mais for ler e usar seu programa. Para comentar uma linha coloca-se o símbolo de porcentagem (%) no começo da mesma.

O Matlab tem um editor de programas que possui algumas funções especiais que podem nos ajudar. Vamos escrever o programa abaixo no editor do Matlab. % Este programa e parte do curso de Matlab % % Escrito em xx/xx/2005 por Carlos Teixeira em Salvador for i=1:0.5:20, % Monta um loop de 1 a 20 de 0.5 em 0.5 if mod(i,2), % Se i for impar b(i)=i/10; % o i-esimo b sera um decimo de i else % se for par, b(i)=i*10; % o i-esimo b sera o decuplo de i end % fecha o if end % fecha o for b % mostra o valor de b

Salvamos o nosso programa com um nome qualquer (ex.: prog1.m). Existem duas formas de executar o programa abaixo: • copiando e colando o programa no prompt do Matlab; • escrevendo o nome do programa no prompt do Matlab (no caso prog1) >>prog1

Note que todas as vezes que você modificar algo no programa, deve-se salvar o mesmo antes de se executar.

10. Finalizando e Salvando o Espaço de Trabalho

Para finalizar o Matlab digite quit ou exit. Terminando uma sessão do Matlab, você apaga as variáveis do espaço de trabalho. Antes de terminar, pode-se salvar as variáveis digitando save >> save

Este comando salva todas as variáveis em um arquivo em disco chamado Matlab.mat. Na próxima vez que Matlab é chamado, pode-se executar o comando load para restaurar o espaço de trabalho com as variáveis de Matlab.mat.

por Carlos Teixeira 13/13

Page 14: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Podem ser utilizados os comandos save e load em arquivos com outros nomes, ou salvar somente algumas variáveis. O comando save temp salva todas as variáveis em um arquivo de nome temp.mat. O comando >> save temp X salva somente a variável X, enquanto que >> save temp X Y Z salva as variáveis X, Y e Z.

11. Importando dados:

O comando usado para carregar um arquivo contendo dados é o load nome_do_arquivo. Esse comando é utilizado para dados no formato ASCII. Assim se quisermos ler o arquivo salvo na seção acima: >> load temp

Da mesma forma se quisermos ler apenas uma das variáveis dentro do arquivo: >> load temp Z

Um comando muito usado no ambiente Windows é o xlsread. O mesmo importa dados diretamente de uma planilha excell. Para tanto devemos usar o comando xlsread seguido do caminho e nome do arquivo e da planilha que se pretende ler. O comando abaixo vai ler a planilha teste1 do arquivo meu_excell, salvo no diretório c:\Matlab\work\. NUMERIC = xlsread('c:\Matlab\work\meu_excell','teste1')

12. Formatos de Saída

O Matlab mostra o resultado de uma linha de comando na tela, e atribui este resultado a uma variável específica, ou a ans se a variável não é dada. Você pode utilizar o comando format para controlar o formato numérico mostrado.

Se todos os elementos de uma matriz forem inteiros exatos, a matriz é mostrada em um formato sem pontos decimais. Se ao menos um elemento de uma matriz não é um inteiro exato, vários formatos de saída são possíveis. O formato padrão, chamado de short format, mostra aproximadamente cinco dígitos decimais significativos. Os outros formatos mostram mais dígitos significativos ou utilizam notação decimal. Como um exemplo, suponha: >> x = [4/3 1.2345e-6] Os formatos e as saídas resultantes para este vetor são: format short 1.3333 0.0000 format short e 1.3333e+00 1.2345e-06 format long 1.33333333333333 0.00000123456000 format long e 1.333333333333333e+00 1.234500000000000e-06 format bank 1.33 0.00

por Carlos Teixeira 14/14

Page 15: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

13. Plotando dados no Matlab A grande vantagem de linguagens do tipo Matlab é a facilidade de visualização dos

dados. A seguir vamos utilizar exemplos práticos de Oceanografia para demonstrar inicialmente gráficos do tipo "xy" e depois contornos, imagens e vetores.

Plotando Séries Temporais:

Nesta seção iremos apresentar como proceder para a criação de séries temporais. O arquivo dados.mat possui dados de correntometria, salinidade e temperatura de um fundeio realizado na entrada de um estuário. Estes dados foram coletados a cada meia hora em setembro de 1999. Inicialmente carregamos os dados com o comando load o mesmo cria a matriz dados de 191 x 10. >> load dados.mat;%lendo os dados

A seguir foram criadas variáveis auxiliares para facilitar a plotagem dos dados. Assim os dias de amostragem que estavam na segunda coluna da variável dados foram atribuídos da variável dia, os meses a variável mes e assim sucessivamente até a variável dircor. Percebe-se que à variável ano foi somado o valor de 1900, isto foi necessário pois os dados originais tinham o formato 99 e não 1999. A variável hora foi criada com o comando fix dos valores da coluna 5. O comando fix nos dá o valor a esquerda da vírgula e foi necessário, pois nos dados originais estes valores tinham o formato 1.30, 2.30, isto é além da hora os minutos da medição também eram informados. >>dia=dados(:,2); %dias em que foram feitas as medições >>mes=dados(:,3); %mes em que foram feitas as medições >>ano=dados(:,4)+1900; %anos em que foram feitas as medições >>hora=fix(dados(:,5)); %horas em que foram feitas as medições >>min=dados(:,11); %min em que foram feitas as medições >>seg(1:191,1)=0; %segundos em que foram feitas as medições >>temp=dados(:,6); %temperatura >>sal=dados(:,8); %salinidade >>dircor=dados(:,9); %direção da corrente >>velcor=dados(:,10); %itensidade (vetor) da corrente

Os dados de corrente foram decompostos nas componentes u e v usando-se o seno (sin) e cosseno (cos)da direção e intensidade das correntes. Percebe-se que os dados originais estavam em graus e, portanto foram convertidos em radianos multiplicando-se por pi e dividindo-se por 180. >>u=velcor.*(cos(dircmat*pi/180)); %cria a variável u nossa velocidade zonal. >>v=velcor.*(sin(dircmat*pi/180)); %cria a variável v nossa velocidade meridional.

por Carlos Teixeira 15/15

Page 16: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Foi criada uma variável tempo através do comando julian. O comando julian transforma datas de nosso calendário (Calendário Gregoriano) em datas decimais (Calendário Juliano). Por convenção o dia Juliano 2440000 começa às 0 horas, do dia 23 de Maio do ano de 1968. O comando utiliza a variável ano, mês, dia, hora, minuto e segundo e cria a variável tempo. >>tempo=julian([ano mes dia hora min seg]); %cria dia juliano

Se desejamos transformar um dia juliano no formato do nosso calendário usamos o comando gregorian. Assim: >>gregorian(tempo(1)) ans = 1999.00 8.00 3.00 19.00 0 0 Representa o nosso primeiro dia de medição, enquanto: >>gregorian(tempo(end)) ans = 1999.00 8.00 7.00 18.00 0 0 Representa o último dia de medição.

Os comandos julian e gregorian não fazem parte do Matlab eles fazem parte um pacote de rotinas disponível no site SEAMAT http://woodshole.er.usgs.gov/operations/sea-mat/. Este site possui uma série de rotinas com aplicações em oceanografia que serão utilizadas ao longo do curso.

Esse conjunto de rotinas deve ser salvo dentro do seu diretório \Matlab\toolbox\. Sugiro que se crie um sub-diretório com o nome oceanografia e que se salvem estes pacotes de rotina dentro do mesmo. Após isso temos que informar o Matlab sobre estas sub-rotinas. Para tanto no menu superior click em file/setpath/ addfolder. Informe a localização do diretório e click em ok e save. Para todos os conjuntos de rotinas que adicionamos devemos de informar a localização das mesmas para o Matlab, adicionando o caminho no path.

A seguir serão criadas séries temporais de salinidade e temperatura. Para tanto, inicialmente usamos o comando figure para abrir uma nova figura. A seguir usamos o comando plot com a variável tempo (eixo x) e a variável sal (eixo y). >>figure >>plot(tempo,sal) O comando ylabel acrescenta um rotulo ao eixo y enquanto o comando xlabel um rotulo para o eixo x. >>ylabel('Salinidade'); %rotulo do eixo y >>xlabel('tempo') %rotulo do eixo x

O comando gregaxd transforma os valores julianos que estão plotados no eixo x em dias gregorianos. Para isso temos que informar qual a nossa variável que possui os valores julianos (no caso a variável tempo) e o espaçamento entre os rótulos que serão escritos no eixo x (no caso dois dias). Existem também as rotinas gregaxh, gregaxm, gregaxy que rotulam o eixo x em horas, meses e anos respectivamente.

por Carlos Teixeira 16/16

Page 17: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

>>gregaxd(tempo, 2)%Transforma os dias Julianos do eixo X em dias Gregorianos

No exemplo a seguir vamos criar uma série temporal de temperatura e plotar a temperatura média no mesmo gráfico. Da mesma forma que o exemplo anterior, abrimos uma nova figura com o comando figure, plotamos a variável tempo e temp com o comando plot, rotulamos os eixos y e x com os comandos ylabel e xlabel e finalmente transformamos o valor juliano do eixo x em horas julinas através do comando gregaxh e um espaçamento de 18 horas. >>figure %abre nova figura >>plot(tempo,temp) %plota temperature ao longo do tempo >>ylabel('Temperatura') %rotula eixo y >>xlabel('tempo') %rotula eixo x >>gregaxh(tempo, 18) %transforma dia juliano em hora gregoriana

O comando hold on serve para se plotar uma curva sobre outra que já esta plotada. Quando plotamos algo no Matlab e não utilizamos o comando figure para abrir uma nova figura o Matlab cria uma nova figura sobre a antiga, eliminando a última. Assim quando queremos adicionar um gráfico a outro já existente usamos o comando hold on. >>hold on

A seguir, plotamos a média da temperatura, para tanto usamos o comando plot do mean(média) da variável temp (temperatura). O argumento 'r’ após no final do comando plot refere-se a cor da linha. Neste caso escolhemos a cor vermelha. >>plot(tempo, mean(temp),'r')

Além da cor podemos especificar o tipo de linha e o tipo de marcador usado na plotagem conforme tabela abaixo.

Símbolo Cor Símbolo Estilo de Linha

y amarelo . ponto

m magenta o círculo

c cian x x

r vermelho + sinal positivo

g verde * asterisco

b azul - sólida

w branco : pontilhada

k preto -. traço e ponto

-- tracejada

por Carlos Teixeira 17/17

Page 18: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Por exemplo, >>plot(X,Y,’k*’) - plota um asterisco azul em cada ponto de dado. >>plot(X,Y,’g:’) - plota uma linha verde pontilhada.

No exemplo abaixo plotaremos os dados de temperatura e salinidade num mesmo gráfico, só que usando eixos com escalas diferentes. Para isso usamos o comando plotyy da variável tempo e temp e da variável tempo e sal.

Uma forma de se alterar as propriedades dos objetos é referenciando este objeto depois de sua criação e utilizar tais referencias para comandos posteriores. Pode-se fazer isto utilizando um handle que é retornando pela função de criação. No exemplo abaixo guardamos as propriedades da plotagem dos eixos usados na plotagem e das duas linhas nos handle eixos linha1 e linha2. >> [eixos linha1 linha2]=plotyy(tempo,temp,tempo,sal); %plotando serie temporal de temperatura e salinidade >>title('Temperatura e Salinidade X Tempo')%colocando um titulo no grafico >>xlabel('Tempo') %colocando um rotulo no eixo x

Aqui usamos o comando axes e a variável eixos para colocar cada um dos eixos ativos. A variável eixos(1) possui as propriedades do eixo 1 e a variável eixos(2) as propriedades do eixo 2. O comando axes coloca um eixo ativo.

Após colocarmos o eixo 1 (onde estão plotadas as temperaturas) ativo damos um nome a ele com o comando ylabel. Também transformamos os valores julianos em dias gregorianos com o comando gregaxd. O mesmo procedimento é repetido só que agora para o eixo 2 (onde estão plotadas as salinidades).

>>axes(eixos(1)) %colocando o eixo 1 ativo >>ylabel('Temperatura') %colocando um rotulo no eixo 1 >>gregaxd(tempo,1) %transformando os valores julianos do eixo 1 em dias gregorianos. >>axes(eixos(2)) %colocando o eixo 2 ativo >>ylabel('Salinidade') %colocando um rotulo no eixo 2 >>gregaxd(tempo,1) %transformando os valores julianos do eixo 2 em dias gregorianos.

As duas plotagens podem ser combinadas numa só usando-se o comando subplot. Através deste comando podem ser mostrados vários gráficos em uma mesma janela ou imprimi-los em uma mesma folha de papel. Iremos utilizar tal comando para fazer um subplot dos gráficos de temperatura e salinidade versus tempo e do vetor corrente.

O comando subplot(m,n,p) divide a janela em uma matriz m (na vertical) por n (na horizontal) de sub-regiões e seleciona a p-ésima sub-região para o gráfico que está sendo plotado no momento. Os gráficos são numerados começando pela primeira linha na parte superior da janela; em seguida, a segunda linha, e assim segue. Assim:

Abrimos uma nova figura com o comando figure e fazemos uma subplot dividindo a

janela de plotagem em duas sub-janelas na vertical e selecionando a primeira. O comando plotyy é repetido como no exemplo acima.

por Carlos Teixeira 18/18

Page 19: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

>>figure %abre uma nova janela >>subplot(2,1,1) %divide a janela em duas sub-janelas na vertical e seleciona a primeira delas >> [eixos linha1 linha2]=plotyy(tempo,temp,tempo,sal); %plotando serie temporal de temperatura e salinidade >>title('Temperatura e Salinidade X Tempo')%colocando um titulo no grafico >>xlabel('Tempo') %colocando um rotulo no eixo x >>axes(eixos(1)) %colocando o eixo 1 ativo >>ylabel('Temperatura') %colocando um rotulo no eixo 1 >>gregaxd(tempo,1) %transformando os valores julianos do eixo 1 em dias gregorianos. >>axes(eixos(2)) %colocando o eixo 2 ativo >>ylabel('Salinidade') %colocando um rotulo no eixo 2 >>gregaxd(tempo,1) %transformando os valores julianos do eixo 2 em dias gregorianos.

Agora com o comando subplot, novamente a janela é dividida em duas sub-janelas na vertical e a segunda janela é selecionada. O comando feather utiliza as componentes u e v para criar vetores de velocidade. >>subplot(2,1,2) %divide a janela em duas sub-janelas na vertical e seleciona a segunda delas >>feather(u,v);%utiliza as componetes u e v para plotar o vetor >>title('Vetor Velocidade da Corrente ');%colocando titulo >>xlabel('tempo'); %rotulando eixo x

Uma forma de se alterar as propriedades dos objetos é utilizando os comandos get e set. O comando get captura as propriedades de um objeto e o comando set altera tais propriedades. Se usarmos o comando get(gca) vamos obter todas as propriedades do eixo ativo. No exemplo abaixo iremos mudar os limites de plotagem através do comando set. As propriedades que estão sendo mudadas são os limites vertical (ylim) e horizontal (xlim) do gráfico e seus respectivos valores são respectivamente -15 a 15 e -10 a 200. Para saber quais as propriedades que podem ser mudadas e quais as opções para tal propriedade utilize o comando set(gca). >>set(gca,'ylim',[-15 15], 'xlim',[-10 200]);

Como se pode perceber no exemplo acima a função feather não plota uma série temporal de vetores, apenas a distribuição dos mesmos. Uma forma de plotar series temporais de vetores velocidade é usando o comando timeplt. Este comando pertence ao pacote de rotinas de mesmo nome disponível na pagina do Seamat http://woodshole.er.usgs.gov/operations/sea-mat/.

Antes de plotar o vetor com o comando timeplt, devemos de construir uma outra variável formada pela componente u e a componente v multiplicada pelo número imaginário i. >>w=u+i*v; %aqui criamos um vetor formado pela parte real e imaginaria da velocidade.

Agora usamos o comando timeplt para plotar a variável w na posição 1 e definimos seus rótulos e limites. Para definir os limites do eixo x, usamos o comando min e max para achar os mínimos e máximos valores do eixo x e somamos dois para melhorar a aparência do gráfico.

por Carlos Teixeira 19/19

Page 20: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

>>figure %abrindo nova figura >>[t]=timeplt(tempo,[w],[1]);%usando timeplt para plotar os vetores na posição 1 >>ylabel('Velocidade');%colocando rótulos no eixo y >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x

O comando timeplt também pode ser usado como uma alternativa para o comando subplot quando estamos trabalhando com séries temporais. Assim: >>figure %abrindo nova figura >> [t]=timeplt(tempo,[temp,sal,velcor,w],[1 2 3 4]); %plotando os dados de temperatura, salinidade e intensidade da corrente e vetor velocidade nas posições 1 a 4 respectivamente >>axes(t(1));%colocado eixo 1 ativo >>ylabel('Temperatura');%colocando rótulos no eixo y >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(2));%colocado eixo 2 ativo >>ylabel('Salinidade');%colocando rótulos no eixo y >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(3));%colocado eixo 3 ativo >>ylabel('Intensidade');%colocando rótulos no eixo y >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(4));%colocado eixo 4 ativo >>ylabel('Vetor');%colocando rótulos no eixo y >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x

Plotando Diagramas Propriedade versus Profundidade: Nesta seção iremos demonstrar a criação de diagramas propriedade versus

profundidade e do diagrama TS. Para tanto serão usados dados de CTD coletados na plataforma continental próxima a cidade de Rio Grande. O arquivo ctd3152.cnv possui os dados de pressão, temperatura e salinidade para esta estação.

Primeiramente o arquivo de dados é carregado através do comando load ctd3152.cnv o que cria a variável ctd3152. Para facilitar a plotagem são criadas as variáveis press, temp e sal com os dados das colunas de 1 a 3 da variável ctd3152, respectivamente. >>load ctd3152.cnv %lendo os dados >>press=ctd3152(:,1); %criando a variável pressão a partir a coluna um >>temp=ctd3152(:,2);%criando a variável temperatura a partir a coluna dois >>sal=ctd3152(:,3);%criando a variável salinidade a partir a coluna três

Com as variáveis criadas, plotamos os dados de temperatura versus pressão através do comando plot(temp,press). O titulo e os rotulos dos eixos são colocados com os comandos title, xlabel e ylabel.

por Carlos Teixeira 20/20

Page 21: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

>>plot(temp,press) %plotando temperatura versus pressão >>title('Temperatura versus Profundidade')%colocando titulo no gráfico >>xlabel('Temperatura (ºC)')%colocando rotulo no eixo x >>ylabel('Profundidade (m)')%colocando rotulo no exo y

Através do comando set colocamos a propriedade Xgrid (linhas de grade na direção X) ativa. Com o mesmo comando set colocamos a propriedade Ydir na direção reversa, isto é o eixo está direcionado para baixo. Este procedimento foi necessário, pois o campo de pressão cresce com a profundidade. >>set (gca,'Xgrid','on') %colocando o grid em X ativo >>set (gca,'Ydir','reverse') %colocando direção do eixo y como inversa

Agora vamos plotar um gráfico da distribuição da densidade ao longo da profundidade. Como não possuímos o valor da densidade, temos que calcular a mesma. Para isso iremos usar os dados de temperatura, salinidade e pressão e a função sw_pden. Esta função faz parte do pacote SEAWATER disponível no site Seamat. Este pacote possui funções para calcular uma série de propriedades da água do mar. Para se ver uma lista das funções contidas neste pacote use o comando help sw_contents

No exemplo abaixo calculamos a densidade potencial, com o comando sw_pden através das variáveis sal, temp e press e como nível de referencia a profundidade 0. O mesmo procedimento usado acima foi usado para se criar o gráfico densidade versus pressão. >>dens=sw_pden(sal,temp,press,[0]);%calculando a densidade potencial através da rotina sw_pden >>figure%abrindo nova figura >>plot(dens,press) %plotando densidade versus pressão >>title('Densidade versus Profundidade') %colocando titulo >>xlabel('Densidade')%colocando rotulo no eixo x >>ylabel('Profundidade (m)')%colocando rotulo no eixo y >>set (gca,'Xgrid','on')%colocando o grid em X ativo >>set (gca,'Ydir','reverse')%colocando direção do eixo y como inversa

Agora iremos criar um diagrama TS simples. Para tanto basta plotar a nossa variável sal em função da variável temp usando a função plot e como argumento o tipo de marcador *. Após esta etapa colocamos o titulo e rotulos dos eixos. O comando grid torna visível as linhas de grade nas direções x e y. >>figure %abrindo nova figura >>plot(sal,temp,'*') %pltando salinidade versus temperatura com marcadores * >>title('Diagrama TS')%colocando titulo no grafico >>xlabel('Salinidade')%colocando rotulo no eixo x >>ylabel('Temperatura')%colocando rotulo no eixo y >>grid No próximo exemplo será criado o mesmo diagrama TS, porém serão incluídos contornos de densidade e seus respectivos valores.

por Carlos Teixeira 21/21

Page 22: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Para criarmos contornos de densidade o primeiro passo é calcular as densidades. Para isso iremos usar uma variável auxiliar de temperatura e salinidade, com valores extremos um pouco maiores que nossos valores medidos. Assim nossa variável T vai possuir os valores de temperatura onde, o menor valor vai ser o mínimo (min(temp)) de temperatura medido menos um e o máximo medido (max(temp)) mais um. Como espaçamento entre os valores de temperatura usamos dois graus. A variável auxiliar de salinidade foi criada da mesmo forma só que espaçada de 0.25. >>T = (min(temp)-1:2:max(temp)+1); %criando variável auxiliar de temperatura >>S = (min(sal)-0.5:0.25:max(sal)+0.5);%criando variável auxiliar de salinidade

A seguir criamos matrizes (Grz e GrT)de salinidade e temperatura através do comando meshgrid das variáveis S e T. O comando meshgrid transforma o domínio especificado pelos dois vetores, S e T, em matrizes, (Grz e GrT),.consistindo de linhas e colunas repetidas. Isto é necessário para se criar uma superfície de densidade. >>[GrS,GrT] = meshgrid(S,T); %criando matriz de salinidades e temperaturas

Agora vamos criar nossa matriz de densidades (dens). Para tanto iremos usar a função sw_dens0 e as matrizes Grz e GrT. O comando sw_dens0 calcula a densidade ao nível do mar e apenas precisamos entrar com os dados de salinidade e temperatura. >>dens = (sw_dens0(GrS,GrT)) - 1000;%calculando as densidades das matrizes de salinidade e temperatura

Após isto, abrirmos uma nova figura, usamos o comando contur para plotar as linhas de contorno de densidade. Você pode mapear dados através do comando contur para isto necessita-se de uma posição x e y e de um valor para a coordenada (x,y). No exemplo abaixo nossa coordenada x são os dados de salinidade e a coordenada y os dados de temperatura. Escolhemos plotar as linhas de densidade de um valor de 17 a 31 com um intervalo de 0.4. O comando hold on foi usado para se inserir os rótulos das linhas de densidade através do comando clabel. Percebe-se que o comando clabel utiliza as informações criadas pelo comando contour e salvas na variável c. No exemplo abaixo inserimos um rotulo nas linhas entre 21 e 31 com um intervalo de 1. >>figure; %abrindo nova figura >>c = contour(GrS,GrT,dens,17:0.4:31);%criando linhas de contorno de densidade >>hold on; %segurando o grafco >>clabel(c,20:1:31); %colocando os rotulos nas linhas de densidade

Definimos os eixos como tendo o mesmo fator de escala na horizontal e na vertical. Para isso usamos o comando axis e o atributo square. A seguir nomeamos o gráfico e plotamos os dados de temperatura e salinidade como pontos. Finalmente inserimos os rótulos nos eixos do gráfico. >>axis('square'); %setando a dimensão dos eixos como quadrada >>title('DIAGRAMA TS'); %colocando titulo no grafico

por Carlos Teixeira 22/22

Page 23: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

>>plot(sal,temp,'.'); %plotando os dados de salinidade e teperatura >>xlabel('Salinidade'); %colocando rotulo do eixo x >>ylabel('Temperatura em C'); %colocando rotulo do eixo y

Agora iremos plotar o mesmo gráfico, porém ao invés de linhas de contorno utilizaremos padrões. Para isso usamos o comando conturf, ele funciona da mesma forma que o contur, só que agora definimos o número de padrões como 20. Os rótulos de cada linha serão inseridos de forma manual, para tanto basta clicar sobre o gráfico perto de cada linha que se quer rotular. Quando terminamos de rotular o gráfico apertamos a tecla enter e o programa prossegue. >>figure(10); %abrindo nova figura >>c = contourf(GrS,GrT,dens,20);%criando padrões de contorno de densidade >>hold on; %segurando o grafco >>clabel(c,'manual'); %colocando os rotulos no grafico de forma manual >>colorbar %inserindo uma barra de cores >>axis('square'); %setando a dimensão dos eixos como quadrada >>title('DIAGRAMA TS'); %colocando titulo no grafico >>plot(sal,temp,'+'); %plotando os dados de salinidade e teperatura >>xlabel('Salinidade'); %colocando rotulo do eixo x >>ylabel('Temperatura em C'); %colocando rotulo do eixo y

Criando secções verticais:

Nesta seção iremos apresentar a criação de secções verticais de uma propriedade, isto é como esta propriedade varia ao longo da profundidade e de uma distância. Para tanto serão utilizados dados de temperatura, salinidade e pressão provenientes de um cruzeiro realizado na região equatorial. Estes dados estão guardados em sete arquivos com o nome w2cpz0xx, onde xx representa o número da estação e no caso varia de 35 a 41.

Inicialmente iremos ler o conteúdo dos arquivos. Muitas vezes iremos deparar com dados que estão distribuídos em vários arquivos. Podemos simplesmente dar um load seguido do nome de cada arquivo, mas devemos convir de que isso seria algo muito trabalhoso em se tratando de vários arquivos.

Assim no exemplo abaixo criamos um string com o nome de cada arquivo e através de um loop carregamos cada um individualmente. Assim fazemos um loop (através do comando for) variando de 35 (nome do primeiro arquivi) a 41 (nome do último arquivo). Criamos a variável nome1 que vai ser igual a w2cpz035.pro quando j=35, w2cpz036.pro quando j=36 e assim sucessivamente. Percebe-se que usamos o comando num2str para transformar j (um número) em um string. >>for j = 35:41, %criamos um loop para ler os arquivos de 35 a 41. >>nome1 = ['w2cpz0',num2str(j),'.pro']; %aqui estamos criando um string com o nome dos arquivos

por Carlos Teixeira 23/23

Page 24: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Agora usamos o comando load, do arquivo descrito na variável nome1, para criar a variável entrada. A variável entrada possui em sua primeira linha informações sobre a posição da estação e a partir da segunda linha as informações de temperatura, salinidade e pressão a cada metro. Esta variável vai possui diferentes valores para cada passo do loop.

>>entrada = load (nome1); %aqui estamos lendo os dados dos arquivos e criando a variável entrada.

A seguir criaremos a variável temperatura, pressão e salinidade, usando os dados da variável entrada entre a linha 2 e a linha 1502 de dez em dez. Isto significa que usamos os valores da profundidade 0 a 1500 m a cada dez metros. Cada coluna das variáveis temperatura, pressão e salinidade vai possuir as informações relativas a uma estação. No passo j=35 (estação 35) as informações são guardadas na coluna 1, pois j-34 é igual a 1. No passo j=36 na coluna 2 (j-34=2) e assim sucessivamente até chegarmos à coluna 7 (j-34=7) onde estarão guardadas as informações da estação 41. >>temperatura(:,(j-34)) = entrada(2:10:1502,3); %estamos criando uma matriz de temperatura sendo que cada arquivo de entrada esta guardado em uma coluna >>salinidade(:,(j-34)) = entrada(2:10:1502,5);%estamos criando uma matriz de salinida sendo que cada arquivo de entrada esta guardado em uma coluna >>pressao(:,(j-34)) = entrada(2:10:1502,2);%estamos criando uma matriz de pressão sendo que cada arquivo de entrada esta guardado em uma coluna As informações de latitude e longitude (posição) de cada estação serão guardadas nas variáveis lat e lon. A seguir limpamos a variável entrada (já que a mesma foi usada apenas como auxiliar na leitura dos dados) e fichamos o loop. >>lat((j-34)) = entrada(1,5); %guardamos os dados de latitude >>lon((j-34)) = entrada(1,6); %guardamos os dados de longitude >> clear entrada;% limpamos a variável entrada >>end %final do loop

Para criar uma secção vertical precisamos de uma profundidade e uma distancia horizontal. A profundidade vai ser igual a um vetor de 0 a 1500 espaçados de dez em dez. E a distancia horizontal vai ser dada pela posição das estações. Assim partindo da estação 35 (nossa primeira estação), temos que saber a distancia cumulativa até a cada uma estação.

Para tanto convertemos os valores de latitude e longitude de dois pontos em distancia em quilômetros, através do comando sw_dist. O comando sw_dist nos dá a distancia entre dois pontos de latitude e longitude. A seguir usamos o comando cumsum para saber a distância acumulada em relação ao primeiro ponto. >>prof = 0:10:1500; %criando uma variavel profundidade >>distancia(1) = 0; %criando o primeiro valor da variavel distancia >>distancia(2:7) = sw_dist(lat,lon,'km'); %calculando as distancias entra as estaçoes e guardando na variavel distancia >>distancia = cumsum(distancia)); %calculando a distancia acumulada entre cada estaçao e invertendo os valores

por Carlos Teixeira 24/24

Page 25: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Agora vamos criar os gráficos com as secções. Para tanto abrimos uma nova figura

com o comando figure e fazemos um contorno (comando contourf) de padrões dos dados de temperatura ao longo de uma profundidade e de uma distância. Escolhemos como intervalo de ploategem 2 a 30 ºC com um espaçamento de 0.5. O comando colormap serve para escolher e alterar o mapa de cores usado na plotagem. Existe uma série de outros mapas de cores pré-definidos, para uma listagem do mesmo use help graph3d. A barra de valores foi criada com o comando colorbar e a seguir rotulamos as linhas de plotagem (comando clabel) entre 0 e trinta com um espaçamento de 2 graus. Finalmente se acrescentam os rótulos dos eixos e um título ao gráfico. >>figure(1); %criando nova figura >>c=contourf(distancia,-prof,temperatura,2:0.5:30); %fazendo um contorno de padrões do valoes de temperatura >>colormap('jet');%definindo o mapa de cores como jet >>colorbar; %criando a barra lateral de valores >>clabel(c,0:2:30); %rotulando as linhas >>xlabel('Distância em km'); %colocando rotulo no eixo x >>ylabel('Profundidade em m');%colocando rotulo no eixo y >>title('Secao da Temperatura Zonal'); %colocando titulo no gráfico O mesmo procedimento é usado só que agora para criar uma secção de salinidade. >>figure(2); %criando nova figura >>c=contourf(distancia,-prof,salinidade,20); >>colormap('cool'); %definindo o mapa de cores >>colorbar; %criando barra lateral >>clabel(c,33:1:37); %rotulando linhas >>xlabel('Distância em km');%colocando rotulo no eixo x >>ylabel('Profundidade em m');%colocando rotulo no eixo y >>title('Secao da Salinidade Zonal');%colocando titulo no gráfico Criando mapas e plotando informações espaciais:

Esta secção ensina a criar mapas e plotar informações nestes mapas. Para tanto

vamos usar o pacote m_map. Este pacote de rotinas permite criar mapas em dezoito tipos de projeção, plotar a linha de costa e a batimetria local. Exemplos do tipo de utilização do pacote podem ser encontrados em http://www2.ocgy.ubc.ca/~rich/#M_Map. O pacote vem com dados de baixa resolução tanto para batimetria como para linha de costa, porém outros arquivos de dados podem ser inseridos melhorando a resolução dos dados.

Abaixo criaremos um mapa da costa brasileira, com alguns contornos batimétricos. Serão usados os dados default de linha de costa e batimetria.

por Carlos Teixeira 25/25

Page 26: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Após abrirmos uma nova figura, definimos o tipo de projeção (no caso mercator) e os limites de latitude e longitude. Para isso usamos o comando m_proj. Utilize o comando m_proj('get') para ter uma lista das projeções disponíveis. A seguir usamos o comando m_cost para criar a linha de costa. O atributo ‘patch’ controla a cor do preenchimento do continente, no caso o valor [.7 .7 .7] resulta em uma cor cinza. Já o atributo edgecolor controla a cor da linha de costa, no caso escolhemos a cor azul. O comando m_grid cria as linhas de grade do mapa. >>figure(1)%abrindo uma nova figura >>m_proj( 'mercator','lon<gitude>', [-58 -30],'lat<itude>',[-42 -5]) %definindo a projeção e os limites de lat e long >>m_coast('patch',[.7 .7 .7],'edgecolor','b'); %criando a linha de costa >>m_grid %criando um grid

Agora plotamos os contornos batimétricos com o comando m_elev, com o atributo ‘contour’ (que produz linhas) e a lista das profundidades que queremos plotar, no caso 100, 200, 500, 1000 e 3000 m. As informações do comando m_elev são guardadas nas variáveis a e b que serão usadas no comando clabel para criar os rótulos das linhas plotadas. Inserimos o titulo do gráfico normalmente com o comando title. Percebe-se, que nos dois últimos comandos, escolhemos o tamanho da fonte diretamente através do atributo ‘fontsize’. >> [a,b]=m_elev('contour',[-100 -200 -500 -1000 -3000],'b');%fazendo os contornos de batimetria >>clabel(a,b,'fontsize',8) %rotulando os contornos de batimetria >>title('\bf Mapa de batimetria','fontsize',12);%inserindo um titulo O comando m_text, abaixo, serve para se plotar um texto numa determinada posição definida por uma longitude e uma latitude. No string criado, usamos um \bf (bold face) e \otime antes do texto com o nome das localidades. Estes dois comentários criam a fonte em negrito e um símbolo circular, respectivamente. São comandos usados na linguagem Látex, a qual é normalmente interpretada pelo Matlab. Além do string entramos com o atributo fontsize para definir o tamanho da fonte e com o atributo HorizontalAlignment para definir o alinhamento horizontal (no caso escolhido como à esquerda). >>m_text(-49.5,-28.6,'\bf \otimes Cabo de Sta Marta','fontsize',8, 'HorizontalAlignment', 'left'); %colocando texto no mapa >>m_text(-52.5,-32,'\bf \otimes Rio Grande','fontsize',8,'HorizontalAlignment', 'left'); %colocando texto no mapa >>m_text(-53.5,-33.5,'\bf \otimes Arroio Chui','fontsize',8,'HorizontalAlignment', 'left'); %colocando texto no mapa >>m_text(-38.5,-13, '\bf \otimes Salvador','fontsize',8,'HorizontalAlignment', 'left'); %colocando texto no mapa >>m_text(-39, -14, '\bf \otimes Camamu','fontsize',8,'HorizontalAlignment', 'left'); %colocando texto no mapa

por Carlos Teixeira 26/26

Page 27: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

No exemplo a seguir vamos ler, analisar e plotar dados de temperatura da superfície do mar (TSM) para Sudoeste do Atlântico. Estes dados são provenientes do site http://podaac.jpl.nasa.gov/ que disponibiliza uma série de produtos de satélite. Os arquivos originais são imagens diárias de TSM, do tipo Pathfinder como uma resolução espacial de 9 Km x 9 Km. Estes arquivos estão no formato hdf e são referentes aos primeiros sete dias do ano de 1991.

Uma outra forma de ler vários arquivos no Matlab sem ter que digitar o nome de cada um deles é usar a estrutura criada pelo comando dir. O comando dir resulta uma variável na forma de estrutura que contém o nome, data de modificação e tamanho do arquivo. Para tanto temos de informar o diretório e parte do nome dos arquivos que estamos procurando através de um string. Assim primeiramente criamos a variável dir_label com o string e a seguir usamos o comando dir. O comando vai retornar as características de todos os arquivos contidos no diretório D:\users\teixeira\pessoal\curso_matlab\ que começam com 19910 e terminam com .hdf. A seguir definimos quantos arquivos existem no diretório através do comando length e guardamos este número na variável n_image. O comando length nos retorna o comprimento de em vetor. >>dir_label='D:\users\teixeira\pessoal\curso_matlab\19910*.hdf'; % criando string com o diretorio das imagens >>file_names = dir(dir_label); %string com o nome dos arquivos de cada imagem >>n_image = length(file_names);%definindo o numero de imagens que temos para se fazer o laço

Agora criamos um laço para ler todos os arquivos do diretório. Agora carregamos os dados através do comando imread, seguido do nome do arquivo (que é retornado através do comando getfield da variável file_names e do campo name) e do tipo de imagem (no caso hdf). Antes do comando imread usamos o comando double que transforma os dados do formato uint8 para o formato double. Esta linha de comando faz diversas operações de uma só vez. Recuperamos o nome dos arquivos, carregamos o mesmo e mudamos o seu formato. Poderíamos fazer cada uma destas operações separadamente, mas isto levaria mais tempo e consumiria mais memória física. Assim sempre que possível devemos tentar juntar diversos comandos em apenas uma linha de comando.

Neste exemplo criamos uma matriz tri-dimensional, onde as duas primeiras dimensões correspondem ao espaço e a terceira dimensão corresponde ao tempo. Cada i do nosso loop corresponde a um dos sete dias de imagens. Assim nossa matriz data1 vai ter um formato 273 x 273 x 7, ou seja, 273 informações de TSM na horizontal (longitude), 273 na vertical (latitude) e 7 na terceira dimensão (tempo ou dias). Devemos pensar nesta matriz como sete mapas empilhados onde cada nível corresponde a um dia. Após a leitura dos dados mostramos o valor da variável i, isto é uma estratégia para saber em que passo do loop estamos. O loop é fechado com o comando end. >>for i=1:n_image %fazendo um laço da se ler da primeira a ultima imagem >>data1(:,:,i) = double(imread(getfield(file_names(i),'name'),'hdf')); %criando arquivo com os dados de TSM >>i %indice para saber qual imagem esta sendo lida. >>end; %final do laço

por Carlos Teixeira 27/27

Page 28: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

O maior problema quando estamos trabalhando com imagens de TSM provenientes de satélite é a cobertura de nuvens. O sensor não consegue ler através das nuvens e gera gaps nas mesmas. Estes gaps recebem uma mascara (um valor) pelo algoritmo de processamento das imagens. No nosso caso esta mascara possui o valor zero e devemos substituir este valor por um nan. Para isto primeiro devemos identificar a posição de cada um dos valores igual a zero e depois fazer a substituição. A identificação é feita através do comando find e a posição de cada valor zero esta guardada na variável izer. A seguir substituímos todos os zeros por nan. >>izer=find(data1==0); %achando todos os elementos com valor igual a zero >>data1(izer)=nan; %substituido os valores zero por nan Os dados contidos nos arquivos hdf não vem em graus Celsius, mas sim numa escala de cores que varia entre 1 e 256. Através da equação abaixo transformamos estes dados em TSM. >>data1=0.15*data1-3.0; %Converter temperatura p/ graus Celsius Através do comando smartmean conseguimos calcular a média (x_bar), o desvio padrão (st_dev) e o número de dados validos (n_data) usados na operação (não nan´s) de uma matriz tri dimensional. Para tanto devemos entrar com o nome da matriz e a dimensão sobre a qual queremos realizar a operação, no nosso caso a terceira dimensão ou tempo. O comando smartmean não pertence ao Matlab ele foi criado por um oceanógrafo brasileiro e será distribuído aos participantes do curso. >>[x_bar, st_dev, n_data]=smartmean(data1,3); %achando média, desvio e numero de dados das imagens Para plotarmos as informações acima num mapa, precisamos ter uma matriz com as posições (latitude e longitude) de cada um dos pixeis. Os passos para a criação dos vetores de latitude e longitude, envolvem operações simples descritas no manual das imagens e não se aplicam ao escopo do curso. Estas operações estão descritas abaixo: >>y1=-18.0615781; %definindo a posição vertical (latitude) do primeiro pixel >>x1=-61.918890624; %definindo a posição horizontal (longitude) do primeiro pixel >>dx=0.087890625; %definindo o incremento de laitude e longitude >>i=1:273; %numero de pixels na horizontal >>j=1:273;%numero de pixels na vertical >>longitude=(i-1)*dx+x1; %achando as longitude >>latitude=y1-((j-1)*dx); %achando as latitudes

Através do comando meshgrid criamos matrizes de latitude e longitude a partir dos vetores longitude e latitude >>[mlon,mlat]=meshgrid(longitude,latitude); %criando matriz de latitude e longitude

por Carlos Teixeira 28/28

Page 29: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Agora que temos a media, o desvio, o número de dados validos e as posições vamos plotar estas informações num mapa. O primeiro passo é definir o tipo de projeção que queremos e os limites do mapa através do comando m_proj. Não precisamos repetir este comando para cada mapa, pois esta projeção e estes limites ficam ativos até que o Matlab seja reiniciado ou uma nova projeção e/ou novos limites definidos. >>m_proj('mercator','longitudes',[-62 -38],'latitudes',[-42 -18]);%definindo projeção e limites do mapa

Inicialmente abrimos uma nova figura e plotamos a linha de costa através do comando m_gshhs_h. Este comando plota as linhas de costa contidas no banco de dados “Global Self-consistant Hierarchical High-resolution”. Este banco de dados não vem com o pacote m_map e deve ser baixado e instalado conforme instruções contidas na página do pacote m_map. No comando definimos ainda a cor de preenchimento da costa (‘path’), a cor da linha de costa (edgecolor) e a espessura da linha (LineWidth). >>figure %abrindo nova figura >>m_gshhs_h('patch',[0.8 0.8 0.8],'edgecolor',[0 0 0],'LineWidth',.05);%plotando a linha de costa com uma resolução de cinco minutos Através do comando m_pcolor plotamos a média da TSM em função da longitude e da latitude. >>m_pcolor(mlon,mlat,x_bar); %plotando as médias de TSM em função da latitude e longitude Agora vamos plotar os contornos batimetricos de 200 e 1000 metros. Para isso iremos usar o comando m_tbase que usa o banco de dados de batimetria “TerrainBase” que possui uma resolução de 5 minutos. Este banco de dados também não vem com o pacote m_map e deve ser baixado e instalado conforme instruções contidas na página do pacote do próprio m_map. Agora inserimos um titulo através do comando title no gráfico e criamos o grid do mapa através do comando m_grid. >>m_tbase('contour',[-200 -1000],'edgecolor','k'); %plotando as linhas batimetricas de 200 e 1000 metros com resolução de 5 minutos >>title('Media'); %titulo do grafico >>m_grid %colocando o grid O comando m_pcolor plota os dados usando como limite seus máximos e mínimos, porém muitas vezes queremos ressaltar certas feições ou definir outros limites de plotagem. Para isso usamos o comando caxis e como atributo os limites que desejamos(no nosso caso 5 e 30 graus). Finalmente inserimos uma barra de valores lateral através do comando colorbar . >>caxis([5,30]) %definindo os limites dos valores plotados >>colorbar %colocando barra lateral

por Carlos Teixeira 29/29

Page 30: 1. Introdução: 2. Janelas - EcivilUFES · Curso de Matlab e suas Aplicações em Oceanografia 1. Introdução: Este curso é direcionado para quem nunca utilizou o Matlab. As aulas

Curso de Matlab e suas Aplicações em Oceanografia

Bibliografia:

• Curso Rápido de Matlab® Paulo S. Polito e Olga T. Sato (http://orion.io.usp.br/cursomat/).

• SEA-MAT Matlab Tools for Oceanographic Analysis (http://woodshole.er.usgs.gov/operations/sea-mat/).

• Curso de MATLAB - Projeto REENGE - DEL - Laboratório de Computação da

Engenharia Elétrica – UFES.

• Site da Mathworks (http://www.mathworks.com/).

por Carlos Teixeira 30/30