Você está na página 1de 16

Universidade de So Paulo Instituto de Astronomia, Geofsica e Cincias Atmosfricas Departamento de Cincias Atmosfricas

Matlab: Matrizes Multidimensionais e Dados do NETCDF

Elaborado por: Michelle S. Reboita 10 de julho de 2005

Introduo
Este manual foi desenvolvido para auxiliar os usurios do Matlab a lidar com os dados no formato NETCDF. O mesmo encontra-se em fase inicial, mas j possui um bom material que inclui desde o procedimento de instalao dos toolboxes necessrios para o trabalho com dados NETCDF, bem como exemplos de como carregar este tipo de dado e a construo de mapas. O manual est dividido em trs partes: a primeira mostra onde obter e como instalar os toolboxes necessrios para trabalhar com os dados NETCDF, a segunda traz uma explicao de como so representadas as matrizes multidimensionais no Matlab e a terceira apresenta os procedimentos necessrios para carregar os dados NETCDF e para a elaborao de mapas. Aos usurios desta apostila pede-se que sejam dados os crditos a Michelle S. Reboita. Tambm solicita-se sugestes para o melhoramento da mesma que podem ser enviadas para reboita@model.iag.usp.br.

Sumrio
1 Abrindo os dados NETCF no Matlab......................................................................3 1.1 2 Instalao...............................................................................................................3

Matrizes Multidimensionais no Matlab.................................................................4 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 Construo de Uma Matriz Multidimensional................................................4 Dimenses da Matriz...........................................................................................5 Usando as Funes: zeros, ones .........................................................................5 Funo squeeze.....................................................................................................5 Funo permute....................................................................................................6 Mdias: mean ou nanmean.................................................................................7 Funo contour .....................................................................................................8 Figuras Diferentes na Mesma Escala de Cor..................................................10 Grficos de Campo Vetorial .............................................................................11 Salvando Figuras na Linha de Comando .......................................................13

Carregando Dados NETCDF...................................................................................14 3.1 3.2 Carregando o Arquivo ......................................................................................14 Construindo Mapas ...........................................................................................15 Elaborado por: Michelle S. Reboita 10/07/2005

1 1.1

Abrindo os dados NETCF no Matlab Instalao

a. Obter os pacotes mexcdf53_pcwin, netcdf_install e matlab_netcdf_5_0. Os dois primeiros so obtidos em: http://woodshole.er.usgs.gov/staffpages/cdenham/public_html/MexCDF/nc4ml5.html e o terceiro em: http://www.marine.csiro.au/sw/matlab-netcdf.html b. Coloc-los dentro do toolbox do Matlab. c. Criar trs pastas denominadas: mexcdf53_pcwin, netcdf e matlab_netcdf_5_0 no toolbox do Matlab e coloc-las no Path. d. Verificar se o diretrio atual o toolbox. e. Executar na janela de comandos mexcdf53_pcwin_install e seguir as instrues que aparecem na tela. f. Executar na janela de comandos netcdf_install e seguir as instrues que aparecem na tela, que incluem colocar no path o diretrio netcdf. g. Certificar-se que o path conhece o mexcdf53 h. Reiniciar o Matlab i. Executar: rehash toolboxcache e tnetcdf O tnetcdf abre uma interface grfica. j. Reiniciar o matlab k. Executar matlab_netcdf_5_0 Obs: Caso este pacote no se instale automaticamente ir em: http://www.nersc.no/~even/matlab/toolbox/matlab_netcdf_5_0/ e copiar os programas para dentro da pasta matlab_netcdf_5_0 no toolbox. Com isso voc est apto a abrir arquivos .nc no Matlab.

Elaborado por: Michelle S. Reboita 10/07/2005

4 2 Matrizes Multidimensionais no Matlab

No help do Matlab h explicaes sobre este tpico. O caminho Programming Data Structure Multidimensional Arrays. O Matlab entende as matrizes multidimensionais como var(linhas, colunas, dimenso, dimenso, ...)

2.1

Construo de Uma Matriz Multidimensional

a=[5 7 8; 0 1 9;4 3 6]; a(:,:,2)=[1 4 0; 3 5 6; 9 8 7]; a(:,:,1) = 5 0 4 7 1 3 8 9 6 a(:,:,2) = 1 3 9 4 5 8 0 6 7

Elaborado por: Michelle S. Reboita 10/07/2005

5 2.2 Dimenses da Matriz Para obter-se as dimenses da matriz a utiliza-se: size(a) ans = 3 2.3 3 2

Usando as Funes: zeros, ones

b=zeros(4,3,2) b(:,:,1) = 0 0 0 0 0 0 0 0 0 0 0 0 b(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0

d=ones(4,3,2) d(:,:,1) = 1 1 1 1 1 1 1 1 d(:,:,2) = 1 1 1 1 1 1 1 1

1 1 1 1

1 1 1 1

2.4

Funo squeeze A funo squeeze usada para remover dimenses da matriz.

y(:,:,1) = 0.5194 0.831

y(:,:,2) = 0.0346 0.0535

y(:,:,3) = 0.5297 0.9711

Elaborado por: Michelle S. Reboita 10/07/2005

6 Z = squeeze(y) Z= 0.5194 0.831 size(Z) ans = 2 2.5 3 Funo permute A funo permute troca a ordem das dimenses da matriz. a(:,:,1,1) = 1 1 1 1 2 2 2 2 3 3 3 3 a(:,:,1,2) = 3 1 3 1 3 1 3 1 3 1 3 1 0.0346 0.0535 0.5297 0.9711

size(a) ans = 4 3 1 2

b=permute(var,[dimenso]) b=permute(a,[2 4 3 1]) [2 4 3 1] = Neste exemplo, a segunda dimenso passa a ser a primeira, a quarta passa a ser a segunda, a terceira no modifica-se e a primeira passa a ser a quarta.

Elaborado por: Michelle S. Reboita 10/07/2005

7 b(:,:,1,1) = 1 2 3 3 3 3 3 1 1 2 3 1 1 1

b(:,:,1,3) = 1 2 3 3 3 3

b(:,:,1,2) = 1 2 size(b) ans = 3 4 1 1

b(:,:,1,4) =

2.6

Mdias: mean ou nanmean

nanmean usada quando h NAN Elaborado por: Michelle S. Reboita 10/07/2005

8 aa(:,:,1) = 3 6 3 2 1 5 NaN 4 5 aa(:,:,2) = 3 4 1 6 4 5 NaN 1 1 aa(:,:,3) = NaN 2 1 3 2 2 1 1 1

aa2=nanmean(var,dimenso) aa2=nanmean(aa,3) aa2 = 3 3.3333 4.3333 4 1.6667 2 2 2 2.3333

Especificando o tempo desejado aa2=nanmean(aa(:,:,1:2),3) aa2 = 3 5 2 2.7 4 5 2.5 2.5 NaN 3

Funo contour

Para plotar todas as linhas e colunas do tempo trs da matriz aa:


3

contourf(aa(:,:,3)) Observa-se que no tempo trs no havia um dado, sendo o mesmo representado por NaN. Mas o contour consegue plotar mesmo com a presena do NAN. Para colocar o valor nas linhas de contorno fazer: [c,h]=contourf(aa(:,:,3)); h=clabel(c,h); set(h,'BackgroundColor',[1 1 .6])

2.8 2.6 2.4 2.2 2 1.8 1.6 1.4 1.2 1

1.2

1.4

1.6

1.8

2.2

2.4

2.6

2.8

Elaborado por: Michelle S. Reboita 10/07/2005

9
3
1. 2

2.8 2.6
2

1. 2
1.4

1.2 1.4 1.4 1.6 1.8

1.6 1. 8
2.2

2.4 2.2 2 .6
2.4 2

1.6
1. 8

2 1 2.62.8 2.4 2. 6 2.2 11 ..4 2 1.8 1. 8 1.6 1.4 1.2 1


1. 26 11. .2 4

2.2

2 8 1. 2 6 1. 4 1. 2 1.

1. 8

1.2

1.4

1.6

1.8

2.2

2.4

2.6

2.8

Para no aparecer a caixinha amarela em volta dos valores no usar: set(h,'BackgroundColor',[1 1 .6]) Para aumentar a fonte dos valores, mudar a cor e a orientao dos mesmos: clabel(c,h, 'FontSize', tamanho, 'color', 'cor', 'Rotation', rotao) As cores podem ser: b blue g green r red c cyan m magenta y yellow k black A rotao pode ser 0 (zero) que indica nenhuma rotao. Outro exemplo: [x,y] = meshgrid(-1:.01:1); z = x.*exp(-x.^2-y.^2);; [c,h]=contour(x,y,z); Elaborado por: Michelle S. Reboita 10/07/2005

10 h = clabel(c,h); set(h,'BackgroundColor',[1 1 .6]) 2.8 Figuras Diferentes na Mesma Escala de Cor

Para deixar diferentes figuras na mesma escala de cor: a) encontrar o menor e o maior valor dos diferentes conjuntos de dados. Para tanto usa-se: valormnimo = min(varivel) valormximo = max(varivel). b) antes do comando plote usar: caxis([valormnimo valormximo])
Figura 1

Exemplo 1. Criando o conjunto de dados a(:,:,1) = [3 2 3 1 2 5]; a(:,:,2) = [6 7 9 5 4 3]; 2. Plotando a figura

2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1 1.5 2.5 3.5

1.2

1.4

1.6

1.8

2.2

2.4

2.6

2.8

Figura 2 2

contourf(a(:,:,1)) title('Figura 1') colormap(gray) colorbar figure contourf(a(:,:,2)) title('Figura 2') colormap(gray) colorbar

1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1

7.5 7 6.5 6 5.5 5 4.5 4 3.5 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3

3. Verificar os valores mnimos e mximos de cada figura min(min(a(:,:,1))) ans = 1 min(min(a(:,:,2))) ans = 3 max(max(a(:,:,1))) Elaborado por: Michelle S. Reboita 10/07/2005

11 ans = 5 max(max(a(:,:,2))) ans = 9 Ento para cada figura deve-se fazer: caxis[(min max]) colorbar %Figura 1 caxis[min max] colorbar %Figura 2 caxis([0 10]) colorbar
Figura 1 2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1 9 8 7 6 5 4 3 2 1 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1 9 8 7 6 5 4 3 2 1 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 Figura 2

2.9

Grficos de Campo Vetorial % Constri a grade % Componente zonal % Componente meridional

[x,y]= meshgrid(-5:1:5) u=2*(x.^2)+2*x-4*y v=-2*x.*y-2.*y quiver(x,y,u,v) figure [li, ar] = streamslice(x, y, u, v) streamline([li ar])

% Abre uma nova janela de figura % Faz linhas de corrente

Elaborado por: Michelle S. Reboita 10/07/2005

12 Obs: se no grfico das linhas de corrente no aparecer os eixos da direita e superior da figura ir na barra de menu, clicar em edit axis properties style axis box on.
6

-2

-4

-6 -6

-4

-2

Linhas de Corrente

-1

-2

-3

-4

-5 -5

-4

-3

-2

-1

Elaborado por: Michelle S. Reboita 10/07/2005

13 2.10 Salvando Figuras na Linha de Comando help saveas SAVEAS Save Figure or model to desired output format. SAVEAS(H,'FILENAME') Will save the Figure or model with handle H to file called FILENAME. The format of the file is determined from the extension of FILENAME. SAVEAS(H,'FILENAME','FORMAT') Will save the Figure or model with handle H to file called FILENAME. in the format specified by FORMAT. FORMAT can be the same values as extensions of FILENAME. The FILENAME extension does not have to be the same as FORMAT. Given FORMAT overrides FILENAME extension. Valid options for FORMAT are: 'fig' - save figure to a single binary FIG-file. Reload using OPEN. 'm' - save figure to binary FIG-file, and produce callable M-file for reload. 'mfig' - same as M. 'mmat' - save figure to callable M-file as series of creation commands with param-value pair arguments. Large data is saved to MAT-file. Note: MMAT Does not support some newer graphics features. Use this format only when code inspection is the primary goal. FIG-files support all features, and load more quickly. Allowable options also include devices allowed by PRINT. Examples: Write current figure to MATLAB fig file saveas(gcf, 'output', 'fig') Write current figure to windows bitmap file saveas(gcf, 'output', 'bmp') See Also LOAD, SAVE, OPEN, PRINT

Elaborado por: Michelle S. Reboita 10/07/2005

14 3 Carregando Dados NETCDF

Para o Matlab var(linha, coluna, tempo) Dados abertos pelo pacote netcdf var(tempo, linhas, colunas) sendo que considera as linhas como as latitudes e as colunas como as longitudes. 3.1 Carregando o Arquivo

t=getnc('nome do arquivo','nome da varivel'); Exemplo: t=getnc('WHOI.lhtfl.1997','lhtfl'); necessrio saber previamente o nome da varivel que est contida no arquivo. Esta informao obtida no local de origem dos dados. Os arquivos abertos pelo getnc no incluem os vetores de latitude, longitude e tempo, portanto usamos tambm o ncload. Entretanto, se a funo getnc no funionar usar as funes ncload e o netcdf e a expresso da linha que inicia com a palavra fluxo para carregar os dados. O getnc melhor porque coloca NAN nos valores faltantes. Carregando os arquivos NETCDF com lat, lon, tempo e variveis t1=ncload('WHOI.lhtfl.1997.nc'); Para obter os valores corrigidos da varivel executa-se a linha abaixo, o primeiro argumento o nome do conjunto de dados. nc1=netcdf('WHOI.lhtfl.1997.nc','nowrite') fluxo=nc1{'lhtfl'}(:,365,:,:)*nc1{'lhtfl'}.scale_factor(:)+nc1{'lhtfl'}.add_offset(:) lhtfl o nome da varivel 365 o tempo escolhido se quero todos os tempos : (dois pontos) O netcdf abre os dados como var(tempo, lat, lon), mas para o Matlab devemos ter var(lon, lat, tempo), assim vamos usar a funo permute para deixar os dados na forma que o Elaborado por: Michelle S. Reboita 10/07/2005

15 Matlab entende. Alm disso, vamos colocar a longitude na primeira dimenso (componente i) e a latitude na segunda (componente j). tt2=permute(t,[3 2 1]); 3.2 Construindo Mapas

Para isso necessrio o pacote m_map disponvel em: http://www2.ocgy.ubc.ca/~rich/map.html e os dados de linha costeira do globo disponveis ftp://ftp.ngdc.noaa.goc/MGG/shorelines/ %Definindo a projeo e as dimenses da lon e lat m_proj( 'mercator','lon<gitude>', [259.5 385.5],'lat<itude>',[-64.5 64.5]) %Como o vetor de longitude variava de -180 a 180 somei 360 para variar de 0 a 360, que a forma utilizada pelo m_proj lon2=lon+360; %Plota o mapa m_contourf(lon2,lat,tt2(:,:,1)') %Plota a linha de costa m_coast('patch',[.7 .7 .7],'edgecolor','none'); %Neste caso o continente preenchido pela cor cinza. Para sair apenas a linha de costa: m_coast(line) %Plota as linhas de grade m_grid('box','fancy','tickdir','out') colorbar %Exemplo de um mapa para o Atlntico Sul m_proj( 'mercator','lon<gitude>', [279.5 375.5],'lat<itude>',[-60.5 0.5]) lon2=lon+360; lon2=lon2(21:117); lat2=lat(5:66); m_contourf(lon2,lat2,tt3(:,:,1)') m_coast('patch',[.7 .7 .7],'edgecolor','none'); m_grid('box','fancy','tickdir','out') colorbar Elaborado por: Michelle S. Reboita 10/07/2005

16

Fluxos t=1

-50 50oN -100 25oN -150 -200 0


o

-250 25oS -300 -350 -400 85oW


0o

50oS

60oW

35oW

10oW

15oE

12oS

-50

24oS

Tempo = 1 Atlntico Sul

-100

36oS -150

48oS

-200

-250 60 S 80oW
o

60oW

40oW

20oW

0o

Elaborado por: Michelle S. Reboita 10/07/2005