Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização...

27
Curso de introdução ao MATLAB 1 Curso de introdução ao MATLAB – módulo 1 IST, 9 de Dezembro de 2008 Mário J. Franca [email protected] [email protected] Departamento de Engenharia Civil Tetraplano, Engenharia Lda. FCT - Universidade de Coimbra 1 – INTRODUÇÃO AO AMBIENTE MATLAB 2 – OPERAÇÕES E SINTAXE DE BASE 3 – VECTORES E MATRIZES 4 – GRÁFICOS

Transcript of Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização...

Page 1: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 1

Curso de introdução ao MATLAB – módulo 1

IST, 9 de Dezembro de 2008

Mário J. Franca

[email protected] [email protected]

Departamento de Engenharia Civil Tetraplano, Engenharia Lda.

FCT - Universidade de Coimbra

1 – INTRODUÇÃO AO AMBIENTE MATLAB

2 – OPERAÇÕES E SINTAXE DE BASE

3 – VECTORES E MATRIZES

4 – GRÁFICOS

Page 2: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 2

1 – INTRODUÇÃO AO AMBIENTE MATLAB

MATLAB é um sistema interactivo, baseado na representação matricial, que permite, num ambiente visual amigável, realizar trabalhos de cálculo, resolução numérica, processamento de dados e visualização recorrendo a uma forma de programação fácil. O interface MATLAB é utilizado como ferramenta de cálculo e visualização em trabalhos de investigação e no apoio à resolução de problemas de

engenharia.

Trabalhar com o MATLAB inclui as seguintes componentes:

- interface de trabalho (onde se encontram as janelas de comando, edição,

área de trabalho, análise de programas, etc.);

- biblioteca de funções matemáticas (existe uma vasta biblioteca de funções

matemáticas pré-programadas);

- linguagem MATLAB;

- manipulação de gráficos (2D, 3D, animações, etc.);

- referências externas (interacção com programas em C e Fortran e

transformar scripts MATLAB em ficheiros executáveis).

Ajuda de base disponível:

- livro Getting Started e outra documentação fornecida com a compra (disponível em pdf);

- product help através do menu Help;

- documentação online com MATLAB help – menu Help;

- animações disponíveis sobre as diversas funções do MATLAB – basta

escrever demo na linha de comando do MATLAB;

- comando help seguido da função sobre a qual se tem dúvidas, por exemplo

escrever: help plot;

- fóruns de discussão online da comunidade de utilizadores em

http://www.mathworks.com/

Page 3: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 3

Ambiente de trabalho:

Os menus mudam consoante a ferramenta que se utiliza

Janela de comandos onde se entram os comandos

Directoria corrente

Conteúdo da directoria corrente

Janela de comandos

O MATLAB é um ambiente inicialmente concebido para ser utilizado recorrendo a linhas de comando e mantém esta orientação. Actualmente muitas das funções do MATLAB podem ser acedidas e controladas através de um interface gráfico. Os interfaces gráficos, vulgo janelas, podem ser úteis para principiantes como forma de conhecer as potencialidades do MATLAB ou para tarefas interactivas simples e pontuais. No entanto, a utilização de linhas de comando é mais adequada para operações mais complexas e feitas à medida do utilizador e para a criação de scripts que permitam reproduzir tarefas repetidamente, permitindo ainda mais

criatividade ao utilizador.

Privilegia-se neste curso a utilização do MATLAB com recurso à linha de comando. Os comandos deverão ser inseridos na janela de comandos, após o símbolo “>>”.

Para se executar qualquer comando deve-se utilizar a tecla enter.

Existem diversas toolboxes que se podem adquirir com funções específicas pré-programadas tais como Statistics Toolbox, Signal Processing Toolbox, Neural

Network Toolbox, Partial Differential Equation Toolbox, etc.

Estas folhas contêm informação sobre os comandos de base a utilizar em MATLAB disseminada no texto principal e nos exemplos de código que vão sendo apresentados. Espera que o principiante siga os exemplos que são mostrados

transcrevendo os comandos apresentados e seguindo o seu resultado.

São sugeridos alguns exercícios ao longo do texto.

Page 4: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 4

2 – OPERAÇÕES E SINTAXE DE BASE

Definição de directoria de trabalho:

- Com recurso ao menus File\Set Path.

- Com recurso à janela onde se encontra inscrita a directoria corrente.

- Utilizando a linha de comandos: cd path; cd \ (para aceder ao nível de

directoria inferior)

Funções genéricas:

- quit: permite sair do programa.

- who: identifica as variáveis criadas no ambiente de trabalho.

- whos: identifica as variáveis criadas no ambiente de trabalho e fornece

informação mais detalhada respeitante a estas.

- clear: apaga todas as variáveis no ambiente de trabalho; clear variable

apenas apaga a variável variable.

- close: fecha a figura aberta em primeiro plano; close(h) fecha a janela

identificada como h; close all fecha todas as janelas criadas pelo utilizador.

- help: permite aceder a um texto de ajuda do MATLAB sobre determinado

comando; deverá ser procedido do comando em questão.

Aritmética simples:

>> 5+5

ans =

10

>>

Ficamos com a variável ans armazenada com o valor 10. Esta é uma variável genérica que adquire sempre o valor da última operação desde que a este não

tenha sido atribuída um nome de variável. Podemos atribuir um nome à variável:

Page 5: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 5

>> a = 5 - 5

a =

10

>>

Ficamos agora com a variável “a” armazenada com o valor 10, o que pode ser confirmado com os comandos who ou whos. Se o utilizador não quiser visualizar sempre o resultado da operação que realizou poderá utilizar o símbolo “;” no final

do comando:

>> b = 10 *5;

>>

A variável b foi guardada com o valor 50 apesar de não ter sido visualizada na janela de comando. Este aspecto de sintaxe pode adquirir particular importância quando se efectua cálculo numérico envolva muitos valores, poupando bastante tempo de processador. As variáveis poderão ser acedidas através da janela correspondente ao workspace.

Por fim, quando se efectua uma operação com resultado infinito ou impossível obtém-se os valores Inf e NaN (Not A Number):

>> inexistente = 0/0;

>> infinito = 5/0;

>>

Nota que o valor NaN pode ser enganador. Quando se trabalha com operações de

lógica, duas variáveis com valor NaN são consideradas de valor diferente.

Podemos agora ver todas as variáveis criadas com who ou whos e, por fim, eliminá-

las parcialmente do área de trabalho,

>> clear ans % elimina a variável ans

>> clear a inexistente % elimina as variáveis a e inexistente

>>

Ou todas,

>> clear

Page 6: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 6

>>

Outros exemplos de operações matemáticas:

As funções matemáticas comuns estão todas pré-programadas e têm de ser

fornecida com os respectivos argumentos:

>> s = sin(pi);

>>

Quando atribuímos ao mesmo nome outro valor, a variável anterior é substituída:

>> s=atan(Inf)/pi;

>>

Exemplos de outras operações:

>> exp(i*pi)

ans =

-1.0000 + 0.0000i

>> ans^2

ans =

1.0000 - 0.0000i

>> imag(ans)

ans =

0

>> sqrt(9)

ans =

3

>> 2^3

ans =

8

>> numero_dias_que_ghandi_viveu = floor(now)-datenum(1948,01,30)

numero_dias_que_ghandi_viveu =

Page 7: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 7

22226

>> log(exp(1))

ans =

1

>> log10(exp(1))

ans =

0.4343

>>

Quando se procura ajuda utilizando o comando help surgem uma série de sugestões que poderão ser úteis (See also …):

>> help now

NOW Current date and time as date number.

T = NOW returns the current date and time as a serial date

number.

FLOOR(NOW) is the current date and REM(NOW,1) is the current time.

DATESTR(NOW) is the current date and time as a string.

See also date, datenum, datestr, clock.

Reference page in Help browser

doc now

>> help imag

IMAG Complex imaginary part.

IMAG(X) is the imaginary part of X.

See I or J to enter complex numbers.

Page 8: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 8

See also real, isreal, conj, angle, abs.

Reference page in Help browser

doc imag

Exercícios:

1. Efectuar as seguintes operações matemáticas:

(a) (2.1185)

(b) (0.9201)

(c) Calcular a área de um círculo de diâmetro 6. (28.2743)

(d) (2.0263)

2. Qual o nome das funções pré-programadas que o MATLAB utiliza para:

(a) Calcular a função Bessel do segundo tipo?

(b) Multiplicar dois polinómios?

(c) Representar graficamente um campo de vectores?

(d) Calcular a matriz inversa?

2. Qual o significado das funções pré-programadas: rand; fft: plot e load.

Page 9: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 9

3 – VECTORES E MATRIZES

O MATLAB foi concebido inicialmente para cálculo matricial; a programação em MATLAB deverá tirar partido disso e ser orientada o mais possível para o uso de matrizes.

Construção de vectores e matrizes:

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

A =

1 2 3

4 5 6

7 8 9

>> b = [0 ; 1 ; 0]

b =

0

1

0

>> B = [0 1 0]

B =

0 1 0

O MATLAB trata os vectores como bidimensionais, embora com uma dimensão trivial. Aceita matrizes reais e complexas (no MATLAB, salvo indicação contrária, i

corresponde à unidade imaginária):

>> C=[sqrt(-1) (-2)^3+5i;log(25) sin(2*pi/3)]

C =

0 + 1.0000i -8.0000 + 5.0000i

3.2189 0.8660

Page 10: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 10

>>

Existem comandos que permitem saber as dimensões das matrizes ou vectores:

>> size(A) , size(b) , size(B), size(C)

ans =

3 3

ans =

3 1

ans =

1 3

ans =

2 2

>> ndims(A) , ndims(b) , ndims(B), ndims(C)

ans =

2

ans =

2

ans =

2

ans =

2

As matrizes podem ser construídas a partir da concatenação de outras matrizes ou vectores desde que as suas dimensões sejam compatíveis:

>> [A b]

ans =

1 2 3 0

4 5 6 1

7 8 9 0

Page 11: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 11

>> [A ; b]

??? Error using ==> vertcat

CAT arguments dimensions are not consistent.

>> [A B]

??? Error using ==> horzcat

CAT arguments dimensions are not consistent.

>> D = [ [1 2;3 4] [5;6] ]

D =

1 2 5

3 4 6

>>

É permitida a construção de vectores constituídos por escalares igualmente espaçados com uma sintaxe simples e condensada do seguinte modo utilizando o

operador “ponto e vírgula” (first:step:last):

>> 1:8

ans =

1 2 3 4 5 6 7 8

>> 0:2:10

ans =

0 2 4 6 8 10

>> d = 1:-.5:-1

d =

1.0000 0.5000 0 -0.5000 -1.0000

>>

Manipulação dos valores no interior de vectores e matrizes:

Podemos nos referir aos valores no interior de matrizes ou vectores utilizando a

notação indicial para cada elemento:

Page 12: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 12

>> B(3) % unidimensional

ans =

0

>> A(2,3) % bidimensional

ans =

6

>> b(2) % unidimensional

ans =

1

>> A(1:2,2:3) % submatriz

ans =

2 3

5 6

>> A(2,2:end) % utilizando o operador end

ans =

5 6

>> A(:,2) % utilização do carácter especial “:”

ans =

2

5

8

>> A(3,:)

ans =

7 8 9

>> imag(C(1,2)) % manipulação de elementos de uma matriz

ans =

Page 13: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 13

5

>> real(C(1,2))+imag(C(1,2))

ans =

-3

Um elemento de uma matriz pode ser acedido através de um único índice uma vez que estas são armazenadas em memória linearmente pela primeira dimensão e

subsequentemente pelas outras dimensões:

>> A

A =

1 2 3

4 5 6

7 8 9

>> A(3)

ans =

7

>> A(6)

ans =

8

Outras operações de manipulação das matrizes incluem:

>> R = rand(2,5)

R =

0.1576 0.9572 0.8003 0.4218 0.7922

0.9706 0.4854 0.1419 0.9157 0.9595

>> R(:,4) = [ ] % apaga elementos da matriz

R =

0.1576 0.9572 0.8003 0.7922

0.9706 0.4854 0.1419 0.9595

Page 14: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 14

>> R(2,:) = 111 % expande o escalar 111 na linha 2

R =

0.1576 0.9572 0.8003 0.7922

111.0000 111.0000 111.0000 111.0000

>> R(3,1) = 555 % cria uma nova linha para alocar um novo escalar

R =

0.1576 0.9572 0.8003 0.7922

111.0000 111.0000 111.0000 111.0000

555.0000 0 0 0

>> R' % matriz transposta

ans =

0.1576 111.0000 555.0000

0.9572 111.0000 0

0.8003 111.0000 0

0.7922 111.0000 0

Operações de lógica com vectores e matrizes:

Os operadores de lógica são: ==; <; <=; >; >=; ~=.

>> R>0.8

ans =

0 1 1 0

1 1 1 1

1 0 0 0

>> R(ans)

ans =

111.0000

555.0000

Page 15: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 15

0.9572

111.0000

0.8003

111.0000

111.0000

>> R(R==0)

ans =

0

0

0

>> R([1 1 1])

ans =

Operações com vectores e matrizes:

>> A+A

ans =

2 4 6

8 10 12

14 16 18

>> ans-0.5

ans =

1.5000 3.5000 5.5000

7.5000 9.5000 11.5000

13.5000 15.5000 17.5000

>> 0.1*R

ans =

0.0158 0.0957 0.0800 0.0792

Page 16: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 16

11.1000 11.1000 11.1000 11.1000

55.5000 0 0 0

>> A*B % cálculo matricial impossível por incompatibilidade de dimensões

??? Error using ==> mtimes

Inner matrix dimensions must agree.

>> A*b

ans =

2

5

8

>> A*R(:,2:4)

ans =

222.9572 222.8003 222.7922

558.8287 558.2011 558.1688

894.7002 893.6020 893.5455

>> A^2

ans =

30 36 42

66 81 96

102 126 150

>> cos(A)

ans =

0.5403 -0.4161 -0.9900

-0.6536 0.2837 0.9602

0.7539 -0.1455 -0.9111

O operador “\” permite a resolução de sistemas lineares de equações do seguinte

modo:

Page 17: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 17

>> R(:,1:3)\b

ans =

0

-0.0460

0.0550

Os operadores *, /, ^ têm uma interpretação própria no que diz respeito ao cálculo matricial. Para aplicar estas operações elemento a elemento entre duas matrizes

de dimensões semelhantes utiliza-se o símbolo ”.” antes do operador:

>> A.*R(:,2:4)

ans =

0.9572 1.6006 2.3766

444.0000 555.0000 666.0000

0 0 0

>> A./R(:,2:4)

ans =

1.0447 2.4991 3.7869

0.0360 0.0450 0.0541

Inf Inf Inf

>> A.^3

ans =

1 8 27

64 125 216

343 512 729

Funções utilizadas com vectores e matrizes:

Page 18: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 18

size, length, ndims, find, eye, zero, ones, diag, triu, tril, rand, rank, \, det, norm, expm,

lu, qr, chol, eig, svd, sparse; max; sum; mean; any; min; diff; median; all; sort; prod;

std; cumsum; ones.

Escrevendo na linha de comando help seguido do nome da função obtém-se

informação sobre cada uma delas.

Exercícios:

1. Definir o significado das funções e operadores: ~=; eye; triu; eig; det; ones, sum

2. Crie uma matriz (3x3) onde em cada linha deverá incluir a sua data de nascimento (dia, mês, ano) e dos seus pais. Com uma linha de comando calcule a idade dos três. Determine, com uma linha de comando, qual a idade da pessoa mais velha das três. Com uma linha de comando apenas indique quantos dias faltam para o primeiro aniversário a acontecer entre os três.

3. Crie, com um comando apenas, uma matriz (11x5) em que todos os seus

elementos escalares valem 16.

4. Crie a matriz A (5x5) constituída por valores aleatórios. Encontre o máximo valor em cada coluna, em cada linha e o máximo total. Encontre os índices

correspondentes aos elementos com valores superiores a 0.3.

5. Escreva um comando (numa só linha) que permita determinar numa matriz qualquer A (16x16), constituída por valores aleatórios, quantos valores são superiores a 0.25.

6. Escreva um comando que permita calcular a média da quarta linha de uma matriz qualquer (n x m), em que n é superior a 4.

7. Crie, com um comando apenas, uma matriz (4x4) em que os elementos da diagonal são todos iguais a 13 e os restantes iguais a 2. Calcule a sua inversa utilizando dois comandos diferentes. Determine a sua triangular superior e a

inferior.

Page 19: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 19

4 – GRÁFICOS

Para exemplificar alguns comandos gráficos do MATLAB vamos utilizar o ficheiro

de dados exemplo_vel.mat:

load demo_graphs.mat

Este ficheiro de dados de MATLAB contém seis variáveis: quatro matrizes bidimensionais com dados de velocidade média (V1 e V2) de um escoamento em superfície livre e da respectiva variância (var1 e var2); e dois vectores correspondentes às coordenadas espaciais onde os valores de velocidade foram

medidos (x e z).

Comando plot.

O comando mais básico de manipulação gráfica que o MATLAB contém é o comando plot. Permite criar gráficos bidimensionais. Vamos criar um gráfico onde figure a evolução da velocidade V1 ao longo do canal (variação em x) para a quinta posição na vertical (em z, segundo índice nas matrizes de dados de velocidade

igual a 5).

figure(10)

plot(v_test_1(:,5),x)

Page 20: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 20

Para manter na figura criada esta imagem e sobrepor outros dados deverá utilizar-se o comando hold. Vamos introduzir na mesma figura os dados relativos a

v_test_2.

figure(10)

hold

plot(v_test_2(:,5),x)

O comando close permite fechar as janelas abertas. Para se fechar a figura 10: close(10); close all fecha todas as figuras abertas no desktop; close apenas fecha a

figura activa.

De seguida apresenta-se o exemplo de um código que permite obter na mesma figura as duas funções de velocidade apresentadas anteriormente, distinguidas com cores diferentes, com legendas, etc., e que permite criar um ficheiro do tipo

jpeg com o resultado final.

% Exemplo de figuras load demo_graphs.mat figure(20) hold % imagem fica fixa % criar linhas com cor, simbologia, etc. pré-definidas plot(x,v_test_1(:,5),'r','linewidth',2); plot(x,v_test_2(:,5),'b-x','linewidth',1,'markersize',8); % definição dos eixos set(gca,'xtick',0:0.02:0.14,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.05:0.35,'Fontsize',11,'Fontname','Times');

Page 21: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 21

% definir os limites dos eixos do gráfico axis([0 0.12 0 0.35]); % criação das legendas num gráfico bidimensional definido o tipo e tamanho % de letra pretendido xlabel('x (m)','Fontsize',14,'Fontname','Times'); ylabel('velocidade (m/s)','Fontsize',14,'Fontname','Times'); % criar grelha grid on % colocar legenda, o argumento indica a posição da legenda legend('v1','v2',3) % definição da posição e do tamanho da figura set(gcf,'PaperPosition',[0.133858 4.19575 8 3.30141]) % imprimir para ficheiro jpeg print -djpeg90 velocidades % fechar figura close(20)

Este código, tal como está, pode ser escrito e gravado como um script do tipo m-file. O nome deste script poderá ser evocado no ambiente MATLAB e os comandos no

seu interior serão executados sequencialmente.

Note-se que o carácter “%” permite a inserção de comentários no código de

MATLAB.

A título de exemplo mostra-se como se poderia criar o mesmo gráfico em formato

logarítmico.

figure(30) loglog(x,v_test_1(5,:,5),'r','linewidth',2); hold loglog(x,v_test_2(5,:,5),'b-x','linewidth',1,'markersize',8);

Page 22: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 22

Podemos agora separar os dados em gráficos diferentes mas na mesma figura, juntando os dados de variância: utilização do comando subplot.

figure(40) subplot(221), hold, grid, plot(x,v_test_1(:,5),'k','linewidth',2); set(gca,'xtick',0:0.02:0.14,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.05:0.35,'Fontsize',11,'Fontname','Times'); axis([0 0.12 0 0.35]); xlabel('x (m)','Fontsize',11,'Fontname','Times'); ylabel('velocidade (m/s)','Fontsize',11,'Fontname','Times'); % inserir título da figura title('V1','Fontsize',14,'Fontname','Times'); subplot(222), hold, grid, plot(x,v_test_2(:,5),'k','linewidth',2); set(gca,'xtick',0:0.02:0.14,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.05:0.35,'Fontsize',11,'Fontname','Times'); axis([0 0.12 0 0.35]); xlabel('x (m)','Fontsize',11,'Fontname','Times'); ylabel('velocidade (m/s)','Fontsize',11,'Fontname','Times'); title('V2','Fontsize',14,'Fontname','Times'); subplot(223), hold, grid, plot(x,var_test_1(:,5),'b','linewidth',2); set(gca,'xtick',0:0.02:0.14,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.01:0.05,'Fontsize',11,'Fontname','Times'); axis([0 0.12 0 0.05]); xlabel('x (m)','Fontsize',11,'Fontname','Times'); ylabel('velocidade (m/s)','Fontsize',11,'Fontname','Times'); title('var1','Fontsize',14,'Fontname','Times'); subplot(224), hold, grid, plot(x,var_test_2(:,5),'b','linewidth',2); set(gca,'xtick',0:0.02:0.14,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.01:0.05,'Fontsize',11,'Fontname','Times'); axis([0 0.12 0 0.05]); xlabel('x (m)','Fontsize',11,'Fontname','Times'); ylabel('velocidade (m/s)','Fontsize',11,'Fontname','Times'); title('var2','Fontsize',14,'Fontname','Times'); set(gcf,'PaperPosition',[0.133858 4.19575 6 4]) print -djpeg90 subplot_exe close(40)

Page 23: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 23

O comando cla permite apagar o conteúdo de uma figura conservando a sua

formatação.

Gráficos tridimensionais

Existem vários comandos que permitem a criação de gráficos tridimensionais, entre eles contour, image, surf, quiver, e plot3. Os dados tridimensionais são geralmente constituídos por duas variáveis unidimensionais definidoras da moldura bidimensional (no presente caos x e y) e por uma terceira variável que fornece a informação correspondente à “elevação” (no caso do presente exemplo os valores de velocidade e variância).

Vamos criar exemplos de aplicação dos comandos contour e quiver.

contour: este comando produz um gráfico de linhas de nível com base nas

coordenadas da moldura e nos dados de base.

Exemplifica-se uma utilização simples do comando contour:

figure(50) contour(x,z,v_test_1') % note-se que a matriz de dados foi transposta % para que o comprimento de x correspondesse ao % seu número de colunas

Page 24: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 24

O comando contour ignorou, na construção das linhas de nível, os valores na matriz

de dados identificados como NaN.

O número de linhas de nível e a equidistância entre estas foram criados automaticamente em função dos valores limites dos dados; o utilizador pode definir estes quer dando o número de classes de curvas de nível quer fornecendo

os seus limites máximo, mínimo e uma equidistância.

figure(60), hold, grid contour(x,z,v_test_1',[0.1:0.01:0.3]) set(gca,'xtick',0:0.2:0.12,'Fontsize',13,'FontName','Times'); set(gca,'ytick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); xlabel('x (m)','Fontsize',14,'Fontname','Times'); ylabel('z (m)','Fontsize',14,'Fontname','Times'); title('v test 1, (m/s)') colormap('winter') % podemos definir várias paletes de cores colorbar % introduz a escala de classes das curvas de nível

Page 25: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 25

contourf: é uma extensão do comando contour, em que o espaço entre curvas de nível é preenchido a cores.

Mostramos de seguida um exemplo de imagem onde se combinam os comandos

contour e contourf.

figure(70), hold % nesta linha de comando mostra-se como incluir operações no interior do % código definidor de gráficos de forma a generalizar a sua aplicação contourf(x,z,v_test_1',[min(min(v_test_2)):... (max(max(v_test_2))-min(min(v_test_2)))/15:max(max(v_test_2))]) % a utilização de "..." permite continuar na linha seguite [C,H]=contour(x,z,v_test_1',10,'--r'); % 10 curvas de nível são definidas % C é a matriz que define o mapa das curvas de nível % H é o handle do gráfico contour; serve para evocar este gráfico clabel(C,H) set(gca,'xtick',0:0.025:0.12,'Fontsize',13,'FontName','Times'); set(gca,'ytick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); xlabel('x (m)','Fontsize',14,'Fontname','Times'); ylabel('z (m)','Fontsize',14,'Fontname','Times'); title('v test 1, (m/s)') colormap('summer'), colorbar % o uso de vírgulas permite colocar dois % comandos na mesma linha shading flat % permite eliminar os contornos das linhas de nível set(gca,'XGrid','on') % activa apenas as linhas de grelha verticais set(gcf,'PaperPosition',[0.133858 4.19575 6 4]) print -djpeg90 contour_plot, close(70)

Page 26: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 26

Combinação de gráficos bidimensionais e tridimensionais na mesma figura utilizando o subplot

figure(80) subplot(211), hold contourf(x,z,v_test_1',[min(min(v_test_2)):... (max(max(v_test_2))-min(min(v_test_2)))/15:max(max(v_test_2))]) [C,H]=contour(x,z,v_test_1',10,'--b'); clabel(C,H) set(gca,'xtick',0:0.025:0.12,'Fontsize',13,'FontName','Times'); set(gca,'ytick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); xlabel('x (m)','Fontsize',14,'Fontname','Times'); ylabel('z (m)','Fontsize',14,'Fontname','Times'); title('contorno, (m/s)') colormap('autumn'), colorbar shading flat set(gca,'XGrid','on') gtext('NaN','Fontsize',13,'FontName','Times'); % permite colocar texto % em qualquer parte da figura subplot(223), hold, grid % definem-se apenas alguns dos perfis verticais a representar plot(v_test_1([10 20 30 40 50],:),z,'k','linewidth',2); set(gca,'xtick',0:0.1:0.5,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); axis([0 0.5 0 0.1]); xlabel('vel_t_e_s_t_,_1 (m/s)','Fontsize',11,'Fontname','Times'); ylabel('z (m)','Fontsize',11,'Fontname','Times'); title('perfis de velocidade','Fontsize',14,'Fontname','Times'); subplot(224), hold, grid plot(var_test_1([10 20 30 40 50],:),z,'k','linewidth',2); set(gca,'xtick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); set(gca,'ytick',0:0.02:0.1,'Fontsize',11,'Fontname','Times'); axis([0 0.06 0 0.1]); xlabel('var_t_e_s_t_,_1 (m/s)','Fontsize',11,'Fontname','Times'); ylabel('z (m)','Fontsize',11,'Fontname','Times'); title('perfis de variancia','Fontsize',14,'Fontname','Times'); set(gcf,'PaperPosition',[0.133858 4.19575 8 8]) print -djpeg90 contour_plot, close(80)

Page 27: Curso de introdução ao MATLAB – módulo 1 · numérica, processamento de dados e visualização recorrendo a uma forma de ... - referências externas (interacção com programas

Curso de introdução ao MATLAB 27

Exercícios:

1. No mesmo gráfico represente um perfil vertical de velocidade para cada teste e na mesma posição longitudinal (em x) com diferentes simbologias. Faça uma legenda da simbologia e coloque manualmente uma indicação junto a cada perfil

com o nome do teste correspondente.

2. Considere que as seguintes variáveis V=v_test_1 e W=0.1*v_test_2. Faça um gráfico tridimensional das linhas de nível da intensidade do vector definido por r

no campo definido pelas coordenadas dos vectores x e z.

3. No gráfico anterior, sobreponha o campo vectorial definido pelo vector

utilizando para tal o comando quiver. Não represente todos os vectores, apenas

alguns seleccionados de forma a não sobrecarregar a imagem.