Buscar

curso Matlab e suas aplicações para oceanografia

Prévia do material em texto

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. 
>> 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 
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 
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 emum) 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, 
 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 
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 
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 
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”. 
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 elementode 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 
 
 
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 
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 
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 
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 
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 planilhaexcell. 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 
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 
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 
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 outrojá 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 
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 
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 
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');%colocandoró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 
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 
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 
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 
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 
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 costae batimetria. 
 
 
por Carlos Teixeira 25/25 
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 
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 
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 
matriztri 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 
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 
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 
	1. Introdução:
	 
	4. Números, Caracteres:
	5. Operações aritméticas:
	 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/).

Continue navegando