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 >>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 y Size 1x2 Bytes 16 Class double array 0.14

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

>> num=3. Isto é o que chamamos de string. o segundo e o terceiro exemplo referem-se a variáveis diferentes. Um string é criado colocando-se letras ou números entre aspas simples (' '). • os nomes devem começar com letras e caracteres acentuados não são permitidos. y=2. realmin e realmax (menor e maior número real utilizável pelo Matlab. Algumas variáveis já são pré-definidas. X1251330.1415'. Outra forma de se construir vetor é especificando-se valores iniciais. • devem conter no máximo 31 caracteres. As operações básicas são listadas na tabela abaixo: >> x=1. especificamente). >>z=x+y. mas de dois em dois. media25. Note que. >> meunome=’Carlos Teixeira'.1415 que não servem para fazermos contas. 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. MEDIA25.1415) e serve para fazermos contas. De forma similar meunome contém quinze caracteres que evidentemente não servem para fazermos contas. Definidas as variáveis é possível então efetuar operações matemáticas com elas.1415. >> whos Name nome num meunome Size 1x6 1x1 1x15 Bytes 12 8 30 Class char array double array char array Uma variável (no caso z) pode ter o resultado de uma operação (x+y). por Carlos Teixeira 4/4 . segundo as regras acima. No exemplo abaixo a variável num contém um número (3. finais e incrementos. Operação Símbolo adição subtração multiplicação Divisão Potenciação a+b a-b a*b a/b 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. >> nome='3. como pi (π). A variável nome contém os seis caracteres 3. Alguns exemplos de nomes para variáveis são: total_anual2000.Curso de Matlab e suas Aplicações em Oceanografia Há vários tipos de números no ambiente Matlab. i e j (número imaginário ou raiz de -1).

4] por Carlos Teixeira 5/5 1 2 3 >> b=[2. >> a=[1 2 3] a= 1 2 3 >> b=[2. mas a é 1x3 (uma linha e três colunas) e b é 3x1 (três linhas uma coluna). Assim. 3. 4] . Já no caso de vetores alguns cuidados devem ser tomados. c=a*b. como no exemplo abaixo: >>length(b) ans= 5 5. qualquer uma das operações acima não gera problemas. O comando que criou a tem espaços (ou pode ter vírgulas) onde b tem pontos-e-vírgulas. c=a+b. as duas são 1x3 e tudo funciona como de forma correta. o Matlab reclama. Se definirmos as variáveis a e b como tendo apenas um elemento. Na segunda tentativa a e b forma criadas do mesmo modo. Como soma de matrizes funciona elemento a elemento. >> b=[2 3 4] b= 2 c= 3 3 5 4 7 >> c=a+b No primeiro caso criamos as matrizes a e b com três elementos cada.Curso de Matlab e suas Aplicações em Oceanografia >> a=1:5. Vejamos: >> a=[1 2 3] a= b= 2 3 4 >> c=a+b ??? Error using ==> + Matrix dimensions must agree.b=2.5. >>a=1.5) a= 12345 O tamanho de um vetor pode ser verificado com o comando length.f. 3. b=1:2:9 a= 12345 b= 13579 O comando linspace(i.n) fornece um vetor linha de n elementos entres os valores i e f. o vetor a do exemplo anterior pode ser redefinido da seguinte forma: >> a=linspace(1. Assim se quisermos podemos usar o Matlab como uma simples calculadora. Operações aritméticas: Ao fazermos operações matemáticas e lógicas devemos sempre atentar para o fato que estamos lidando com matrizes.

>> 3*m ans = 24 3 18 9 15 21 12 27 6 >>m+100 por Carlos Teixeira 6/6 multiplicação) . basta utilizar um apóstrofe após a variável e teremos a transposta da mesma..Curso de Matlab e suas Aplicações em Oceanografia b= 2 3 4 >> c=a*b c = 20 >> d=a.^B = [a1^b1 a2^b2 . divisão. ou seja. envolvendo escalares e matrizes seguem a mesma interpretação natural... 3.*b ??? Error using ==> . an·bn]. multiplicar elemento por elemento. >> b=[2 3 4] b= d= 2 2 3 6 4 12 >> d=a. uma em pé e a outra deitada.*B = [a1·b1 a2·b2 . No caso seguinte colocamos um ponto antes do asterisco. an^bn].4 9 2]. >> m=[8 1 6. • A. • A. Não dá certo porque as matrizes são de tamanhos diferentes. A transposta de uma matriz transforma matrizes-linha em matrizes-coluna e vice-versa.. an/bn].* indicando para o Matlab que queremos fazer um produto escalar. Assim: >> b=[2. No caso anterior não precisaríamos reescrever b para transformá-lo de um vetor 3 x 1 (no caso de b=[2. 3.3 5 7. 4] b= 2 3 4 >> b ' ans = 234 Operações matemáticas simples (adição.. 4]) para um vetor 1 x 3 (no caso b=[2 3 4])..*b Como no exemplo anterior criamos as matrizes a e b com três elementos cada. Uma operação escalar entre matrizes possui a forma: • A. Recriando b no mesmo formato de a e fazendo o produto escalar obtemos d com o mesmo tamanho de a e b. pois 1x2 + 2x3 + 3x4 =20. A multiplicação das matrizes * resulta em 20 (que pode se visto como uma multiplicação de matrizes)./B = [a1/b1 a2/b2 .* Matrix dimensions must agree. subtração.

00 por Carlos Teixeira .3 5 7. m(3.00 9.3) ans = 7 E o elemento da terceira linha primeira coluna da seguinte maneira: >> m(3. >>m(:.2) ans = 1. o elemento da segunda linha na terceira coluna da matriz m pode ser acessado da seguinte maneira: >> m(2.00 36. O comando m(:. localizar elementos dentro de uma matriz.4 9 2] m= 816 357 492 Os elementos. com todos os seus elementos. Assim.00 9. ^2 ans = 64.00 16.1) ans = 4 Para a seleção de linhas ou colunas inteiras usa-se o operador dois pontos (:).00 49.00 2. linhas e colunas de uma matriz podem ser acessados usando-se índices. se queremos elevar cada um dos elementos da matriz m ao quadrado teremos? >>m . É o processo mais importante dentro do Matlab e o mesmo é utilizado nas principais operações. Assim.00 4.00 >> m(3.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. Este processo chama-se indexação e tem como objetivo.00 81.:) retorna a linha 3.:) ans = 4.00 9.00 7/7 1.00 25. 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.00 6.2) significa “todas as linhas da coluna 2”.00 5. que definem a posição do elemento dentro da matriz.

c=[a b.3)=[] m= 81 35 49 No exemplo acima foi atribuída à coluna 3 a matriz nula.Curso de Matlab e suas Aplicações em Oceanografia À partir da matriz m é possível definir outra matriz : >> n=m(1:2. Abaixo encontram-se alguns operadores lógicos que normalmente são usados com o comando find. resultando numa nova matriz m. Quando é necessário remover alguma linha ou coluna de uma matriz atribui-se a esta linha ou coluna a matriz nula [ ]. É possível também montar grandes matrizes através de outras pequenas.1 1].b a] c= 1122 1122 2211 2211 O comando find encontra os índices da matriz de valores lógicos.b=[2 2. como: >> a=[1 1.2:3) n= 16 57 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).2 2]. < <= > >= == ~= isnan ~isnan menor que menor ou igual que maior que maior ou igual que igual diferente Valor que são Nan Valores que não são nan por Carlos Teixeira 8/8 . Dessa forma a matriz remanescente será composta apenas das linhas (ou colunas) remanescentes: >> m(:. o mesmo é muito utilizado para encontrar valores que obedecem a uma condição.

00 Se desejarmos saber quais os elementos da matriz são maiores do que dez.col]=find. O valor a = 5 corresponde ao quinto elemento da matriz m.00 O índice a pode ser usado para substituir dados valores.. >>a=find(m>=10) a= 3.col]=find(m==1) lin = 3. 50 1 2]. >>m=[-1 2 70. “ou”. Da mesma forma se desejamos obter o índice da linha e da coluna a construção do comando deve seguir a forma [lin.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”. >>m=[-1 2 70. >>a=find (m>0 | isnan(m)) por Carlos Teixeira 9/9 .00 50.00 >>[lin. >>a=find(isnan(m)) a= 5.00 NaN 1.00 2.00 0 2 O valor nan. 5 nan -10. >> a=find(m<0) a= 1.. Os operadores & e | correspondem aos operadores lógicos “e”.00 col = 2. Assim se queremos substituir todos os valores negativos da matriz m pelo valor zero. Assim se queremos obter os valores maiores que zero e iguais a -10. É o que conhecemos com um espaço vazio em planilhas eletrônicas. 5 nan -10.00 70. significa “not a numeric number” é usado quando não se tem um valor de um determinado elemento de uma matriz..00 7.00 8. 50 1 2].00 >> m(a)=0 m= 0 5.

00 7.00 >> asin(1)*180/pi ans = 90. >> sin(90/180*pi) ans = 1.00 4.00 3. 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. O valor de pi já é uma variável do Matlab sendo carregada quando se inicia o programa.00 9.00 5. Assim se possuímos um valor em graus devemos dividir o mesmo por 180 e multiplicar por pi para obter os valores em radianos.00 7.Curso de Matlab e suas Aplicações em Oceanografia a= 2.00 6. É importante notar que o Matlab não trabalha com ângulos e sim radianos.00 por Carlos Teixeira 10/10 .

00 15. será calculado o desvio para cada coluna dessa matriz. por exemplo.00 6.00 9.00 8.00 2. O comando magic cria uma matriz quadrática (no caso acima 3 x 3) onde todas as linhas e colunas possuem a mesma soma.Curso de Matlab e suas Aplicações em Oceanografia Algumas dessas operações podem ser aplicadas a vetores ou matrizes.00 10.00 4.00 5. >>sum(b) ans = 15.00 5. zeros.00 7.00 Columns 9 through 10 O Matlab tem uma série de matrizes especiais pré-fabricadas (ones. entre outras.00 5.00 15.00 3. magic.00 1. se o argumento x for um vetor o resultado será o desvio padrão desse vetor.00 7. Se x for uma matriz.00 9. uma delas se chama magic e foi usada acima para se criar a matriz b.00 15. >> x=1:10 x= Columns 1 through 8 1.00 2. max e mean. >>sum(b’) ans = 15.00 Se fizermos a transposta.00 por Carlos Teixeira 11/11 . etc). Para a função de desvio padrão std(x).00 >>mean(b) ans = 5. O mesmo ocorre com as funções sum.00 4.00 6. Vamos ver: Esta é a soma de todas as colunas.00 5.00 15. temos a soma de todas as linhas.03 >> >> b=magic(3) b= 8.00 >> std(x) ans = 3.00 3.

>>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. >>x=sin(n*pi/10). pode-se usar a estrutura if-else-end. 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. • Na segunda o calculo de x foi vetorizado e obtemos os mesmo valores só que de forma muito mais rápida. >>n=1:10.Curso de Matlab e suas Aplicações em Oceanografia 8. Existe também outra forma de condicionar a execução de alguns comandos. Por fim. Devemos ter em mente que o Matlab é um programa que trabalha com matrizes e vetores. Quando isso deixar de ser verdadeiro o ciclo termina. Isso pode ser feito com o comando while: >> EPS=1. >>end Enquanto a soma (1+EPS) for maior do que 1 o comando EPS=EPS/2 é executado. 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). Ele faz com que uma série de comandos seja executada repetidas vezes. Controle de Fluxo num Programa O controle de fluxo num programa escrito no Matlab é bem similar àquele usado em outras linguagens de programação. >> while (1+EPS)>1 >>EPS=EPS/2. Para isso utiliza-se o comando for. 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 . A vetorização de operações no Matlab torna a execução dos cálculos muito mais rápida.

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". de preferência um ou mais por linha de programa. Escrevendo programas no Matlab Seqüências de comandos podem ser armazenadas em arquivos e executadas no espaço de trabalho do Matlab. Para comentar uma linha coloca-se o símbolo de porcentagem (%) no começo da mesma. 10. % Este programa e parte do curso de Matlab % % Escrito em xx/xx/2005 por Carlos Teixeira em Salvador for i=1:0. por Carlos Teixeira 13/13 . O Matlab tem um editor de programas que possui algumas funções especiais que podem nos ajudar. assim não precisamos reescrever tudo da próxima vez! Estes arquivos m serão seus programas no Matlab.m).mat. Os comandos digitados no prompt do Matlab podem ser guardados num arquivo. Existem duas formas de executar o programa abaixo: • • copiando e colando o programa no prompt do Matlab. você apaga as variáveis do espaço de trabalho.nem mesmo o programador . pode-se salvar as variáveis digitando save >> save Este comando salva todas as variáveis em um arquivo em disco chamado Matlab.Curso de Matlab e suas Aplicações em Oceanografia 9. % 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. É recomendável que sempre se inclua comentários. Na próxima vez que Matlab é chamado. Vamos escrever o programa abaixo no editor do Matlab.2). Finalizando e Salvando o Espaço de Trabalho Para finalizar o Matlab digite quit ou exit. % Se i for impar b(i)=i/10. escrevendo o nome do programa no prompt do Matlab (no caso prog1) >>prog1 Note que todas as vezes que você modificar algo no programa. Terminando uma sessão do Matlab.mat. % Monta um loop de 1 a 20 de 0.: prog1. b(i)=i*10.5 em 0. deve-se salvar o mesmo antes de se executar. % o i-esimo b sera um decimo de i else % se for par.entende. Este hábito facilita a leitura e entendimento dos programas por você e quem mais for ler e usar seu programa.5:20. Antes de terminar. Depois de alguns dias um programa sem comentários é uma sopa de letrinhas que ninguém . pode-se executar o comando load para restaurar o espaço de trabalho com as variáveis de Matlab.5 if mod(i.

NUMERIC = xlsread('c:\Matlab\work\meu_excell'. O comando abaixo vai ler a planilha teste1 do arquivo meu_excell.3333e+00 1.33333333333333 0.2345e-06 format long 1. chamado de short format. Para tanto devemos usar o comando xlsread seguido do caminho e nome do arquivo e da planilha que se pretende ler. enquanto que >> save temp X Y Z salva as variáveis X.3333 0. ou a ans se a variável não é dada.'teste1') 12. Se ao menos um elemento de uma matriz não é um inteiro exato. O mesmo importa dados diretamente de uma planilha excell. vários formatos de saída são possíveis.2345e-6] Os formatos e as saídas resultantes para este vetor são: format short 1. mostra aproximadamente cinco dígitos decimais significativos.00000123456000 format long e 1. e atribui este resultado a uma variável específica. Esse comando é utilizado para dados no formato ASCII. Se todos os elementos de uma matriz forem inteiros exatos.33 0. suponha: >> x = [4/3 1.234500000000000e-06 format bank 1.Curso de Matlab e suas Aplicações em Oceanografia Podem ser utilizados os comandos save e load em arquivos com outros nomes. Você pode utilizar o comando format para controlar o formato numérico mostrado. Importando dados: O comando usado para carregar um arquivo contendo dados é o load nome_do_arquivo. 11. salvo no diretório c:\Matlab\work\. O comando save temp salva todas as variáveis em um arquivo de nome temp. ou salvar somente algumas variáveis. O comando >> save temp X salva somente a variável X. Os outros formatos mostram mais dígitos significativos ou utilizam notação decimal.333333333333333e+00 1. O formato padrão. Como um exemplo.mat. Formatos de Saída O Matlab mostra o resultado de uma linha de comando na tela. Y e Z.00 por Carlos Teixeira 14/14 . a matriz é mostrada em um formato sem pontos decimais. 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.0000 format short e 1.

30. %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. %temperatura >>sal=dados(:.6). %segundos em que foram feitas as medições >>temp=dados(:. O comando fix nos dá o valor a esquerda da vírgula e foi necessário. Percebe-se que à variável ano foi somado o valor de 1900. 2. Inicialmente carregamos os dados com o comando load o mesmo cria a matriz dados de 191 x 10. %cria a variável u nossa velocidade zonal. isto foi necessário pois os dados originais tinham o formato 99 e não 1999. Estes dados foram coletados a cada meia hora em setembro de 1999. Plotando Séries Temporais: Nesta seção iremos apresentar como proceder para a criação de séries temporais. %horas em que foram feitas as medições >>min=dados(:. A variável hora foi criada com o comando fix dos valores da coluna 5.3). isto é além da hora os minutos da medição também eram informados. >> load dados. %direção da corrente >>velcor=dados(:.8).*(cos(dircmat*pi/180)).Curso de Matlab e suas Aplicações em Oceanografia 13. salinidade e temperatura de um fundeio realizado na entrada de um estuário. %mes em que foram feitas as medições >>ano=dados(:. O arquivo dados.11). Percebe-se que os dados originais estavam em graus e. Assim os dias de amostragem que estavam na segunda coluna da variável dados foram atribuídos da variável dia.mat.*(sin(dircmat*pi/180)). por Carlos Teixeira 15/15 . A seguir vamos utilizar exemplos práticos de Oceanografia para demonstrar inicialmente gráficos do tipo "xy" e depois contornos.30. >>dia=dados(:.mat possui dados de correntometria. %cria a variável v nossa velocidade meridional.%lendo os dados A seguir foram criadas variáveis auxiliares para facilitar a plotagem dos dados. portanto foram convertidos em radianos multiplicando-se por pi e dividindo-se por 180.10). imagens e vetores.4)+1900. Plotando dados no Matlab A grande vantagem de linguagens do tipo Matlab é a facilidade de visualização dos dados. %salinidade >>dircor=dados(:. pois nos dados originais estes valores tinham o formato 1. %dias em que foram feitas as medições >>mes=dados(:. %anos em que foram feitas as medições >>hora=fix(dados(:.1)=0. >>u=velcor.9).2). %min em que foram feitas as medições >>seg(1:191. >>v=velcor.5)). os meses a variável mes e assim sucessivamente até a variável dircor.

O comando utiliza a variável ano. Este site possui uma série de rotinas com aplicações em oceanografia que serão utilizadas ao longo do curso. O comando julian transforma datas de nosso calendário (Calendário Gregoriano) em datas decimais (Calendário Juliano).gov/operations/sea-mat/. >>figure >>plot(tempo. 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). Para todos os conjuntos de rotinas que adicionamos devemos de informar a localização das mesmas para o Matlab. %cria dia juliano Se desejamos transformar um dia juliano no formato do nosso calendário usamos o comando gregorian. >>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. enquanto: >>gregorian(tempo(end)) ans = 1999.00 8.Curso de Matlab e suas Aplicações em Oceanografia Foi criada uma variável tempo através do comando julian. inicialmente usamos o comando figure para abrir uma nova figura. minuto e segundo e cria a variável tempo. Informe a localização do diretório e click em ok e save.00 19. Após isso temos que informar o Matlab sobre estas sub-rotinas. Existem também as rotinas gregaxh. do dia 23 de Maio do ano de 1968. Esse conjunto de rotinas deve ser salvo dentro do seu diretório \Matlab\toolbox\.00 0 0 Representa o último dia de medição. gregaxy que rotulam o eixo x em horas. Por convenção o dia Juliano 2440000 começa às 0 horas.00 3.er.usgs.00 8. A seguir serão criadas séries temporais de salinidade e temperatura. A seguir usamos o comando plot com a variável tempo (eixo x) e a variável sal (eixo y). por Carlos Teixeira 16/16 . >>tempo=julian([ano mes dia hora min seg]). Assim: >>gregorian(tempo(1)) ans = 1999. meses e anos respectivamente. adicionando o caminho no path. Sugiro que se crie um sub-diretório com o nome oceanografia e que se salvem estes pacotes de rotina dentro do mesmo. mês. dia.sal) O comando ylabel acrescenta um rotulo ao eixo y enquanto o comando xlabel um rotulo para o eixo x.00 18.00 7. hora. 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.00 0 0 Representa o nosso primeiro dia de medição. Para tanto no menu superior click em file/setpath/ addfolder. Para tanto. gregaxm.

Assim quando queremos adicionar um gráfico a outro já existente usamos o comando hold on. o x + * : -. -- Estilo de Linha ponto círculo x sinal positivo asterisco sólida pontilhada traço e ponto tracejada por Carlos Teixeira 17/17 .Curso de Matlab e suas Aplicações em Oceanografia >>gregaxd(tempo.temp) %plota temperature ao longo do tempo >>ylabel('Temperatura') %rotula eixo y >>xlabel('tempo') %rotula eixo x >>gregaxh(tempo. eliminando a última.'r') Além da cor podemos especificar o tipo de linha e o tipo de marcador usado na plotagem conforme tabela abaixo. mean(temp). >>figure %abre nova figura >>plot(tempo. plotamos a variável tempo e temp com o comando plot. 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. O argumento 'r’ após no final do comando plot refere-se a cor da linha. Símbolo y m c r g b w k Cor amarelo magenta cian vermelho verde azul branco preto Símbolo . abrimos uma nova figura com o comando figure. 18) %transforma dia juliano em hora gregoriana O comando hold on serve para se plotar uma curva sobre outra que já esta plotada. para tanto usamos o comando plot do mean(média) da variável temp (temperatura). >>plot(tempo. plotamos a média da temperatura. Da mesma forma que o exemplo anterior. 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. 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. >>hold on A seguir. Neste caso escolhemos a cor vermelha.

1) %transformando os valores julianos do eixo 1 em dias gregorianos. No exemplo abaixo guardamos as propriedades da plotagem dos eixos usados na plotagem e das duas linhas nos handle eixos linha1 e linha2. Iremos utilizar tal comando para fazer um subplot dos gráficos de temperatura e salinidade versus tempo e do vetor corrente. >>plot(X.Y.n. >>axes(eixos(2)) %colocando o eixo 2 ativo >>ylabel('Salinidade') %colocando um rotulo no eixo 2 >>gregaxd(tempo.Y. O mesmo procedimento é repetido só que agora para o eixo 2 (onde estão plotadas as salinidades). temperatura e salinidade >>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.plota um asterisco azul em cada ponto de dado.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. A variável eixos(1) possui as propriedades do eixo 1 e a variável eixos(2) as propriedades do eixo 2. O comando plotyy é repetido como no exemplo acima. Pode-se fazer isto utilizando um handle que é retornando pela função de criação. Os gráficos são numerados começando pela primeira linha na parte superior da janela.’g:’) . Uma forma de se alterar as propriedades dos objetos é referenciando este objeto depois de sua criação e utilizar tais referencias para comandos posteriores. O comando axes coloca um eixo ativo.plota uma linha verde pontilhada. >>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 2 em dias gregorianos. %plotando serie temporal de >>title('Temperatura e Salinidade X Tempo')%colocando um titulo no grafico por Carlos Teixeira 18/18 . 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. em seguida.’k*’) . só que usando eixos com escalas diferentes. O comando subplot(m.tempo. e assim segue.Curso de Matlab e suas Aplicações em Oceanografia Por exemplo. Após colocarmos o eixo 1 (onde estão plotadas as temperaturas) ativo damos um nome a ele com o comando ylabel. 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. >> [eixos linha1 linha2]=plotyy(tempo. No exemplo abaixo plotaremos os dados de temperatura e salinidade num mesmo gráfico.temp. Também transformamos os valores julianos em dias gregorianos com o comando gregaxd.sal). a segunda linha. >>plot(X. Para isso usamos o comando plotyy da variável tempo e temp e da variável tempo e sal.

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. Como se pode perceber no exemplo acima a função feather não plota uma série temporal de vetores. O comando get captura as propriedades de um objeto e o comando set altera tais propriedades. 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. temperatura e salinidade >>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. Agora com o comando subplot.Curso de Matlab e suas Aplicações em Oceanografia >>figure %abre uma nova janela >>subplot(2. >>w=u+i*v. >>subplot(2.1.%colocando titulo >>xlabel('tempo'). >>axes(eixos(2)) %colocando o eixo 2 ativo >>ylabel('Salinidade') %colocando um rotulo no eixo 2 >>gregaxd(tempo.[-10 200]).usgs. novamente a janela é dividida em duas sub-janelas na vertical e a segunda janela é selecionada. >>set(gca.1) %transformando os valores julianos do eixo 2 em dias gregorianos.er. Para saber quais as propriedades que podem ser mudadas e quais as opções para tal propriedade utilize o comando set(gca). %rotulando eixo x Uma forma de se alterar as propriedades dos objetos é utilizando os comandos get e set.temp. 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.'ylim'. Antes de plotar o vetor com o comando timeplt.1) %transformando os valores julianos do eixo 1 em dias gregorianos. Este comando pertence ao pacote de rotinas de mesmo nome disponível na pagina do Seamat http://woodshole.1.sal). Uma forma de plotar series temporais de vetores velocidade é usando o comando timeplt. %aqui criamos um vetor formado pela parte real e imaginaria da velocidade. devemos de construir uma outra variável formada pela componente u e a componente v multiplicada pelo número imaginário i.[-15 15]. %plotando serie temporal de >>title('Temperatura e Salinidade X Tempo')%colocando um titulo no grafico por Carlos Teixeira 19/19 .v). apenas a distribuição dos mesmos.%utiliza as componetes u e v para plotar o vetor >>title('Vetor Velocidade da Corrente '). Se usarmos o comando get(gca) vamos obter todas as propriedades do eixo ativo.1) %divide a janela em duas sub-janelas na vertical e seleciona a primeira delas >> [eixos linha1 linha2]=plotyy(tempo.tempo.gov/operations/sea-mat/. No exemplo abaixo iremos mudar os limites de plotagem através do comando set.2) %divide a janela em duas sub-janelas na vertical e seleciona a segunda delas >>feather(u. 'xlim'. O comando feather utiliza as componentes u e v para criar vetores de velocidade.

3).%colocando rótulos no eixo y >>set(gca. [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(2)). Assim: >>figure %abrindo nova figura >> [t]=timeplt(tempo. [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(4)).%colocado eixo 3 ativo >>ylabel('Intensidade'). respectivamente. 'XLim'.Curso de Matlab e suas Aplicações em Oceanografia >>figure %abrindo nova figura >>[t]=timeplt(tempo.%colocando rótulos no eixo y >>set(gca.%colocado eixo 4 ativo >>ylabel('Vetor'). Para tanto serão usados dados de CTD coletados na plataforma continental próxima a cidade de Rio Grande.%colocado eixo 1 ativo >>ylabel('Temperatura'). Primeiramente o arquivo de dados é carregado através do comando load ctd3152. por Carlos Teixeira 20/20 .velcor. [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x >>axes(t(3)). O arquivo ctd3152. %plotando os dados de temperatura. O titulo e os rotulos dos eixos são colocados com os comandos title.cnv o que cria a variável ctd3152.[1]).sal.%colocando rótulos no eixo y >>set(gca. [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.[1 2 3 4]).2).[temp. plotamos os dados de temperatura versus pressão através do comando plot(temp. temperatura e salinidade para esta estação.%colocando rótulos no eixo y >>set(gca.[w]. salinidade e intensidade da corrente e vetor velocidade nas posições 1 a 4 respectivamente >>axes(t(1)). 'XLim'. 'XLim'.%usando timeplt para plotar os vetores na posição 1 >>ylabel('Velocidade').%criando a variável temperatura a partir a coluna dois >>sal=ctd3152(:.%colocando rótulos no eixo y >>set(gca.%colocado eixo 2 ativo >>ylabel('Salinidade'). 'XLim'. %criando a variável pressão a partir a coluna um >>temp=ctd3152(:.w].cnv possui os dados de pressão. temp e sal com os dados das colunas de 1 a 3 da variável ctd3152.cnv %lendo os dados >>press=ctd3152(:. xlabel e ylabel. Para facilitar a plotagem são criadas as variáveis press.%criando a variável salinidade a partir a coluna três Com as variáveis criadas. [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.1). >>load ctd3152. 'XLim'.press).

O comando grid torna visível as linhas de grade nas direções x e y.[0]).'on')%colocando o grid em X ativo >>set (gca. >>figure %abrindo nova figura >>plot(sal. O mesmo procedimento usado acima foi usado para se criar o gráfico densidade versus pressão. >>dens=sw_pden(sal.'on') %colocando o grid em X ativo >>set (gca. Esta função faz parte do pacote SEAWATER disponível no site Seamat. Este procedimento foi necessário. Com o mesmo comando set colocamos a propriedade Ydir na direção reversa.'reverse')%colocando direção do eixo y como inversa Agora iremos criar um diagrama TS simples. Após esta etapa colocamos o titulo e rotulos dos eixos.'reverse') %colocando direção do eixo y como inversa Agora vamos plotar um gráfico da distribuição da densidade ao longo da profundidade.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. Este pacote possui funções para calcular uma série de propriedades da água do mar. por Carlos Teixeira 21/21 .'Xgrid'.'Ydir'. porém serão incluídos contornos de densidade e seus respectivos valores.'*') %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. temos que calcular a mesma. isto é o eixo está direcionado para baixo. temp e press e como nível de referencia a profundidade 0.temp. Para se ver uma lista das funções contidas neste pacote use o comando help sw_contents No exemplo abaixo calculamos a densidade potencial.Curso de Matlab e suas Aplicações em Oceanografia >>plot(temp.'Ydir'.'Xgrid'.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. Como não possuímos o valor da densidade.%calculando a densidade potencial através da rotina sw_pden >>figure%abrindo nova figura >>plot(dens.press. 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 *. com o comando sw_pden através das variáveis sal. >>set (gca. Para isso iremos usar os dados de temperatura. salinidade e pressão e a função sw_pden.temp. pois o campo de pressão cresce com a profundidade.

%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. 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. Para tanto iremos usar a função sw_dens0 e as matrizes Grz e GrT. com valores extremos um pouco maiores que nossos valores medidos.dens. O comando hold on foi usado para se inserir os rótulos das linhas de densidade através do comando clabel. O comando sw_dens0 calcula a densidade ao nível do mar e apenas precisamos entrar com os dados de salinidade e temperatura.%criando linhas de contorno de densidade >>hold on. Para isso iremos usar uma variável auxiliar de temperatura e salinidade. %colocando titulo no grafico por Carlos Teixeira 22/22 .GrT. (Grz e GrT). %colocando os rotulos nas linhas de densidade Definimos os eixos como tendo o mesmo fator de escala na horizontal e na vertical.GrT)) .1000. >>axis('square').Curso de Matlab e suas Aplicações em Oceanografia Para criarmos contornos de densidade o primeiro passo é calcular as densidades. %setando a dimensão dos eixos como quadrada >>title('DIAGRAMA TS'). >>figure.20:1:31). Isto é necessário para se criar uma superfície de densidade.25. abrirmos uma nova figura. >>dens = (sw_dens0(GrS. %segurando o grafco >>clabel(c.25:max(sal)+0.T). A seguir nomeamos o gráfico e plotamos os dados de temperatura e salinidade como pontos.. No exemplo abaixo nossa coordenada x são os dados de salinidade e a coordenada y os dados de temperatura. %criando variável auxiliar de temperatura >>S = (min(sal)-0. O comando meshgrid transforma o domínio especificado pelos dois vetores. %criando matriz de salinidades e temperaturas Agora vamos criar nossa matriz de densidades (dens). >>T = (min(temp)-1:2:max(temp)+1). %abrindo nova figura >>c = contour(GrS. No exemplo abaixo inserimos um rotulo nas linhas entre 21 e 31 com um intervalo de 1. A variável auxiliar de salinidade foi criada da mesmo forma só que espaçada de 0.consistindo de linhas e colunas repetidas.4. 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.4:31).5:0. Como espaçamento entre os valores de temperatura usamos dois graus. Finalmente inserimos os rótulos nos eixos do gráfico. >>[GrS.5). em matrizes. Escolhemos plotar as linhas de densidade de um valor de 17 a 31 com um intervalo de 0.%calculando as densidades das matrizes de salinidade e temperatura Após isto. S e T. Percebe-se que o comando clabel utiliza as informações criadas pelo comando contour e salvas na variável c. Para isso usamos o comando axis e o atributo square.17:0.GrT] = meshgrid(S.y). usamos o comando contur para plotar as linhas de contorno de densidade.

%plotando os dados de salinidade e teperatura >>xlabel('Salinidade'). Para tanto serão utilizados dados de temperatura. %colocando titulo no grafico >>plot(sal. Inicialmente iremos ler o conteúdo dos arquivos.pro']. porém ao invés de linhas de contorno utilizaremos padrões. %colocando rotulo do eixo y Agora iremos plotar o mesmo gráfico. Assim fazemos um loop (através do comando for) variando de 35 (nome do primeiro arquivi) a 41 (nome do último arquivo).dens. %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. %plotando os dados de salinidade e teperatura >>xlabel('Salinidade'). >>figure(10). %aqui estamos criando um string com o nome dos arquivos por Carlos Teixeira 23/23 .Curso de Matlab e suas Aplicações em Oceanografia >>plot(sal. Os rótulos de cada linha serão inseridos de forma manual. Muitas vezes iremos deparar com dados que estão distribuídos em vários arquivos. >>nome1 = ['w2cpz0'. %colocando os rotulos no grafico de forma manual >>colorbar %inserindo uma barra de cores >>axis('square').'manual'). isto é como esta propriedade varia ao longo da profundidade e de uma distância. onde xx representa o número da estação e no caso varia de 35 a 41. para tanto basta clicar sobre o gráfico perto de cada linha que se quer rotular. w2cpz036. Para isso usamos o comando conturf. %criamos um loop para ler os arquivos de 35 a 41.pro quando j=36 e assim sucessivamente.num2str(j). Criamos a variável nome1 que vai ser igual a w2cpz035.'). salinidade e pressão provenientes de um cruzeiro realizado na região equatorial. >>for j = 35:41.20). %setando a dimensão dos eixos como quadrada >>title('DIAGRAMA TS').pro quando j=35. Podemos simplesmente dar um load seguido do nome de cada arquivo. só que agora definimos o número de padrões como 20.'. Estes dados estão guardados em sete arquivos com o nome w2cpz0xx. %segurando o grafco >>clabel(c. Percebe-se que usamos o comando num2str para transformar j (um número) em um string.%criando padrões de contorno de densidade >>hold on. %colocando rotulo do eixo x >>ylabel('Temperatura em C').temp.'+'). Quando terminamos de rotular o gráfico apertamos a tecla enter e o programa prossegue. Assim no exemplo abaixo criamos um string com o nome de cada arquivo e através de um loop carregamos cada um individualmente. mas devemos convir de que isso seria algo muito trabalhoso em se tratando de vários arquivos. %abrindo nova figura >>c = contourf(GrS.temp. ele funciona da mesma forma que o contur.GrT.'.

%guardamos os dados de latitude >>lon((j-34)) = entrada(1. %criando uma variavel profundidade >>distancia(1) = 0. 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. Assim partindo da estação 35 (nossa primeira estação). temos que saber a distancia cumulativa até a cada uma estação. %calculando as distancias entra as estaçoes e guardando na variavel distancia >>distancia = cumsum(distancia)).'km').(j-34)) = entrada(2:10:1502.%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.3). Esta variável vai possui diferentes valores para cada passo do loop. %estamos criando uma matriz de temperatura sendo que cada arquivo de entrada esta guardado em uma coluna >>salinidade(:. usando os dados da variável entrada entre a linha 2 e a linha 1502 de dez em dez. Cada coluna das variáveis temperatura.(j-34)) = entrada(2:10:1502. A seguir criaremos a variável temperatura. >>prof = 0:10:1500. 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.(j-34)) = entrada(2:10:1502. >>temperatura(:. pressão e salinidade vai possuir as informações relativas a uma estação.% 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. Para tanto convertemos os valores de latitude e longitude de dois pontos em distancia em quilômetros. do arquivo descrito na variável nome1.2). E a distancia horizontal vai ser dada pela posição das estações. %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 usamos o comando load. pressão e salinidade. salinidade e pressão a cada metro. Isto significa que usamos os valores da profundidade 0 a 1500 m a cada dez metros.5). através do comando sw_dist.lon. para criar a variável entrada. >>entrada = load (nome1). A seguir usamos o comando cumsum para saber a distância acumulada em relação ao primeiro ponto. O comando sw_dist nos dá a distancia entre dois pontos de latitude e longitude. >>lat((j-34)) = entrada(1. %guardamos os dados de longitude >> clear entrada. %aqui estamos lendo os dados dos arquivos e criando a variável entrada.6). pois j-34 é igual a 1.5).%estamos criando uma matriz de salinida sendo que cada arquivo de entrada esta guardado em uma coluna >>pressao(:. No passo j=35 (estação 35) as informações são guardadas na coluna 1. A seguir limpamos a variável entrada (já que a mesma foi usada apenas como auxiliar na leitura dos dados) e fichamos o loop. %criando o primeiro valor da variavel distancia >>distancia(2:7) = sw_dist(lat.

%colocando rotulo no eixo x >>ylabel('Profundidade em m'). Este pacote de rotinas permite criar mapas em dezoito tipos de projeção. >>figure(2). 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. %criando a barra lateral de valores >>clabel(c.Curso de Matlab e suas Aplicações em Oceanografia Agora vamos criar os gráficos com as secções.ca/~rich/#M_Map.ubc.-prof. para uma listagem do mesmo use help graph3d. %fazendo um contorno de padrões do valoes de temperatura >>colormap('jet'). O comando colormap serve para escolher e alterar o mapa de cores usado na plotagem. Escolhemos como intervalo de ploategem 2 a 30 ºC com um espaçamento de 0. Finalmente se acrescentam os rótulos dos eixos e um título ao gráfico. %definindo o mapa de cores >>colorbar. porém outros arquivos de dados podem ser inseridos melhorando a resolução dos dados. %rotulando as linhas >>xlabel('Distância em km').%colocando rotulo no eixo y >>title('Secao da Temperatura Zonal').ocgy.salinidade. Abaixo criaremos um mapa da costa brasileira. Para tanto vamos usar o pacote m_map. %colocando titulo no gráfico O mesmo procedimento é usado só que agora para criar uma secção de salinidade. %criando nova figura >>c=contourf(distancia. %colocando rotulo no eixo x >>ylabel('Profundidade em m').20).5:30). 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.33:1:37).%colocando rotulo no eixo y >>title('Secao da Salinidade Zonal'). O pacote vem com dados de baixa resolução tanto para batimetria como para linha de costa. Exemplos do tipo de utilização do pacote podem ser encontrados em http://www2. por Carlos Teixeira 25/25 .5. plotar a linha de costa e a batimetria local. Serão usados os dados default de linha de costa e batimetria.%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. %criando nova figura >>c=contourf(distancia. %criando barra lateral >>clabel(c.temperatura.-prof.2:0. %rotulando linhas >>xlabel('Distância em km'). >>figure(1).0:2:30).%definindo o mapa de cores como jet >>colorbar. com alguns contornos batimétricos. >>colormap('cool'). Existe uma série de outros mapas de cores prédefinidos.

no caso o valor [. %colocando texto no mapa >>m_text(-52.'fontsize'.[-42 -5]) %definindo a projeção e os limites de lat e long >>m_coast('patch'.Curso de Matlab e suas Aplicações em Oceanografia Após abrirmos uma nova figura. 'left').7 . '\bf \otimes Salvador'.'fontsize'. respectivamente.7].6.5.'HorizontalAlignment'. %colocando texto no mapa >>m_text(-39.'fontsize'.'lat<itude>'. 'left'). >> [a.5.'HorizontalAlignment'. São comandos usados na linguagem Látex. no caso 100.'edgecolor'. 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). com o atributo ‘contour’ (que produz linhas) e a lista das profundidades que queremos plotar. -14.'\bf \otimes Arroio Chui'.-33.'fontsize'. %colocando texto no mapa >>m_text(-53. A seguir usamos o comando m_cost para criar a linha de costa. escolhemos o tamanho da fonte diretamente através do atributo ‘fontsize’.7 . 'left'). %criando a linha de costa >>m_grid %criando um grid Agora plotamos os contornos batimétricos com o comando m_elev.'fontsize'. Já o atributo edgecolor controla a cor da linha de costa.8) %rotulando os contornos de batimetria >>title('\bf Mapa de batimetria'.-28.7 .5.'fontsize'. no caso escolhemos a cor azul.'\bf \otimes Rio Grande'.'b').8. 1000 e 3000 m. Percebe-se. abaixo. No string criado.-32. 'HorizontalAlignment'.7 . '\bf \otimes Camamu'.b]=m_elev('contour'.8.'HorizontalAlignment'.12).'fontsize'. Para isso usamos o comando m_proj.%inserindo um titulo O comando m_text. Estes dois comentários criam a fonte em negrito e um símbolo circular.[-100 -200 -500 -1000 -3000].[. 200.'b'). Inserimos o titulo do gráfico normalmente com o comando title. usamos um \bf (bold face) e \otime antes do texto com o nome das localidades. O atributo ‘patch’ controla a cor do preenchimento do continente. >>m_text(-49.7] resulta em uma cor cinza.b. 'left').8. a qual é normalmente interpretada pelo Matlab. %colocando texto no mapa >>m_text(-38.-13. que nos dois últimos comandos. 'left').8.8. 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. definimos o tipo de projeção (no caso mercator) e os limites de latitude e longitude.'\bf \otimes Cabo de Sta Marta'.5.%fazendo os contornos de batimetria >>clabel(a.5. %colocando texto no mapa por Carlos Teixeira 26/26 . O comando m_grid cria as linhas de grade do mapa. serve para se plotar um texto numa determinada posição definida por uma longitude e uma latitude.'HorizontalAlignment'. Utilize o comando m_proj('get') para ter uma lista das projeções disponíveis. [-58 -30].'lon<gitude>'. 500. >>figure(1)%abrindo uma nova figura >>m_proj( 'mercator'.

O comando length nos retorna o comprimento de em vetor. carregamos o mesmo e mudamos o seu formato.'hdf')).hdf. Poderíamos fazer cada uma destas operações separadamente. O loop é fechado com o comando end.Curso de Matlab e suas Aplicações em Oceanografia No exemplo a seguir vamos ler. 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. 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). % criando string com o diretorio das imagens >>file_names = dir(dir_label). %final do laço por Carlos Teixeira 27/27 . Para tanto temos de informar o diretório e parte do nome dos arquivos que estamos procurando através de um string.hdf'. onde as duas primeiras dimensões correspondem ao espaço e a terceira dimensão corresponde ao tempo. Recuperamos o nome dos arquivos. Neste exemplo criamos uma matriz tri-dimensional. do tipo Pathfinder como uma resolução espacial de 9 Km x 9 Km. Cada i do nosso loop corresponde a um dos sete dias de imagens. Esta linha de comando faz diversas operações de uma só vez. Os arquivos originais são imagens diárias de TSM. Antes do comando imread usamos o comando double que transforma os dados do formato uint8 para o formato double. 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 .i) = double(imread(getfield(file_names(i). Estes arquivos estão no formato hdf e são referentes aos primeiros sete dias do ano de 1991. 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. >>for i=1:n_image %fazendo um laço da se ler da primeira a ultima imagem >>data1(:. data de modificação e tamanho do arquivo. O comando dir resulta uma variável na forma de estrutura que contém o nome. Assim nossa matriz data1 vai ter um formato 273 x 273 x 7. 273 na vertical (latitude) e 7 na terceira dimensão (tempo ou dias). >>end.gov/ que disponibiliza uma série de produtos de satélite. 273 informações de TSM na horizontal (longitude). Assim sempre que possível devemos tentar juntar diversos comandos em apenas uma linha de comando. mas isto levaria mais tempo e consumiria mais memória física. ou seja.nasa. Estes dados são provenientes do site http://podaac. A seguir definimos quantos arquivos existem no diretório através do comando length e guardamos este número na variável n_image.jpl.'name'). isto é uma estratégia para saber em que passo do loop estamos.%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.:. Assim primeiramente criamos a variável dir_label com o string e a seguir usamos o comando dir. analisar e plotar dados de temperatura da superfície do mar (TSM) para Sudoeste do Atlântico. >>dir_label='D:\users\teixeira\pessoal\curso_matlab9910*. %criando arquivo com os dados de TSM >>i %indice para saber qual imagem esta sendo lida. Agora carregamos os dados através do comando imread. %string com o nome dos arquivos de cada imagem >>n_image = length(file_names).

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

Finalmente inserimos uma barra de valores lateral através do comando colorbar .'k').[-200 -1000]. 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. >>figure %abrindo nova figura >>m_gshhs_h('patch'. 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. o número de dados validos e as posições vamos plotar estas informações num mapa.8].[-62 -38].8 0.'longitudes'. >>m_pcolor(mlon.'edgecolor'.'edgecolor'. >>caxis([5. 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.x_bar).05).30]) %definindo os limites dos valores plotados >>colorbar %colocando barra lateral por Carlos Teixeira 29/29 .[0 0 0].%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. Agora inserimos um titulo através do comando title no gráfico e criamos o grid do mapa através do comando m_grid.mlat. >>m_proj('mercator'.[-42 -18]).%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. %plotando as médias de TSM em função da latitude e longitude Agora vamos plotar os contornos batimetricos de 200 e 1000 metros. %plotando as linhas batimetricas de 200 e 1000 metros com resolução de 5 minutos >>title('Media').Curso de Matlab e suas Aplicações em Oceanografia Agora que temos a media. Este comando plota as linhas de costa contidas no banco de dados “Global Selfconsistant Hierarchical High-resolution”. a cor da linha de costa (edgecolor) e a espessura da linha (LineWidth). 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.'LineWidth'.[0. %titulo do grafico >>m_grid %colocando o grid O comando m_pcolor plota os dados usando como limite seus máximos e mínimos. o desvio.'latitudes'. porém muitas vezes queremos ressaltar certas feições ou definir outros limites de plotagem. Não precisamos repetir este comando para cada mapa. Para isso usamos o comando caxis e como atributo os limites que desejamos(no nosso caso 5 e 30 graus). No comando definimos ainda a cor de preenchimento da costa (‘path’). >>m_tbase('contour'.8 0.. O primeiro passo é definir o tipo de projeção que queremos e os limites do mapa através do comando m_proj.

io.DEL .er. por Carlos Teixeira 30/30 . Oceanographic • • Curso de MATLAB .Projeto REENGE .mathworks.gov/operations/sea-mat/).Laboratório de Computação da Engenharia Elétrica – UFES.com/). Sato Analysis SEA-MAT Matlab Tools for (http://woodshole. Site da Mathworks (http://www. Polito e Olga T.usgs.usp.Curso de Matlab e suas Aplicações em Oceanografia Bibliografia: • • Curso Rápido de Matlab® (http://orion. Paulo S.br/cursomat/).