Cur So Matlab by Carlos Teixeira

download Cur So Matlab by Carlos Teixeira

of 30

Transcript of Cur So Matlab by Carlos Teixeira

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    1/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    1. Introduo:

    Este curso direcionado para quem nunca utilizou o Matlab. As aulas so baseadasnas aplicaes do Matlab para atuao na rea de Oceanografia.

    O Matlab tanto uma linguagem de programao quanto um ambiente de computaotcnica que possibilita a anlise e visualizao de dados, clculos matemticos edesenvolvimento de algoritmos, entre outras aplicaes. Sua primeira verso foi escrita no finalda dcada de 70 nas Universidades do Novo Mxico e Stanford visando fornecer suporte acursos de teoria matricial, lgebra linear e anlise numrica. Hoje o Matlab encontra-se naverso 7.0.

    2. Janelas:

    No MS-windows basta clicar no cone e abre-se a interface grfica do usurio (GUI).No Linux, digite Matlab na linha de comando e surte o mesmo efeito. Para sair via menu, cliqueem File-->Exit Matlab, ou digite exit na janela de comando.

    Trabalhar com a GUI absolutamente dispensvel, o essencial apenas a janela decomandos. No Linux, para se livrar da GUI inicie o Matlab assim: Matlab no desktop. A GUI

    tem vrias sub-janelas, cinco neste exemplo. Se a sua no est assim, tente clicar em View-->Desktop Layout-->Five Panel

    Comandos de movimentao entre diretrios, comuns aos usurios de DOS e shell(UNIX - LINUX), como dir, ls e cd diretrio podem ser usados normalmente no prompt doMatlab. 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 smbolo deinterrogao (!).

    Assim, se estamos trabalhando no ambiente Windows e queremos criar um diretrio:

    >> !md teste

    E criamos o diretrio teste.

    No ambiente Linux

    >> !mkdir teste

    E o diretrio teste estar criado.

    A Figura abaixo mostra as janelas disponveis no ambiente Matlab Windows 7.0. A janela "Launch Pad" uma srie de "links" para os manuais e demonstraes do Matlab;"Command History" mostra os ltimos comandos digitados; "Workspace" mostra o uso da

    memria; "Current Directory" mostra o contedo do diretrio atual e por fim a mais importante,"Command Window" onde entramos com os comandos.

    por Carlos Teixeira 1/1

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    2/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    3. O Comando Help

    O comando help o comando mais til e mais usado dentro do Matlab, o mesmo provinformao para a grande parte dos tpicos do Matlab. Existem muitos comandos dentro doambiente Matlab e saber todas algo impossvel. Com o tempo criamos uma listagem, nanossa memria, dos comandos mais freqentes e para saber como utiliz-los usamos ocomando help.

    O comando sem nenhum argumento mostra uma lista de diretrios que contmarquivos relacionados com Matlab. Cada linha mostrada lista o nome de um diretrio seguidopor uma descrio do contedo do mesmo. Alguns diretrios so associados com oscomandos bsicos do Matlab. Outros contm toolboxes, tais como control e signal; essespossuem funes adicionais do Matlab cobrindo reas de aplicaes mais especializadas.

    Para uma lista de funes relacionadas a um determinado diretrio, digita-se helpseguido pelo nome do mesmo. Aparece uma lista de comandos, funes e smbolosespecficos do Matlab. O comando help seguido por estes comandos ou funes forneceinformaes sobre como utiliz-los em uma linha de comando.

    >> helpO comando help mean o mesmo fornece uma descrio detalhada de como funciona

    o comando, nos d um exemplo de sua utilizao 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    3/30

    Curso de Matlab e suas Aplicaes 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 no sabemos o nome de um comando podemos usar o comando lookforseguido doque se est procurando. Assim se queremos descobrir o comando que encontra os mnimos deum vetor:

    >>lookfor minimum

    O Matlab provavelmente ir nos dar como resposta uma srie de comandos que tenham apalavra minimum no seu help. Cabe a ns descobrir qual o comando.

    4. Nmeros, Caracteres:

    O Matlab foi criado para operar com matrizes. Um nmero uma matriz de uma linha euma coluna. Um vetor uma matriz de uma linha e vrias colunas. Estas matrizes podemconter nmeros inteiros, reais, binrios, caracteres, etc. Podemos criar matrizes separando ascolunas com espaos ou vrgulas e separando as linhas com ponto-e-vrgula:

    >> x=[1 0.14]

    x =

    1.00 0.14

    >>y=[1,3.14];

    O resultado de comandos terminados em ponto-e-vrgula no mostrado. Isto muitotil quando estamos trabalhando com matrizes muito grandes.

    O comando whosdescreve as variveis da memria e nos d algumas informaessobre esta varivel.

    >> whos

    Name Size Bytes Class

    y 1x2 16 double array

    Limpamos a varivel da memria com o comando clearseguido do nome da varivel(clearxno exemplo abaixo). Se digitarmos o comando clearsem o nome de nenhuma varivelou seguido do comando all o mesmo limpa todas as variveis presentes na memria docomputador.

    >>clear x

    >> clear all

    por Carlos Teixeira 3/3

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    4/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    H vrios tipos de nmeros no ambiente Matlab. No exemplo abaixo a varivel numcontm um nmero (3.1415) e serve para fazermos contas. A varivel nomecontm os seiscaracteres 3.1415 que no servem para fazermos contas. Isto o que chamamos de string.Um string criado colocando-se letras ou nmeros entre aspas simples (' '). De forma similarmeunomecontm quinze caracteres que evidentemente no servem para fazermos contas.

    >> num=3.1415;

    >> nome='3.1415';

    >> meunome=Carlos Teixeira';

    >> whos

    Name Size Bytes Class

    nome 1x6 12 char arraynum 1x1 8 double arraymeunome 1x15 30 char array

    Uma varivel (no caso z) pode ter o resultado de uma operao (x+y). Definidas asvariveis possvel ento efetuar operaes matemticas com elas. As operaes bsicas solistadas na tabela abaixo:

    >> x=1; y=2;

    >>z=x+y;

    Operao Smbolo

    adio a+bsubtrao a-b

    multiplicao a*b

    Diviso a/b

    Potenciao a^b

    Algumas regras devem ser obedecidas na definio de variveis:

    as variveis so sensveis a caracteres maisculos e minsculos; devem conter no mximo 31 caracteres;

    os nomes devem comear com letras e caracteres acentuados no so permitidos.

    Alguns exemplos de nomes para variveis so: total_anual2000, media25, MEDIA25,X1251330. Note que, segundo as regras acima, o segundo e o terceiro exemplo referem-se avariveis diferentes. Algumas variveis j so pr-definidas, como pi (), i e j (nmeroimaginrio ou raiz de -1), realmin e realmax (menor e maior nmero real utilizvel pelo Matlab,especificamente).

    Outra forma de se construir vetor especificando-se valores iniciais, finais e

    incrementos. No exemplo abaixo foi definido um vetor avariando de 1 a 5 (de um em um) eoutro bindo de 1 a 9, mas de dois em dois.

    por Carlos Teixeira 4/4

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    5/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    >> a=1:5, b=1:2:9

    a=

    1 2 3 4 5

    b=

    1 3 5 7 9O comando linspace(i,f,n) fornece um vetor linha de nelementos entres os valores ie

    f. Assim, o vetorado 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 exemploabaixo:

    >>length(b)

    ans= 5

    5. Operaes aritmticas:

    Ao fazermos operaes matemticas e lgicas devemos sempre atentar para o fatoque estamos lidando com matrizes. Se definirmos as variveis ae bcomo tendo apenas umelemento, qualquer uma das operaes acima no gera problemas. Assim se quisermospodemos 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 ae bcom trs elementos cada, mas a 1x3(uma linha e trs colunas) e b 3x1 (trs linhas uma coluna). O comando que criou a temespaos (ou pode ter vrgulas) onde btem pontos-e-vrgulas. Como soma de matrizes funcionaelemento a elemento, o Matlab reclama. Na segunda tentativa ae bforma criadas do mesmomodo, as duas so 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    6/30

    Curso de Matlab e suas Aplicaes 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 ae bcom trs elementos cada, umaem p e a outra deitada. A multiplicao das matrizes * resulta em 20 (que pode se visto como

    uma multiplicao de matrizes), pois 1x2 + 2x3 + 3x4 =20. No caso seguinte colocamos umponto antes do asterisco.* indicando para o Matlab que queremos fazer um produto escalar,ou seja, multiplicar elemento por elemento. No d certo porque as matrizes so de tamanhosdiferentes. Recriando b no mesmo formato de a e fazendo o produto escalar obtemos dcom omesmo tamanho de ae b.

    Uma operao escalar entre matrizes possui a forma:

    A./B = [a1/b1 a2/b2 ... an/bn];

    A.*B = [a1b1 a2b2 ... anbn];

    A.^B = [a1^b1 a2^b2 ... an^bn];

    No caso anterior no precisaramos reescreverbpara 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 apstrofeaps a varivel e teremos a transposta da mesma. A transposta de uma matriz transformamatrizes-linha em matrizes-coluna e vice-versa. Assim:

    >> b=[2; 3; 4]

    b = 2

    3

    4

    >> b '

    ans =2 3 4

    Operaes matemticas simples (adio, subtrao, diviso, multiplicao)envolvendo escalares e matrizes seguem a mesma interpretao 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    7/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    ans = 108 101 106

    103 105 107

    104 109 102

    J a potenciao de cada elemento uma operao escalar. Assim, se queremoselevar 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 so definidas no Matlab de forma anloga

    definio dos vetores linhas ou colunas: usam-se vrgulas ou espaos para separar oselementos de uma linha e pontos-e-vrgulas 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-sendices, que definem a posio do elemento dentro da matriz. Este processo chama-seindexao e tem como objetivo, localizar elementos dentro de uma matriz. o processo maisimportante dentro do Matlab e o mesmo utilizado nas principais operaes. Assim, o

    elemento da segunda linha na terceira coluna da matriz m pode ser acessado da seguintemaneira:

    >> m(2,3)

    ans = 7

    E o elemento da terceira linha primeira coluna da seguinte maneira:

    >> m(3,1)

    ans = 4

    Para a seleo de linhas ou colunas inteiras usa-se o operador dois pontos (:). Ocomando m(:,2) significa todas as linhas da coluna 2; m(3,:) retorna a linha 3, com todos osseus elementos.

    >>m(:,2)

    ans = 1.00

    5.00

    9.00

    >> m(3,:)ans = 4.00 9.00 2.00

    por Carlos Teixeira 7/7

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    8/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    partir da matriz m possvel 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 ointervalo de linhas desejado (da linha 1 a 2) e outra para especificar o intervalo de colunas (dacoluna 2 a 3).

    Quando necessrio remover alguma linha ou coluna de uma matriz atribui-se a estalinha ou coluna a matriz nula [ ]. Dessa forma a matriz remanescente ser composta apenasdas linhas (ou colunas) remanescentes:

    >> m(:,3)=[]

    m = 8 1

    3 5

    4 9

    No exemplo acima foi atribuda coluna 3 a matriz nula, resultando numa nova matriz m. possvel tambm montar grandes matrizes atravs 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 lgicos, o mesmo muitoutilizado para encontrar valores que obedecem a uma condio. Abaixo encontram-se algunsoperadores lgicos que normalmente so usados com o comando find.

    < menor que

    maior que

    >= maior ou igual que

    == igual

    ~= diferente

    isnan Valor que so Nan

    ~isnan Valores que no so nan

    por Carlos Teixeira 8/8

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    9/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    A operao abaixo encontra os ndices da matriz m que obedecem a condio nan.O valor a = 5 corresponde ao quinto elemento da matriz m. Da mesma forma se desejamosobter o ndice da linha e da coluna a construo 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 so 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 mpelo valor zero.

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

    m =

    0 2.00 70.00

    5.00 NaN 0

    50.00 1.00 2

    O valornan, significa not a numeric number usado quando no se tem um valor deum determinado elemento de uma matriz. o que conhecemos com um espao vazio emplanilhas eletrnicas.

    Os operadores & e | correspondem aos operadores lgicos e, ou. Assim se queremosobter 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    10/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    a =

    2.00

    3.00

    4.005.00

    6.00

    7.00

    9.00

    7. Funes matemticas e trigonomtricas:

    Abaixo so listadas algumas funes matemticas e trigonomtricas elementares quepodem ser usadas tanto com vetores quanto matrizes. importante notar que o Matlab no

    trabalha com ngulos e sim radianos. Assim se possumos um valor em graus devemos dividiro mesmo por 180 e multiplicar porpipara obter os valores em radianos. O valor de pij umavarivel 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    11/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Algumas dessas operaes podem ser aplicadas a vetores ou matrizes. Para a funode desvio padro std(x), por exemplo, se o argumento xfor um vetor o resultado ser o desviopadro desse vetor. Se x for uma matriz, ser calculado o desvio para cada coluna dessamatriz. O mesmo ocorre com as funes sum, max e mean, entre outras.

    >> x=1:10x =

    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 srie 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 magiccria uma matriz quadrtica (no caso acima 3 x 3) onde todas as linhas e colunas possuem amesma 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    12/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    8. Controle de Fluxo num Programa

    O controle de fluxo num programa escrito no Matlab bem similar quele usado em outraslinguagens de programao. Ele faz com que uma srie de comandos seja executada repetidasvezes. Para isso utiliza-se o comando for. Devemos ter em mente que o Matlab um programaque trabalha com matrizes e vetores. A vetorizao de operaes no Matlab torna a execuodos clculos muito mais rpida.

    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 oselementos de n, sendo que em cada passada do loop nassume um valor.

    Na segunda o calculo de xfoi vetorizado e obtemos os mesmo valores s que de formamuito mais rpida.

    >>n=1:10;

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

    Existe tambm outra forma de condicionar a execuo de alguns comandos. Isso podeser 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 possvel porque

    quando EPS chega a 10-16 ele sai do limite de preciso finita do Matlab e ento consideradozero.

    Por fim, pode-se usar a estrutura if-else-end, que apresenta a seguinte forma:

    >> if expresso

    >>comandos executados se expresso for Verdadeira

    >>else

    >>comandos executados se Falso

    >>end

    por Carlos Teixeira 12/12

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    13/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    9. Escrevendo programas no Matlab

    Seqncias de comandos podem ser armazenadas em arquivos e executadas noespao de trabalho do Matlab. Para isso basta criar um arquivo com os comandos do Matlabem qualquer editor de texto e salvar o arquivo com a extenso "m". Os comandos digitados noprompt do Matlab podem ser guardados num arquivo, assim no precisamos reescrever tudo

    da prxima vez!Estes arquivos m sero seus programas no Matlab. recomendvel que sempre se

    inclua comentrios, de preferncia um ou mais por linha de programa. Depois de alguns diasum programa sem comentrios uma sopa de letrinhas que ningum - nem mesmo oprogramador - entende. Este hbito facilita a leitura e entendimento dos programas por voc equem mais for ler e usar seu programa. Para comentar uma linha coloca-se o smbolo deporcentagem (%) no comeo da mesma.

    O Matlab tem um editor de programas que possui algumas funes especiais quepodem 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 duasformas 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 Espao de Trabalho

    Para finalizar o Matlab digite quit ou exit. Terminando uma sesso do Matlab, vocapaga as variveis do espao de trabalho. Antes de terminar, pode-se salvar as variveisdigitando save

    >> save

    Este comando salva todas as variveis em um arquivo em disco chamado Matlab.mat.

    Na prxima vez que Matlab chamado, pode-se executar o comando load para restaurar oespao de trabalho com as variveis de Matlab.mat.

    por Carlos Teixeira 13/13

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    14/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Podem ser utilizados os comandos save e load em arquivos com outros nomes, ousalvar somente algumas variveis. O comando save temp salva todas as variveis em umarquivo de nome temp.mat. O comando

    >> save temp X

    salva somente a varivel X, enquanto que

    >> save temp X Y Z

    salva as variveis 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 arquivosalvo na seo acima:

    >> load temp

    Da mesma forma se quisermos ler apenas uma das variveis dentro do arquivo:

    >> load temp Z

    Um comando muito usado no ambiente Windows o xlsread. O mesmo importadados diretamente de uma planilha excell. Para tanto devemos usar o comando xlsreadseguido do caminho e nome do arquivo e da planilha que se pretende ler. O comando abaixovai ler a planilha teste1 do arquivo meu_excell, salvo no diretrio c:\Matlab\work\.

    NUMERIC = xlsread('c:\Matlab\work\meu_excell','teste1')

    12. Formatos de Sada

    O Matlab mostra o resultado de uma linha de comando na tela, e atribui este resultado auma varivel especfica, ou a ans se a varivel no dada. Voc pode utilizar o comandoformat para controlar o formato numrico mostrado.

    Se todos os elementos de uma matriz forem inteiros exatos, a matriz mostrada em umformato sem pontos decimais. Se ao menos um elemento de uma matriz no um inteiroexato, vrios formatos de sada so possveis. O formato padro, chamado de short format,mostra aproximadamente cinco dgitos decimais significativos. Os outros formatos mostrammais dgitos significativos ou utilizam notao decimal. Como um exemplo, suponha:

    >> x = [4/3 1.2345e-6]Os formatos e as sadas resultantes para este vetor so:

    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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    15/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    13. Plotando dados no Matlab

    A grande vantagem de linguagens do tipo Matlab a facilidade de visualizao dosdados. A seguir vamos utilizar exemplos prticos de Oceanografia para demonstrarinicialmente grficos do tipo "xy" e depois contornos, imagens e vetores.

    Plotando Sries Temporais:

    Nesta seo iremos apresentar como proceder para a criao de sries temporais. Oarquivo dados.matpossui dados de correntometria, salinidade e temperatura de um fundeiorealizado na entrada de um esturio. Estes dados foram coletados a cada meia hora emsetembro de 1999.

    Inicialmente carregamos os dados com o comando load o mesmo cria a matriz dados de 191 x10.

    >> load dados.mat;%lendo os dados

    A seguir foram criadas variveis auxiliares para facilitar a plotagem dos dados. Assimos dias de amostragem que estavam na segunda coluna da varivel dadosforam atribudos davarivel dia, os meses a varivel mese assim sucessivamente at a varivel dircor. Percebe-seque varivel ano foi somado o valor de 1900, isto foi necessrio pois os dados originaistinham o formato 99 e no 1999. A varivel horafoi criada com o comando fix dos valores dacoluna 5. O comando fix nos d o valor a esquerda da vrgula e foi necessrio, pois nos dadosoriginais estes valores tinham o formato 1.30, 2.30, isto alm da hora os minutos da mediotambm eram informados.

    >>dia=dados(:,2); %dias em que foram feitas as medies

    >>mes=dados(:,3); %mes em que foram feitas as medies

    >>ano=dados(:,4)+1900; %anos em que foram feitas as medies

    >>hora=fix(dados(:,5)); %horas em que foram feitas as medies

    >>min=dados(:,11); %min em que foram feitas as medies

    >>seg(1:191,1)=0; %segundos em que foram feitas as medies

    >>temp=dados(:,6); %temperatura

    >>sal=dados(:,8); %salinidade

    >>dircor=dados(:,9); %direo 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 direo e intensidade das correntes. Percebe-se que os dadosoriginais estavam em graus e, portanto foram convertidos em radianos multiplicando-se porpiedividindo-se por 180.

    >>u=velcor.*(cos(dircmat*pi/180)); %cria a varivel u nossa velocidade zonal.

    >>v=velcor.*(sin(dircmat*pi/180)); %cria a varivel v nossa velocidade meridional.

    por Carlos Teixeira 15/15

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    16/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Foi criada uma varivel tempo atravs do comando julian. O comando juliantransforma datas de nosso calendrio (Calendrio Gregoriano) em datas decimais (CalendrioJuliano). Por conveno o dia Juliano 2440000 comea s 0 horas, do dia 23 de Maio do anode 1968. O comando utiliza a varivel ano, ms, dia, hora, minuto e segundo e cria a variveltempo.

    >>tempo=julian([ano mes dia hora min seg]); %cria dia juliano

    Se desejamos transformar um dia juliano no formato do nosso calendrio usamos ocomando gregorian. Assim:

    >>gregorian(tempo(1))

    ans = 1999.00 8.00 3.00 19.00 0 0

    Representa o nosso primeiro dia de medio, enquanto:

    >>gregorian(tempo(end))

    ans = 1999.00 8.00 7.00 18.00 0 0

    Representa o ltimo dia de medio.

    Os comandos julian e gregorian no fazem parte do Matlab eles fazem parte umpacote de rotinas disponvel no site SEAMAT http://woodshole.er.usgs.gov/operations/sea-mat/.Este site possui uma srie de rotinas com aplicaes em oceanografia que sero utilizadas aolongo do curso.

    Esse conjunto de rotinas deve ser salvo dentro do seu diretrio \Matlab\toolbox\.Sugiro que se crie um sub-diretrio com o nome oceanografiae que se salvem estes pacotesde rotina dentro do mesmo. Aps isso temos que informar o Matlab sobre estas sub-rotinas.Para tanto no menu superior click em file/setpath/ addfolder. Informe a localizao do diretrioe click em ok e save. Para todos os conjuntos de rotinas que adicionamos devemos de informara localizao das mesmas para o Matlab, adicionando o caminho no path.

    A seguir sero criadas sries temporais de salinidade e temperatura. Para tanto,inicialmente usamos o comando figure para abrir uma nova figura. A seguir usamos o comandoplot com a varivel tempo(eixo x) e a varivel sal(eixo y).

    >>figure

    >>plot(tempo,sal)

    O comando ylabel acrescenta um rotulo ao eixo y enquanto o comando xlabel um rotulo parao eixo x.

    >>ylabel('Salinidade'); %rotulo do eixo y

    >>xlabel('tempo') %rotulo do eixo x

    O comando gregaxd transforma os valores julianos que esto plotados no eixo x emdias gregorianos. Para isso temos que informar qual a nossa varivel que possui os valores julianos (no caso a varivel tempo) e o espaamento entre os rtulos que sero escritos noeixo x (no caso dois dias). Existem tambm as rotinas gregaxh, gregaxm, gregaxy querotulam o eixo x em horas, meses e anos respectivamente.

    por Carlos Teixeira 16/16

    http://woodshole.er.usgs.gov/operations/sea-mat/http://woodshole.er.usgs.gov/operations/sea-mat/
  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    17/30

    Curso de Matlab e suas Aplicaes em Oceanografia

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

    No exemplo a seguir vamos criar uma srie temporal de temperatura e plotar atemperatura mdia no mesmo grfico. Da mesma forma que o exemplo anterior, abrimos umanova figura com o comando figure, plotamos a varivel tempo e tempcom 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 atravs do comando gregaxh e um espaamento de 18horas.

    >>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 no utilizamos o comando figure para abrir uma novafigura o Matlab cria uma nova figura sobre a antiga, eliminando a ltima. Assim quandoqueremos adicionar um grfico a outro j existente usamos o comando hold on.

    >>hold on

    A seguir, plotamos a mdia da temperatura, para tanto usamos o comando plot domean(mdia) da varivel temp(temperatura). O argumento 'r aps no final do comando plotrefere-se a cor da linha. Neste caso escolhemos a cor vermelha.

    >>plot(tempo, mean(temp),'r')

    Alm da cor podemos especificar o tipo de linha e o tipo de marcador usado naplotagem conforme tabela abaixo.

    Smbolo Cor Smbolo Estilo de Linha

    y amarelo . ponto

    m magenta o crculo

    c cian x x

    r vermelho + sinal positivo

    g verde * asterisco

    b azul - slida

    w branco : pontilhada

    k preto -. trao e ponto

    -- tracejada

    por Carlos Teixeira 17/17

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    18/30

    Curso de Matlab e suas Aplicaes 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 mesmogrfico, s que usando eixos com escalas diferentes. Para isso usamos o comando plotyy davarivel tempo e tempe da varivel tempo e sal.

    Uma forma de se alterar as propriedades dos objetos referenciando este objetodepois de sua criao e utilizar tais referencias para comandos posteriores. Pode-se fazer istoutilizando um handle que retornando pela funo de criao. No exemplo abaixo guardamosas propriedades da plotagem dos eixos usados na plotagem e das duas linhas nos handleeixos linha1 e linha2.

    >> [eixos linha1 linha2]=plotyy(tempo,temp,tempo,sal); %plotando serie temporal detemperatura 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 varivel eixos para colocar cada um dos eixosativos. A varivel eixos(1) possui as propriedades do eixo 1 e a varivel eixos(2) aspropriedades do eixo 2. O comando axes coloca um eixo ativo.

    Aps colocarmos o eixo 1 (onde esto plotadas as temperaturas) ativo damos umnome a ele com o comando ylabel. Tambm transformamos os valores julianos em diasgregorianos com o comando gregaxd. O mesmo procedimento repetido s que agora para oeixo 2 (onde esto 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.Atravs deste comando podem ser mostrados vrios grficos em uma mesma janela ouimprimi-los em uma mesma folha de papel. Iremos utilizar tal comando para fazer um subplotdos grficos 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 (nahorizontal) de sub-regies e seleciona a p-sima sub-regio para o grfico que est sendoplotado no momento. Os grficos so numerados comeando pela primeira linha na partesuperior 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 comandoplotyy repetido como no exemplo acima.

    por Carlos Teixeira 18/18

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    19/30

    Curso de Matlab e suas Aplicaes 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 detemperatura 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 navertical e a segunda janela selecionada. O comando feather utiliza as componentes u e vpara 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 taispropriedades. Se usarmos o comando get(gca) vamos obter todas as propriedades do eixoativo. No exemplo abaixo iremos mudar os limites de plotagem atravs do comando set. Aspropriedades que esto sendo mudadas so os limites vertical (ylim) e horizontal (xlim) dogrfico e seus respectivos valores so respectivamente -15 a 15 e -10 a 200. Para saber quaisas propriedades que podem ser mudadas e quais as opes para tal propriedade utilize ocomando set(gca).

    >>set(gca,'ylim',[-15 15], 'xlim',[-10 200]);

    Como se pode perceber no exemplo acima a funo feather no plota uma srietemporal de vetores, apenas a distribuio dos mesmos. Uma forma de plotar series temporais

    de vetores velocidade usando o comando timeplt. Este comando pertence ao pacote derotinas de mesmo nome disponvel na pagina do Seamathttp://woodshole.er.usgs.gov/operations/sea-mat/.

    Antes de plotar o vetor com o comando timeplt, devemos de construir uma outravarivel formada pela componente u e a componente v multiplicada pelo nmero imaginrio 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 varivel wna posio 1 e definimosseus rtulos e limites. Para definir os limites do eixo x, usamos o comando min e max para

    achar os mnimos e mximos valores do eixo x e somamos dois para melhorar a aparncia dogrfico.

    por Carlos Teixeira 19/19

    http://woodshole.er.usgs.gov/operations/sea-mat/http://woodshole.er.usgs.gov/operations/sea-mat/
  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    20/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    >>figure %abrindo nova figura

    >>[t]=timeplt(tempo,[w],[1]);%usando timeplt para plotar os vetores na posio 1

    >>ylabel('Velocidade');%colocando rtulos no eixo y

    >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x

    O comando timeplt tambm pode ser usado como uma alternativa para o comandosubplot quando estamos trabalhando com sries 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 posies 1 a 4 respectivamente

    >>axes(t(1));%colocado eixo 1 ativo

    >>ylabel('Temperatura');%colocando rtulos 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 rtulos no eixo y

    >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x

    >>axes(t(3));%colocado eixo 3 ativo

    >>ylabel('Intensidade');%colocando rtulos 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 rtulos no eixo y

    >>set(gca, 'XLim', [min(tempo)-2 max(tempo)+2])%definindo os limites do eixo x

    Plotando Diagramas Propriedade versus Profundidade:

    Nesta seo iremos demonstrar a criao de diagramas propriedade versusprofundidade e do diagrama TS. Para tanto sero usados dados de CTD coletados naplataforma continental prxima a cidade de Rio Grande. O arquivo ctd3152.cnv possui osdados de presso, temperatura e salinidade para esta estao.

    Primeiramente o arquivo de dados carregado atravs do comando load ctd3152.cnvo que cria a varivel ctd3152. Para facilitar a plotagem so criadas as variveis press, temp esalcom os dados das colunas de 1 a 3 da varivel ctd3152, respectivamente.

    >>load ctd3152.cnv %lendo os dados

    >>press=ctd3152(:,1); %criando a varivel presso a partir a coluna um

    >>temp=ctd3152(:,2);%criando a varivel temperatura a partir a coluna dois

    >>sal=ctd3152(:,3);%criando a varivel salinidade a partir a coluna trs

    Com as variveis criadas, plotamos os dados de temperatura versus presso atravsdo comando plot(temp,press). O titulo e os rotulos dos eixos so colocados com os comandostitle, xlabel e ylabel.

    por Carlos Teixeira 20/20

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    21/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    >>plot(temp,press) %plotando temperatura versus presso

    >>title('Temperatura versus Profundidade')%colocando titulo no grfico

    >>xlabel('Temperatura (C)')%colocando rotulo no eixo x

    >>ylabel('Profundidade (m)')%colocando rotulo no exo y

    Atravs do comando set colocamos a propriedade Xgrid (linhas de grade na direoX)ativa. Com o mesmo comando set colocamos a propriedade Ydir na direo reversa, isto o eixo est direcionado para baixo. Este procedimento foi necessrio, pois o campo de pressocresce com a profundidade.

    >>set (gca,'Xgrid','on') %colocando o grid em X ativo

    >>set (gca,'Ydir','reverse') %colocando direo do eixo y como inversa

    Agora vamos plotar um grfico da distribuio da densidade ao longo da profundidade.Como no possumos o valor da densidade, temos que calcular a mesma. Para isso iremos

    usar os dados de temperatura, salinidade e presso e a funo sw_pden. Esta funo fazparte do pacote SEAWATER disponvel no site Seamat. Este pacote possui funes paracalcular uma srie de propriedades da gua do mar. Para se ver uma lista das funescontidas neste pacote use o comando help sw_contents

    No exemplo abaixo calculamos a densidade potencial, com o comando sw_pdenatravs das variveis sal, temp e press e como nvel de referencia a profundidade 0. O mesmoprocedimento usado acima foi usado para se criar o grfico densidade versus presso.

    >>dens=sw_pden(sal,temp,press,[0]);%calculando a densidade potencial atravs da rotinasw_pden

    >>figure%abrindo nova figura>>plot(dens,press) %plotando densidade versus presso

    >>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 direo do eixo y como inversa

    Agora iremos criar um diagrama TS simples. Para tanto basta plotar a nossa varivel

    salem funo da varivel tempusando a funo plot e como argumento o tipo demarcador*.Aps esta etapa colocamos o titulo e rotulos dos eixos. O comando grid torna visvel as linhasde grade nas direes 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 prximo exemplo ser criado o mesmo diagrama TS, porm sero includoscontornos de densidade e seus respectivos valores.

    por Carlos Teixeira 21/21

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    22/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Para criarmos contornos de densidade o primeiro passo calcular as densidades.Para isso iremos usar uma varivel auxiliar de temperatura e salinidade, com valores extremosum pouco maiores que nossos valores medidos. Assim nossa varivel Tvai possuir os valoresde temperatura onde, o menor valor vai ser o mnimo (min(temp)) de temperatura medidomenos um e o mximo medido (max(temp)) mais um. Como espaamento entre os valores detemperatura usamos dois graus. A varivel auxiliar de salinidade foi criada da mesmo forma sque espaada de 0.25.

    >>T = (min(temp)-1:2:max(temp)+1); %criando varivel auxiliar de temperatura

    >>S = (min(sal)-0.5:0.25:max(sal)+0.5);%criando varivel auxiliar de salinidade

    A seguir criamos matrizes (Grz e GrT)de salinidade e temperatura atravs do comandomeshgrid das variveis S e T. O comando meshgrid transforma o domnio especificado pelosdois vetores, S e T, em matrizes, (Grz e GrT),.consistindo de linhas e colunas repetidas. Isto necessrio para se criar uma superfcie 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 afuno sw_dens0 e as matrizesGrz e GrT. O comando sw_dens0 calcula a densidade ao nveldo mar e apenas precisamos entrar com os dados de salinidade e temperatura.

    >>dens = (sw_dens0(GrS,GrT)) - 1000;%calculando as densidades das matrizes de salinidadee temperatura

    Aps isto, abrirmos uma nova figura, usamos o comando contur para plotar as linhasde contorno de densidade. Voc pode mapear dados atravs do comando contur para istonecessita-se de uma posio x e y e de um valorpara a coordenada (x,y). No exemplo abaixonossa coordenada x so 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. Ocomando hold on foi usado para se inserir os rtulos das linhas de densidade atravs docomando clabel. Percebe-se que o comando clabel utiliza as informaes criadas pelocomando contour e salvas na varivel c. No exemplo abaixo inserimos um rotulo nas linhasentre 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 grfico eplotamos os dados de temperatura e salinidade como pontos. Finalmente inserimos os rtulosnos eixos do grfico.

    >>axis('square'); %setando a dimenso dos eixos como quadrada

    >>title('DIAGRAMA TS'); %colocando titulo no grafico

    por Carlos Teixeira 22/22

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    23/30

    Curso de Matlab e suas Aplicaes 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 grfico, porm ao invs de linhas de contornoutilizaremos padres. Para isso usamos o comando conturf, ele funciona da mesma forma queo contur, s que agora definimos o nmero de padres como 20. Os rtulos de cada linhasero inseridos de forma manual, para tanto basta clicar sobre o grfico perto de cada linhaque se quer rotular. Quando terminamos de rotular o grfico apertamos a tecla enter e oprograma prossegue.

    >>figure(10); %abrindo nova figura

    >>c = contourf(GrS,GrT,dens,20);%criando padres 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 dimenso 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 seces verticais:

    Nesta seo iremos apresentar a criao de seces verticais de uma propriedade,isto como esta propriedade varia ao longo da profundidade e de uma distncia. Para tantosero utilizados dados de temperatura, salinidade e presso provenientes de um cruzeirorealizado na regio equatorial. Estes dados esto guardados em sete arquivos com o nomew2cpz0xx, onde xx representa o nmero da estao e no caso varia de 35 a 41.

    Inicialmente iremos ler o contedo dos arquivos. Muitas vezes iremos deparar comdados que esto distribudos em vrios arquivos. Podemos simplesmente dar um load seguidodo nome de cada arquivo, mas devemos convir de que isso seria algo muito trabalhoso em setratando de vrios arquivos.

    Assim no exemplo abaixo criamos um string com o nome de cada arquivo e atravsde um loop carregamos cada um individualmente. Assim fazemos um loop (atravs docomando for) variando de 35 (nome do primeiro arquivi) a 41 (nome do ltimo arquivo).Criamos a varivel nome1 que vai ser igual a w2cpz035.pro quando j=35, w2cpz036.proquando j=36 e assim sucessivamente. Percebe-se que usamos o comando num2str paratransformar j (um nmero) 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

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    24/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Agora usamos o comando load, do arquivo descrito na varivel nome1, para criar avarivel entrada. A varivel entradapossui em sua primeira linha informaes sobre a posioda estao e a partir da segunda linha as informaes de temperatura, salinidade e presso acada metro. Esta varivel vai possui diferentes valores para cada passo do loop.

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

    A seguir criaremos a varivel temperatura, presso e salinidade, usando os dados davarivel entrada entre a linha 2 e a linha 1502 de dez em dez. Isto significa que usamos osvalores da profundidade 0 a 1500 m a cada dez metros. Cada coluna das variveistemperatura, presso e salinidade vai possuir as informaes relativas a uma estao. Nopasso j=35 (estao 35) as informaes so guardadas na coluna 1, pois j-34 igual a 1. Nopasso j=36 na coluna 2 (j-34=2) e assim sucessivamente at chegarmos coluna 7 (j-34=7)onde estaro guardadas as informaes da estao 41.

    >>temperatura(:,(j-34)) = entrada(2:10:1502,3); %estamos criando uma matriz de temperaturasendo que cada arquivo de entrada esta guardado em uma coluna

    >>salinidade(:,(j-34)) = entrada(2:10:1502,5);%estamos criando uma matriz de salinida sendoque cada arquivo de entrada esta guardado em uma coluna

    >>pressao(:,(j-34)) = entrada(2:10:1502,2);%estamos criando uma matriz de presso sendoque cada arquivo de entrada esta guardado em uma coluna

    As informaes de latitude e longitude (posio) de cada estao sero guardadas nasvariveis lat e lon. A seguir limpamos a varivel 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 varivel entrada

    >>end %final do loop

    Para criar uma seco vertical precisamos de uma profundidade e uma distanciahorizontal. A profundidade vai ser igual a um vetor de 0 a 1500 espaados de dez em dez. E a

    distancia horizontal vai ser dada pela posio das estaes. Assim partindo da estao 35(nossa primeira estao), temos que saber a distancia cumulativa at a cada uma estao.

    Para tanto convertemos os valores de latitude e longitude de dois pontos em distanciaem quilmetros, atravs do comando sw_dist. O comando sw_dist nos d a distancia entredois pontos de latitude e longitude. A seguir usamos o comando cumsum para saber adistncia acumulada em relao 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 estaoes e

    guardando na variavel distancia>>distancia = cumsum(distancia)); %calculando a distancia acumulada entre cada estaao einvertendo os valores

    por Carlos Teixeira 24/24

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    25/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Agora vamos criar os grficos com as seces. Para tanto abrimos uma nova figuracom o comando figure e fazemos um contorno (comando contourf) de padres dos dados detemperatura ao longo de uma profundidade e de uma distncia. Escolhemos como intervalo deploategem 2 a 30 C com um espaamento de 0.5. O comando colormap serve para escolher

    e alterar o mapa de cores usado na plotagem. Existe uma srie de outros mapas de cores pr-definidos, para uma listagem do mesmo use help graph3d. A barra de valores foi criada com ocomando colorbar e a seguir rotulamos as linhas de plotagem (comando clabel) entre 0 etrinta com um espaamento de 2 graus. Finalmente se acrescentam os rtulos dos eixos e umttulo ao grfico.

    >>figure(1); %criando nova figura

    >>c=contourf(distancia,-prof,temperatura,2:0.5:30); %fazendo um contorno de padres dovaloes 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('Distncia em km'); %colocando rotulo no eixo x

    >>ylabel('Profundidade em m');%colocando rotulo no eixo y

    >>title('Secao da Temperatura Zonal'); %colocando titulo no grfico

    O mesmo procedimento usado s que agora para criar uma seco 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('Distncia em km');%colocando rotulo no eixo x

    >>ylabel('Profundidade em m');%colocando rotulo no eixo y

    >>title('Secao da Salinidade Zonal');%colocando titulo no grfico

    Criando mapas e plotando informaes espaciais:

    Esta seco ensina a criar mapas e plotar informaes nestes mapas. Para tantovamos usar o pacote m_map. Este pacote de rotinas permite criar mapas em dezoito tipos deprojeo, plotar a linha de costa e a batimetria local. Exemplos do tipo de utilizao do pacotepodem ser encontrados em http://www2.ocgy.ubc.ca/~rich/#M_Map. O pacote vem com dadosde baixa resoluo tanto para batimetria como para linha de costa, porm outros arquivos dedados podem ser inseridos melhorando a resoluo dos dados.

    Abaixo criaremos um mapa da costa brasileira, com alguns contornos batimtricos.Sero usados os dados default de linha de costa e batimetria.

    por Carlos Teixeira 25/25

    http://www2.ocgy.ubc.ca/~rich/#M_Maphttp://www2.ocgy.ubc.ca/~rich/#M_Map
  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    26/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Aps abrirmos uma nova figura, definimos o tipo de projeo (no caso mercator) e oslimites de latitude e longitude. Para isso usamos o comando m_proj. Utilize o comandom_proj('get') para ter uma lista das projees disponveis. A seguir usamos o comandom_cost para criar a linha de costa. O atributo patch controla a cor do preenchimento docontinente, no caso o valor[.7 .7 .7] resulta em uma cor cinza. J o atributo edgecolor controlaa cor da linha de costa, no caso escolhemos a cor azul. O comando m_grid cria as linhas degrade do mapa.

    >>figure(1)%abrindo uma nova figura

    >>m_proj( 'mercator','lon', [-58 -30],'lat',[-42 -5]) %definindo a projeo e oslimites 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 batimtricos com o comando m_elev, com o atributocontour (que produz linhas) e a lista das profundidades que queremos plotar, no caso 100,200, 500, 1000 e 3000 m. As informaes do comando m_elev so guardadas nas variveis ae bque sero usadas no comando clabel para criar os rtulos das linhas plotadas. Inserimos otitulo do grfico normalmente com o comando title. Percebe-se, que nos dois ltimoscomandos, escolhemos o tamanho da fonte diretamente atravs do atributo fontsize.

    >> [a,b]=m_elev('contour',[-100 -200 -500 -1000 -3000],'b');%fazendo os contornos debatimetria

    >>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 posiodefinida por uma longitude e uma latitude. No string criado, usamos um \bf (bold face) e \otimeantes do texto com o nome das localidades. Estes dois comentrios criam a fonte em negrito eum smbolo circular, respectivamente. So comandos usados na linguagem Ltex, a qual normalmente interpretada pelo Matlab. Alm do string entramos com o atributo fontsize paradefinir o tamanho da fonte e com o atributo HorizontalAlignment para definir o alinhamentohorizontal (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'); %colocandotexto 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'); %colocandotexto no mapa

    >>m_text(-39, -14, '\bf \otimes Camamu','fontsize',8,'HorizontalAlignment', 'left'); %colocandotexto no mapa

    por Carlos Teixeira 26/26

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    27/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    No exemplo a seguir vamos ler, analisar e plotar dados de temperatura da superfciedo mar (TSM) para Sudoeste do Atlntico. Estes dados so provenientes do sitehttp://podaac.jpl.nasa.gov/ que disponibiliza uma srie de produtos de satlite. Os arquivosoriginais so imagens dirias de TSM, do tipo Pathfinder como uma resoluo espacial de 9Km x 9 Km. Estes arquivos esto no formato hdf e so referentes aos primeiros sete dias doano de 1991.

    Uma outra forma de ler vrios arquivos no Matlab sem ter que digitar o nome de cadaum deles usar a estrutura criada pelo comando dir. O comando dir resulta uma varivel naforma de estrutura que contm o nome, data de modificao e tamanho do arquivo. Para tantotemos de informar o diretrio e parte do nome dos arquivos que estamos procurando atravsde um string. Assim primeiramente criamos a varivel dir_label com o string e a seguirusamos o comando dir. O comando vai retornar as caractersticas de todos os arquivoscontidos no diretrio D:\users\teixeira\pessoal\curso_matlab\ que comeam com 19910 eterminam com .hdf. A seguir definimos quantos arquivos existem no diretrio atravs docomando length e guardamos este nmero na varivel n_image. O comando length nosretorna o comprimento de em vetor.

    >>dir_label='D:\users\teixeira\pessoal\curso_matlab\19910*.hdf'; % criando string com odiretorio 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 olao

    Agora criamos um lao para ler todos os arquivos do diretrio. Agora carregamos osdados atravs do comando imread, seguido do nome do arquivo (que retornado atravs docomando getfield da varivel 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 doformato uint8 para o formato double. Esta linha de comando faz diversas operaes de umas vez. Recuperamos o nome dos arquivos, carregamos o mesmo e mudamos o seu formato.Poderamos fazer cada uma destas operaes separadamente, mas isto levaria mais tempo econsumiria mais memria fsica. Assim sempre que possvel devemos tentar juntar diversoscomandos em apenas uma linha de comando.

    Neste exemplo criamos uma matriz tri-dimensional, onde as duas primeiras dimensescorrespondem ao espao e a terceira dimenso corresponde ao tempo. Cada ido nosso loopcorresponde a um dos sete dias de imagens. Assim nossa matriz data1 vai ter um formato 273x 273 x 7, ou seja, 273 informaes de TSM na horizontal (longitude), 273 na vertical (latitude)e 7 na terceira dimenso (tempo ou dias). Devemos pensar nesta matriz como sete mapasempilhados onde cada nvel corresponde a um dia.

    Aps a leitura dos dados mostramos o valor da varivel i, isto uma estratgia parasaber em que passo do loop estamos. O loop fechado com o comando end.

    >>for i=1:n_image %fazendo um lao da se ler da primeira a ultima imagem

    >>data1(:,:,i) = double(imread(getfield(file_names(i),'name'),'hdf')); %criando arquivo com osdados de TSM

    >>i %indice para saber qual imagem esta sendo lida.

    >>end; %final do lao

    por Carlos Teixeira 27/27

    http://podaac.jpl.nasa.gov/http://podaac.jpl.nasa.gov/
  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    28/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    O maior problema quando estamos trabalhando com imagens de TSM provenientes desatlite a cobertura de nuvens. O sensor no consegue ler atravs das nuvens e gera gapsnas mesmas. Estes gaps recebem uma mascara (um valor) pelo algoritmo de processamentodas imagens. No nosso caso esta mascara possui o valor zero e devemos substituir este valorpor um nan. Para isto primeiro devemos identificar a posio de cada um dos valores igual azero e depois fazer a substituio. A identificao feita atravs do comando find e a posiode cada valor zero esta guardada na varivel izer. A seguir substitumos todos os zeros pornan.

    >>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 no vem em graus Celsius, mas sim numa escalade cores que varia entre 1 e 256. Atravs da equao abaixo transformamos estes dados emTSM.

    >>data1=0.15*data1-3.0; %Converter temperatura p/ graus Celsius

    Atravs do comando smartmean conseguimos calcular a mdia (x_bar), o desviopadro (st_dev) e o nmero de dados validos (n_data) usados na operao (no nans) de umamatriz tri dimensional. Para tanto devemos entrar com o nome da matriz e a dimenso sobre aqual queremos realizar a operao, no nosso caso a terceira dimenso ou tempo. O comandosmartmean no pertence ao Matlab ele foi criado por um oceangrafo brasileiro e serdistribudo aos participantes do curso.

    >>[x_bar, st_dev, n_data]=smartmean(data1,3); %achando mdia, desvio e numero de dadosdas imagens

    Para plotarmos as informaes acima num mapa, precisamos ter uma matriz com asposies (latitude e longitude) de cada um dos pixeis. Os passos para a criao dos vetores delatitude e longitude, envolvem operaes simples descritas no manual das imagens e no seaplicam ao escopo do curso. Estas operaes esto descritas abaixo:

    >>y1=-18.0615781; %definindo a posio vertical (latitude) do primeiro pixel

    >>x1=-61.918890624; %definindo a posio 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

    Atravs do comando meshgrid criamos matrizes de latitude e longitude a partir dosvetores longitudee latitude

    >>[mlon,mlat]=meshgrid(longitude,latitude); %criando matriz de latitude e longitude

    por Carlos Teixeira 28/28

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    29/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Agora que temos a media, o desvio, o nmero de dados validos e as posies vamosplotar estas informaes num mapa. O primeiro passo definir o tipo de projeo quequeremos e os limites do mapa atravs do comando m_proj. No precisamos repetir estecomando para cada mapa, pois esta projeo e estes limites ficam ativos at que o Matlab seja

    reiniciado ou uma nova projeo e/ou novos limites definidos.

    >>m_proj('mercator','longitudes',[-62 -38],'latitudes',[-42 -18]);%definindo projeo e limites domapa

    Inicialmente abrimos uma nova figura e plotamos a linha de costa atravs do comandom_gshhs_h. Este comando plota as linhas de costa contidas no banco de dados Global Self-consistant Hierarchical High-resolution. Este banco de dados no vem com o pacote m_map edeve ser baixado e instalado conforme instrues contidas na pgina do pacote m_map. Nocomando 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 decosta com uma resoluo de cinco minutos

    Atravs do comando m_pcolor plotamos a mdia da TSM em funo da longitude eda latitude.

    >>m_pcolor(mlon,mlat,x_bar); %plotando as mdias de TSM em funo da latitude e longitude

    Agora vamos plotar os contornos batimetricos de 200 e 1000 metros. Para isso iremosusar o comando m_tbase que usa o banco de dados de batimetria TerrainBase que possuiuma resoluo de 5 minutos. Este banco de dados tambm no vem com o pacote m_map edeve ser baixado e instalado conforme instrues contidas na pgina do pacote do prpriom_map. Agora inserimos um titulo atravs do comando title no grfico e criamos o grid domapa atravs do comando m_grid.

    >>m_tbase('contour',[-200 -1000],'edgecolor','k'); %plotando as linhas batimetricas de 200 e1000 metros com resoluo de 5 minutos

    >>title('Media'); %titulo do grafico

    >>m_grid %colocando o grid

    O comando m_pcolor plota os dados usando como limite seus mximos e mnimos,porm muitas vezes queremos ressaltar certas feies ou definir outros limites de plotagem.Para isso usamos o comando caxis e como atributo os limites que desejamos(no nosso caso 5e 30 graus). Finalmente inserimos uma barra de valores lateral atravs do comando colorbar .

    >>caxis([5,30]) %definindo os limites dos valores plotados

    >>colorbar %colocando barra lateral

    por Carlos Teixeira 29/29

  • 8/3/2019 Cur So Matlab by Carlos Teixeira

    30/30

    Curso de Matlab e suas Aplicaes em Oceanografia

    Bibliografia:

    Curso Rpido 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 - Laboratrio de Computao daEngenharia Eltrica UFES.

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

    http://orion.io.usp.br/cursomat/http://woodshole.er.usgs.gov/operations/sea-mat/http://www.mathworks.com/http://www.mathworks.com/http://woodshole.er.usgs.gov/operations/sea-mat/http://orion.io.usp.br/cursomat/