MATLAB BÁSICO Seqüência Símbolo Seqüência Símbolo Seqüência de Símbolo de de Caracteres Caracteres Caracteres \alpha \upsilon \sim a u ~ \beta \phi \leq b f £ \gamma \chi \infty g c ¥ \delta \psi d y \clubsuit § \epsilon e \omega w \diamondsuit ¨ \zeta z \Gamma G \heartsuit © \eta h \Delta D \spadesuit ª \theta q \Theta Q \leftrightarrow « \vartheta J \Lambda L \leftarrow ¬ \iota \Xi i X \uparrow \kappa \Pi k P \rightarrow ®
MATLAB BÁSICO Para inserir caracteres especiais, usar o caractere " \ " como prefixo ou utilizar a função texlabel. Exemplos. % incluir índices, (Ex.
a2&X1)
ylabel('\alpha^2 & X_1')
% (Ex.
α
2
& Xβ1 )
ylabel('\alpha^2 & X_{\beta_1}')
MATLAB BÁSICO Como incluir o valor de uma variável em um título? Ex. f = 70; c = (f - 32)/1.8; title(['Temperatura é ', num2str (c),' \ circC'], 'Color', 'r')
% Ex. Temperatura é 21.1111 °C (Obs. título em vermelho).
MATLAB BÁSICO Estilos de Linhas, Marcações e Cores O estilo da linha/símbolo utilizada na plotagem, bem como a cor, podem ser definidos por intermédio de um argumento para a função plot: plot(x,y,S) onde S é uma string (alfanumérico) de 1, 2 ou 3 caracteres, entre apóstrofos, construída a partir dos caracteres mostrados na tabela abaixo: Símbolo
Cor
Símbolo
y
amarela
·
Estilo da Linha/Marcação pontilhada
MATLAB BÁSICO Ex. t = 0 : pi/100 : 2*pi; x = sin(t); y1 = sin(t+0.25); plot(x,y1, 'r-',x,y2, 'g--')
y2 = sin(t+0.5);
MATLAB BÁSICO A ordem das cores é uma sequência préajustada. Esta sequência pode ser alterada modificando-se a propriedade ColorOrder . Para definir a propriedade ColorOrder que será usada em uma sessão: set(0,'DefaultAxesColorOrder',[1
0 0;0 1 0;0 0 1])
(cores vermelha, verde e azul, e assim sucessivamente)
MATLAB BÁSICO As escalas dos eixos são estabelecidas automaticamente. Para alterar o pré-ajuste, usa-se o comando:
axis ([x_min,x_max,y_min,y_max]) em seguida ao
comando plot.
axis: sozinho, retorna os limites dos eixos em uso; axis(‘auto’) propicia ajuste automático dos eixos;
MATLAB BÁSICO Traçando Gráficos no Matlab Criar duas curvas em um gráfico com escalas diferentes plotyy (x1,y1,x2,y2)
: plota y1 versus x1 com a rotulagem e marcação do eixo-y à esquerda e plota y2 versus x2 com a rotulagem e marcação do eixo-y à direita.
Ex. x1=0:pi/10:4*pi; x2=0:pi/20:6*pi; plotyy (x1,cos(x1),x2,x2.*sin(x2))
plotyy (X1,Y1,X2,Y2,FUN) utiliza a função de plotagem FUN em vez da função plot. FUN deve ser o identificador (handle) para uma função de plotagem, por exemplo, @plot, @semilogx,
@semilogy, @loglog, @stem etc., que aceite a sintaxe H = FUN(X,Y). plotyy (X1,Y1,X2,Y2,FUN1,FUN2)
utiliza FUN1(X1,Y1) para plotar os dados no eixo à esquerda e FUN2(X1,Y1) para plotar os dados no eixo à direita. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Curvas no Espaço Tridimensional plot3(x,y,z) : produz uma perspectiva (projeção bi-dimensional) da curva linear-
por partes que passa pelos pontos cujas coordenadas são os elementos de x, y e z, vetores de mesma dimensão. 4
Ex: t = 0.01 : .05 : 10*pi; x = cos(t); y = sin(t); z = t .^3; plot3(x,y,z,'r')
x 10 4 3 2 1 0 1 0.5
1 0.5
0
0
-0.5
-0.5 -1 -1
Prof. Adade
% Load the spectra data load spectraData masscharge time spectra; % Create the 3D plot figure; plot3(masscharge, time, spectra); box on; % Set the view ing angle and t he axis limits view(26, 42); axis([500 900 0 22 0 4e8]); % Add title and axis labels xlabel('Mass/Charge (M/Z)'); ylabel('Time'); zlabel('Ion Spectra'); title('Extracted Spectra Subset');
http://www.mathworks.com/matlabcentral/fileexchange/35262-matlab-plot-gallery-line-plot-3d/content/html/Line_Plot_3D.html
Prof. Adade
% Conjunto de registros de um sinal aleatório. t=0:0.05:2; for k=1:10, Y(1:length(t),k) = randn(length(t),1); end k=1; plot3(t,k*ones(length(t)),Y(:,k)), hold for k=2:10,plot3(t,k*ones(length(t)),Y(:,k)) end
Para obter a visualização acima, foram utilizados recursos de “rotate 3d” e edição direta na tela gráfica. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Curvas de Níveis e Preparação de Grades de Dados · Para se produzir um gráfico de superfície (ou de níveis) de vetores x, y e z (z = f(x,y)), z deve ser mapeado para uma grade retangular x-y (dados igualmente espaçados). griddata : interpola os
dados permitindo gerar dados igualmente espaçados para fins de
plotagem. Ex. Sejam x, y, z (z função de x e y) vetores de dados espaçados de forma irregular: x=-2:0.05:2; y=4*rand(1, length(x))-2; % y entre -2 e 2; z=x .* exp(-x.^2- y.^2); xmin=min(x); ymin=min(y); xmax=max(x); ymax=max(y); xi=xmin:0.01*(xmax-xmin):xmax; yi=ymin:0.01*(ymax-ymin):ymax; zi = griddata (x,y,z,xi',yi); % preenche a grade definida por xi e yi interpolando % valores originais de x,y,z. contour (xi,yi,zi); Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Curvas de Níveis e Preparação de Grades de Dados A função contour permite traçar gráfico de curvas de níveis para uma superfície. - x 2 - y 2 z x = e Ex. Traçar curvas de níveis para a função . colormap winter x = -2:0.1:2; y = -2:0.1:2; [X,Y] = meshgrid(x,y); Z = X .* exp(-X.^2 - Y.^2); contour (x,y,Z) A função contour (x,y,z) representa os valores de x e y que correspondem a um dado valor (nível) de z. Valores de z podem ser colocados no gráfico usando-se o comando clabel.
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2 -2
-1. 5
-1
-0. 5
0
0.5
1
1.5
2
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Gráficos de Superfícies mesh: mesh(v) cria uma perspectiva tridimensional dos elementos
da matriz v. A superfície em malha, criada pelo comando mesh, é definida pelas coordenadas-Z (alturas) dos pontos acima de uma grade retangular no plano X-Y. surf :
semelhante à função mesh só que a superfície é sombreada.
meshc, surfc
: semelhante à mesh e surf , porém também mostram as curvas de níveis para a função. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Supor que se queira plotar z = f(x,y), onde x e y definem o domínio de f. Procede-se como segue: 1) Definir os vetores x e y em seus intervalos de valores; 2) Gerar um plano correspondente ao domínio. A superfície em malha é construída no topo deste plano com alturas determinadas pelos valores da função; 3) O comando meshgrid produz este plano criando duas matrizes com linhas e colunas repetidas dos vetores x e y; 4) Finalmente, a função é calculada nos elementos das matrizes resultantes. A função mesh (ou a função surf ) é então aplicada sobre o resultado. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Ex. Plotar um gráfico de superfície do valor absoluto da função, G (s
+
j w )
=
( s
2
-
2
w
+
s
1 + 1 ) + j ( 2
s
w
+
w
)
para -3 £ s £ 3 e -3 £ w £ 3. w = linspace(-3,3,50); % cria vetor com 50 elementos % linearmente espaçados entre -3 e 3 s = linspace(-3,3,50); [W,S] = meshgrid(w,s); re = S .^2 - W .^2 + S + 1; im = 2 * S .* W + W; den = re + j * im; g = 1 ./ abs(den); mesh(s,w,g)
8
6
4
2
0 4 2
4 2
0
0
-2
-2 -4
-4
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab n = 30; a = 1; r = 0.5; teta = pi * (0 : 2 : 2 * n) / n; fi = 2 * pi * (0 : 2 : n)' / n; x = (a + r * cos(fi)) * cos(teta); y = (a + r * cos(fi)) * sin(teta); z = r * sin(fi) * ones(size(teta)); surf (x,y,z) q = (a + r)/sqrt(2); axis([-q,q,-q,q,-q,q])
1 0.5 0 -0.5 -1 1 0.5
1 0.5
0
0
-0.5 -1
-0.5 -1
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab A cor em que as malhas em mesh e surf são traçadas pode ser definida (ou alterada) utilizando-se a propriedade EdgeColor. Por exemplo, 1
figure surf(x,y,z, 'EdgeColor', 'white') q = (a + r)/sqrt(2); axis([-q,q,-q,q,-q,q])
0.5 0
-0.5 -1 1 0.5
1 0.5
0
Também é possível iluminar um objeto com uma fonte de luz direcional, o que pode dar mais realismo a gráficos 3-D:
0
-0.5
-0.5 -1
-1
camlight left Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Nesses tipos de gráficos é utilizada a palheta (mapa) de cores vigente. colormap : estabelece o mapa de
cores a ser utilizado.
Os mapas de cores existentes são: hsv, hot , gray, cool, bone, copper , pink , white, flag, lines, colorcube, vga, prism , jet (pré-ajuste) , autumn, spring, summer e winter .
Prof. Adade
MATLAB BÁSICO O comando help graph3d lista, entre outros, os mapas de cores e suas características. colormap(cool(6));
% estabelece uso do mapa de cores cool ( tons variados % de violeta e azul), em seis tonalidades, no caso.
· Um mapa de n cores é definido por uma matriz de dimensão n´3. · Cada linha é interpretada como uma cor, onde o primeiro elemento especifica a intensidade de luz vermelha, o segundo, verde e o terceiro, azul. · A intensidade da cor pode ser especificada no intervalo de 0 a 1. Por exemplo, [0 0 0] é preta, [1 1 1] é branca, [1 0 0] é vermelha pura, [.5 .5 .5] é cinza e [127/255 1 212/255] é água-marinha.
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Impressão de Gráficos print
print nome-do-arquivo print
- salva o gráfico corrente no arquivo especificado;
-append nome-do-arquivo - acrescenta o gráfico corrente ao arquivo existente.
Matlab proporciona o recurso de salvar e recarregar um gráfico. O comando,
print
-dmfile nome-do-arquivo
cria um M-file contendo as informações necessárias para posteriormente reproduzir a figura. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Impressão de Gráficos Pode-se salvar figuras em vários formatos, p. ex.: print -dbitmap nome-do arquivo % formato Windows Bitmaps (*.bmp) print -dmeta nome-do-arquivo % formato Windows Metafile (*.wmf) print -dhpgl nome-do-arquivo % formato HP Graphic Language (*.hgl) print -deps nome-do-arquivo % formato Encapsulated Postscript (*.eps)
· A opção Copy Figur e do menu Edit na janela da figura também pode ser usada para se transferir uma figura do MATLAB para outra aplicação Windows. · A opção Save as (Export na versão 6) do menu File na janela de figura permite gravar uma figura em diferentes formatos. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab
Gráficos log-log
% Create a set of values for the damping fac tor zeta = [0.01 .02 0.05 0.1 .2 .5 1 ]; % Define a color for each damping factor colors = ['r' 'g' 'b' 'c' 'm' 'y' 'k']; % Create a ran ge of frequency values equally spaced % logarithmically w = logspace(-1, 1, 1000); % Plot the gai n vs. frequency for each of th e seven % damping factors figure; for i = 1:7 a = w.^2 - 1; b = 2*w*zeta(i); gain = sqrt(1./(a.^2 + b.^2)); loglog(w, gain, 'color', colors(i), 'linewidth', 2); hold on; end % Set the axis limits axis([0.1 10 0.01 100]); % Add a title and axis labels title('|G|(\omega) vs \omega'); xlabel('\omega'); ylabel('|G|(\omega)'); grid on;
http://www.mathworks.com/matlabcentral/fileexchange/35265-matlab-plot-gallery-log-log-plot/content/html/Loglog_Plot.html Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Gráficos tipo "pizza" Ex. Representar a distribuição dos conceitos dos alunos na 1 ª prova de MP-702 (2002). distribuicao_por_conceito = [4 5 15 5 9 1]; conceitos = {'D', 'I', 'R', 'B', 'MB', 'L'}; pie(distribuicao_por_conceito, conceitos) pie3(distribuicao_por_conceito, conceitos) MP-702 (2002) - Distribuição dos conceitos obtidos na 1 a prova L D MP-702 (2002) - Distribuição dos conceitos obtidos na 1 a prova MB L
I
MB
D B I R
B
R
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab
Histogramas
% Load nucleotide data load nucleotideData ncount; % Create the h istogram using the hist functi on figure; hist(ncount); colormap summer; % Add a legend legend('A', 'C', 'G', 'T'); % Add title and axis labels title('Histogram of nuc leotide type distrib ution'); xlabel('Occurrences'); ylabel('Number of sequence reads');
http://www.mathworks.com/matlabcentral/fileexchange/35275-matlab-plot-gallery-histogram-plot/content/html/Histogram_Plot.html Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab
Gráficos de barras (3D)
% Load monthly temperature data load MonthlyTemps temperatures months years; % Create the 3D bar chart figure; bar3(temperatures); axis([0 13 0 12 0 80]); % Add title and axis labels title('Boston Monthly Temperatures 1900-2000'); xlabel('Month'); ylabel('Year'); zlabel('Temperature'); % Change the x and y axis tick labels set(gca, 'XTickLabel', months); set(gca, 'YTickLabel', years);
http://www.mathworks.com/matlabcentral/fileexchange/35274-matlab-plot-gallery-bar-graph-3d/content/html/Bar_Plot_3D.html Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Area plot % Load population data load PopulationAge years population groups; % Create the area plot using the area function figure; area(years, population/1000000); colormap winter; % Add a legend legend(groups, 'Location', 'NorthWest'); % Add title and axis labels title('US Population by Age (1860 - 2000)'); xlabel('Years'); ylabel('Population in Millions');
http://www.mathworks.com/matlabcentral/fileexchange/35280-matlab-plot-gallery-area-plot/content/html/Area_Plot.html Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Graph plot % Create the connectivity graph of the Buckminster Fuller geodesic dome [B, V] = bucky; H = sparse(60, 60); k = 31:60; H(k, k) = B(k, k); % Visualize th e graph using t he gplot functi on (blue) figure; gplot(B - H, V, 'b-'); hold on; % Visualize a rotation of the graph (red) gplot(H, V, 'r-'); axis off equal;
http://www.mathworks.com/matlabcentral/fileexchange/35292-matlab-plot-gallery-graph-plot/content/html/Graph_Plot.html Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Omitir partes de uma curva num gráfico Partes de uma curva em um gráfico podem ser omitidas por meio do uso de NaN como valores de coordenadas. Ex. Plotar a função f(t) = sen(t), somente para |f(t)| £ 0,707. t = 0:pi/100:4*pi; f = sin(t); indice = find(abs(f) > (sqrt(2)/2)); t1 = t; t1(indice) = NaN * t(indice); plot(t1,f); O efeito é como o de suspender a pena do plotter nos valores NaN da coordenada.
Ilustracao de c omo omitir partes de uma curva em um grafico 1 0.8 0.6 0.4 0.2 ) t ( n i s
0 -0.2 -0.4 -0.6 -0.8 -1
0
2
4
6
8
10
12
14
t
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Omitir parte de uma superfície num gráfico 3D Outro uso de NaN está em fazer omitir parte de uma superfície ("fazer um buraco") tornando visíveis superfícies internas. Ex. Plotar duas esferas, uma dentro da outra, ilustrando essa situação no gráfico. view(3) % estabelece o pre-ajuste de vista em 3-D, AZ = -37.5, EL = 30. [X,Y,Z] = sphere(20); % cria esfera representada pelas matrizes (XxYxZ) 21x21 z1 = Z; z1(:,1:4) = NaN * z1(:,1:4); % substitui valores da coordenada-Z por NaN % isso vai ser responsavel por "criar o buraco" c1 = ones(size(z1)); % define caracteristicas de cor a ser utilizada em surface s1 = surface(2*X, 2*Y, 2*z1, c1); % cria superficie representada pelas matrizes % coordenadas, no caso a esfera exterior. Prof. Adade
hold z2 = Z; c2 = 2*ones(size(z2)); c2(:,1:4) = 3 * ones(size(c2(:,1:4))); s2 = surface(1.5*X, 1.5*Y, 1.5*z2, c2); % cria a esfera interior colormap([0 1 0; .5 0 0; 1 0 0]); grid set(gca,'box', 'on') 2
1
0
-1
-2 2 1
2 1
0 0
-1
-1 -2
-2
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Variando a cor de uma linha num gráfico É possível criar uma linha que assume cores especificadas por uma expressão matemática, ou que muda em função da coordenada-y. A técnica consiste em usar um objeto gráfico tipo superfície ( surface) e criar uma linha virtual (perspectivas). Uma aplicação desse recurso é usar a cor como uma quarta dimensão. Por exemplo, ao plotar a trajetória de um corpo, a cor da curva pode ser usada para representar a sua velocidade ou a aceleração. Ex. Criar uma linha virtual em que a cor é uma função dos valores da coordenada-y. % definir as coordenadas da linha virtual x = 0:pi/100:5*pi; y = sin(x); z = 0*x; % definir os valores da cor de cada coordenada da linha c = y; % gerar o grafico Prof. Adade
figure
surface([x;x], [y;y], [z;z], [c;c], ...
'facecolor ', 'none', ... 'edgecolor ', 'flat', ... 'linewidth', 3); % cria o grafico a partir da superficie definida set(gca, 'box', 'on', 'xtick', [0:pi:5*pi], ... 'XTickLabel', '0 |p |2p |3p |4p |5p', 'FontName', 'Symbol'); axis([0 5*pi -1.1 1.1]) 1 0. 8 0. 6 0. 4 0. 2 0 -0.2 -0.4 -0.6 -0.8 -1 0
p
2p
3p
4p
5p
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Criando uma imagem Arranjos 2-D podem ser apresentados como imagens, onde os elementos da matriz determinam brilho ou cor. Ex. load durer.mat % carrega as matrizes X (imagem) e map (colormap) % e o array de caracteres caption image (X) colormap(map) title(caption) Quando X for uma matriz M ´ N, os seus elementos são usados como índices no COLORMAP atual para determinar a cor.
Prof. Adade
Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Misturando superfícies e imagens (mapeamento de textura) A propriedade FaceColor do objeto gráfico tipo
surface possui as seguintes escolhas:
[none | {flat} | interp | texturemap] ou uma ColorSpec Quando a propriedade FaceColor é ajustada para texturemap , não há limite para as dimensões da matriz Cdata. Ex. Fundir uma imagem em uma esfera load earth; % carrega uma imagem da Terra % como uma matriz X % e uma matriz de cores, map. figure('Colormap', map); image(X); Prof. Adade
[x,y,z] = sphere(30); figure('Colormap', map); view(60,5); % estabelece o ponto de visada surface_handle = surface(x, y, z); set(surface_handle, ... 'FaceColor ', 'texturemap', ... 'CData', flipud(X)); set(gca, 'box', 'on')
Obs. As figuras foram exportadas do Matlab como .jpg e inseridas nestes slides. Prof. Adade
MATLAB BÁSICO Traçando Gráficos no Matlab Como colocar um gráfico dentro de outro gráfico. % Create data t = linspace(0,2*pi); t(1) = eps; y = sin(t); % Place axes at (0.1,0.1) with width and height of 0.8 figure; handaxes1 = axes('position', [0.1 0.1 0.8 0.8]); % Main plot plot(t, y); xlabel('t'); ylabel('sin(t)'); set(handaxes1, 'box', 'off'); % Adjust XY label font handxlabel1 = get(gca, 'xlabel'); set(handxlabel1, 'fontsize', 16, 'fontweight', 'bold'); handylabel1 = get(gca, 'ylabel'); set(handylabel1, 'fontsize', 16, 'fontweight', 'bold'); % Place second set of axes on same plot handaxes2 = axes('position', [0.6 0.6 0.2 0.2]); fill(t, y.^2, 'g'); set(handaxes2, 'box', 'off'); xlabel('t'); ylabel('(sin(t))^2'); % Adjust XY label font set(get(handaxes2, 'xlabel'), 'fontname', 'times') set(get(handaxes2, 'ylabel'), 'fontname', 'times')
Prof. Adade
% Add another set of axes handaxes3 = axes('position', [0.25 0.25 0.2 0.2]); plot(t, y.^3); set(handaxes3, 'box','off'); xlabel('t'); ylabel('(sin(t))^3');
http://www.mathworks.com/matlabcentral/fileexchange/35245-matlab-plot-gallery-plot-in-plot/content/html/Plot_in_Plot.html Prof. Adade
MATLAB BÁSICO
Traçando Gráficos no Matlab Como criar animação e GIFs animados.
This is an example of how to create animations and animated GIFs in MATLAB®. In this example, we will animate the motion of a double-pendulum. We solve the ordinary differential equation using ode45. Read about the getframe and imwrite functions in the MATLAB® documentation. function dy = double_pendulum(t, y, m, L) % System of OD Es for a double pendulum (mass m and link len gth L) % % See http://en.wikipedi a.org/wiki/Doub le_pendulum for the differential % equations % Copyright 2010 The MathWorks, Inc. g = 9.81; theta1 = y(1); theta2 = y(2); p1 = y(3); p2 = y(4);
% % % %
angle 1 angle 2 momentum momentum
% The derivatives dy(1) = 6/(m*L^2) * (2*p1-3*cos(theta1-theta2)*p2) / ... (16-9*cos(theta1-theta2)^2); dy(2) = 6/(m*L^2)*(8*p2-3*cos(theta1-theta2)*p1) / ... (16-9*cos(theta1-theta2)^2); dy(3) = -1/2*m*L^2*(dy(1)*dy(2)*sin(theta1-theta2)+3*g/L*sin(theta1)); dy(4) = -1/2*m*L^2*(-dy(1)*dy(2)*sin(theta1-theta2)+g/L*sin(theta2)); dy = dy(:);
Prof. Adade
% Parameters and initial conditions % mass, link length, initial angles, simulation time m = 1; L = 1; theta1 = 3*pi/4; theta2 = 3*pi/8; t = linspace(0, 10, 200); % Solving ODE of a double pendulum
[T,Y] = ode45( @(t, x) double_ pendulum(t, x, m, L), t, [theta1, theta2, 0, 0]) ; % Calculating joint co ordinates for animat ion purposes x = [ L*sin(Y(:,1)) , L*sin(Y(:,1))+L *sin(Y(:,2))]; y = [-L*cos(Y(:,1)), -L*cos(Y(:,1))-L*cos(Y(:,2))]; % Convert radians to degrees ang = Y(:,1:2)*180/pi; % Set up first frame figure('Color', 'white'); subplot(2,1,1); plot(T, ang, 'LineWidth', 2); hh1(1) = line(T(1), ang(1,1), 'Marker', '.', 'MarkerSize', 20, ... 'Color', 'b'); hh1(2) = line(T(1), ang(1,2), 'Marker', '.', 'MarkerSize', 20, ... 'Color', [0 .5 0]); xlabel('time (sec)'); ylabel('angle (deg)'); subplot(2,1,2); hh2 = plot([0, x(1,1); x(1,1), x(1,2)], [0, y (1,1);y(1,1), y(1, 2)], ... '.-', 'MarkerSize', 20, 'LineWidth', 2); axis equal axis([-2*L 2*L -2*L 2*L]); ht = title(sprintf('Time: %0.2f sec', T(1))); % Get figure size pos = get(gcf, 'Position'); width = pos(3); height = pos(4); % Preallocate data (fo r storing frame data) mov = zeros(height, width, 1, length(T), 'uint8');
Prof. Adade
% Loop through by changing XData and YData for id = 1:length(T) % Update graphics da ta. This is more efficien t than recreating plots . set(hh1(1), 'XData', T(id) , 'YData', ang(id, 1)); set(hh1(2), 'XData', T(id) , 'YData', ang(id, 2)); set(hh2(1), 'XData', [0, x(id, 1)] , 'YData', [0, y(id, 1)]); set(hh2(2), 'XData', x(id, :) , 'YData', y(id, :)); set(ht, 'String', sprintf('Time: %0.2f sec', T(id))); % Get frame as an image f = getframe(gcf); % Create a co lormap for the first frame. Fo r the rest of t he frames, % use the same colormap if id == 1 [mov(:,:,1,id), map] = rgb2ind(f.cdata, 256, 'nodither'); else mov(:,:,1,id) = rgb2ind(f.cdata, map, 'nodither'); end end % Create animated GIF imwrite(mov, map, 'animation.gif', 'DelayTime', 0, 'LoopCount', inf);
Prof. Adade
http://www.mathworks.com/matlabcentral/fileexchange/35251-matlab-plot-gallery-animation/content/html/Animation.html
Prof. Adade
MATLAB BÁSICO
Criando um Filme/Animação.
(1) Continuamente apagar e redesenhar os objetos na tela, fazendo alterações incrementais em cada retraçado; ou (2) Salvar um número de quadros distintos e então apresentá-los como um filme. Ex. Chaturvedi, D.K. - Modeling and Simulation of Systems Using Matlab and Simulink. CRC Press, 2010, p. 643-644. "Ilustração do Movimento Browniano" n=300; s = 0.02; nframes = 50; x = rand(n,1) - 0.5; y = rand(n,1) - 0.5; h = plot(x,y,'.'); % gera pontos aleatoriamente posicionados no plano (x,y) set(h,'MarkerSize',18); axis([-1 1 -1 1]), axis square grid off for k=1:nframes x = x + s*randn(n,1); y = y + s*randn(n,1); % efetua movimento aleatório de cada ponto set(h, 'XData', x, 'YData', y) M(k) = getframe; % captura em M o novo frame end movie(M,30) % apresenta a sequencia de 30 frames guardados em M Prof. Adade
MATLAB BÁSICO
Programação em MATLAB
Prof. Adade
MATLAB BÁSICO Fluxo de Programação
i. malhas for Ex:
m= ; n= ; for j = 1: m for k = 1: n A(j,k) = 1 / (j+k-1); end end produz a matriz de Hilbert mxn.
ii. malhas while while relação comandos end Os comandos são repetidamente executados enquanto a relação for verdadeira. Prof. Adade
MATLAB BÁSICO Fluxo de Programação
Ex. Determinar o primeiro valor >= 1.5 e sua posição no vetor x. x = randn(200,1); k = 1; m = 0; valor = 0; ref = 1.5; while x(k) < ref k = k+1; if k > length(x), break, end end if (k <= length(x)), m=k, valor = x(k), end m=
6
valor = 1.6342 Prof. Adade
MATLAB BÁSICO Fluxo de Programação
iii. Condicionais e Ramificações Forma geral: if
relação comandos elseif relação comandos
else
comandos end
Os comandos são executados somente se a relação for verdadeira. Prof. Adade
MATLAB BÁSICO Fluxo de Programação switch : permite programar a execução condicionada de comandos quando há muitas opções a considerar. Faz comutar entre vários casos com base em uma expressão.
As palavras reservadas case e otherwise delineiam os grupos de comandos.
switch expressão case expressão_do_caso
comandos case {expressão1_do_caso, expressão2_do_caso,... } comandos ... otherwise, comandos end •
No exemplo, são executados os comandos do primeiro caso em que expressão (que deve ser um escalar ou uma string) “casar ” com a expressão_do_caso. Quando a expressão do caso for um array de células, como é o segundo caso acima, os comandos são executados se expressão "casar" com quaisquer dos elementos do array. Se nenhuma das expressões_dos_casos "casar" com a expressão de switch, são executados os comandos do caso otherwise (se existir). Prof. Adade
Ex.
h = 3.5; switch h case 2.0, f= 2*h case {1.0, 3.0, 4.0, 5.0}, f = sqrt(h) otherwise f = h^2 end f= 12.2500
Prof. Adade
MATLAB BÁSICO Fluxo de Programação · O comando break interrompe a (sai da) execução de um laço for ou while. Usualmente segue um comando if para concluir um laço na ocorrência de uma condição específica. Para laços aninhados, break interrompe o mais interno. · O comando continue passa o controle para a próxima iteração da malha for ou while na qual aparece, ignorando quaisquer comandos restantes no corpo da malha. Para laços aninhados, o controle é passado para a próxima iteração contem continue. · Um laço ( for, while, if , (comando end).
switch)
só é executado após a finalização de sua sintaxe
· O comando return termina a sequência atual de comandos e retorna o controle para a função chamadora ou para o teclado. Prof. Adade
MATLAB BÁSICO Fluxo de Programação try ... catch
Altera o controle de fluxo se um erro for detectado durante a execução. try , comando. ..., comando, catch, comando, ..., comando, end
· Os comandos entre try e catch são executados até ocorrer um erro. Na ocorrência de erro, os comandos entre catch e end então são executados. (Sem try ... catch a execução seria terminada na ocorrência de erro).
· Se ocorrer um erro entre catch e end a execução é terminada a menos que outra sequência try ... catch tenha sido estabelecida.
Prof. Adade
M-f i l es •
Consistem de uma sequência de comandos Matlab, possivelmente incluindo referência a outros m-files. Automatizar uma sequência longa de comandos ( script ) Incluir novas funções ao Matlab ( function)
1. Script % Um m-file para calcular números de Fibonnaci f = [1 1]; k = 1; while f(k) + f(k+1) < 1000 f(k+2) = f(k) + f(k+1); k = k+1; end stem(f)
arquivo fibno.m
Entrando-se o comando, fibno Matlab executa os comandos em fibno.m, que calculam os 1000 primeiros números da série de Fibonnaci, e cria um gráfico. Script: não recebe parâmetros; utiliza e cria variáveis no espaço-base de trabalho. Prof. Adade
M-f i l es 2. Function • • • •
A primeira linha de um m-file implementando uma função traz a palavra “function”. Argumentos podem ser passados. Variáveis definidas dentro do m-file são variáveis locais. Podem ser chamadas de outros m-files.
function y = mean(x) % MEAN Valor médio. Para vetores, mean(x) retorna o valor médio. % Para matrizes, mean(x) é um vetor linha contendo o valor % médio de cada coluna. [m,n] = size(x); if m == 1, m = n; % trata vetor linha isolado end y = sum(x)/m;
arquivo mean.m
Chamada, por exemplo, z = mean(v)
Prof. Adade
MATLAB BÁSICO Procedimentos para criar/alterar um m-file Procedimento básico: editar ou reeditar um arquivo, que deve ser gravado com extensão .m, utilizando-se um editor de arquivos tipo texto. · Usar o editor/depurador de arquivos de texto ( Matlab Editor/Debugger ) que vem integrado ao Matlab (vide figura): selecionar a opção File/HOME ® New ou Open. Usar o comando edit: esse editor é o programa meditor.exe localizado no subdiretório \bin\win32\ do Matlab. Usar outro editor: pode ser definido por meio da opção File/Preferences na barra de menus. ·
· ·
Prof. Adade
MATLAB BÁSICO Procedimentos para criar/alterar um m-file Ex. Criar um m-file para cálculo da função de Rosenbrock:
h( x 1 , x 2)
= 100 ( x - x ) + (1 - x ) 2
2 1
2
2
1
Seja a função chamada de banana e o m-file de banana.m: function y = banana(x1,x2) y = 100 .* (x2 - x1.^2) .^2 + (ones(size(x1)) - x1) .^2;
Prof. Adade
Esta função pode então ser visualizada, por exemplo, pelo uso dos comandos: x1 = 0 : .01 : 2 ; x2 = 0 : .01 : 4; [X1,X2] = meshgrid(x1,x2); z = BANANA(X1,X2); v = logspace(-2,0,5); % o vetor v controla quais contour(x1,x2,z,v) % níveis são plotados, no caso, são plotadas 5 % curvas de níveis de z entre 0.01 e 1.0. xlabel('x1'), ylabel('x2') title('Curvas de nível da “função banana” de Rosenbrock') Função de Rosenbrock, z = 100 (x - x ) + ( 1 - x ) 2
Uma outra visualização desta função pode ser obtida com o uso da função mesh:
1
1
8
6
x1 = 0 : .1 : 2 ; x2 = 0 : .1 : 4; [X1,X2] = meshgrid(x1,x2); z = banana(X1,X2); logz = log(1 + z); % usa-se 1+z para se evitar log(0) mesh(x1,x2,logz)
) z + 4 1 ( g o l
2
0 4 3
2 1.5
2 x
2
1
1
0.5 0
0
x
1
Prof. Adade
MATLAB BÁSICO Procedimentos para criar/alterar um m-file · O acesso a m-files e seus diretórios pode ser feito também utilizando o diretório atual ( Current Directory Browser ), ativado no Desktop.
browser de
· Por meio desse browser pode-se visualizar, criar, renomear e alterar diretórios, abrir, substituir e executar conteúdo de arquivos. · Várias operações podem ser selecionadas utilizando o menu de contexto que se apresenta, ao selecionar-se o arquivo e pressionando o botão direito do mouse. Havendo um erro na execução de um m-file, ao mover-se o cursor para a mensagem de erro e teclando-se Enter, faz abrir o m-file no Editor, posicionado na linha contendo o erro. Reiniciar Matlab ou usar a função rehash para recarregar o diretório e atualizar a informação guardada na memória computacional ( cache), antes de usar um arquivo novo ou reeditado gravado na árvore de diretórios do Matlab. Prof. Adade
MATLAB BÁSICO · M-files de função podem conter código de mais de uma função. A primeira, que é evocada com o nome do M-file, é chamada de função primária. As outras são subfunções, só visíveis para a função primária ou para subfunções no mesmo arquivo. · As subfunções aparecem consecutivamente. Cada subfunção inicia com a sua própria linha de definição de função. · Funções particulares são funções que residem em subdiretórios nominados private. · Elas são visíveis somente por funções no diretório antecessor. Isto é útil quando se quer criar uma versão própria de uma função enquanto retendo a original em outro diretório. · Matlab procura primeiro as funções particulares antes dos M-files de funções padrões.
Prof. Adade
MATLAB BÁSICO P-codes Arquivo em P-code ( parsed code): versão pré-processada de uma function ou script . Finalidade: ganhar tempo na sua utilização pelo Matlab ou ainda não revelar algoritmos utilizados na preparação do m-file. pcode mean
% gera versão em p-code
mean.m é processado ( parsed ) e o pseudo-código resultante é gravado como mean.p.
Prof. Adade
MATLAB BÁSICO Trajeto de Busca do MATLAB •
O trajeto ("path") de busca de funções pelo MATLAB está na variável matlabpath.
•
Ao teclar-se o comando
•
pathdef esse caminho é
mostrado na tela.
Durante uma sessão, para se incluir algum diretório no trajeto de busca do MATLAB pode-se proceder da seguinte maneira: P = pathdef % coloca em P uma string contendo o trajeto atual path(P, 'c:\diretorio') % inclui no trajeto o diretório especificado na string Opção (botão) SetPath do menu File (HOME): permite visualizar e modificar o trajeto. Alterações se efetivam imediatamente. (ou comando pathtool) Obs. Para alterações permanentes, usar o botão Save.
Prof. Adade
MATLAB BÁSICO Variáveis Globais §
§
§ §
Todas as variáveis no MATLAB são armazenadas em um espaço-de-trabalho-base (cujo conteúdo é mostrado pelo comando whos). M-files do tipo funções têm seus próprios espaços-de-trabalho; as variáveis definidas no espaço de trabalho de uma função são removidas da memória automaticamente, quando retorna-se da função. Um M-file do tipo script armazena as suas variáveis no espaço de trabalho do qual foi chamada; Há um terceiro tipo de espaço de trabalho, denominado global , onde as variáveis globais são armazenadas (seu conteúdo pode ser visualizado pelo comando whos global ). As variáveis de um outro espaço de trabalho podem ser declaradas globais através do comando,
global
nome-da-variável
Obs. A variável deve estar declarada como global em todas as funções em que é compartilhada, inclusive no espaço de trabalho base. Os espaços de trabalho base e de funções podem ser acessados na depuração de m-files usando-se o campo Stack no Workspace browser e por meio do Editor/Debugger . Prof. Adade
MATLAB BÁSICO Variáveis Persistentes Uma variável local a uma função pode ser declarada persistente, tal que seu valor é retido na memória e não se altera entre chamadas sucessivas da função. Variáveis são declaradas persistentes na forma, persistent
nome-da-variável
· Elas diferem das variáveis globais na medida em que só são reconhecidas nas funções em que são declaradas. · Variáveis persistentes permanecem na memória até que o m-file da função seja removido da memória (o comando mlock mantém um m-file na memória até o fechamento da sessão de Matlab) ou quando é alterado. Prof. Adade
MATLAB BÁSICO Strings Uma sequência de dados alfanuméricos (texto) define uma string e é fornecida entre apóstrofos. Ex.
s = 'Sistemas' s=
Sistemas O texto é armazenado em um vetor, um caractere por elemento. Ex. size(s) ans = 1 8 Os caracteres são armazenados como valores ASCII e as funções esses valores: double(s) ans = 83 105 115 116 101 109 97 115
abs
e
double determinam
Prof. Adade
MATLAB BÁSICO Strings Ex. Eliminar de um texto as tags (caracteres que estejam entre < e > inclusive). Por exemplo, Texto = 'A computação pode ser definida como a busca de uma solução para um problema a partir de entradas (inputs) e tem seus resultados (outputs) depois de trabalhada através de um algoritmo. É com isto que lida a teoria da computação, subcampo da ciência da computação e da matemática.' double(Texto); m=0; n=1; for k = 1:length(ans) if m==0 & ans(k)~=60, TextoR(n) = ans(k); n = n+1; else m = 1; end if ans(k) ==62, m = 0; end end TextoRchar = char(TextoR)
% Em ans retorna o codigo ASCII de cada caractere de Texto % Obs. 60 é o codigo ASCII do caractere <
% Obs 62 é o codigo ASCII do caractere >
Obs. O programa acima não vai funcionar corretamente se o texto contiver o caractere < isoladamente, isto é, ele não definir uma tag. Prof. Adade
MATLAB BÁSICO A concatenação de texto é feita como no seguinte exemplo: s=
s = [s , ' Dinâmicos'], size(s)
Sistemas Dinâmicos ans = 1 18 MATLAB tem disponível algumas funções aplicadas a variáveis do tipo string . Por exemplo, disp ('Uma nova iteração vai ser iniciada')
mostra o texto entre apóstrofos na tela; char('Alunos', 'Matérias', 'Notas')
ans = Alunos Matérias Notas
forma um array de caracteres. Prof. Adade
MATLAB BÁSICO Todo comando da forma, nome_da_função argumento
pode ser escrito na forma, nome_da_função
('argumento ')
na qual o modificador argumento é fornecido como um argumento de tipo string da função. Isso pode ser explorado convenientemente quando se precisa compor um argumento a partir de várias partes. Ex. Deseja-se processar dados experimentais que foram armazenados em 8 arquivos, denominados Teste1.dat, Teste2.dat, ..., Teste8.dat. Esses dados poderiam ser carregados utilizandose os seguintes comandos, for
m = 1:8 dados = ['Teste' int2str(m) '.dat'] % a função int2str converte um inteiro em string load(dados) % comandos para processar os dados do m-ésimo arquivo M
end Prof. Adade
MATLAB BÁSICO Comando eval O comando eval (s), onde s é uma string, permite que uma string seja executada como uma expressão ou comando Matlab. Ex. F = 'exp(-X) '; X = [ 0 1 2]; eval(F) ans = 1.0000 0.3679 0.1353 No exemplo anterior a esse, usando-se eval: for
m = 1:8 dados = ['load Teste' int2str(m) '.dat'] eval(dados) % comandos para processar os dados do m-ésimo % arquivo M
end Prof. Adade
MATLAB BÁSICO Comando eval O uso do comando eval permite o cálculo, repetidas vezes, de uma função ou fórmula matemática sem ser necessária a sua redigitação durante uma sessão Matlab. Exemplo. Calcular a função polinomial polinomial f(x) f(x) = x 5 – 2 2 x4 + x 3 – 3 3 x2 + 5 x – 1 em vários pontos. f = 'x^5 – 2*x^4 2*x^4 + x^3 – 3*x^2 3*x^2 + 5*x – 1'; 1'; x = 3; ans =
95
x = -7; ans =
eval(f)
eval(f)
-22135 Prof. Adade
MATLAB BÁSICO Entrada de Dados pelo Teclado A função input permite que o usuário forneça dados interativamente, interativamente, pelo teclado. Ex. ou
n = input ('Fornecer o número de iterações: ') n = input ('Fornecer o número de iterações: ', 's')
% n é string
mostra a mensagem na tela e há uma pausa no programa enquanto o usuário digita o dado de entrada; ao pressionar a tecla enter o dado é atribuído a n e a execução tem prosseguimento. prosseguimento.
Prof. Adade
MATLAB BÁSICO Mostrar na Tela uma Mensagem A função fprintf imprime na tela uma string definida como argumento no comando. Ex.
fprintf('Cálculo da função sen(x)/x \n ')
Obs. O uso de \n no comando fprintf faz saltar uma linha na impressão.
Prof. Adade
MATLAB BÁSICO Operações em Arquivos (I/O) fread, fscanf , fgets, fgetl, dlmread, textread, csvread, imread : usadas para ler fwrite, dlmwrite, imwrite : usadas para
escrever dados
Leitura e gravação em variados formatos, em um arquivo identificado, portanto, propiciando recursos adicionais (além dos comandos save e load ) para importar e exportar dados. Estas funções permitem especificar o formato de leitura ou gravação. Exs. idr = fopen('dados.dat','r');% abre o arquivo de dados para leitura edefine um identificador p/ele F = fread(idr); % lê todo o arquivo de dados binários colocando-os na matriz F status = fclose(idr); % fecha o arquivo associado ao identificador idr idw = fopen('magic5.bin','wb'); % abre arquivo binário para gravação fwrite(idw,magic(5),'integer*4'); % grava um arquivo binário contendo os 25 elementos da % matriz gerada por magic(5), armazenados como inteiros % de 4-bytes. Prof. Adade
MATLAB BÁSICO Som no MATLAB sound(y) converte um vetor y de valores em som. O vetor é auto-escalonado de modo que máximo e mínimo valores em y correspondam à máxima e mínima amplitude permitidas pelo hardware de som do computador. O som é produzido na taxa de amostragem pré-ajustada; sound(y,Fs) reproduz o som numa freqüência de amostragem de Fs Hz. wavread Permite “carregar ” para o ambiente Matlab um arquivo de som; [y,Fs,Bits] = wavread(wavefile) carrega um arquivo em formato .wav retornando os dados amostrados na variável y (amplitudes no intervalo [-1,1]), a taxa de amostragem, em Hertz, na variável Fs e o número de bits por amostra usado para codificar os dados no arquivo .wav, na variável Bits. wavwrite Grava um arquivo .wav; wavwrite(y,Fs,Nbits, wavefile): sound
y Fs Nbits wavefile
Os dados amostrados a serem gravados Taxa na qual os dados foram amostrados Força gravar um formato de arquivo de Nbits (<=16) Uma string com o nome do arquivo .wav a ser criado Prof. Adade
soundsc
Escalona um vetor e produz som; soundsc (Y,...) é o mesmo que sound(Y,...) exceto que os dados são escalonados tal que o som é produzido tão alto quanto possível sem clipping; soundsc (Y,...,SLIM) onde SLIM = [SLOW SHIGH] ajusta o escalonamento tal que os valores em Y entre SLOW e SHIGH são mapeados no intervalo sonoro total (o valor pré-ajustado é SLIM = [MIN(Y) MAX(Y)]
Funções que permitem tocar ou gravar som através de dispositivos de audio do computador tipo-PC são wavplay e wavrecord. Ex. Carregar o arquivo train.mat, reproduzir o som (apito de uma locomotiva) e plotar o gráfico correspondente: load train sound(y,Fs) t=(0:length(y)-1)/Fs; plot(t,y)
Prof. Adade
MATLAB BÁSICO Uso de subrotinas/programas em C ou FORTRAN · recurso MEX-file do MATLAB (que conecta dinamicamente, em tempo de execução, o interpretador MATLAB à subrotina C ou FORTRAN) permite carregar e executar uma subrotina em C ou FORTRAN de dentro de um programa MATLAB . · Também é possível chamar uma função MATLAB de dentro de uma subrotina C ou FORTRAN. Essa biblioteca que fornece esses e outros recursos de interfaceamento externo proporcionados pelo Matlab, que possibilitam a comunicação entre o Matlab e programas e dispositivos externos (inclusive tecnologias orientadas a objetos como Java e ActiveX), são denominados de Interface para Programas de Aplicação ( Matlab Application Program Interface – API). Há documentação do programa específica de orientação para o uso desses recursos, acessada através do help on-line: MATLAB ® Using MATLAB ® External Interfaces/API. Prof. Adade
Representação de Funções Matemáticas, Equações e Cálculos Associados
Prof. Adade
MATLAB BÁSICO Representação de Funções Matemáticas Uma classe de funções do MATLAB trabalha não com matrizes numéricas, mas com funções matemáticas. Funções matemáticas são representadas por M-files (arquivos com extensão .m) ou como objetos inline (na linha de comando). Por exemplo, a função, y( x)
=
1 1 + -6 x x 0 , 3 0 , 01 0 , 9 0 , 04 + + ( ) ( ) 2
2
é tornada disponível ao ambiente MATLAB editando-se um M-file chamado, por exemplo, humps.m: function y = humps(x) y = 1 ./ ((x - 0.3) .^2 + 0.01) + 1 ./ ((x - 0.9) .^2 + 0.04) - 6; Esta função pode então ser visualizada:
100
80
60
40
x = -1 : .01 : 2 ; plot(x, humps(x),'r')
20
0
-20 -1
-0.5
0
0.5
1
1.5
2
Prof. Adade
MATLAB BÁSICO Representação e Plotagem de Funções Matemáticas Alternativamente, a função "humps" poderia ser representada na linha de comando criando-se um objeto inline a partir de uma string: y = inline('1 ./ ((x - 0.3) .^2 + 0.01) + 1 ./ ((x - 0.9) .^2 + 0.04) – 6'); Calculando-se y em x = 2, por exemplo, y(2.0) ans = -4.8552 Funções de mais de uma variável podem ser criadas com inline especificando-se os nomes dos argumentos de entrada juntamente com a string definindo a expressão. A função fplot proporciona uma maneira eficiente para se plotar um gráfico de uma função matemática. Por exemplo, o comando fplot('humps', [-1,2]) produz o gráfico da função dada acima no domínio x indicado. Prof. Adade
A função matemática pode ser definida por uma expressão simbólica, evitando-se, com isso, a criação de um M-file. No exemplo dado, fplot('1 ./ ((x - 0.3) .^2 + 0.01) + 1 ./ ((x - 0.9) .^2 + 0.04) - 6', [-1,2])
Outra função que pode ser usada para plotagem de funções matemáticas é ezmesh, ezsurf, ezcontour, ezpolar etc.) ezplot(f,
ezplot (e
também
[a,b]) % plota a f(x) no intervalo a < x < b.
Para funções definidas implicitamente, isto é, f(x,y) = 0, ezplot(f,
[xmin,xmax,ymin,ymax])
plota f(x,y)=0 nos intervalos especificados. Por exemplo, ezplot('x^3 + y^3 - 5*x*y + 1/5',[-3,3])
Prof. Adade
% Cria uma sér ie de figure; ezplot('y^2 - x^2 + ezplot('y^2 - x^2 + ezplot('y^2 - x^2', ezplot('y^2 - x^2 ezplot('y^2 - x^2 -
curves pa ra a função f(x ,y) = y^2 - x^2 + c 4', [-3 3], 2', [-3 3], [-3 3], 2', [-3 3], 4', [-3 3],
[-3 [-3 [-3 [-3 [-3
3]); hold on; 3]); 3]); 3]); 3]);
% Ajusta o map a de cores, col ormap, para plo tar a função % em azul colormap([0 0 1]); grid on; % Acrescenta título title('y^2 - x^2 - c = 0 para c = [-4, 4]');
Prof. Adade
MATLAB BÁSICO Representação e Plotagem de Funções Matemáticas O comando ezplot(x,y, [tmin,tmax]) plota a curva planar definida parametricamente, x = x(t) e y = y(t) no domínio tmin < t < tmax. Por exemplo, ezplot('t*cos(t)','t*sin(t)',[0,4*pi])
Prof. Adade
MATLAB BÁSICO Representação e Plotagem de Funções Matemáticas % Create the plot using the functions % x = sin(pi*u)*sin(pi*u)*cos(v) ; y = sin(pi*u)*sin(pi*u)*sin(v) ; z = u % with - 1 < u < 1 and 0 < v < 2*pi figure; ezsurf('sin(pi*u)*sin(pi*u)*cos(v)', ... 'sin(pi*u)*sin(pi*u)*sin(v)', ... 'u', [-1 1 0 2*pi]); % Change the view angle for the plot view(135,15);
http://www.mathworks.com/matlabcentral/fileexchange/35307-matlab-plot-gallery-function-surface-plot/content/html/Function_Surface_Plot.html Prof. Adade
MATLAB BÁSICO Equações Não Lineares e Otimização fminbnd
-
fminsearch
- mínimo de uma função multivariável.
-
solução de um sistema de equações não-lineares (zeros de uma função multivariável)
-
zero de uma função de uma variável.
fsolve
fzero
mínimo de uma função de uma variável.
Prof. Adade
MATLAB BÁSICO Equações Não Lineares e Otimização Ex. Localizar o mínimo da função humps(x) na região [0.5 , 1]: xm = fminbnd ('humps', 0.5, 1) xm = 0.6370 O valor da função no mínimo é, y = humps(xm) y= 11.2528 fplot(@humps,[0 2]); grid; hold on plot(xm, humps(xm), 'ro') hold off
Prof. Adade
MATLAB BÁSICO Equações Não Lineares e Otimização Ex. Localizar o zero de humps(x) que está próximo a “1”: xz1 = fzero('humps', 1) xz1 = 1.2995
fplot('humps', [0 2]); grid hold on plot(xz1,0, 'ro') hold off
Prof. Adade
MATLAB BÁSICO Equações Não Lineares e Otimização
Resolver o Sistema de Equações: 2
sen x + y + log(z) = 7 3 x + 2 y – z-3 = -1 x+y+z=5 Passo 1: definir um sistema equivalente, f 1(x,y,z) = 0 f 2(x,y,z) = 0 f 3(x,y,z) = 0
Passo 2 : definir o cálculo de f 1, f 2 e f 3 em um m-file (xyzf.m, p.ex.) function q = xyzf(p) x = p(1); y = p(2); z = p(3); q = zeros(3,1); % pré-alocação q(1) = sin(x) + y^2 + log(z) - 7; q(2) = 3*x + 2^y - z^3 + 1; q(3) = x + y + z - 5; Passo 3 : chamar a função fsolve
[xsol,valor] = fsolve(@xyzf, [1 1 1]') ou
[xsol,valor] = fsolve('xyzf', [1 1 1]') Prof. Adade
MATLAB BÁSICO Equações Não Lineares e Otimização Ex. Determinação de mínimo de função multivariável usando definição da função na linha de comando. Seja, 2
2
z = f ( x,y) = x + x y + y + 3 x
3 y + 1
z = inline('X(1) .^ 2 + X(1) .* X(2) + X(2) .^ 2 + 3 .* X(1) - 3 .* X(2) + 1','X') z= Inline function:
X = [1
z(X) = X(1) .^ 2 + X(1) .* X(2) + X(2) .^ 2 + 3 .* X(1) - 3 .* X(2) + 1
2];
fminsearch(z,X)
ans =
-3.0000 3.0000 Ou, simplesmente, fminsearch(inline('X(1) .^ 2 + X(1) .* X(2) + X(2) .^ 2 + 3 .* X(1) - 3 .* X(2) + 1','X'),[1 2]) Prof. Adade
MATLAB BÁSICO Integração Numérica MATLAB propicia as funções quad, quadl, dblquad (integral dupla) e trapz para integração numérica de funções. As funções quad e quadl requisitam como argumento de entrada o nome (ou o handle) da função, enquanto que trapz requer os valores da função a ser integrada. Ex. Determinar a área sob a curva da função "humps" no intervalo [0,1]. A função "humps" está definida em um M-file denominado humps.m: fplot(@humps, [-1 2]) hold on patch([ 0 0:0.02:1 1 0.5], [0 humps(0:0.02:1) 0 0], 'r') hold off
q = quad(@humps, 0, 1) q=
100
80
60
40
20
0
-20 -1
-0.5
0
0.5
1
1.5
2
29.8583 Prof. Adade
MATLAB BÁSICO Solução de Equações Diferenciais Funções MATLAB para resolver equações diferenciais ordinárias são: ode23 : ode45 : ode23s : ode23t : ode23tb: ode113 :
método Runge-Kutta, fórmula (2,3) método Runge-Kutta, fórmula (4,5) método de Rosenbrock regra trapezoidal regra trapezoidal-fórmula de diferenciação para trás de ordem 2 método de Adams
ode23, ode45 e ode113 são usadas para equações diferenciais nonstiff ; ode15s, ode23s e ode23tb são usadas para equações diferenciais stiff ; ode15s também se aplica a equações diferenciais-algébricas; ode23t a equações diferenciais algébricas e equações diferenciais moderadamente stiff .
Prof. Adade
MATLAB BÁSICO Solução de Equações Diferenciais Problemas classificados como stiff apresentam dinâmicas em escalas de tempo muito distintas (muito grandes e muito pequenas comparadas ao intervalo de integração). Ex. A equação diferencial, &&(t ) y
+ 100 y& (t ) + 0,9999 y (t ) = 0
,
y(0)
=1,
y& (0) = 0
tem como solução, y(t ) = -0,0001 e
-99,99t
+ 1,0001 e -0,01t
O primeiro termo inicia com magnitude 0,0001 e decai rapidamente, e o segundo termo inicia com magnitude 10000 vezes maior e decai muito lentamente relativamente ao primeiro termo. Exercício. Verificar que o solver ode15s fornece solução rapidamente, enquanto que ode45 não. Prof. Adade
MATLAB BÁSICO Solução de Equações Diferenciais A sintaxe básica de chamada para todas essas funções é: [t,y] = solver (nome da função, faixa , x0) t - o vetor de instantes de tempo; y - array solução; cada linha em y corresponde à solução em um instante de tempo retornado na linha correspondente de t; solver - uma das funções que solucionam equações diferenciais, listadas acima; nome da função - é a função que calcula dy/dt ; faixa - é um vetor especificando o intervalo de solução, p. ex. [ t0 tf ], onde t0 especifica o instante inicial e tf o instante final da solução; e x0 - vetor de condições iniciais.
A sintaxe acima pode conter novos elementos dependendo do solver utilizado.
Prof. Adade
MATLAB BÁSICO Solução de Equações Diferenciais Matlab possui vários outros recursos para solução de equações diferenciais, por exemplo, para resolver problemas de valor de contorno ( boundary value problems ) e alguns tipos de equações diferenciais parciais. Recomenda-se olhar o tutorial disponibilizado no Matlab sobre o assunto, acessado por meio do comando odedemo.
Prof. Adade
MATLAB BÁSICO Solução de Equações Diferenciais Ex. 1.
Equação de Van der Pol 2 d 2 d y + y y + y = 0 ( ) 1 2 dt dt
Na forma de espaço de estados, definindo x2 = y e x1 = dy/dt , tem-se, d
x1 dt
=
x1
d
=
x1
x 2 dt
(1 -
x22
)-
x2
Criar um M-file, denominado vderpol.m, representando essas equações diferenciais: function xdot = vderpol (t,x) function xdot = vderpol (t,x) xdot = zeros(2,1); xdot = [ 1 -(1 + x(1)*x(2)) ; 1 0 ] * x; xdot(1) = x(1) .* (1 - x(2) .^2) – x(2); Alternativamente, xdot(2) = x(1) Prof. Adade
Alternativamente, usando o Editor de Equações Diferenciais (DEE): >> dee
Prof. Adade
Simular a equação diferencial no intervalo 0 £ t £ 20 : t0 = 0 ; tf = 20; x0 = [0 0.25]' ; % condições iniciais [t,x] = ode23('vderpol', [t0 tf],x0); plot(t,x(:,1), 'r-', t,x(:,2),'b-.') xlabel('t'), title('Solução da equação de Van der Pol') legend('dy/dt', 'y') Solução da equação de Van der Pol 3
2
1
0
-1
-2 dy/dt y -3 0
2
4
6
8
10
12
14
16
18
20
t
Prof. Adade
MATLAB BÁSICO Polinômios e Ajustes de Curvas Polinômios são representados no Matlab por vetores-linha de coeficientes em potências descendentes. Algumas funções do MATLAB aplicadas a polinômios são: polyval : calcula o valor do polinômio para um dado valor de sua variável; poly(A) acha o polinômio característico da matriz A (coeficientes em potência poly : descendente); poly(r) retorna os coeficientes do polinômio que tem como raízes os valores no vetor r; roots : roots(P) acha as raízes do polinômio cujos coeficientes estão definidos no vetor P; conv : conv(P,Q) faz o produto dos polinômios cujos coeficientes estão definidos nos vetores P e Q; deconv : [Q,R] = deconv(B,A), A e B vetores de coeficientes, efetua a divisão de polinômios B por A. Resultado: polinômio quociente Q e polinômio resto R. polyder: computa a derivada de um polinômio; computa, também, a derivada de produto e quociente de dois polinômios. polyfit : ajuste polinomial de dados: acha os coeficientes de um polinômio que ajusta um conjunto de dados no sentido de mínimos quadrados. Prof. Adade
MATLAB BÁSICO Polinômios e Ajustes de Curvas Exs: A = [ 1 2 3; 4 5 6 ; 7 8 0 ] P = poly (A) P= 1 -6 -72 -27 polyval(P,2) ans = -187.0000 r = roots(P) r= 12.1229 -5.7345 -0.3884 p2 = poly (r) p2 = 1 -6 -72 -27 Q=[1
2
1 ];
c = conv (P,Q)
Þ c=
1
-4
-83 -177 -126 -27 Prof. Adade
Ex. Um polinômio tem raízes em -2, 2, -2+3j e -2-3j. Determinar o polinômio e plotar a função polinomial para o intervalo (-5,5) em passos de 0,01. r = [-2 ; 2; -2+3j; -2-3j]; p = poly (r); t=(-5+eps:0.01:5-eps); plot(t,polyval(p,t),'r') 1400 1200 1000 800 600 400 200 0 -200 -5
0
5
Prof. Adade
Ex. Uma das maneiras mais usuais para se ajustar uma curva no MATLAB é usar a função polyfit , que ajusta um polinômio aos dados especificados. x=1:10; y=exp(x); % gera dados exponenciais a serem ajustados c=polyfit(x,y,9); % determina os coeficientes de um polinômio de ajuste de grau 9 yfit = polyval(c,x); % calcula o polinômio definido por c nos valores de x plot (x,y,'bo',x,yfit,'r-') 4
x 10 2.5
2
1.5
1
0.5
0 1
2
3
4
5
6
7
8
9
10
Prof. Adade
MATLAB BÁSICO Interpolação Matlab proporciona vários recursos para a interpolação, processo de estimar valores que se situam entre pontos de dados conhecidos. Algumas das funções para esse fim são: interp1(x, y, xi, método) efetua interpolação unidimensional, usando técnicas polinomiais; x e y são vetores de pontos de dados e respectivos valores da função y(x); xi é o vetor de pontos a serem interpolados e método é um alfanumérico (string) especificando o método de interpolação (linear, spline cúbica e outros). yi = interp1(x, y, xi, método, 'extrap') : efetua extrapolação.
interp1:
yi =
interpft:
efetua interpolação unidimensional usando método baseado na transformada rápida de Fourier.
interp2 /interp3:
efetua interpolação bidimensional / 3-D.
interpn:
efetua interpolação multidimensional.
spline:
efetua interpolação por spline cúbica.
Permitem especificar o método de interpolação: 'nearest', 'linear', 'cubic', 'spline'.
Prof. Adade
MATLAB BÁSICO Interpolação Ex. Considere-se a matriz census.mat que contém dados do censo populacional dos E.U.A. load census % carrega dados de censo populacional plot(cdate,pop,'or'), hold on % plota os dados originais xi = [1905 1915 1925 1935 1945 1955 1965 1975 1985 1995 2005 2010]'; % define vetor de pontos a interpolar yi = interp1(cdate,pop,xi,'linear','extrap'); % efetua interpolação linear com extrapolação plot(xi,yi,'*b') 300
250
200
) s e õ h l i m m150 e ( o ã ç a l u p 100 o P
50
0 1750
1800
1850
1900
1950
2000
2050
Ano
Prof. Adade
MATLAB BÁSICO Interpolação Ex. Considere-se Z uma função das variáveis altitude e número de Mach e a seguinte tabela de dados (altitude é a abcissa, número de Mach é a ordenada e Z os valores correspondentes dessa função) medidos para essas variáveis: altitude = [0; 5000; 10000; 15000; 20000; 25000; 30000; 35000; 40000]; NumMach = [0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]; Z =[122059 111997 110667 102135 94226 88879 80997 76295 69023 65228 58449 55611 47039 46061 39593 38801 29251 28695
105356 96157 83835 71861 61643 52911 45104 38027 28139
100676 92224 81251 70032 60179 50011 44166 37267 27583
97798 87118 84516 82292; 92167 9 2167 84769 77963 75619; 81011 82950 72590 73395; 69872 70339 70766 71140; 60073 60678 61429 63293; 51759 52382 53227 56310; 44313 44887 45843 48369; 37365 37974 38886 40861; 27788 28046 28651 30167];
Deseja-se interpolar os dados para valores da altitude: y = 0:100:40000; A = interp2(NumMach, altitude, Z, NumMach, y'); Prof. Adade
MATLAB BÁSICO Análise de Dados dados, por exemplo, para · Matlab básico apresenta um conjunto de funções para análise de dados, organizar os dados, funções estatísticas e de análise incluindo regressão, ajuste de curvas, filtragem e transformada de Fourier. · Recursos adicionais são obtidos através de toolboxes como o Signal Processing, System Identification e Statistics. As funções processam colunas de dados. Algumas das funções para p ara essa finalidade são: mean:
calcula valor médio.
std:
calcula desvio padrão.
cov :
calcula variância.
corrcoef :
calcula coeficiente de correlação.
fft: ifft:
efetua a transformada discreta de Fourier. efetua a transformada discreta inversa de Fourier. Prof. Adade
MATLAB BÁSICO Análise de Dados Análise orientada por coluna: variáveis
¼ observações (medidas)
Ü matriz de dados M
Prof. Adade
MATLAB BÁSICO Análise de Dados Exemplo.
% Carrega a matriz de dados Idata
longley
% m-file com a matriz de dados Idata
% Tratamento dos dados [n,p] = size(Idata); e = ones(n,1); X = Idata – e * mean(Idata);
X = X ./ (e * std(X));
Teste:
mean(X) ® [0 0 ¼ 0]
% remove a média % mean(Idata) retorna vetor-linha com o valor médio % de cada coluna de Idata % normaliza para desvio padrão unitário % std(X) retorna vetor-linha com o desvio padrão de % cada coluna de X ,
std(X) ®
[1 1 ¼ 1] Prof. Adade