1. MATLABAvançado - Versão 2010a
(parte 1)
Gabriel de Figueiredo da Costa
Curso de MATLAB Avançado e Simulink 1
2. Ementa
1. Conceitos Básicos
2. Criação de Matrizes e Op. Básicas
3. Criação e Manipulação de Gráficos
4. Processamento de Imagens
5. Variáveis Simbólicas e suas operações
6. Programas em interface gráfica (GUI)
7. Simulink
Curso de MATLAB Avançado e Simulink 2
3. 1. Conceitos Básicos
• clear all – apaga todas as variáveis
• close all – fecha todas as figuras
• clc – apaga os comandos na janela de comandos
Curso de MATLAB Avançado e Simulink 3
Janela de
comandos
Diretório Atual
Ambiente
de Trabalho
Arquivos no
diretório atual
Histórico de
comandos
4. 2. Criação de Matrizes e Operações Básicas
• A=[0.998,0.382,0.384;0.182,0.388,0.129]
• eye(M,N) - cria uma matriz identidade M x N
• zeros(M,N) - cria uma matriz M x N de zeros
• ones(M,N) - cria uma matriz M x N de uns
• rand(M,N) - cria uma matriz M x N com valores
aleatórios entre 0 e 1
Curso de MATLAB Avançado e Simulink 4
5. 2. Criação de Matrizes e Operações Básicas
• C = A*B
• D = C*B
• E = A^2
• F = C^2
Curso de MATLAB Avançado e Simulink 5
6. 2. Criação de Matrizes e Operações Básicas
• C = A*B
• D = A.*B
• E = A^2
• F = A.^2
• G = B/A
• H = B./A
Curso de MATLAB Avançado e Simulink 6
7. 2. Criação de Matrizes e Operações Básicas
• inv(A) inverte a matriz A
• A’ transpõe a matriz A
• det(A) calcula o determinante da matriz A
• size(A) apresenta as dimensões da matriz A
• length(A) apresenta a maior dimensão da matriz A
• sort(A) ordena as linhas de um vetor ou uma matriz
em ordem crescente dos valores da primeira coluna
Curso de MATLAB Avançado e Simulink 7
8. 2. Criação de Matrizes e Operações Básicas
• C = [A , B]
• D = [A ; B]
• E = [A(:,1) , B(:,2)]
• F = [A(2,:) ; B(1,:)]
• G = [A(1,1) , B(1,1)]
• H = [A(2) , B(4)]
Curso de MATLAB Avançado e Simulink 8
9. 3. Criação e Manipulação de Gráficos
• x = a:c:b
cria um vetor que vai de a até b, variando de c em c
• x = linspace(a, b, n)
cria um vetor que vai de a até b, com n elementos
• plot(x1, y1, ‘format1’,
x2, y2, ‘format2’,
(...)
xN, yN, ‘formatN’)
Curso de MATLAB Avançado e Simulink 9
10. 3. Criação e Manipulação de Gráficos
• Formatos
‘cormarcadorlinha’
Curso de MATLAB Avançado e Simulink 10
11. 3. Criação e Manipulação de Gráficos
• errorbar(x1, y1, e1, ‘format1’, ...) – cria gráficos
com barras de erro descritas pelos vetores “e”
• plot3(x1, y1, z1, ‘format1’, ...) – cria gráficos de
curvas 3d
• comet(x1, y1) – cria um gráfico animado 2D com
um cometa que anda pela curva
• comet3(x1, y1, z1) – cria um gráfico animado 3D
com um cometa que anda pela curva
Curso de MATLAB Avançado e Simulink 11
12. 3. Criação e Manipulação de Gráficos
• subplot(m, n, i) – cria uma janela com uma matriz m x
n de gráficos, e ativa o gráfico de número i
• pie([a b c], [1 0 1]) – cria um gráfico de pizza com os
valores já normalizados, e destaca as fatias “a” e “c”
• bar(x1, y1) – cria um gráfico de barras
• contour(X,Y,Z,[a b c]) – cria um gráfico 2D com as
curvas de nível de valor a, b, c da superfície definida
por X, Y, Z
Curso de MATLAB Avançado e Simulink 12
13. 3. Criação e Manipulação de Gráficos
• figure(N) – ativa o gráfico de número N
• hold on – permite que seja plotado outro gráfico
na mesma figura sem sobrescrevê-la
• xlabel(‘nome’) – muda o nome do eixo x
• ylabel(‘nome’) – muda o nome do eixo y
• zlabel(‘nome’) – muda o nome do eixo z
Curso de MATLAB Avançado e Simulink 13
14. 3. Criação e Manipulação de Gráficos
• title(‘nome’) – muda o título do gráfico
• legend(‘nome1’, ‘nome2’, ...) – insere uma legenda
• axis([x_min x_max y_min y_max z_min z_max]) –
muda os limites dos eixos
• grid on / grid off – liga ou desliga a grade do gráfico
ativo
Curso de MATLAB Avançado e Simulink 14
15. 3. Criação e Manipulação de Gráficos
x = xinicial:passo:xfinal
y = yinicial:passo:yfinal
[X,Y] = meshgrid(x,y)
Z = funcao(X,Y)
• surf(X,Y,Z) para plotar uma superfície com as faces
preenchidas
• mesh(X,Y,Z) para plotar uma superfície apenas com
as linhas de grade, sem preenchimento
Curso de MATLAB Avançado e Simulink 15
16. 3. Criação e Manipulação de Gráficos
• shading flat – muda o sombreamento para básico, com
cada face de uma cor, e sem linhas;
• shading interp – muda o sombreamento para
interpolado, com uma transição suave entre as faces, e
sem linhas;
• shading faceted – muda o sombreamento para
facetado, com cada face de uma cor e com linhas (é o
padrão);
• colormap(‘mapa’) – muda o mapa de cores; para saber
quais os mapas disponíveis, use “help graph3d”.
Curso de MATLAB Avançado e Simulink 16
17. Exemplo 3.1
• Processo contínuo
Ce=800g/L ; V=10.000L ; C(t=0)=275g/L;
Co deve estar entre 250 e 300 g/L
Curso de MATLAB Avançado e Simulink 17
18. Exemplo 3.1
• Deseja-se criar um programa onde:
– o usuário insere a vazão de entrada de água
– o programa calcula Co(t) para várias Fe
Fe = 100 ; 200 ; 300 ; 400 ; 500 L/min
t = 0 a 60 min
– é gerado um gráfico com estas curvas
– são indicados os limites desejados p/ Co
Curso de MATLAB Avançado e Simulink 18
19. Exemplo 3.1
• Equação diferencial
𝑑𝐶
𝑑𝑡
=
𝐹𝑒 𝐶𝑒
𝑉
−
(𝐹𝑒+𝐹𝑎)𝐶
𝑉
function y = dCdT(t, C, flag, par)
Fe=par(1); Fa=par(2); V=par(3); Ce=par(4);
y = (Fe*Ce)/V - (Fe+Fa)*C/V;
Curso de MATLAB Avançado e Simulink 19
20. Exemplo 3.1
• Programa principal
clc; clear all; close all;
Fa = input('Informe a vazão de entrada de água ->
');
V=10000; Ce=800;
t=0:1:60'; vazao=100:100:500;
cores=['b' 'g' 'c' 'm' 'k'];
Cmin=250*ones(61,1); Cmax=300*ones(61,1);
plot(t, Cmin, 'r--', t, Cmax, 'r--'); hold on;
Curso de MATLAB Avançado e Simulink 20
21. Exemplo 3.1
• Programa principal (continuação)
for i=1:5;
Fe=vazao(i);
[T,y] =ode45('dCdT', t, 275, [], [Fe Fa V Ce]);
plot(t, y, cores(i));
end
hold off
xlabel('Tempo (min)');
ylabel('Concentração (g/L)');
legend('Cmin', 'Cmax', 'Fe=100', 'Fe=200',
'Fe=300', 'Fe=400', 'Fe=500');
Curso de MATLAB Avançado e Simulink 21
23. Exemplo 3.1
• Resultado com Fe = 300 L/min
Curso de MATLAB Avançado e Simulink 23
Vazão ideal
Entre 100 e 200
24. Exercício 1
Gere dados experimentais xexp, yexp e zexp usando a rotina:
xexp=1:100;
yexp=normpdf(xexp,50,20);
yexp=yexp+0.001*rand(size(yexp))-0.0005;
zexp=cumsum(yexp);
total=max(zexp);
yexp=yexp/total;
zexp=zexp/total*0.999;
x e z são as variáveis independentes, e y é a variável
dependente para a qual a curva deve ser ajustada.
Curso de MATLAB Avançado e Simulink 24
25. Exercício 1
A partir destes dados experimentais para x, y e z, ajuste os
parâmetros A e B da correlação y = A*exp(B/x)*(1-z)
obtendo o menor erro quadrático possível entre os valores
experimentais e estimados de y. Estime primeiramente os
parâmetros por ajuste linear, linearizando a equação, e em
seguida utilize estes parâmetros como ponto de partida para
um ajuste não linear (usando o comando fminsearch). Plote,
em um gráfico, a curva experimental (xexp, yexp), a curva
ajustada por regressão linear e a curva ajustada por
regressão não linear.
Curso de MATLAB Avançado e Simulink 25
26. 4. Processamento de Imagens
• imread(‘imagem.jpg’) – importa uma imagem que está
no diretório atual de trabalho
bmp em escala de cinza geram 1 matriz
bmp de 16 ou 256 bits
bmp de 24 bits geram 3 matrizes
jpg (r, g, b)
tiff gera 4 matrizes
(c, m, y, k)
Curso de MATLAB Avançado e Simulink 26
27. 4. Processamento de Imagens
• imagem(:,:,n) – retorna a matriz do enésimo canal
• imshow(imagem) – exibe a imagem
• imagesc(imagem) – exibe a imagem com eixos
• imwrite(imagem, ‘im.fmt’) – salva a imagem
• imwrite(imagem, ’im.png’, ’Alpha’, alpha) – salva a
imagem no formato .png e com a opacidade dos
pixels definida em “alpha”.
0 = totalmente transparente;
1 = totalmente opaco.
Curso de MATLAB Avançado e Simulink 27
28. Exemplo 4.1
• exemplo41.bmp: bmp 24 bits, 15x15 pixels
• Separando os canais
exemplo41=imread(‘exemplo41.bmp’);
R=exemplo41(:,:,1);
G=exemplo41(:,:,2);
B=exemplo41(:,:,3);
• Reconhecendo pixels brancos e transformando em pretos
BRANCO= R==255 & G==255 & B==255;
R(BRANCO)=0; G(BRANCO)=0; B(BRANCO)=0;
RESP(:,:,1)=R; RESP(:,:,2)=G; RESP(:,:,3)=B;
imshow(RESP);
imwrite(RESP, ‘RESPOSTA.bmp’);
Curso de MATLAB Avançado e Simulink 28
29. Exemplo 4.1
• Criando uma matriz de opacidade
BRANCO=double(BRANCO);
h=imshow(exemplo41);
set(h,’AlphaData’,BRANCO);
imwrite(exemplo41,'RESPOSTA2.png','Alpha',BRANCO);
Curso de MATLAB Avançado e Simulink 29
30. 4. Processamento de Imagens
• imhist(imagem(:,:,N))
apresenta um histograma de contagem de pixels por intensidade
(em imagens RGB, N=1 para vermelho, N=2 para verde, e N=3 para azul)
• decorrstretch(imagem)
diminui a correlação entre as cores R, G, B da imagem
• rgb2gray(imagem)
converte uma imagem de RGB para escala de cinza
• imcontour(imagem,N)
encontra os contornos do canal ‘imagem’ e plota N curvas de nível
Curso de MATLAB Avançado e Simulink 30
31. Exemplo 4.2
• exemplo42.bmp: bmp 24 bits, 15x15 pixels
• Separando os canais
exemplo41=imread(‘exemplo41.bmp’);
R=exemplo41(:,:,1);
G=exemplo41(:,:,2);
B=exemplo41(:,:,3);
• Histograma da cor vermelha:
imhist(R)
Curso de MATLAB Avançado e Simulink 31
linha
azul
(r=0)
linha
verde
(r=128)
linha vermelha
e fundo branco
(r=255)
32. Exemplo 4.2
• Para saber quantos pixels tem o risco vermelho:
area_r = R==255 & G==0 & B==0;
pixels_r = sum(sum(double(area_r)))
percent_r = pixels_r/prod(size(R))
• Para contornar a área considerada vermelha:
imshow(exemplo42); hold on;
imcontour(area_r, ‘k--‘)
hold off
Curso de MATLAB Avançado e Simulink 32
33. Exercício 2
Utilizando uma fotografia de satélite (que pode ser
obtida pesquisando por landsat, no google), calcule o
percentual de zonas verdes e de área construída
contidas na mesma. Note que a métrica utilizada
para encontrar a área construída deve ser verificada
de acordo com a foto escolhida.
Curso de MATLAB Avançado e Simulink 33
34. 4. Processamento de Imagens
• Adequação de imagens a eixos
– imagesc(imagem)
exibe uma imagem já importada, mostrando a escala nos eixos
– axis([a b c d])
ajusta os eixos da área de exibição para x = [a b], e y = [c d]
– imagesc([a b],[c d],imagem)
faz com que a imagem passe a ser exibida nos eixos definidos
– imrotate(imagem,angulo)
gira a imagem em um ângulo no sentido anti-horário, e define a
cor dos pixels vazios como preto
Curso de MATLAB Avançado e Simulink 34
35. 4. Processamento de Imagens
• Rotação de vetores
(para compatibilizar o ângulo entre gráficos e imagens)
Matriz rotação
M=[cos(theta),sen(theta);-sen(theta),cos(theta)];
Para dois vetores x, y que definem uma curva,
for i=1:length(x)
xy=[x(i);y(i)];
xy_rot=M*xy;
x(i)=xy_rot(1); y(i)=xy_rot(2);
end
Curso de MATLAB Avançado e Simulink 35
36. Exemplo 4.3
• Vazamento contínuo de combustível vaporizado
Curso de MATLAB Avançado e Simulink 36
CONCENTRAÇÃO NO AR (g/m³)
x(m)
z (m)
y (m)
Vento: u (m/s)
37. Exemplo 4.3
Modelo de dispersão Gaussiano tipo pluma
𝐶 𝑥, 𝑦 =
𝑄
2𝜋𝑢𝜎 𝑦 𝜎𝑧
. 𝑒𝑥𝑝
−𝑦2
2𝜎𝑧
2
𝜎 𝑦 = 𝜎𝑧 = 0,40 ∗ 𝑥0,91
Onde:
• C é a concentração de poluente no ar, no plano horizontal xy que passa
pelo ponto do vazamento (g/m³),
• Q é a vazão que vaza do composto (em g/s),
• u é a velocidade média do vento (m/s),
• x é a distância horizontal do ponto de lançamento (m), sendo que o eixo x
está na direção do vento, e
• y é a distância vertical do ponto de lançamento (m), sendo que o eixo y
está na direção perpendicular ao vento.
Curso de MATLAB Avançado e Simulink 37
38. Exemplo 4.3
• Limite Tolerável a humanos: 0,0001 g/m³
• u = 6 m/s, vindo de 75° (hor., partindo do Norte)
• Q = 0,8 g/s
Curso de MATLAB Avançado e Simulink 38
39. Exemplo 4.3
• Para gerar e exibir a superfície de concentração:
[X,Y]=meshgrid(0:0.1:600,-30:0.1:30);
u=6; Q=0.8;
sigma_y=0.40*X.^0.91; sigma_z=sigma_y;
C=Q./(2*pi*u*sigma_y.*sigma_z).*exp(-Y.^2./(2*sigma_z.^2));
imagesc(C);
caxis([0.0001 0.0003]);
Curso de MATLAB Avançado e Simulink 39
40. Exemplo 4.3
• Para girar a pluma de acordo com o vento:
angulo=75;
theta=(270-angulo)/360*2*pi;
M=[cos(theta),sin(theta);-sin(theta),cos(theta)];
for i=1:size(C,1)
for j=1:size(C,2)
xy=[X(i,j);Y(i,j)];
xy_rot=M*xy;
X(i,j)=xy_rot(1);
Y(i,j)=xy_rot(2);
end
end
Curso de MATLAB Avançado e Simulink 40
u75°
270°-75°
41. Exemplo 4.3
• Para plotar a figura da planta nos eixos em metros:
tanques=imread(‘tanques.jpg’);
px_h=size(tanques(:,:,1),2);
px_v=size(tanques(:,:,1),1);
esc=92/500;
imagesc([0 px_h/esc],[0 px_v/esc],tanques);
drawnow;
Curso de MATLAB Avançado e Simulink 41
42. Exemplo 4.3
• Para plotar as plumas sobre a foto da planta:
pos=[183,197;202,199;227,203;164,238;189,241;217,246;245,
250;270,252;297,256;320,261;160,270;214,276;158,287;212,2
95;590,294;627,298;585,321;623,326;659,332];
hold on;
for i=1:19
X_i=X+pos(i,1)/esc;
Y_i=Y+pos(i,2)/esc;
contour(X_i,Y_i,C,[0.0001 0.0003); drawnow;
end
Curso de MATLAB Avançado e Simulink 42
44. 5. Variáveis Simbólicas e suas operações
• sym() - gera uma variável simbólica que
corresponde a um string ou um número
• syms a b c (...) - gera simultaneamente várias
variáveis simbólicas a, b, c (...)
• double() - converte uma variável simbólica em
número, desde que ela não possua incógnitas
• eval() – avalia uma variável simbólica, desde que
ela não possua incógnitas
• str() - converte uma variável simbólica em uma
variável de texto
Curso de MATLAB Avançado e Simulink 44
45. 5. Variáveis Simbólicas e suas operações
• findsym() - indica quais são as variáveis simbólicas
contidas em uma expressão simbólica
• simplify() - simplifica uma expressão simbólica “em
um nível” (realiza apenas algumas operações)
• simple() – procura a forma mais simples da
expressão simbólica
• subs(f, [a b c], [1 2 3]) - substitui, em f, as variáveis
a, b, c pelos valores 1, 2, 3
• solve('equacao_em_x') - encontras as raízes de
uma equação em x
Curso de MATLAB Avançado e Simulink 45
46. 5. Variáveis Simbólicas e suas operações
• pretty() - apresenta a expressão simbólica de uma
forma "bonita" na tela
• expand() - expande a equação aplicando a
distributiva, agrupando termos de mesma ordem,
etc
• collect() – agrupa os termos de mesma ordem em
x
Curso de MATLAB Avançado e Simulink 46
47. 5. Variáveis Simbólicas e suas operações
• Por exemplo: equação do 2º grau
syms a b c x
f=a*x^2+b*x+c
delta=b^2-4*a*c
x1=(-b-delta^0.5)/(2*a)
x2=(-b+delta^0.5)/(2*a)
x1_sub=subs(x1, [a b c], [1 2 3])
x2_sub=subs(x2, [a b c], [1 2 3])
f_sub=subs(f,[a b c], [1 2 3])
solve(f_sub)
Curso de MATLAB Avançado e Simulink 47
48. 5. Variáveis Simbólicas e suas operações
• Por exemplo: sistemas de equações
syms x y a b c
S = solve('x^2+x*y+y=3' , 'x^2-4*x+3=0');
• S.x
• S.y
S=solve('a*x^2+b*x+c=0', 'a=1', 'b=-3', 'x=10');
• S.a
• S.b
• S.c
• S.x
Curso de MATLAB Avançado e Simulink 48
49. 5. Variáveis Simbólicas e suas operações
• diff(f,n) - fornece a enésima derivada da função f
• int(f,x) - fornece a integral indefinida da função f
em x
• int(f,x_inicial,x_final) - fornece a integral definida
da função f de x inicial até x final
• limit(f,x,x0) - calcula o limite de f(x) quando x
tende a x0
• limit(f,x,x0,'left') - calcula o limite pela esquerda
• limit(f,x,x0,'right') - calcula o limite pela direita
Curso de MATLAB Avançado e Simulink 49
50. 5. Variáveis Simbólicas e suas operações
• symsum(f,i_inicial,i_final) - soma a função f(i) de i
inicial até i final (i final pode ser inf - infinito)
• taylor(f,n) - decompõe f em uma série de Taylor,
obtendo uma expressão que soma os termos até a
ordem n-1
• taylor(f,n,x0) - decompõe f em uma série de Taylor,
obtendo uma expressão que soma os termos até a
ordem n-1, em torno do ponto x0
Curso de MATLAB Avançado e Simulink 50
51. 5. Variáveis Simbólicas e suas operações
• dsolve('eq_diferencial1',(...),'cond_inicial1',(...),'var')
resolve o conjunto de EDOs com variável dependente y e
variável independente ‘var’, com as condições iniciais
definidas (y(0)=1, Dy(0)=1, etc).
• laplace(f(t)) - calcula a transformada de Laplace da
função f(t), usando s como variável
• ilaplace(g(s)) - calcula a transformada inversa de
Laplace da função g(s), usando t como variável
Curso de MATLAB Avançado e Simulink 51