1 / 34

Introdução ao MATLAB para Hidrólogos

Introdução ao MATLAB para Hidrólogos. Computação Interativa. Porto Alegre, outubro de 2005. Programação. On-line help e Funções do MATLAB Como Carregar Dados Importar Arquivos de Dados Matrizes e Vetores Entrada, Indexação, Manipulação, Criação de Vetores Operações de Matrizes

leroy
Download Presentation

Introdução ao MATLAB para Hidrólogos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução ao MATLABpara Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

  2. Programação • On-line help e Funções do MATLAB • Como Carregar Dados • Importar Arquivos de Dados • Matrizes e Vetores • Entrada, Indexação, Manipulação, Criação de Vetores • Operações de Matrizes • Aritméticas, Relacionais, Lógicas, Funções, Caracteres • Funções Inline • Como Plotar Gráficos Simples • Como Salvar Dados

  3. help >> help cumsum CUMSUM Cumulative sum of elements. For vectors, CUMSUM(X) is a vector containing the cumulative sum of the elements of X. For matrices, CUMSUM(X) is a matrix the same size as X containing the cumulative sums over each column. For N-D arrays, CUMSUM(X) operates along the first non-singleton dimension. CUMSUM(X,DIM) works along the dimension DIM. Example: If X = [0 1 2 3 4 5] then cumsum(X,1) is [0 1 2 3 5 7] and cumsum(X,2) is [0 1 3 3 7 12] See also cumprod, sum, prod. Overloaded functions or methods (ones with the same name in other directories) help fints/cumsum.m Reference page in Help browser doc cumsum On-line Help e Funções do MATLAB

  4. helpwin helpdesk lookfor >> helpwin >> helpdesk >> lookfor 'boxcox' BOXCOX transforms non-normally distributed data to normally distributed data. MV_BOXCOX box-cox transformation gui boxcox.m: %@FINTS/BOXCOX transforms non-normally distributed FINTS object to a normal one. On-line Help e Funções do MATLAB

  5. Importando dados (ver “fileformats”, “iofun”) >> load data >> A A = 9 6 3 8 5 2 7 4 1 >> A = importdata('dados.xls') A = Plan1: [3x3 double] >> A.Plan1 ans = 2 8 1 4 7 6 5 9 3 >> B = xlsread('dados.xls') B = 2 8 1 4 7 6 5 9 3 Como Carregar Dados

  6. Exercício Carregar dados de vazão do arquivo ‘Tres_Marias.xls’ usando TM = ‘importdata’ e Q = ‘xlsread’ Como Carregar Dados

  7. Exercício >> TM = xlsread('Tres_Marias.xls'); >> Q = importdata('Tres_Marias.xls') Q = data: [1x1 struct] textdata: [1x1 struct] rowheaders: [1x1 struct] Como Carregar Dados

  8. Entrada Usando funções prontas; Matrizes e Vetores >> A = logspace(0,5,6) A = 1 10 100 1000 10000 100000 >> A = randn(3) A = -0.0956 -1.3362 -0.6918 -0.8323 0.7143 0.8580 0.2944 1.6236 1.2540

  9. Entrada Digitando diretamente; “...” continua na linha seguinte “[]” matriz nula >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A = [9 8 7 6 5 4 3 2 1] A = 9 8 7 6 5 4 3 2 1 >> A = [1 2 3; 4 5 ... 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A = [] A = [] Matrizes e Vetores

  10. Matrizes e Vetores • Exercício • Criar matriz chuva com os dados: • Criar matriz (q) de vazão com 366 valores, através de função pronta (randn). • Dica: Usar B = exp(6.3+0.8*randn)

  11. Indexação Referenciando por: Matriz(linha,coluna) Matriz(nº do elemento) Matrizes e Vetores >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A(6) ans = 8 >> A(2,2) ans = 5 >> A(2,2) = 1 A = 1 2 3 4 1 6 7 8 9

  12. Indexação Referenciando por: Matriz(sub-matriz) Determinação automática de dimensões; >> B = A(2:3,:) B = 4 1 6 7 8 9 >> B(:,3)=[] B = 4 1 7 8 >> C (2,3) = 4 C = 0 0 0 0 0 4 >> D (2, 1:2) = 8 D = 0 0 8 8 Matrizes e Vetores

  13. Exercício Descobrir a vazão e a que dia pertencem a posição 60 Qual o último dia da série? E o primeiro? Rearrumar matriz P pelo método dos blocos alternados Matrizes e Vetores

  14. Exercício Descobrir a vazão e a que dia pertencem a posição 60 Qual o último dia da série? E o primeiro? Matrizes e Vetores >> TM(60) ans = 730.8000 >> Q.data ans = Sheet1: [7670x1 double] >> Q.data.Sheet1(60) ans = 730.8000 >> Q.textdata.Sheet1(60) ans = '1/3/1977‘ >> Q.textdata.Sheet1(end) ans = '31/12/1997' >> Q.textdata.Sheet1(1) ans = '1/1/1977'

  15. Manipulação de Matrizes Indexação Reforma (vetor matriz) Matrizes e Vetores >> A = [1 2 3; 4 5 6; 7 8 9]; >> v = [1 3]; >> B = A(v,:) B = 1 2 3 7 8 9 >> x = B(:) x = 1 7 2 8 3 9 >> C = reshape(x,3,2) C = 1 8 7 3 2 9

  16. Manipulação de Matrizes Transposição Inicialização Anexação e Retirada (vetor ou escalar) >> C = C' C = 1 7 2 8 3 9 >> x = transp(C(:,2)) x = 7 3 >> C = sparse(1000000,2) C = All zero sparse: 1000000-by-2 >> v = [8 7 3]; >> B = [A; v] B = 1 2 3 4 5 6 7 8 9 8 7 3 >> B(end,:) = [] B = 1 2 3 4 5 6 7 8 9 Matrizes e Vetores

  17. Manipulação de Matrizes Matrizes “úteis”: ones, zeros, rand, size, length, numel, find, nonzeros, max, min Matrizes e Vetores >> A = ones(2,2) A = 1 1 1 1 >> A = zeros(2,2) A = 0 0 0 0 >> size(B) ans = 3 3 >> length(B) ans = 3 >> numel(B) ans = 9

  18. Manipulação de Matrizes Matrizes “úteis”: ones, zeros, rand, size, length, numel, find, nonzeros, max, min >> A(1,:) = 8; >> [a,b,c]=find(A) a = 1 1 b = 1 2 c = 8 8 >> s = nonzeros (A) s = 8 8 Matrizes e Vetores

  19. Exercício Agregar matriz q ao fim da matriz TM (TMq) Determinar posição e valores máximos e mínimos de TM e de TMq Encontre datas correspondentes Refaça os procedimentos apenas para o período a década de 80 Matrizes e Vetores

  20. Criação de Vetores v = valor inicial : incremento : valor final >> s = 0:numel(B)/4:numel(B) s = Columns 1 through 3 0 2.25 4.5 Columns 4 through 5 6.75 9 >> a = [11:13; 3:1] a = 11 12 13 >> a = [11:13; 3:-1:1] a = 11 12 13 3 2 1 Matrizes e Vetores

  21. Exercício Refazer método dos blocos alternados usando criação de matrizes Dica: Usar um vetor de posições Matrizes e Vetores

  22. Exercício >> pos = [((length(P)-1):-2:1) (2:2:length(P))] pos = 9 7 5 3 1 2 4 6 8 10 >> p=P(pos) p = 1.0500 1.2200 1.4700 1.9000 2.8500 2.2600 1.6500 1.3300 1.1300 0.9800 Matrizes e Vetores

  23. Aritméticas (+,-,*,/,\,^,.) Operações de Matrizes >> A = [8 1 6; 3 5 7; 4 9 2]; >> B = [2 5 3; 7 9 1; 8 4 6]; >> A*B ans = 71 73 61 97 88 56 87 109 33 >> A\B ans = -0.2056 -0.3083 0.6806 0.8778 0.3167 0.4722 0.4611 1.1917 -0.4861 >> A.^B ans = 64 1 216 2187 1953125 7 65536 6561 64

  24. Relacionais (<,>,<=,>=,==,~=) Lógicas (&, |, ~, xor) Funções matemáticas (sin,csch, exp, log, log10, abs) Funções matriciais(sqrtm,expm) >> A<=B ans = 0 1 0 1 1 0 1 0 1 >> ~(A>B) ans = 0 1 0 1 1 0 1 0 1 >> exp(A) ans = 1.0e+003 * 2.9810 0.0027 0.4034 0.0201 0.1484 1.0966 0.0546 8.1031 0.0074 >> expm(A) ans = 1.0e+006 * 1.0898 1.0896 1.0897 1.0896 1.0897 1.0897 1.0896 1.0897 1.0897 Operações de Matrizes

  25. Variáveis de caracteres Funções “úteis” (any, all, rem, ceil, floor, disp, error, findstr, strcat, strcmp, datestr) >> nome = 'Curso' nome = Curso >> nome(3) ans = r >> datestr(60,6) ans = 02/29 >> (A>B)|(rem(A,2)~=0) ans = 1 1 1 1 1 1 0 1 0 Operações de Matrizes

  26. Funções “úteis” (any, all, rem, ceil, floor, disp, error, findstr, strcat, strcmp, datestr) >> a = 'Número de parâmetros de entrada insuficiente'; >> disp(a) Número de parâmetros de entrada insuficiente >> error(a) ??? Número de parâmetros de entrada insuficiente Operações de Matrizes

  27. Exercício Determinar TM90, TM95 Dica: Reordenar vetor de dados Criar outro com mesmo tamanho Calcular permanência Interpolar usando relações aritméticas Operações de Matrizes

  28. Aplica-se a funções simples apenas (usar m-files para funções mais complexas) Exercício Dados: Q = 15 m3/s S = 0,001 m/m n = 0,02 b = 8 m y = ? Dicas: usar Q = AR2/3S1/2 e yk+1 = g(yk) n >> f = inline('a^2+b^3') f = Inline function: f(a,b) = a^2+b^3 >> f(3,2) ans = 17 Funções In-line

  29. 2D(plot, fplot, ezplot, ezpolar, ezcontour, ezcontourf, hist, bar, normplot) 3D(ezplot3, ezsurf, ezsurfc) >> SF = importdata ('Paulo_Afonso-Moxoto_SF.xls') SF = data: [7670x2 double] textdata: {7671x3 cell} >> obs=SF.data(:,1); >> calc=SF.data(:,2); >> subplot(2,2,1),plot(1:length(obs),obs,1:length(calc),calc) >> subplot(2,2,2),scatter(obs,calc) >> subplot(2,2,3),bar([obs(1:365:3650) calc(1:365:3650)]) >> subplot(2,2,4),semilogy(1:length(obs),obs) Como Plotar Gráficos Simples

  30. 2D(plot, fplot, ezplot, ezpolar, ezcontour, ezcontourf, hist, bar, normplot) 3D(ezplot3, ezsurf, ezsurfc) Como Plotar Gráficos Simples >> Z = importdata('MNT.txt'); >> surf (Z, 'FaceColor','interp',... 'EdgeColor','none',... 'FaceLighting','phong')

  31. Arquivos .mat (binário) matlab.mat (default) >> A = reshape(9:-1:1,3,3); >> save data A >> save a.dat A –ascii >> clear A >> A ??? Undefined function or variable 'A'. Como Salvar Dados

  32. Salvar arquivo de dados de Vazão diária Salvar arquivo de precipitação Exercícios

  33. Exercício Reorganizar Q para vetores por dia juliano Plotar a média diária Dica: Usar struct Ver datestr, strcat (29/02), datenum Indexação usando contador Usar “for” Computação Interativa

  34. Exercício Computação Interativa tot = 366; n = length(Q.data.Sheet1); ini = datenum(Q.textdata.Sheet1(1)); cont = 0; for i = 1:tot, Qdi(i).dados = sparse(round(n/365.25),1); end Qdi(60).dados = sparse (floor(round(n/365.25)/4),1); comp1 = datenum(strcat(datestr(1:tot,6),'/00'))'; comp2 = datenum(strcat(datestr((1:n)'+ini-1,6),'/00')); for i = 1:tot, for j = 1:n, if comp1(i) == comp2(j), cont = cont +1; Qdi(i).dados(cont) = Q.data.Sheet1(j); end end cont = 0; end

More Related