34
Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Embed Size (px)

Citation preview

Page 1: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Introdução ao MATLABpara Hidrólogos

Computação Interativa

Porto Alegre, outubro de 2005

Page 2: 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– Aritméticas, Relacionais, Lógicas, Funções,

Caracteres

• Funções Inline• Como Plotar Gráficos Simples• Como Salvar Dados

Page 3: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

On-line Help e Funções do MATLAB

• 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

Page 4: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

On-line Help e Funções do MATLAB

• helpwin• helpdesk• lookfor

>> helpwin>> helpdesk>> lookfor 'boxcox'BOXCOX transforms non-normally distributed data to normally distributed

data. MV_BOXCOX box-cox transformation guiboxcox.m: %@FINTS/BOXCOX transforms non-normally distributed FINTS

object to a normal one.

Page 5: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Carregar Dados

• Importando dados (ver “fileformats”, “iofun”)

>> load data>> AA = 9 6 3 8 5 2 7 4 1

>> A = importdata('dados.xls')A = Plan1: [3x3 double]

>> A.Plan1ans = 2 8 1 4 7 6 5 9 3

>> B = xlsread('dados.xls')B = 2 8 1 4 7 6 5 9 3

Page 6: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Carregar Dados

• Exercício–Carregar dados de vazão do

arquivo ‘Tres_Marias.xls’ usando TM = ‘importdata’ e Q = ‘xlsread’

Page 7: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Carregar Dados

• Exercício

>> TM = xlsread('Tres_Marias.xls');

>> Q = importdata('Tres_Marias.xls')

Q =

data: [1x1 struct] textdata: [1x1 struct] rowheaders: [1x1 struct]

Page 8: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Entrada–Usando

funções prontas;

>> 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

Page 9: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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 76 5 43 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 = []

Page 10: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

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)

98,0

05,1

13,1

22,1

33,1

47,1

65,1

90,1

26,2

85,2

P

Page 11: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Indexação–Referenciando por:

• Matriz(linha,coluna)• Matriz(nº do

elemento)

>> 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) = 1A = 1 2 3 4 1 6 7 8 9

Page 12: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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) = 4C = 0 0 0 0 0 4

>> D (2, 1:2) = 8D = 0 0 8 8

Page 13: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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

Page 14: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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?

>> TM(60)ans = 730.8000

>> Q.dataans = 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'

Page 15: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Manipulação de Matrizes–Indexação–Reforma

(vetor matriz)

>> 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

Page 16: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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

Page 17: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Manipulação de Matrizes–Matrizes “úteis”:

ones, zeros, rand, size, length, numel, find, nonzeros, max, min

>> 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

Page 18: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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 1b = 1 2c = 8 8

>> s = nonzeros (A)s = 8 8

Page 19: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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

Page 20: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Criação de Vetoresv = 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

Page 21: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• Exercício–Refazer método dos blocos

alternados usando criação de matrizes• Dica: Usar um vetor de posições

Page 22: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Matrizes e Vetores

• 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

Page 23: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Operações de Matrizes

• Aritméticas (+,-,*,/,\,^,.)

>> A = [8 1 6; 3 5 7; 4 9 2];

>> B = [2 5 3; 7 9 1; 8 4 6];

>> A*Bans = 71 73 61 97 88 56 87 109 33

>> A\Bans = -0.2056 -0.3083 0.6806 0.8778 0.3167 0.4722 0.4611 1.1917 -0.4861

>> A.^Bans = 64 1 216 2187 1953125 7 65536 6561 64

Page 24: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Operações de Matrizes

• Relacionais (<,>,<=,>=,==,~=)

• Lógicas (&, |, ~, xor)• Funções matemáticas

(sin,csch, exp, log, log10, abs)

• Funções matriciais(sqrtm,expm)

>> A<=Bans = 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

Page 25: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Operações de Matrizes

• 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

Page 26: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Operações de Matrizes

• 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

Page 27: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Operações de Matrizes

• Exercício–Determinar TM90, TM95

• Dica:–Reordenar vetor de dados–Criar outro com mesmo tamanho–Calcular permanência–Interpolar usando relações

aritméticas

Page 28: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Funções In-line• Aplica-se a funções

simples apenas (usar m-files para funções mais complexas)

ExercícioDados:Q = 15 m3/sS = 0,001 m/mn = 0,02b = 8 my = ?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

Page 29: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Plotar Gráficos Simples

• 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)

Page 30: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Plotar Gráficos Simples

• 2D(plot, fplot, ezplot, ezpolar, ezcontour, ezcontourf, hist, bar, normplot)

• 3D(ezplot3, ezsurf, ezsurfc)>> Z = importdata('MNT.txt');>> surf (Z, 'FaceColor','interp',...'EdgeColor','none',...'FaceLighting','phong')

Page 31: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Como Salvar Dados

• 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'.

Page 32: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Exercícios

• Salvar arquivo de dados de Vazão diária

• Salvar arquivo de precipitação

Page 33: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Computação Interativa

• 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”

Page 34: Introdução ao MATLAB para Hidrólogos Computação Interativa Porto Alegre, outubro de 2005

Computação Interativa

• Exercício

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