Beruflich Dokumente
Kultur Dokumente
1/151
Instrutor
CENAPAD-SP
Introduo ao ambiente Originado do FORTRAN, evoluiu em interatividade e diversidade. Muito eciente para desenvolvimento de algoritmos, anlise e visualizao de dados. Grande diversidade e facilidade na elaborao de funes reutilizveis. Acesso simples ao sistema de ajuda.
2/151
Ajuda no MATLAB O comando helpwin mostra uma janela de ajuda com os diversos Toolboxes que agrupam os comandos e funes. Os demos podem ser visualizados com o comando demo. helpdesk busca ajuda online. O comando help mostra informaes sobre os comandos, em modo texto.
3/151
Ajuda em modo texto O comando lookfor busca por palavras nos arquivos de ajuda. O comando wich mostra a localizao de outro comando na rvore de diretrios do computador. Podem ser utilizados comandos do sistema operacional. O comando bench retorna parmetros de ecincia do hardware.
4/151
Exemplos helpwin demo lookfor info debug helpdesk help which !mkdir
5/151
Variveis no MATLAB Toda varivel uma matriz. case sensitive. As variveis no so declaradas - exceto global e symbolic. Os comandos who e whos mostram listas das variveis inicializadas. O comando clear remove variveis liberando recursos do sistema.
6/151
Exemplos texto=Esta e uma frase exemplo; texto texto(24) texto(1,24) bananas = 4; laranjas = 5; frutas = laranjas + bananas; p_laranja = 2.5; p_banana = 2; p_medio=(laranja*p_laranja ... +banana*p_banana)/frutas;
7/151
Exemplos bananas who clear bananas clear p* clear all Bananas whos who who who
8/151
Manipulao algbrica Comandos de lgebra matricial tm grande compatibilidade com o clone denominado octave1. Vrias sintaxes para entrada de dados. A varivel ans contm o resultado da ltima operao executada. Facilidade para selecionar elementos.
1
9/151
Exemplos C 2 1 C = [3 1 2 3 1 2 3] = 3 1 2 2 1 3 2 1 3
12/151
Operaes elementares Cada operador pode ser utilizado de vrias maneiras. A utilizao dos operadores sobrecarregados resulta valores dependentes do contexto. O operador . um modicador importante. O operador : indica intervalos.
14/151
Exemplos A*C A(1,1)+1 A.*5 [A;C] MAT = A.*C A.+1 C/A 1:0.7:10 A+1 A*5 C./A B(:)
15/151
Exerccios Criar uma matriz com o nmero dois em todos os elementos. Criar uma matriz triangular superior da forma [1 2 3;0 4 5;0 0 6] Criar uma matriz triangular inferior aleatria Resolver um sistema linear em que c b = a, partindo de a e b
16/151
Solues possveis 2.*ones(3,3); 2+zeros(3) a(1,:)=1:3; a(2,2:3)=4:5; a(3,3)=6 b=rand(3,3); b(1,2:3)=0; b(2,3)=0 c=a/b : c b = a; b c = a
17/151
Exemplo Um sistema linear simples com autovalores e autovetores x = [1 2 3 4 5]; x k = x/y; z = y\x k*y y = randn(5) ; y*z 2\4
18/151
4/2
y=[1:5;6:10;11:15;16:20;21:25]
load aula
save varC C; clear C; load varC save -append varC A, clear all; load varC; whos
Constantes H diversas variveis que so utilizadas pelo MATLAB. Sobrescrever estas variveis pode ocasionar resultados indesejados. Uma varivel que deve ser determinada denominada constante. O comando clear sobre esta varivel reinicializa o seu valor atribudo pelo MATLAB
20/151
Exemplos i clear i clock inf-inf pi j i 1/0 1/0-inf eps i=0 date 0/0 sin(1/inf)
21/151
Funes elementares O MATLAB tem denidas rotinas para calcular todas as operaes ditas elementares. Aplica-se uma funo sobre uma matriz da mesma forma que sobre um valor. Conceito de sobrecarga de funo. Hierarquia das operaes.
22/151
Exemplos 2^10 sin A sqrt(A) floor(pi) rem(A,C) A^2 sin(A) round(G) ceil(pi) exp(A) A.^2 abs(-pi) fix(G) sign(-pi) log10(A)
23/151
3*1>2 (3>2)+3
Nmeros complexos So denidos normalmente utilizando as constantes i e j na parte complexa. Deve se tomar o cuidado de no alterar os valores destas constantes quando se trabalha com valores complexos. Aritimtica convencional. Tambm possvel utilizar a notao polar.
26/151
real(c1)
conj(c1)
angle(c1)
abs(c1)*exp((angle(c1)*i))
Converso entre tipos e formatos Podemos mostrar valores com maior nmero de casas decimais. Transformar nmeros em strings. O valor numrico de um caractere dado por uma tabela. Converter diferentes bases numricas.
28/151
bin2dec(011001) upper(ans)
lookfor convert
Exerccios Crie uma matriz 3x3 com nmeros aleatrios inteiros entre 20 e 30. Como transfornar uma matriz numrica para string? Como fazer a converso entre radianos e graus? Conrme que eln i = ln(ei)
30/151
Funes trigonomtricas As funes sin(x) e cos(x)xij [, +]. As funes sin(x), cos(x), tan(x) no so denidas para todos os complexos. A funo tan(x) retorna o valor da preciso numrica se x = (2n+1)/2, j que tan(x) = sin(x)/cos(x) e cos((2n+1)/2) nulo para n inteiro. As funes trigonomtricas inversas so denidas.
32/151
cos1 a * sin (b( + c))+d a * tan (b( + c))+d csc cot sec
Funes hiperblicas So denidas normalmente. cosh(x) 1 (ex + ex) 2 sinh(x) 1 (ex ex) 2
sinh(x) tanh cosh(x)
34/151
acosh(10i) cos(711i)
acosh(10000000i)
Funes e Scripts Funes e Scripts so procedimentos realizados atravs de seqncias de comandos escritas, geralmente, em arquivos. A principal diferena como as variveis criadas ou utilizadas dentro de funes e scripts so tratadas na rea de trabalho. Procedimentos na forma de scripts no podem ser compilados como arquivos executveis.
37/151
Escopo de uma varivel em funo A funo s v variveis so passadas como argumentos. Variveis criadas so apagadas ao m execuo se no retornam como argumentos de sada. Uma varivel pode ser declarada global. Deve ser declarada global antes da chamada da funo. Tambm deve ser declarada global no corpo da funo.
38/151
Escopo de uma varivel em script Um script v as variveis da rea de trabalho, e cria variveis na rea de trabalho. Sobrescreve variveis sem perguntar nada. Uma varivel pode ser declarada global por um script. A declarao global no script equivalente declarao na rea de trabalho.
39/151
Funes Um mtodo ou sub-rotina pode ser denido por uma funo dentro de um arquivo com extenso .m . As primeiras linhas iniciadas com o smbolo % so utilizadas para documentao. Em seguida denimos a funo. O arquivo deve estar no diretrio corrente ou em algum caminho conhecido pelo MATLAB.
40/151
Exemplo de Funo %Esta funo calcula o permetro %de uma circunferncia de raio R. %Se R uma matriz, circum(R) %retornar uma matriz contendo os %permetros das circunferncias %com os raios da matriz R function C = circum(R) C = 2*pi*R;
41/151
Um Script Deve estar escrito no arquivo arper.m: % calcula area e permetro area = pi*r^2; per = 2*pi*r; Resulta erro se no existe a varivel r na rea de trabalho. As variveis area e per cam disponveis na rea de trabalho. O script executado escrevendo no prompt arper.
42/151
Exerccios Transforme o script arper em uma funo. Escrever uma funo que calcula a rea e o volume de n cilindros determinados pelos vetores de raios, r, e de alturas, h, onde: area = 2 r h + 2 r2 volume = r2 h
43/151
Exerccios Utilize o arquivo singraph.m para criar o grco da funo sinh Modique os limites do domnio para que os dados atuais situem-se dentro da imagem prevista nos grcos. Verique as variveis criadas na rea de trabalho.
44/151
Operadores relacionais
45/151
Operador Descrio < menor do que <= menor ou igual > maior que >= maior ou igual == igual em condio/comparao ~= no igual, distinto
Exemplos b==abB c=[1 2 3 4]; 2 == c 2 <= a 2>(0:4) any(d<3) find(c>2) b<=abcB aBcA<70
47/151
find(c<3) find(d>2)
NaN>=ex isinf(ex)
NaN==NaN Inf>=ex
Inf>ex
finite(ex) isnumeric(ex)
Operadores lgicos
49/151
& 0 1 0 0 0 1 0 1
| 0 1 0 0 1 1 1 1
~ 0 1 1 0
a=2; (a<b&b<c)
xor 0 1 0 0 1 1 1 0
Exerccios Dada a matriz: x = [3 15 9 12 -1 0 -12 9 6 1] 1. Mostre o vetor do tamanho de mesmo comprimento apenas com os valores menores que zero inicializados ([0 0 0 0 -1 0 -12 0 0 0]). 2. Um vetor em que os mltiplos de trs so substitudos pelo valor 3. 3. Multiplique os pares por 5 (rem).
50/151
4. Crie um vetor somente com os valores de x maiores que 10. 5. Um vetor como os valores de x entre zero e a mdia dos valores de x (mean(x)). 6. O vetor x com seus valores acima da mdia inicializados para sua diferena da mdia, os demais conservados.
51/151
Exerccio Crie um vetor utilizando o comando x = randperm(35) e dena uma funo por partes que satisfaa as regras seguintes, usando somente indexao lgica. y(x) = 2 se 0 < x < 6 = x 4 se 6 <= x < 20 = 36 x se 20 <= x < 35
52/151
Lao if-else-end O prompt s liberado com o comando end. a=rand; if a >= .5 disp(a >= 1/2); else disp(a < 1/2); end
53/151
Exemplo if-elseif-else-end val1 = input(Entre com val1: ); val2 = input(Entre com val2: ); if val1<val2 disp(val1 < val2); elseif val1>val2 disp(val1 > val2); else disp(val1 = val2); end
54/151
% Exemplo if-elseif-else-end x = input (Entre com o valor da medida: ); u1 = input (Entrada (cm/in/ft): , s); u2 = input (Saida (cm/in/ft): , s); if (strcmp(u1,cm) & strcmp(u2,in)) y=0.393701*x; elseif (strcmp(u1,in) & strcmp(u2,cm)) y=2.54*x; elseif (strcmp(u1,cm) & strcmp(u2,ft)) y=0.0328084*x; elseif (strcmp(u1,ft) & strcmp(u2,cm)) y=30.84*x; elseif (strcmp(u1,in) & strcmp(u2,ft)) y=x/12; elseif (strcmp(u1,ft) & strcmp(u2,in)) y=12*x; else disp(Unidade indefinida); end
56/151
Detalhes importantes Cada bloco mutuamente exclusivo, apenas um ser executado. A ordem dos blocos na construo ifelsif-else-end importante. Se dois blocos satisfazem as condies, apenas o primeiro ser executado. Mantenha tudo o mais simples e organizado possvel, e tenha certeza que o bloco else s ser alcanado apropriadamente.
57/151
Erros possveis A comparao entre nmeros de dupla preciso pode levar a resultados equivocados. Por exemplo: sqrt(2)^2==2 deveria ser verdadeiro, e no . O problema com o arrendondamento. Comparaes so SEMPRE corretas com nmeros inteiros, porm com ponto utuante podem levar a resultados inesperados.
58/151
Exemplo switch-case
fprintf(\n\n); disp(Conversao entre unidades:); disp(centimetros, polegadas e pes); fprintf(\n); x=input(Entre valor numerico a converter: ); fprintf(\n\n); disp(Os seguintes sistemas sao validos:); disp(cm-in; in-cm; cm-ft;); disp(ft-cm; in-ft; ft-in); fprintf(\n); sistema = input(Escolha o sistema: ,s); switch sistema
59/151
case cm-in y=0.393701*x; disp([num2str(x),cm = ,num2str(y),in]); case {in-cm,IN-CM,In-Cm,iN-cM} y=2.54*x; disp([num2str(x),in = ,num2str(y),cm]); case cm-ft y=0.0328084*x; disp([num2str(x),cm = ,num2str(y), ft]); case ft-cm y=30.48*x; disp([num2str(x),ft = ,num2str(y), cm]); case in-ft y=x/12; disp([num2str(x),in = ,num2str(y),ft]); case ft-in y=12*x; disp([num2str(x),ft = ,num2str(y),in]); otherwise disp(Unidade desconhecida); end
60/151
Consideraes Para cada case o argumento capturado pelo switch comparado com todas as condies. Se nenhum caso satisfaz, ainda pode-se executar o bloco otherwise (opcional). O uso de switch-case mais apropriado quando temos condies que podem ser listadas. No mximo um bloco ser executado.
61/151
Exerccios 1. Escreva um pequeno programa que pergunte a idade e classique conforme o esquema seguinte: Erro < 0 <= Beb < 1 <= 1 Criana < 13 <= Adolescente < 18 <= Adulto < 60 <= Idoso < 120 <= Erro 1. 2. Crie uma funo para converter a temperatura Fahrenheit para Celsius e viceversa.
62/151
Exemplo while-end com loop innito while 1 name = input(Digite ... algo: ,s); if isempty(name) break % A fuga! end end
64/151
Exerccios 1. Escreva o programa que testa a diviso indenidamente, at que um dos valores de entrada seja nulo. 2. Escreva um pequeno programa que pergunte uma seqncia de nmeros, termine ao entrar NaN e que calcule a soma e a mdia dos valores.
num=input(Numerador); den=input(Denominador); if(num>=den), if(rem(num,den)==0) if(num==den),disp(num=den),else,disp(Divisveis),end; else,disp(No divisiveis),end;else,disp(den>num),end;
65/151
Exemplo for-end
%Contagem regressiva de tempo em segundos disp(Conta o tempo a partir de tzero); seg = input(Entre com o valor de tzero); fprintf(\n); tic;%marca o inicio do tempo cont = 0; for k=seg:-1:0, cont = cont+1; while toc < cont, end disp([Contagem regressiva: ,num2str(k)]); end
66/151
Como funciona?
Exemplo for-end com vetor vetor = [3 4 1 7 1 9 5 2]; for valor = vetor disp(valor) end O programa mostra os valores do array. O interessante notar que uma estrutura do tipo for-end no precisa assumir valores em seqncia.
67/151
Exemplo for-end com array array = [3 4 1 7; 1 9 5 2]; for v = array disp([v: ,num2str(v)]), disp([soma: , ... num2str(sum(v))]), end Este programa mostra os valores das colunas transpostas e a soma, tal qual o comando sum faria.
68/151
Lao com desvio de uxo Em perfurao de poos de petrleo temos que o Gradiente de Presso de Poros em Funo da Profundidade Pi = (i (Di Di1))/(Di) onde i e Di so valores obtidos experimentalmente.
69/151
d=[7100 7350 7500 7700 7800 ... 8200 8500 8700 9250 9750 ... 10300 11000 12000 13000]; rho=[1.4 1.55 1.64 1.70 ... 1.775 1.84 1.89 1.94 ... 2.0 2.1 2.2 2.2 NaN 2.28]; [a,b]=size(d); for i=1:b, if i==1, di=0; elseif (~(rho(i)==rho(i))), rho(i) = (rho(i-1)+rho(i+1))/2; else, di = d(i-1); end; dp(i)=rho(i)*di/d(i); end;
70/151
Exerccio O programa apresentado tem erro de lgica. Encontre. H problemas no tratamento dos dados de entrada. Como corrigir? possvel organizar programas completamente seguros quanto aos erros nos dados de entrada?
71/151
if isnan(ro(1)),ro(1)=... ro(2)-(ro(3)-ro(2));end; if isnan(ro(b)),ro(b)=... ro(b-1)+(ro(b-1)-ro(b-2));end; t=find(isnam(ro)); ro(t)=(ro(t+1)+ro(t-1))/2; for i=1:b, if i==1, di=0; else, di = d(i-1); end; dp(i)=ro(i)*di/d(i); end;
72/151
Exerccio Escreva uma funo que ordene um vetor de nmeros em ordem crescente. Um dado elemento colocado na sua posio aps os elementos seguintes terem sido deslocados. Comparar e substituir sucessivamente par de elementos consecutivos at que todos estejam em ordem.
73/151
C=[1 2 3]
C=diag(C) sin B
cov(A)
pascal(5) logm(ans)
cond(A) sqrtm(A)
Operaes sobre vetores e matrizes v1=[0 4 5] v2=[6 7 8] dot(v1,v2) cross(v1,v2) norm(v1) norm(A) any(v1) all(v1) length(v1)
75/151
Um problema prtico Um estudo de ortopedia digitaliza o movimento pelo mapeamento tridimensional de sete sensores acoplados ao corpo de um indivduo. A cada medida gerada uma linha de dados que contm uma string de vinte e um nmeros, as coordenadas cartesianas de cada sensor. Precisa-se do ngulo entre cada trade consecutiva de sensores.
76/151
Clculo do ngulo entre vetores load dd.txt -ascii; [a,b]=size(dd); for c = 1:a,for d = 1:3:b-5, v1=[dd(c,d:d+2)]; v2=[dd(c,d+3:d+5)];e=ceil(d/3); t=dot(v1,v2)/(norm(v1)*norm(v2)); ang(c,e)=rad2deg(acos(t)); end;end;
77/151
Operaes com vetores e matrizes [A;C]*C sin(A)^2 H=1:0.8:10 [A C] A.\C ([A;C]*C) B*A H*H A/C A\C A.^2 B^2 H*H A./C
78/151
Como vetorizar o problema dos vetores A utilizao do lao for-end no boa para a performance. Desejamos criar um script que realize o clculo de ngulo entre os vetores na forma vetorial, sem nenhum tipo de lao explcito. Dica: Use os comandos reshape e permute para ordenar a matriz num formato mais conveniente (3x21xN, p.ex.).
80/151
Estruturas no MATLAB Muitas informaes relevantes sobre a maneira de mostrar os dados, congurar as janelas e os parmetros utilizados em algortimos so armazenados em estruturas de dados denominadas handles. txt=text(1,2,nada), pos=get(txt,Position), set(txt,Position,[0.5 0.5]) set(txt,FontSize,20)
82/151
Clulas de arrays So muito semalhanteas s estruturas de dados. A{1,1} = [1 4 3; 0 5 8; 7 2 9]; A{1,2} = Edilson Borges; A{2,1} = 3+7i; A{2,2} = -pi:pi/10:pi; cellplot(A); A{1,1}(1), B={[1 2] T 3+4i;[1;4] -5 abc}
83/151
Propagao de vibrao atravs do solo Uma maneira para determinar a composio do solo analisar a propagao de vibraes.
Offset: x
85/151
dti =
Velocidade: v Profundidade: z
Virms Ti =
Grcos: Cores e eixos x = linspace(-pi,pi,30); y=sin(x); plot(x,y,-); z = cos(x); t = tan(x); plot(x,y,b:p,x,z, ... c-,x,z,m+,x,t,bo-); set(gcf,Color,[1 1 0.8]); set(gca,Color,[1 1 0.7]); axis([-pi pi -2 2]);
86/151
Fontes e smbolos
grid; title(Funes Trigonometricas,... FontSize,14,Fontweight,Bold); xlabel(Angulo \theta,FontSize,14,... Fontweight,Bold,FontAngle,... normal); legend(sin(\theta),cos(\theta),... tan(\theta)) ylabel(Imagem,FontSize,14,... Fontweight,Bold,... FontAngle,italic); text(1.4661,9.5144,... \rightarrow Max. tan(\theta)) grid off;
87/151
Marcaes nos eixos x = -pi:0.02*pi:pi; y = sin(x); z = cos(x); plot(x,y); hold on; plot(x,z); plot(x,y,x,z); set(gca,YTick,[-2 0 .2 .6 1 2]) set(gca,XTick,[-pi:0.5:pi]) set(gca,XTicklabel,... a|B|c|D|e|F); grid;
88/151
Mais sobre grcos [z,y,z]=ginput(3) gtext({um,dois}) clf pts1=text(0,0,[x(1),x(1)]); delete(pts1) close t=-pi:0.1:pi;y=sin(t);z=tan(t); plotyy(t,y,t,z)
89/151
Grcos mltiplos
x = linspace(0,2*pi,30); y = sin(x); z = cos(x); a = 2*sin(x).*cos(x); b = sin(x)./(cos(x)+eps); subplot(2,2,1); plot(x,y); axis([0 2*pi -1 1]); title(sin(x)); ylabel (Imagem); subplot(2,2,2); plot(x,z); axis([0 2*pi -1 1]); title(cos(x)); subplot(2,2,3); ylabel (Imagem); plot(x,a); axis([0 2*pi -1 1]); title(2 sin(x) cos(x)); subplot(2,2,4); plot(x,b); axis([0 2*pi -20 20]); title(sin(x)/cos(x));
90/151
Modicando as escalas
x=linspace(0,pi,30); subplot(2,2,1); plot(x,y); axis([0 pi 0 1]); title (Escala decimal em X e Y) subplot(2,2,2); semilogx(x,y); title (Escala decimal em Y e log em X); subplot(2,2,3); semilogy(x,y); axis([0 pi 0.01 1]); title (Escala decimal em X e log em Y); subplot(2,2,4); loglog(x,y); axis([0.1 pi 0.01 1]); title (Escala log em X e Y);
91/151
Um grco animado
t=0:pi/180:2*pi; kk=length(t); sint=sin(t); cost=cos(t); hfig=figure(units,normal,position,[0 0 1 1],... color,white); axis(off) titlebox=subplot(position,[.3 .5 .1 .05]); axis(off) text(0,0,GENERATING the SINE GRAPH,fontweight,... bold,fontsize,14,color,magenta) grbox=subplot(position,[.1 .1 .3 .3]); axis([-2 2 -2 2]),axis(axis); hold on, gca; plot(xlim,[0 0],-k,[0 0],ylim,... -k,linewidth,2); hold off hold on, gca; plot(xlim,[0 0],-k,[0 0],ylim,... -k,linewidth,2); hold off grid on; axis(square);axis(off); hold on name1=subplot(position,[.1 .4 .1 .05]); axis(off) text(.5,0,UNIT CIRCLE,fontweight,bold,color,red) name2=subplot(position,[.45 .4 .1 .05]); axis(off)
92/151
text(0,0,Angle in radians vs. length of blue segment.... ,color,blue,fontweight,bold) deglabel=subplot(position,[.2 .05 .1 .05]); axis(off) ptslabel=subplot(position,[.5 .05 .1 .05]); axis(off) graph=subplot(position, [.4 .1 .3 .3]); axis([0 2*pi -2 2]),axis(axis); hold on,gca;plot(xlim,[0 0],-k,[0 0],ylim,-k,... linewidth,2); hold off hold on,gca;plot(xlim,[0 0],-k,[0 0],ylim,-k,... linewidth,2); hold off grid on;axis(off); hold on; pause(2) for jj=1:kk subplot(grbox) plot(cost(jj),sint(jj),.r,erasemode,none) radius=plot([0 cost(jj)],[0 sint(jj)],-k,linewidth,2); ht=plot([cost(jj) cost(jj)],[0 sint(jj)],-b,... linewidth,2); deg=num2str(jj-1); subplot(deglabel) deg1=text(0,0,[deg degrees],fontweight,bold); subplot(graph) plot(t(jj),sint(jj),.b,erasemode,none) subplot(ptslabel) pts1=text(0,0,[( num2str(t(jj)) , num2str(sint(jj))... )],fontweight,bold); pause(.1), delete(deg1,pts1,radius,ht); end
93/151
subplot(ptslabel) text(0,0,y = sin(x) entre [0, 2pi].... ,fontsize,14,color,blue,... fontweight,bold); vty=subplot(position,[.1 .05 .1 .05]); axis(off); van=text(0,0, D.R.Hill,... unit,normal,color,black,... fontsize,12,fontweight,bold,... fontangle,oblique,erasemode,none); drawnow
94/151
Como o comando subplot foi usado? Para que atribuir handlers para textos impressos em grcos? Crie um grco que ligue pontos com linhas e anime o movimento.
Grcos em tortas
subplot(2,2,1); a = [0.5 1 1.5 2.0 1 0.3]; pie(a,a==max(a)); title(Produo de gros); legend(Arroz,Feijo,Soja,Trigo,... Milho,Cevada); subplot(2,2,2); destaque = [0 1 0 1 0 1]; pie3(a,destaque); colormap hsv; subplot(2,2,3); title(Grafico em barras); b = [1960 1970 1980 1990 2000 2001]; barh(b,a); ylabel(Safra) xlabel(Producao de graos) subplot(2,2,4); stairs(b,a); xlabel(Safra); ylabel( Producao de graos ); title(Grafico em escada);
95/151
Grcos de rea
tetha=0:2*pi/100:2*pi r=sin(2*tetha).*cos(2*tetha); subplot(1,2,1); xlabel( Abscissa X ); ylabel( Ordenada Y ); title (Grafico de area); area(theta,r); subplot(1,2,2) polar(tetha,r) title (Rosacea de 8 petalas);
96/151
Grcos tridimensionais t = linspace(0,10*pi,200); plot3(sin(t),cos(t),t); title(H e l i c e ); xlabel(X = Sin(t)); ylabel(Y = cos(t)); zlabel(Z = t);
97/151
Grcos tridimensionais coloridos x = -7.5:0.5:7.5; y = -7.5:0.5:7.5; [X,Y] = meshgrid(x,y); R = sqrt(X.^ 2+Y.^ 2)+eps; Z = sin(R)./R+1; mesh(X,Y,Z); hold on; pcolor(X,Y,Z);shading interp; contour(X,Y,Z,4,k);colorbar; hold off;
98/151
Desenhando uma equao Em cintica qumica necessrio calcular valores de Vi em uma reao, onde 1 Vi = Vmax 1 . Os valores de
1+ks+ k
99/151
Vmax = 0, 5, ks 15 e ki 18 foram obtidos experimentalmente para uma dada reao. Obtenha um grco de Vi em funo de ks e ki . Obtenha o grco para diferentes valores de Vmax.
Um problema de Engenharia de Petrleo Partindo de uma gura que obtida com dados de perfurao deseja-se obter um perl tridimensional do reservatrio.
100/151
load porosidade.mat; y=linspace(0,22500,226); x=linspace(0,8000,81); z=linspace(0,250,51); [xx,yy,zz]=meshgrid(x,y,z); p = patch(isosurface ... (xx,yy,zz,porosidade,25)); set(p,FaceColor,red,Edge... Color,None,FaceAlpha,.3); axis tight; box on; camva(10); campos([-200 -200 -200]);
101/151
102/151
Dados climticos
load wind; div = divergence(x,y,z,u,v,w); p= slice(x,y,z,div,[134.29],[59.99],[0]); shading interp; set(p,FaceAlpha,.8); h=streamslice(x,y,z,u,v,w,[],[],[1 7 15], .2); set(h,color,cyan); hold on; [xi yi zi ui vi wi] = subvolume(x,y,z,u,v,w, ... [95 120 nan 30 1 7]); streamslice(xi,yi,zi,ui,vi,wi,[],[],[2 4 6],.3); h = streamtube(xi,yi,zi,ui,vi,wi,110,22,6); set(h,FaceColor, red, EdgeColor, none); spd = sqrt(ui.*ui + vi.*vi + wi.*wi); [f verts] = reducepatch(isosurface ... (xi,yi,zi,spd,7), .3); h=coneplot(xi,yi,zi,ui,vi,wi, ... verts(:,1),verts(:,2),verts(:,3),2);
103/151
set(h,FaceColor,green,EdgeColor, ... none,FaceAlpha,.7); q=quiver3(xi,yi,zi,ui,vi,wi); set(q,color,cyan); vel = sqrt(u.*u + v.*v + w.*w); p = patch(isosurface(x,y,z,vel,45)); set(p,FaceColor,red,EdgeColor,none,... FaceAlpha,.2); [f verts]=reducepatch(isosurface(x,y,z,vel,30),.2); h=coneplot(x,y,z,u,v,w,verts(:,1),verts(:,2), ... verts(:,3),2); set(h,FaceColor,blue,EdgeColor,none, ... FaceAlpha,.5); axis tight; box on; lighting phong; camlight;
104/151
105/151
Animao 2D x = -pi/2:.1:pi/2; for c=1:20 y = sin(2*x+c*pi/10); plot(x,y,LineWidth,18); axis([-pi/2 pi/2 -1 1]); M(c) = getframe; end; movie(M,20,10);
106/151
Animao 3D x = -pi/2:.1:pi/2; y = -pi/2:.1:pi/2; [X,Y] = meshgrid(x,y); for c = 1:20, Z = sin(2*X+c*pi/10)... + 1.5*cos(2*Y+c*pi/10); surf(X,Y,Z); M(c) = getframe; end; movie(M,20);
107/151
Animao load dd.txt -ascii;[a,b]=size(dd); mov=avifile(dd.avi); for c = 1:a, for d = 1:3:b, plot3(dd(c,d),dd(c,d+1), ... dd(c,d+2),o) hold on;end;M(c) = getframe; mov = addframe(mov,M(c)); hold off; end;mov = close(mov); movie(M,20);
108/151
Decomposio LU a = rand(6); cond(a); det(a); b = [1:6]; c = inv(a); d = a^-1; e = a\b; a*e; [l,u,p] = lu(a) % l*u=p*a
109/151
Mtodo do gradiente conjugado pr-condicionado size=10;A=rand(size);tol=1.e-03; for i=1:size, b(i,1) = 1; for j=i:size, A(j,i) = A(i,j); if j == i, A(i,i) = 100*A(i,i); end; end; end; %ou A=100*abs(cov(randn(size))) [x,fl,rs,it] = pcg(A,b,tol,size);
110/151
Mtodo de minimizao de resduos sz = 10; A=rand(sz); tol = 1.e-04; for i=1:sz, b(i,1) = 1; for j=i:sz, A(j,i) = A(i,j); end; end; x=zeros(sz,1); [x,fl,rs,it]=minres(A,b,tol,sz);
111/151
Matrizes esparsas size = 20; s = rand(size); for i=1:size for j=1:size if j >i s(i,j) = s(j,i); end; if s(i,j) < 0.6 & abs(i-j) > 4 s(i,j) = 0.0; end; end; spy(s,*r);
112/151
Interpolao supercial
velocidade=[2000,3000,4000,5000,6000]; tempo=[0 1 2 3 4 5]; temperatura = [0,0,0,0,0;20,110,176,190,240;... 60,180,220,285,327;68,240,349,380,428;77,310,... 450,510,620;110,405,503,623,785]; temp=interp2(velocidade,tempo,temperatura,3800,3.1) vel=2000:100:6000; hold off; t=0:0.125:5; [X,Y] = meshgrid(vel,t); Zi = interp2(velocidade,tempo,temperatura,X,Y); mesh(X,Y,Zi); xlabel(Temperatura); ylabel(Velocidade); zlabel(Tempo); Zj = interp2(velocidade,tempo,temperatura,X,Y,... cubic);
114/151
Interpolao supercial
mesh(X,Y,Zj); xlabel(Temperatura); ylabel(Velocidade); zlabel(Tempo); Zk = interp2(velocidade,tempo,temperatura,X,Y,... spline); mesh(X,Y,Zk); xlabel(Temperatura); ylabel(Velocidade); zlabel(Tempo); Zl = interp2(velocidade,tempo,temperatura,X,Y,... nearest); mesh(X,Y,Zl); xlabel(Temperatura); ylabel(Velocidade); zlabel(Tempo);
115/151
Interpolao de volumes Supomos que haja uma regio de perfurao que corresponda aos seis pers mostrados. Queremos obter uma regio contnua que corresponda aos volumes de cada camada geolgica.
116/151
117/151
Lendo os arquivos a=slice;c=.bmp; for i=1:5, subplot(2,3,i); b=num2str(i); d=[a b c]; m=(imread(d,bmp)); imagesc(m); colormap(gray); mod(:,:,i) = double(m(:,:,3)); mod(:,:,i) = mod(:,:,i)/ ... (max(max(mod(:,:,i)))); end; clear m;
118/151
Calculando os valores interpolados xi=0:3:322;yi=0:6:714;zi=0:0.1:5; [XI,YI,ZI] = meshgrid(xi,yi,zi); por = zeros(size(mod)); por = por + 18.75 * (mod<0.1); por = por + 25.0 * ... (mod<0.48) .* (mod>=0.44); por = por + 28.78 * ... (mod<0.75) .* (mod>=0.71); por = por + 5.66 * (mod>=0.9); por_i = interp3(por,XI,YI,ZI);
119/151
Criando o grco 3D
figure(2); camlight; lighting(phong); p = patch(isosurface(XI,YI,ZI, ... por_i,5.66)); set(p,FaceColor,yellow,EdgeColor... ,None,FaceAlpha,.3); p = patch(isosurface(XI,YI,ZI, ... por_i,18.75)); set(p,FaceColor,green,EdgeColor ... ,None,FaceAlpha,.3); p = patch(isosurface(XI,YI,ZI, ... por_i,25)); set(p,FaceColor,cyan,EdgeColor ... ,None,FaceAlpha,.7); p = patch(isosurface(XI,YI,ZI, ... por_i,28)); set(p,FaceColor,blue,EdgeColor ... ,None,FaceAlpha,.7);material(metal);
120/151
Leitura de arquivos de dados fid = fopen(cichex.xyz,r); nval = fscanf(fid,%d,1); for k=1:nval atom(k) = fscanf(fid,%2s,1); vet(k,:)=(fscanf(fid,%13f,3)); end; fclose(fid); disp( F I M )
122/151
Leitura de arquivos de dados fid = fopen(dados.txt,r); vet = fscanf(fid,%7f,inf) frewind(fid); vet = fscanf(fid,%7f,[3,inf]) fclose(fid); disp( F I M )
123/151
Escrita de arquivos de dados arqui = input(Entre nome ,s); ordem = 8; mat = randn(ordem); fid = fopen(arqui,w); for k = 1 : ordem, for l = 1 : ordem, fprintf(fid,%3.2f\t,mat(k,l)); end; fprintf(fid,\n); end; fclose(fid); disp(F I M); who
124/151
Exibio de dados
125/151
Tabela 1: Formatadores numricos utilizados na exibio de variveis no MATLAB Especicador Descrio n nmero de dgitos decimais m preciso decimal e, E formato exponencial f ponto xo d inteiros c caractere simples s palavras (string)
Exibio de dados
126/151
Tabela 2: Formatadores utilizados na exibio de dados no MATLAB Caractere Descrio \b retrocesso (do cursor) \f alimentao do formulrio \n linha nova \r retorno ao inicio da linha de impresso \t espao horizontal \\ barra invertida
Anlise polinomial
f = [3,-0.5,0,1,-5.2]; x = [-10:10]; y = polyval(f,x); subplot(2,2,1); title(f(x)=3x^4-x^3/2+x-5,2) g = [1 0 -3 -1 2.4]; m = conv(f,g); plot(x,y); y2 = polyval(g,x); subplot(2,2,2); plot(x,y2); title(f(x)=x^4-3x^2-x+2,4); rtf = roots(f); subplot(2,2,3); y3 = polyval(m,x); plot(x,y3); [q,r] = deconv(f,g); df = polyder(f); yf = polyval(f,x); ydf = polyval(df,x); subplot(2,2,4); plot(x,yf,x,ydf); polyint(f,3);
127/151
Anlise numrica de funes % Para o arquivo func2.m function y=func2(x) y = 2*exp(-x).*sin(x); % No prompt fplot(func2,[0 8]); xmin = fmin(func2,0,8); xzero = fzero(func2,3.1);
129/151
Integral syms x x1 alpha u t; int(1/(1+x^2)) int(sin(alpha*u),alpha) int(x1*log(1+x1),0,1) int(4*x*t,x,2,sin(t)) int([exp(t),exp(alpha*t)]) A = [cos(x*t),sin(x*t); ... -sin(x*t),cos(x*t)]; int(A,t)
130/151
Integrao numrica Simpsom %arquivo func.m function f = func(x) f = x.^ 2; %no prompt a = 0; b = 1; quad(x.*x,0,1); quad(func,a,b); quad(@func,a,b); quad(@func,a,b,1.e-14);
131/151
Integrao numrica Lobatto f = x.*y; dblquad(f,0,1,0,1) dblquad(inline(x.*y),0,1,0,1); %no arquivo func4.m function f = func4(x) f = x.*y dblquad(@func4,0,1,0,1);
132/151
Funo denida por partes % arquivo funcpp.m function f = funcpp(x) if x >= 0 & x <= 1 f = x; elseif x >= 1 f = -0.2 * x.^3 + 1.2; elseif x <= 0 f = -sin(x); end
133/151
Integrando a funo por partes disp(Integra funcpp.m); disp(no intervalo [-pi,2]); q1 = quad(@funcpp,-pi,0); q2 = quad(@funcpp,0,1); q3 = quad(@funcpp,1,2); q = q1+q2+q3; disp([Integral=,num2str(q)]);
134/151
Diferenciao syms x; df = diff(x^ 2,x) diff(cos(a*x),x) clear all syms a; h = cos(a*x); dfa = diff(h,a)
135/151
Derivada numrica x = linspace(-1,1,30); f = x.^5 - 3 * x.^4 - 11 * ... x.^3 + 27 * x.^2 + 10 * x - 24; dfa = 5*x.^4 - 12*x.^3 - ... 33*x.^2 + 54*x + 10; df = diff(f)./diff(x); xd = x(2:length(x)); plot(x,f,r-,xd,df,b:... ,x,dfa,k-.)
136/151
Equaes diferenciais ordinrias Uma equao diferencial de primeira ordem: g1(x, y) x [2, 4] y = Inicial: y(2) = Analtica: y = 3x2 0, 5 x3 7, 5
137/151
A soluo no MATLAB % no arquivo dy.m function dy = g1(x,y) dy = 3 * x .^ 2 % No prompt. [x,ny]=ode23(dy,[2,4],0.5); ay = x.^3 - 7.5; plot(x,ny,r+,x,ay,b:); grid; sumsqr(ay-ny)
138/151
A soluo no MATLAB %No arquivo g2.m function g2 = g(x,y) g2 = 2 * x .* (cos(y)) .^ 2 % No prompt [x,ny]=ode45(g2,[0,2],pi/4); ay = atan(x.*x+1); plot(x,ny,r+,x,ay,b:); grid; sumsqr(ay-ny)
140/151
Elementos nitos unidimensionais Ntel=input(Num. El. Fin.: ); Nfbl=input(Lagr(2) Quadr(3)); % Pontos e pesos t = [-sqrt(3/5) 0 sqrt(3/5)]; w = (1/9)*[5 8 5]; % Discretizacao do dominio x = 0:(1/Ntel):1; n = (Nfbl-1)*Ntel+1;
141/151
142/151
% Grafico de comparacao f = zeros(n,1); x = 0:1/(n-1):1; for i = 1:n f(i)=exp(-2.0*x(i))*... sin(2.0*pi*x(i)); end subplot(1,2,1),plot(x,f,x,y) subplot(1,2,2),plot(x,f-y)
143/151
Um FrontEnd para aplicativo Controle grco para dados de entrada da simulao do funcionamento de uma enxada rotativa.
144/151
if strcmp(action,initiate) bgc = BackgroundColor; bgc2 = [0.8 0.8 0.8]; bgc1 = [0.6 0.6 0.1]; s1 = [modelgui(]; post = Position; RPM=400; fig00 = figure(Color,[0 0 0],Numbertitle, ... Off,Name,Entrada de dados,post, ... [11 19 480 320],Resize,Off); handl(2,2) = uicontrol(fig00,Style,Edit, ... post,[15 135 212 102],String, ... Rotacoes por minuto,bgc,bgc1,Userdata,[RPM]); handl(4,2) = uicontrol(fig00,Style,Slider, ... bgc,bgc2,post,[45 210 145 10],Min,RPM-100, ... Max,RPM+100,Value,RPM, ... Callback,[s1,act42);]);
handl(5,2) = uicontrol(fig00,Style,Text,bgc,... bgc1,post,[190 208 30 14],Horiz,Right,... String,num2str(get(handl(4,2),Value))); frame4 = uicontrol(fig00,Style,Frame,post,... [11 251 460 60], bgc,bgc2); handl(3,4) = uicontrol(fig00,Style,Push,... post,[60 260 105 28],String,Cria Funcoes,... Callback,[s1,act34);]); else if strcmp(action,act212) disp (Terminando :)); close elseif strcmp(action,act34),dinamica1GL; elseif strcmp(action,act42), NR = round(get(handl(4,2),Value)); end; end;
146/151
O mdulo GUI Vamos criar uma interface capaz de ler dois nmeros e mostrar o resultado da sua soma. Iniciaremos o mdulo GUI atravs do comando guide. Um layout possvel para a interface mostrado a seguir:
147/151
O mdulo Simulink Trata-se de uma interface para auxiliar no desenvolvimento de grandes projetos. No torna mais simples montar um pequeno programa, ainda que possibilite uma visualizao semelhante a um uxograma.
148/151
A S-function So as funes escritas pelo usurio para realizar operaes quaisquer que no estejam disponveis nos diversos mdulos de operaes existentes. Tm uma estrutura especial, que possibilita tratar os vrios casos do uxo de dados, e as ags manipuladas pelo Simulink. A seguir veremos como estruturada uma S-function
149/151
Inicializao
function [sys,x0,str,ts] = myfunc(t,x,u,flag) switch flag, case 0 [sys,x0,str,ts]=mdlInitializeSizes; case 3 sys=mdlOutputs(t,x,u); case { 1, 2, 4, 9 } sys=[]; otherwise error([Unhandled flag = ,num2str(flag)]); end
150/151
A funo mdlInitializeSize
function [sys,x0,str,ts] = mdlInitializeSizes() sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = -1; % dynamically sized sizes.NumInputs = -1; % dynamically sized sizes.DirFeedthrough = 1; % has direct feedthrough sizes.NumSampleTimes = 1; sys = simsizes(sizes); str = []; x0 = []; ts = [-1 0]; % inherited sample time
151/151
A funo mdlOutputs Esta a parte em que se devemos introduzir o procedimento que ser realizado. O Simulink passa os prmetros t, x e u e flags automaticamente para a S-function. function sys = mdlOutputs(t,x,u) sys = (2 * u) + (10 * cos(t/10));
152/151
A compilao de programas Algumas partes de um programa podem ser consideradas como gargalos. O MATLAB eciente para realizar as que fazem parte do kernel, mas a utilizao dos arquivos de comandos interpretados no apresenta a mesma performance. Se um procedimento extenso, pode ser programado em C ou FORTRAN e compilado como uma funo builtin.
153/151
O compilador MEX
154/151