Este documento fornece um resumo dos principais tópicos abordados em uma apostila sobre MATLAB para engenharia de produção. A apostila está dividida em quatro módulos que cobrem recursos básicos, funções, análise de dados, gráficos e interface gráfica. O índice lista os 18 capítulos que compõem os módulos.
Este documento fornece um resumo dos principais tópicos abordados em uma apostila sobre MATLAB para engenharia de produção. A apostila está dividida em quatro módulos que cobrem recursos básicos, funções, análise de dados, gráficos e interface gráfica. O índice lista os 18 capítulos que compõem os módulos.
Direitos autorais:
Attribution Non-Commercial (BY-NC)
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Este documento fornece um resumo dos principais tópicos abordados em uma apostila sobre MATLAB para engenharia de produção. A apostila está dividida em quatro módulos que cobrem recursos básicos, funções, análise de dados, gráficos e interface gráfica. O índice lista os 18 capítulos que compõem os módulos.
Direitos autorais:
Attribution Non-Commercial (BY-NC)
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Prof. Tiago Wirtti Prof. Tiago Wirtti Prof. Tiago Wirtti Prof. Tiago Wirtti APOSTILA DE MATLAB
ENGENHARIA DE PRODUO PLENA
NDICE: MDULO I 1. RECURSOS BSICOS DO MATLAB E AMBIENTE DO MATLAB 2. ARQUIVOS M DE COMANDOS 3. OPERANDO COM VETORES E MATRIZES 4. OPERADORES LGICOS E RELACIONAIS 5. CONTROLE DE FLUXO MDULO II: 6. ARQUIVOS M DE FUNES 7. EXECUO DE FUNES COM EVAL E FEVAL 8. FUNES SOBRE CONJUNTOS, BITS E CONVERSO ENTRE BASES 9. TEMPO 10. LGEBRA MATRICIAL MDULO III: 11. ANLISE DE DADOS 12. INTERPOLAO 13. POLINMIOS 14. OTIMIZAO 15. INTEGRAO E DIFERENCIAO MDULO IV: 16. GRFICOS BIDIMENSIONAIS 17. GRFICOS TRIDIMENSIONAIS 18. INTERFACE GRFICA COM O USURIO (GUI)
APOSTILA DE MATLAB 1 11 1 ENGENHARIA DE PRODUO PLENA
1. 1. 1. 1. R RR RECURSOS ECURSOS ECURSOS ECURSOS B BB BSICOS DO SICOS DO SICOS DO SICOS DO M MM MATLAB E ATLAB E ATLAB E ATLAB E A AA AMBIENTE DO MBIENTE DO MBIENTE DO MBIENTE DO M MM MATLAB ATLAB ATLAB ATLAB
O primeiro passo com o MATLAB aprender as operaes bsicas, ou seja, as operaes bsicas da matemtica. Em seguida vamos conhecer um pouco o espao de trabalho do MATLAB, algumas variveis especiais, comentrios, nmeros complexos, aritmtica de ponto flutuante e funes matemticas.
1.1 1.1 1.1 1.1 Matemtica Elementar Matemtica Elementar Matemtica Elementar Matemtica Elementar
Seja a expresso:
50 x 4 + 20 x 2 35 = 205. No ambiente MATLAB a mesma expresso seria avaliada assim:
>> 50 * 4 + 20 * 2 - 35 ans = 205
Podemos definir variveis para conter os valores da expresso acima:
1.2 1.2 1.2 1.2 Espao de Trabalho do Espao de Trabalho do Espao de Trabalho do Espao de Trabalho do M MM MATLAB ATLAB ATLAB ATLAB
Na figura 1 vemos a interface grfica do MATLAB.
A maioria do trabalho no MATLAB ser realizada na Janela de Comando (Command Window). Nela os comando sero digitados. A janela Launch Pad uma maneira rpida de acessa a documentao do MATLAB por Toolboxes. As Toolboxes so conjuntos de comandos que resolvem problemas de reas especficas do conhecimento, tais como processamento de imagens, estatstica, finanas, controle automtico e etc. A janela Histrico de Comando (Command History) possui uma lista de todos os comandos que foram executados na janela de comandos. A rea de trabalho do MATLAB configurvel pelo menu View.
O MATLAB guarda na memria do computador as variveis que foram utilizadas sendo possvel ver as suas caractersticas. Veja o exemplo a seguir:
>> whos Name Size Bytes Class caixa_de_bombom 1x1 8 double array credito 1x1 8 double array media 1x1 8 double array saco_de_bala 1x1 8 double array total 1x1 8 double array Grand total is 5 elements using 40 bytes
APOSTILA DE MATLAB 3 33 3 ENGENHARIA DE PRODUO PLENA Para limpar a memria vasta utilizar o seguinte comando:
>> clear
Pode-se repetir um comando selecionando-o na janela de histrico de comandos e com o boto direito do mouse escolhendo a opo evaluate.
1.3 1.3 1.3 1.3 V VV Variveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando ariveis, Comentrios e Formas de Interromper um Comando
As regras para criao de variveis so: o As variveis distinguem maisculas de minsculas, ou seja, Custo, custo e CUSTO representam variveis diferentes; o As variveis podem conter at 31 caracteres; o As variveis devem comear com uma letra, seguida de letras ou algarismos. Sinais de pontuao no so permitidos; o Palavras reservadas do MATLAB no so permitidas.
Lista de palavras reservadas for end if while function return elseif case otherwise switch continue else try catch global persistent break
Para comentar comandos basta utilizar o sinal %. Veja o exemplo abaixo:
>> produto = 4 * 5 % comentario
Algumas vezes ser necessrio interromper um comando que est demorando muito para concluir. Para interromper basta pressionar CTRL + C CTRL + C CTRL + C CTRL + C.
Com MATLAB muito fcil trabalhar com nmeros complexos. Veja os exemplos a seguir:
>> c1 = 1 - 2i % o i representa a parte imaginaria de c1 c1 = 1.0000 - 2.0000i >> c2 = 3*(2-sqrt(-1)*3) c2 = 6.0000 - 9.0000i >> c3 = sqrt(-2) c3 = 0 + 1.4142i >> c4 = 6 + sin(.5)*j c4 = 6.0000 + 0.4794i
As operaes aritmticas bsicas podem ser aplicadas livremente aos nmeros complexos. Veja o exemplo a seguir:
>> c5 = c1 * c2 - c3 / c4 % aritmetica sobre numeros complexos c5 = -12.0187 -21.2342i APOSTILA DE MATLAB 4 44 4 ENGENHARIA DE PRODUO PLENA
Obtendo a parte real e imaginria de um nmero complexo:
>> r_c5 = real(c5) % obtendo a parte real de c5 r_c5 = -12.0187 >> i_c5 = imag(c5) % obtendo a parte imaginaria de c5 i_c5 = -21.2342
1.5 1.5 1.5 1.5 Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante Aritmtica de Ponto Flutuante
Os valores numricos no MATLAB so representados em aritmtica de preciso dupla utilizando uma representao interna binria (base 2). Devido a limitaes do modelo de representao numrica, nem todos os nmeros so representados exatamente. Alm disso, existem limites mximo e mnimo na representao de valores pelo computador. Veja os exemplos a seguir:
>> format long % exibe os numeros com maior precisao >> realmax % maior numero real que pode ser representado ans = 1.797693134862316e+308 >> realmin % menor numero real que pode ser representado ans = 2.225073858507201e-308
Observe a seguir que, se fizermos a conta na mo, os trs resultados sero o mesmo, ou seja, zero. Entretanto, no MATLAB isso no ocorre devido a limitaes do modelo interno de representao numrica.
>> 0.42 - 0.5 + 0.08 ans = -1.387778780781446e-017 >> 0.08 - 0.5 + 0.42 ans = 0 >> 0.08 + 0.42 - 0.5 ans = 0
A avaliao de funes sofre o mesmo problema, ou seja, sen(0) = sen() = 0, mas no MATLAB:
ans = 0 >> sin(0) ans = 0 >> sin(pi) ans = 1.224646799147353e-016
Dica importante 1: Dica importante 1: Dica importante 1: Dica importante 1: Para saber como funciona um comando, utilize o help do MATLAB. Experimente!
>> help format
APOSTILA DE MATLAB 5 55 5 ENGENHARIA DE PRODUO PLENA Dica im Dica im Dica im Dica importante 2: portante 2: portante 2: portante 2: Abra o Help do MATLAB (menu Help > Matlab Help). No Help do MATLAB escolha a aba Contents, expanda o ramo MATLAB > Reference > Matlab Function Reference e, na janela da direita, escolha Elementary Math Functions. Agora vamos fazer alguns exerccios.
Dica importante 3: Dica importante 3: Dica importante 3: Dica importante 3: Para fazer log da sesso de trabalho armazenando todos os comando e os resultados dos mesmos, utilize o comando diary.
Dica importante 4: Dica importante 4: Dica importante 4: Dica importante 4: A lista de todos os diretrios onde se encontram os arquivos do MATLAB chamada de caminho de busca do MATLAB ou MATLABPATH. Para configurar o path do MATLAB do escolha File > set Path. Para exibir o contedo de MATLABPATH execute o comando matlabpath matlabpath matlabpath matlabpath.
Calcule: a) x = (2 1/2 )/2 b) y = Arco sen(x) c) y_graus = converta y em Graus d) y = (3 2 + 4 2 ) 1/2
e) resto de 23/4 f) teste as funes round, floor, ceil e fix para o nmero 2.6 g) Veja o contedo da memria (use whos) h) Limpe o contedo da memoria (use clear) i) Ache a parte real e imaginria da soma dos nmeros c1 = 1.08 2.067i e c2 = 0.99 + 3.4j j) Ache o valor absoluto (abs) de c1 + c2.
APOSTILA DE MATLAB 6 66 6 ENGENHARIA DE PRODUO PLENA
2. 2. 2. 2. A AA ARQUIVOS RQUIVOS RQUIVOS RQUIVOS M MM M DE DE DE DE C CC COMANDOS OMANDOS OMANDOS OMANDOS
2.1. 2.1. 2.1. 2.1. Como Utilzar Arquivos M Como Utilzar Arquivos M Como Utilzar Arquivos M Como Utilzar Arquivos M
Em algumas situaes mais conveniente ter um arquivo de comandos do que ficar digitando cada varivel e seu respectivo valor na janela de comandos do MATLAB. Veja o exemplo a seguir:
% lista de material escolar #1 % quantidade de cada item caderno = 3; caneta = 3; lapiseira = 1; % custo de cada item c_caderno = 20.0; c_caneta = 2.5; c_lapiseira = 3.5; % total de itens itens = caderno + caneta + lapiseira % custo total custo = c_caderno * caderno + c_caneta * caneta + c_lapiseira * lapiseira % custo medio custo_medio = custo / itens
Repare que o contedo do arquivo idntico ao que seria digitado na linha de comando do MATLAB. O ponto e virgula (;) no final da linha significa que o comando no ter o resultado exibido na sada padro.
Exerccio: a) Defina um diretrio qualquer no seu computador como o diretrio de trabalho incluindo-o no MATLABPATH (use o menu File > set Path). b) Verifique se o MATLABPATH foi configurado corretamente.
>> matlabpath
c) Crie um arquivo Exemplo2_1.m contendo o exemplo anterior. d) Execute o arquivo:
>> Exemplo2_1
Observe que o resultado no estava formatado de forma adequada. Isso pode ser corrigido com o comando format. interessante tambm que o programador fornea os dados de entrada. Isso ser resolvido com o comando input. APOSTILA DE MATLAB 7 77 7 ENGENHARIA DE PRODUO PLENA
Veja o exemplo adaptado:
% lista de material escolar #1 % quantidade de cada item format bank % exibe os nmeros com duas casas decimais caderno = input('Quantidade de cadernos: '); caneta = input('Quantidade de canetas: '); lapiseira = input('Quantidade de lapiseiras: '); % custo de cada item c_caderno = 20.0 c_caneta = 2.5 c_lapiseira = 3.5 % total de itens itens = caderno + caneta + lapiseira % custo total custo = c_caderno * caderno + c_caneta * caneta + c_lapiseira * lapiseira % custo medio custo_medio = custo / itens
2.2. 2.2. 2.2. 2.2. Exerccios Exerccios Exerccios Exerccios a) Teste no exemplo anterior (Exemplo2_2.m) o comando echo. Use echo on no incio do arquivo e echo off no final. Execute e veja o resultado. b) Pesquise e utilize o comando disp. APOSTILA DE MATLAB 8 88 8 ENGENHARIA DE PRODUO PLENA
3. 3. 3. 3. O OO OPERAES COM PERAES COM PERAES COM PERAES COM V VV VETORES E ETORES E ETORES E ETORES E M MM MATRIZES ATRIZES ATRIZES ATRIZES
Observe que x um vetor linha, ou seja, possui uma linha e 11 colunas. Como obter o sexto elemento de x? Veja a seguir:
>> x(6) ans = 1.5708
Veja que em MATLAB as posies do vetor so numeradas a partir da posio 1 e no de zero como na maioria das linguagens de programao. Para obter um intervalo de valores, de 2 a 7, por exemplo:
>> x(2:7) ans = Columns 1 through 4 0.31416 0.62832 0.94248 1.2566 Columns 5 through 6 1.5708 1.885
Para obter os valores de x da posio 8 at o final faz-se:
>> x(8:end) ans = 2.1991 2.5133 2.8274 3.1416 E para obter o segundo, o quarto e o oitavo elementos, nessa ordem?
>> x([2 4 8]) ans = 0.31416 0.94248 2.1991
APOSTILA DE MATLAB 9 99 9 ENGENHARIA DE PRODUO PLENA
3.3 3.3 3.3 3.3 Construo de Vetores Construo de Vetores Construo de Vetores Construo de Vetores
Como fazer no caso de o vetor da seo 3.1 ter 100 elementos, ao invs de 11 elementos? O mesmo vetor pode ser gerado assim:
>> x = (0:0.1:1)*pi x = Columns 1 through 4 0 0.31416 0.62832 0.94248 Columns 5 through 8 1.2566 1.5708 1.885 2.1991 Columns 9 through 11 2.5133 2.8274 3.1416
De outro modo:
>> x = linspace(0,pi,11) x = Columns 1 through 4 0 0.31416 0.62832 0.94248 Columns 5 through 8 1.2566 1.5708 1.885 2.1991 Columns 9 through 11 2.5133 2.8274 3.1416
E para gerar um vetor coluna, ou seja, vrias linhas e apenas uma coluna? Veja o exemplo a seguir:
>> c = (1:0.5:5)' c = 1 1.5 2 2.5 3 APOSTILA DE MATLAB 10 10 10 10 ENGENHARIA DE PRODUO PLENA 3.5 4 4.5 5
O operador aspas simples () representa a transposio de um vetor. Para um vetor de nmeros complexos temos:
>> a = 1:5 a = 1 2 3 4 5 >> a = a + a*i a = Columns 1 through 3 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i Columns 4 through 5 4.0000 + 4.0000i 5.0000 + 5.0000i
A transposta do vetor a ser:
>> a' ans = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i
Repare que o operador () retorna a transposio do complexo conjugado, ou seja, troca o sinal da parte imaginria. Para fazer a transposio de um vetor de nmeros complexos sem alterar o sinal da parte imaginria usa-se o operador (.), conforme mostrado a seguir:
Outra maneira de gerar vetores coluna utilizar o separador o separador de colunas, ou seja, o sinal de ponto e vrgula (;). Veja o exemplo a seguir:
>> d = [1 2; 3 4; 5 6] d = 1 2 3 4 5 6 Tambm vlido fazer assim:
a = 1 2 >> b = [3 4] b = 3 4 >> c = [5 6] c = 5 6 APOSTILA DE MATLAB 11 11 11 11 ENGENHARIA DE PRODUO PLENA >> d = [a; b; c] d = 1 2 3 4 5 6
3.4 3.4 3.4 3.4 Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor Matemtica Vetor x Escalar e Vetor x Vetor
A multiplicao de um vetor por um escalar, aproveitando o vetor d definido na seo anterior, pode ser realizada assim:
>> s = 2 + d s = 3 4 5 6 7 8
Observe que o valor 2 foi adicionado a todos os elementos do vetor.
Um exemplo envolvendo outras operaes bsicas:
>> r = 2 * s - s / 3 r = 5.0000 6.6667 8.3333 10.0000 11.6667 13.3333
Agora algumas operaes entre vetores. Lembrando o bvio: os vetores devem ser compatveis. Dadas duas matrizes g e h compatveis para a soma e a subtrao, temos:
Observe que a diviso de matrizes uma operao totalmente diferente da diviso elemento a elemento mostrada anteriormente. Ou seja,
g / h g * h -1 g \ h h * g -1
Discutiremos um pouco mais de lgebra matricial em um captulo parte.
Como elevar todos os elementos de uma matriz ao quadrado? Veja o exemplo a seguir:
>> p = g.^2 p = 1 9 25 49 81 121 169 225 289 361 441 529
Mas a seguinte tentativa leva a um erro:
>> p = g^2 ??? Error using ==> ^ Matrix must be square.
Pois essa operao equivale a multiplicar q por q. Para isso as dimenses tem que ser compatveis! APOSTILA DE MATLAB 13 13 13 13 ENGENHARIA DE PRODUO PLENA
Mas possvel elevar 2, por exemplo, a uma matriz qualquer:
>> p = 2.^g p = 2 8 32 128 512 2048 8192 32768 131072 524288 2097152 8388608
A busca de elementos em vetor ou em matriz possvel com o comando find. Veja os exemplos a seguir:
>> x = -3:3 x = -3 -2 -1 0 1 2 3
>> k = find(abs(x)>1) k = 1 2 6 7
O comando acima retorna o vetor K contendo todos os ndices de x que satisfazem condio abs(x) > 1.
Para a matriz A, find retorna os vetores i e j contendo, respectivamente, os nmeros da linha e da coluna dos elementos de A que satisfazem condio A>4: APOSTILA DE MATLAB 17 17 17 17 ENGENHARIA DE PRODUO PLENA
No exemplo acima se obteve, respectivamente, o maior e o menor valor de cada coluna, acompanhados de seus ndices. Para obter o valor mximo ou mnimo pode-se fazer:
APOSTILA DE MATLAB 18 18 18 18 ENGENHARIA DE PRODUO PLENA >> max_v = max(mx) max_v = 0.9048
>> min_v = min(mn) min_v = 0.1939
3.7 3.7 3.7 3.7 Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes Funes para Manipular Vetores e Matrizes
A seguir algumas funes para manipulao de vetores e matrizes:
>> flipud(A) % gira a matriz de cima para baixo ans = 7 8 9 4 5 6 1 2 3
>> fliplr(A) % gira a matriz da esquerda para a direita ans = 3 2 1 6 5 4 9 8 7
>> rot90(A) % gira a matriz 90 graus no sentido anti-horario ans = 3 6 9 2 5 8 1 4 7
>> rot90(A,2) % gira a matriz 2*90 graus no sentido anti-horario ans = 9 8 7 6 5 4 3 2 1
>> triu(A) % extrai a parte triangular superior ans = 1 2 3 0 5 6 0 0 9
>> tril(A) % extrai a parte triangular inferior ans = 1 0 0 4 5 0 7 8 9
>> tril(A) - diag(diag(A)) % parte triangular inferior sem diagonal ans = 0 0 0 4 0 0 7 8 0 APOSTILA DE MATLAB 19 19 19 19 ENGENHARIA DE PRODUO PLENA
4. 4. 4. 4. O OO OPERADORES PERADORES PERADORES PERADORES R RR RELACIONAIS E ELACIONAIS E ELACIONAIS E ELACIONAIS E L LL LGICOS GICOS GICOS GICOS
4.1. 4.1. 4.1. 4.1. Operadores R Operadores R Operadores R Operadores Relacionais elacionais elacionais elacionais
Os operadores relacionais no MATLAB incluem todos os operadores lgicos habituais:
Operador Operador Operador Operador Descrio Descrio Descrio Descrio < Menor que <= Menor ou igual a > Maior que >= Maior ou igual a == Igual (no confundir com =) ~= Diferente de
Exemplo: Dois vetores, A e B, so criados. No primeiro experimento vf contem 0 quando elemento de A correspondente menor ou igual a 4 e contem 1 quando o elemento correspondente maior do que 4. No segundo experimento, vf s contm zeros pois, para elementos de mesma posio em A e B, no h igualdade.
>> A = 1:9, B = 9 - A A = 1 2 3 4 5 6 7 8 9 B = 8 7 6 5 4 3 2 1 0
>> vf = A>4 % elementos de A maiores que 4 vf = 0 0 0 0 1 1 1 1 1
>> vf = (A==B) vf = 0 0 0 0 0 0 0 0 0
4.2. 4.2. 4.2. 4.2. O OO OPERADORES PERADORES PERADORES PERADORES L LL LGICOS GICOS GICOS GICOS
Os operadores lgicos so:
Operador Lgico Operador Lgico Operador Lgico Operador Lgico Descrio Descrio Descrio Descrio & E | OU ~ ~~ ~ NO
Exemplo: Negao de um resultado.
>> A = 1:9, B = 9 A
APOSTILA DE MATLAB 20 20 20 20 ENGENHARIA DE PRODUO PLENA >> vf = A>4 % elementos de A maiores que 4 vf = 0 0 0 0 1 1 1 1 1
>> vf = ~(A>4) vf = 1 1 1 1 0 0 0 0 0
Exemplo: Gerao de um sinal descontnuo. Digite os comando a seguir e observe o resultado (grfico abaixo).
>> x = linspace(0, 10, 100); % gera dados >> y = sin(x); % calcula o seno >> z = (y>=0).*y; % atribui zero aos valores negativos de sen(x) >> z = z + 0.5*(y<0); % quando sen(x) for negativo acrescenta 1/2 >> z = (x<=8).*z; % atribui zero aos valores maiores que 8 >> plot(x,z) >> xlabel('x'), ylabel('z=f(x)'), title('Um sinal descontinuo')
APOSTILA DE MATLAB 21 21 21 21 ENGENHARIA DE PRODUO PLENA
4.3. 4.3. 4.3. 4.3. P PP PRECEDNCIA DE RECEDNCIA DE RECEDNCIA DE RECEDNCIA DE O OO OPERADORES PERADORES PERADORES PERADORES
extremamente importante saber a precedncia dos operadores em MATLAB. Na tabela a seguir mostra-se a ordem de execuo dos mesmos do mais forte para o mais fraco.
Operador Operador Operador Operador Nvel de precedncia Nvel de precedncia Nvel de precedncia Nvel de precedncia Parnteses () Maior Transposio (.), transposio conjugada (), potncia (.^), potncia de matriz (^)
a) Pesquise no Help do MATLAB os comandos xor, any e all. Faa um teste com cada um deles. b) Pesquisa as funes isXXX. Existe alguma que verifica se um elemento numrico?
APOSTILA DE MATLAB 22 22 22 22 ENGENHARIA DE PRODUO PLENA 5. 5. 5. 5. C CC CONTROLE DE ONTROLE DE ONTROLE DE ONTROLE DE F FF FLUXO LUXO LUXO LUXO
O MATLAB permite a criao de cinco estruturas de tomada de deciso ou controle de fluxo: laos for, laos while e estruturas if-else-end e switch-case, e blocos try-catch.
5.1 5.1 5.1 5.1 Laos for Laos for Laos for Laos for
A sintaxe do comando for :
for x = vetor comandos ... end
Exemplo 1 - Veja um exemplo simples:
>> for n = 1:10 x(n) = sin(n*pi/10); end
>> x % o resultado x = Columns 1 through 6 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns 7 through 10 0.8090 0.5878 0.3090 0.0000
Exemplo 2 - Fazendo um lao com decremento:
>> for n = 10:-1:1 % loop com decremento de n x(n) = sin(n*pi/10); end
>> x x = Columns 1 through 6 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns 7 through 10 0.8090 0.5878 0.3090 0.0000
Exemplo 3 - Iterando por um vetor representado por uma varivel:
>> vetor = randperm(10) vetor = 8 2 10 7 4 3 6 9 5 1 >> for n = vetor x(n) = sin(n*pi/10); end
>> x x = Columns 1 through 6 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 7 through 10 0.8090 0.5878 0.3090 0.0000
APOSTILA DE MATLAB 23 23 23 23 ENGENHARIA DE PRODUO PLENA
Exemplo 4 - Gerando uma matriz:
>> for n = 1:5 for m = 5:-1:1 A(n,m) = n^2 + m^2; end disp(n) end 1 2 3 4 5
Como regra geral, os comandos vetorizados (exemplos 5 e 6) so mais eficientes do que os laos exibidos nos exemplos anteriores.
5.2 5.2 5.2 5.2 Laos while Laos while Laos while Laos while
A sintaxe do comando while a seguinte:
while (expresso) comandos ... end APOSTILA DE MATLAB 24 24 24 24 ENGENHARIA DE PRODUO PLENA
Vejamos um exemplo que calcula o menor nmero que pode ser adicionado a 1 tal que o resultado seja maior que 1 usando preciso finita. Esse nmero representado no MATLAB pela varivel eps (minscula). O nosso eps ser maisculo (EPS).
>> num = 0; EPS = 1; >> while (1+EPS)>1 EPS = EPS/2; % divide sucessivamente por 2 at que EPS seja insignificante num = num + 1; end >> num % nmero de iteraes num = 53 >> EPS = 2*EPS % multiplica por 2, pois EPS no representvel ... EPS = 2.2204e-016
O comando while apresenta as mesmas restries de desempenho que o comando for.
5.3 5.3 5.3 5.3 Estruturas if Estruturas if Estruturas if Estruturas if- -- -else else else else- -- -end end end end
A sintaxe do comando if-else-end mais simples :
if expresso comandos ... end
Caso haja uma condio negativa, pode-se utilizar:
if expresso comandos ... else outros comandos ... end
Se houver mais de duas alternativas, pode-se utilizar a sintaxe:
if expresso1 comandos ... elseif expresso2 outros comandos (se a expresso2 for verdadeira)... elseif expresso3 outros comandos (se a expresso3 for verdadeira) elseif expresso4 . . . else caso nenhuma expresso anterior seja verdadeira end
APOSTILA DE MATLAB 25 25 25 25 ENGENHARIA DE PRODUO PLENA
Como exemplo, o clculo do EPS utilizando while ao invs do for:
>> EPS = 1; >> for num = 1:1000 EPS = EPS/2; if (1+EPS)<=1 EPS = EPS*2 break end end EPS = 2.2204e-016 >> num num = 53
APOSTILA DE MATLAB 26 26 26 26 ENGENHARIA DE PRODUO PLENA
6. 6. 6. 6. A AA ARQUIVOS RQUIVOS RQUIVOS RQUIVOS M MM M DE DE DE DE F FF FUNES UNES UNES UNES
A criao de arquivos M de funes no MATLAB uma tarefa simples e intuitiva, ou seja, segue as regras que, de maneira geral, esto presentes em muitas linguagens de programao. Vamos a um exemplo simples:
6.1 6.1 6.1 6.1 Primeiro Exemplo Primeiro Exemplo Primeiro Exemplo Primeiro Exemplo
Exemplo 1 Criar uma funo que faa o clculo do EPS utilizando um dos mtodos apresentados no captulo anterior: Passo 1: No menu do MATLAB escolha a opo File > New > M-File. Passo 2: Digite o cdigo a seguir:
function EPS = calcula_EPS(limite) EPS = 1; for num = 1:limite EPS = EPS/2; if (1+EPS)<=1 EPS = EPS*2; break end end
Passo 3: Salve o arquivo com o nome calcula_EPS.m calcula_EPS.m calcula_EPS.m calcula_EPS.m. O nome da funo deve ser idntico ao nome do arquivo. Passo 4: Na janela de comandos do MATLAB experimente:
>> x = calcula_EPS(100) x = 2.2204e-016
Algumas consideraes: 1- O arquivo sempre comea com function; 2- EPS o nome da varivel de retorno; 3- O sinal de atribuio indica que, ao final da execuo, a varivel EPS receber valor calculado pela funo calcula_EPS; 4- O nome da funo calcula_EPS; 5- A funo recebe o argumento limite; 6- Os comandos do MATLAB funcionam dentro do arquivo M da mesma forma que na linha de comando.
6.2 6.2 6.2 6.2 Segundo Exemplo Segundo Exemplo Segundo Exemplo Segundo Exemplo
Exemplo 2 Criar uma funo que recebe como parmetro os coeficientes de uma equao de segundo grau e retorna a soluo da mesma: Passo 1: No menu do MATLAB escolha a opo File > New > M-File. Passo 2: Digite o cdigo a seguir:
APOSTILA DE MATLAB 27 27 27 27 ENGENHARIA DE PRODUO PLENA function [x1, x2] = avalia_eq_2g(a, b, c) if nargin ~= 3 error('sao necessarios 3 argumentos numericos') end delta = b*b - 4 * a * c; display(delta) x1 = (-b + sqrt(delta))/2*a; x2 = (-b - sqrt(delta))/2*a;
Passo 3: Salve o arquivo com o nome avalia avalia avalia avalia_ __ _eq_2g eq_2g eq_2g eq_2g.m .m .m .m. O nome da funo deve ser idntico ao nome do arquivo.
Algumas consideraes: 1- H nesta funo duas variveis de retorno, x1 e x2; 2- A varivel nargin contm o nmero de parmetros de entrada; 3- A funo error exibe uma mensagem caso nargin seja diferente de 3; 4- A funo display exibe o valor de delta.
Exemplo 3 A funo calcula_centroide_Paralelepipedo recebe dois vetores contendo (cada um) as coordenadas espaciais x, y e z dos vrtices diametralmente opostos de um paraleleppedo e retorna as coordenadas do centride do mesmo. H uma validao para o nmero de parmetros e uma validao para o caso de os vrtices fornecidos no formarem uma diagonal do paraleleppedo.
Usando o passo a passo do exemplo 2, crie e execute esta funo na janela de comandos do MATLAB:
function [xc, yc, zc] = calcula_centroide_Paralelepipedo(v1, v2) if (nargin ~= 2) error('Parametros necessarios: v1 (vertice qualquer)') error(' v2 (vertice diagonal oposto)') end if (v1(1) - v2(1) == 0 | v1(2) - v2(2) == 0 | v1(3) - v2(3) == 0) error('Parametros necessarios: v1 e v2 nao formam diagonal') end xmin = min( v1(1), v2(1)); % obtem x minimo xmax = max( v1(1), v2(1)); % obtem x maximo xc = xmin + (xmax - xmin)/2; % calcula x do centroide
ymin = min( v1(2), v2(2)); % obtem x minimo ymax = max( v1(2), v2(2)); % obtem x maximo yc = ymin + (ymax - ymin)/2; % calcula x do centroide
zmin = min( v1(3), v2(3)); % obtem x minimo zmax = max( v1(3), v2(3)); % obtem x maximo zc = zmin + (zmax - zmin)/2; % calcula x do centroide
APOSTILA DE MATLAB 28 28 28 28 ENGENHARIA DE PRODUO PLENA 7. 7. 7. 7. E EE EXECU XECU XECU XECUO DE O DE O DE O DE F FF FUNES COM UNES COM UNES COM UNES COM EVAL EVAL EVAL EVAL E E E E FEVAL FEVAL FEVAL FEVAL
Em algumas situaes, para a execuo de uma funo, a o nome e parmetros da funo so passados a uma outra funo. Isso denominado avaliao de uma funo. Em MATLAB h duas maneiras de fazer a avaliao de funes: usando a funo eval ou a funo feval. A diferena entre as duas que eval chama todo o interpretador de comandos do MATLAB para executar a string, enquanto feval avalia apenas a funo. Consequentemente, feval muito mais eficiente, principalmente se a funo precisar ser executada vrias vezes como parte de algum processo iterativo.
7.1 7.1 7.1 7.1 Primeiro Primeiro Primeiro Primeiro Exemplo Exemplo Exemplo Exemplo Avaliao padro Avaliao padro Avaliao padro Avaliao padro (sem eval ou feval) (sem eval ou feval) (sem eval ou feval) (sem eval ou feval)
APOSTILA DE MATLAB 29 29 29 29 ENGENHARIA DE PRODUO PLENA
7.3 7.3 7.3 7.3 Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Terceiro Exemplo Avaliao com Avaliao com Avaliao com Avaliao com f ff feval eval eval eval
Para usar feval primeiro necessrio gerar uma verso inline de minhafun. Deve-se fazer isso, pois feval precisa receber como parmetro a lista de parmetros de minhafun. O passo a passo mostrado a seguir:
APOSTILA DE MATLAB 30 30 30 30 ENGENHARIA DE PRODUO PLENA
8. 8. 8. 8. F FF FUNES SOBRE UNES SOBRE UNES SOBRE UNES SOBRE C CC CONJUNTOS ONJUNTOS ONJUNTOS ONJUNTOS, ,, , B BB BITS E ITS E ITS E ITS E C CC CONVERSO ENTRE ONVERSO ENTRE ONVERSO ENTRE ONVERSO ENTRE B BB BASES ASES ASES ASES
8.1 8.1 8.1 8.1 Fun Fun Fun Funes es es es sobre Conjuntos sobre Conjuntos sobre Conjuntos sobre Conjuntos
Frequentemente necessrio comparar dois conjuntos. No MATLAB h a funo isequal, que desempenha esta tarefa para vetores, variveis e estruturas multidimensionais.
Para demonstrar o teste a igualdade entre vetores, veja o exemplo a seguir:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Comparando vetores e variveis com isequal:
>> a = rand(2,5); % vetor aleatrio de distribuio uniforme
>> b = randn(2,5); % vetor aleatrio de distribuio normal
>> isequal(a,b) % a e b NO so iguais ans = 0
>> isequal(a,a) % a e b so iguais ans = 1
Para strings tambm funciona:
>> a = 'testando com strings';
>> b = 'testando com strings';
>> isequal(a,b) % igualdade de strings de caracteres ans = 1
Mas,
>> c = 'TESTANDO COM STRINGS';
>> isequal(a,c) % igualdade de strings de caracteres ans = 0
Para eliminar duplicidades de um conjunto utiliza-se o comando unique. Veja o exemplo a seguir:
APOSTILA DE MATLAB 31 31 31 31 ENGENHARIA DE PRODUO PLENA
>> unique(a) % elementos distintos ordenados em coluna ans = 2 4 6 8 10
A funo ismember determina se um elemento pertence a um conjunto:
Exemplo Exemplo Exemplo Exemplo 3 33 3 Verificando se um elemento pertence a um conjunto com ismember:
>> a = 1:9 a = 1 2 3 4 5 6 7 8 9
>> b = 2:2:9 b = 2 4 6 8
>> ismember(a,b) % que elementos de a estao em b? ans = 0 1 0 1 0 1 0 1 0
>> ismember(b,a) % que elementos de b estao em a? ans = 1 1 1 1
O teste pode tambm ser feito com matrizes:
>> A = eye(3) A = 1 0 0 0 1 0 0 0 1
>> B = ones(3) B = 1 1 1 1 1 1 1 1 1
>> ismember(A,B) % elementos de A que estao em B? ans = 1 0 0 0 1 0 0 0 1
>> ismember(B,A) % elementos de B que estao em A? ans = 1 1 1 1 1 1 1 1 1
H outras operaes de aritmtica de conjuntos, tais como union, intersect, setdiff e setxor.
APOSTILA DE MATLAB 32 32 32 32 ENGENHARIA DE PRODUO PLENA
Exemplo 4 Exemplo 4 Exemplo 4 Exemplo 4 Testando outras operaes de aritmtica de conjuntos:
>> a, b % reapresentando dados anteriores a = 1 2 3 4 5 6 7 8 9 b = 2 4 6 8
>> union(a,b) % unio de elementos de a com elementos de b ans = 1 2 3 4 5 6 7 8 9
>> intersect(a,b) % interseco de a com b ans = 2 4 6 8
>> setxor(a,b) % esto em a ou em b, mas no na interseco de a com b ans = 1 3 5 7 9
>> setdiff(a,b) % a menos b ans = 1 3 5 7 9
>> setdiff(b,a) % b menos a ans = []
8.2 8.2 8.2 8.2 Funes sobre Bits Funes sobre Bits Funes sobre Bits Funes sobre Bits
O MATLAB permite operaes lgicas bit a bit dos inteiros com ponto flutuante. O maior valor inteiro que pode ser representado :
>> bitmax ans = 9.0072e+015
Que equivale a 2 53 1. Mudando a representao para hexadecimal:
>> format hex
>> bitmax ans = 433fffffffffffff
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Algumas operaes bit a bit:
>> a = (2^24) 1 % dado de entrada a = 416fffffe0000000
>> dec2bin(a) % representao do dado de entrada em binrio ans = 111111111111111111111111
APOSTILA DE MATLAB 33 33 33 33 ENGENHARIA DE PRODUO PLENA
>> b = 123456789 % dado de entrada b = 419d6f3454000000
>> dec2bin(b) % representao do dado de entrada em binrio ans = 111010110111100110100010101
>> bitand(a,b) % a & b (bit a bit) ans = 4156f34540000000
>> dec2bin(ans) % representao resultado em binrio ans = 10110111100110100010101
Para um melhor entendimento do que aconteceu, os nmeros a, b e ans so colocados na tabela a seguir. Repare o resultado obtido atravs da operao E LGICO BIT A BIT.
>> bitor(a,b) % ou bit a bit ans = 419ffffffc000000
>> dec2bin(ans) ans = 111111111111111111111111111
>> bitxor(a,b) % ou exclusive bit a bit ans = 419e90cba8000000
>> dec2bin(ans) ans = 111101001000011001011101010
>> bitget(b,13) % obtm o dcimo terceiro bit de b ans = 0000000000000000
>> dec2bin(ans) ans = 0
>> bitset(b,13) % define o dcimo terceiro bit de b como 1 ans = 419d6f7454000000
>> dec2bin(ans) ans = 111010110111101110100010101
APOSTILA DE MATLAB 34 34 34 34 ENGENHARIA DE PRODUO PLENA
8.3 8.3 8.3 8.3 Converses Converses Converses Converses de Base de Base de Base de Base
O MATLAB possui diversas funes de converso de nmeros decimais para strings de caracteres contendo estes nmeros em outras bases. Vejamos alguns exemplos:
>> dec2bin(64) % converte 64 decimal para binrio ans = 1000000
>> class(ans) % tipo da resposta ans = char
>> bin2dec(ans) % volta para a representao decimal ans = 64
>> class(ans) ans = double
possvel converter decimal para hexadecimal:
>> class(ans) ans = double
>> a = dec2hex(1023) % decimal para hexadecimal a = 3FF
>> class(a) % tipo da resposta ans = char
>> a = hex2dec(a) % hexadecimal para decimal a = 1023
>> class(a) % tipo da resposta ans = double
APOSTILA DE MATLAB 35 35 35 35 ENGENHARIA DE PRODUO PLENA
9. 9. 9. 9. T TT TEMPO EMPO EMPO EMPO
O MATLAB possui diversas funes para manipulao de dados relativos medio de tempo. possvel fazer vrias operaes aritmticas com datas e horas, imprimir calendrios e procurar dias especficos.
9.1 9.1 9.1 9.1 Datas e Horas Atuais Datas e Horas Atuais Datas e Horas Atuais Datas e Horas Atuais
A funo clock fornece a data e hora em um vetor. Por exemplo:
A data hora atual pode ser obtida como um nico nmero atravs do comando now:
>> format long
>> now ans = 7.330916349945718e+005
Os dois resultados representam a mesma informao.
A funo date fornece uma representao em string da data atual:
>> date ans = 18-Feb-2007
9.2 9.2 9.2 9.2 Converso de Formatos Converso de Formatos Converso de Formatos Converso de Formatos
Como vimos na seo anterior, o MATLAB possui trs maneiras de representar datas: (1) nmero de data de preciso dupla, (2) textos (strings de caracteres) e (3) vetor numrico. As operaes matemticas com datas so realizadas com a data no formato numrico (1), ou como vetor (2), mas a compreenso do seu valor praticamente impossvel nesses formatos. Portanto necessrio converter datas do formato numrico par um formato string (3). O comando datestr foi projetado para esse fim.
>> help datestr
DATESTR String representation of date. DATESTR(D,DATEFORM) converts a serial data number D (as returned by DATENUM) or a free format date string into a date string with a format specified by format number or string DATEFORM (see table below). By default, DATEFORM is 1, 16, or 0 depending on whether D contains dates, times or both. Date strings with 2 character years are interpreted to be within the 100 years centered around the current year. APOSTILA DE MATLAB 36 36 36 36 ENGENHARIA DE PRODUO PLENA
DATESTR(D,DATEFORM,PIVOTYEAR) uses the specified pivot year as the starting year of the 100-year range in which a two-character year resides. The default pivot year is the current year minus 50 years. DATEFORM = -1 uses the default format.
APOSTILA DE MATLAB 38 38 38 38 ENGENHARIA DE PRODUO PLENA
9.4 9.4 9.4 9.4 Funes de Cron Funes de Cron Funes de Cron Funes de Crono oo ometragem metragem metragem metragem
Em algumas ocasies pode ser necessrio cronometrar uma ou mais operaes. Nesse caso podem-se utilizar os comandos tic (liga o cronmetro) e toc (liga o cronmetro).
Repare a diferena de tempo entre as duas execues consecutivas. A segunda muito mais rpida (cerca de 5% do tempo total da primeira), pois a janela grfica j est carregada na memria.
Outra maneira de cronometrar utilizando a funo cputime, que contabiliza o tempo de processamento (em segundos) desde o incio da sesso MATLAB.
>> t0 = cputime; plot(rand(50,5)); cputime-t0 ans = 0.156
9.5 9.5 9.5 9.5 Datas e Horas em Grficos Datas e Horas em Grficos Datas e Horas em Grficos Datas e Horas em Grficos
O MATLAB possui uma funo chamada datetick que automatiza a tarefa de incluso de textos de tempo ou data eixos de grficos. Monte os exemplos a seguir em arquivos .M de funo:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Grfico de populao. Salve como graficoPop.m graficoPop.m graficoPop.m graficoPop.m:
function graficoPop tempo = [1900:10:2000]' populacao = [ 75.995; 102.202; 105.323; 108.345; 110.456; 115.403; 120.300; 121.233; 123.324; 126.300; 127.343] plot(datenum(tempo,1,1), populacao) datetick('x', 'yyyy') % quatro digitos para o ano title('Populacao por ano')
Exemplo Exemplo Exemplo Exemplo 2 22 2 Grfico de vendas. Salve como vendas vendas vendas vendas.m .m .m .m:
Adapte a funo vendas para receber, ano, ms e venda como parmetros. APOSTILA DE MATLAB 39 39 39 39 ENGENHARIA DE PRODUO PLENA
10. 10. 10. 10. LGEBRA LGEBRA LGEBRA LGEBRA M MM MATRICIAL ATRICIAL ATRICIAL ATRICIAL
Embora o MATLAB aceite matrizes de n dimenses, a lgebra matricial definida apenas para matrizes de uma ou duas dimenses. Um problema fundamental da lgebra linear a soluo de sistemas de equaes. De modo geral, a soluo depende da relao entre o nmero de equaes e incgnitas do seguinte modo: o Sistema possvel e determinado: nmero de equaes igual ao nmero de incgnitas (apenas uma soluo); o Sistema impossvel (sobredeterminado): nmero de equaes maior do que o nmero de incgnitas (no h soluo para o sistema) e o Sistema possvel e indeterminado: nmero de equaes menor do que o nmero de incgnitas (nmero infinito de solues).
10.1 10.1 10.1 10.1 Sistemas de Equaes Lineares Sistemas de Equaes Lineares Sistemas de Equaes Lineares Sistemas de Equaes Lineares
Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado Estudaremos a seguir o teste e solues de um sistema possvel e determinado. Seja o sistema de equaes na forma matricial definido por:
1 2 3 X1 366 4 5 6 * X2 = 804 7 8 0 X3 351
A * x = y A * x = y A * x = y A * x = y
Expressando esse sistema de equaes no MATLAB, temos:
Antes de resolver o sistema, precisamos saber se ele tem soluo nica. Para verificar isso, basta testar se o posto de A igual ao posto da matriz aumentada [ A y ]:
>> rank(A) ans = 3 >> rank([A y]) ans = 3 APOSTILA DE MATLAB 40 40 40 40 ENGENHARIA DE PRODUO PLENA
O sistema acima possvel e determinado! Para resolv-lo podemos utilizar duas tcnicas: (1) calculando a inversa de A, ou (2) utilizando o operador de diviso esquerda.
Mtodo 1: Calculado a inversa de A:
>> x = inv(A)*y x = 25 22 99
Essa abordagem deve ser evitada por razes internas do MATLAB. O clculo da inversa envolve muitas operaes de ponto flutuante.
Mtodo 2: Utilizando a diviso esquerda:
>> x = A \ y x = 25 22 99
Porque utilizamos a diviso esquerda?
A * x = y A * x = y A * x = y A * x = y A AA A - -- -1 11 1 * A * x = A * A * x = A * A * x = A * A * x = A - -- -1 11 1 * y * y * y * y I * x = A I * x = A I * x = A I * x = A
\ \\ \ y y y y x = A x = A x = A x = A \ \\ \ y y y y
possvel resolver esse sistema utilizando diviso direita?
A * x = y A * x = y A * x = y A * x = y (A * x) (A * x) (A * x) (A * x) = y = y = y = y x xx x * * * * A AA A = y = y = y = y x x x x * * * * A AA A * ( * ( * ( * (A AA A) ) ) ) - -- -1 11 1 = y = y = y = y * ( * ( * ( * (A AA A) ) ) ) - -- -1 11 1
x xx x * I * I * I * I = = = = y y y y / / / / A AA A x xx x = = = = y y y y / // / A AA A
Assim, no MATLAB:
>> v = y' / A' v = 25 22 99 >> x = v' x = 25 22 99
Quando utilizado algum mtodo numrico para o clculo da soluo de um sistema matricial (caso do MATLAB), interessante tambm conhecer o nmero de condio da matriz de coeficientes. Quanto mais prximo de um maior ser a preciso do clculo (veja help cond).
>> cond(A) ans = 35.106
APOSTILA DE MATLAB 41 41 41 41 ENGENHARIA DE PRODUO PLENA Apensa para efeito de comparao, veja o nmero de condio da matriz abaixo (que no produz uma soluo numrica consistente):
>> x = B \ y Warning: Matrix is singular to working precision. x = Inf Inf Inf
>> rank(B) % duas linhas LD (linearmente dependentes) ans = 2
Logo, para um sistema ser possvel e determinado (uma e apenas uma soluo) basta que a matriz de coeficientes, A, e a matriz aumentada, [A y] possuam posto completo e que o nmero de condio seja prximo de um.
Outra maneira de testar a viabilidade/inviabilidade de um sistema calcular o determinante da matriz quadrada:
>> det(A) % determinante diferente de zero, posto completo ans = 27
>> det(B) % determinante igual a zero, posto incompleto. ans = 0
Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados Para o caso de sistemas sobredeterminados (impossve (impossve (impossve (impossveis is is is) )) ), ou seja, cujo nmero de equaes maior do que o nmero de incgnitas pode ser til encontrar soluo que minimiza o quadrado da norma do resduo ou erro definido por e = A * x e = A * x e = A * x e = A * x y yy y. Essa soluo muito til na prtica sendo conhecida como soluo dos quadrados mnimos.
Veja o exemplo a seguir:
>> A = [1 2 3; 4 5 6; 7 8 0; 2 5 8] % 4 equaes e 3 incgnitas A = 1 2 3 4 5 6 7 8 0 2 5 8 APOSTILA DE MATLAB 42 42 42 42 ENGENHARIA DE PRODUO PLENA
>> y = [366 804 351 514]' % novo vetor direito y = 366 804 351 514
>> x = A \ y % soluo dos quadrados mnimos x = 247.9818 -173.1091 114.9273
>> e = A * x - y % calculando o erro de norma mnima e = -119.4545 11.9455 0.0000 35.8364
>> norm(e) % calculando a norma do erro ans = 125.2850
Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado Quando h menos equaes do que incgnitas, isto , quando o sistema indeterminado, o nmero de solues infinito. Dentre essas solues, duas so facilmente obtidas pelo o MATLAB. So elas: o O vetor x com o maior nmero de zeros, que pode ser obtido utilizando-se o operador de diviso (\ ou /) e o O vetor x com a menor norma possvel, que pode ser obtido calculando-se a sua pseudoinversa atravs do comando pinv.
Observe o exemplo a seguir:
>> A = A' % definindo 3 equaes e 4 incgnitas A = 1 4 7 2 2 5 8 5 3 6 0 8
>> y = y(1:3) % definindo um vetor y compatvel y = 366 804 351
>> x = A \ y % encontrando a soluo com o maior numero de zeros x = 0 -165.9000 99.0000 168.3000
>> xn = pinv(A) * y % encontrando a soluo de norma mnima xn = 30.8182 -168.9818 99.0000 APOSTILA DE MATLAB 43 43 43 43 ENGENHARIA DE PRODUO PLENA 159.0545
>> norm(x) % encontrando a norma Euclidiana de x ans = 256.2200
>> norm(xn) % verificando que xn possui norma menor que x ans = 254.1731
Alm da soluo de sistemas de equaes, h muitos outras funes no MATLAB para manipulao de matrizes. Sua documentao pode ser facilmente acessa pelo help do MATLAB (menu Help > Matlab Help Help > Matlab Help Help > Matlab Help Help > Matlab Help) buscando-se pelas sentenas (1) matrices, elementary functions matrices, elementary functions matrices, elementary functions matrices, elementary functions e (2) matrices, matrices, matrices, matrices, specialized functions specialized functions specialized functions specialized functions.
Em muitas aplicaes prticas, so geradas matrizes que contm apenas alguns poucos elementos no nulos. Essas matrizes so ditas esparsas esparsas esparsas esparsas. Para eliminar o armazenamento de elementos iguais a zero, comum se armazenar apenas os elementos diferentes de zero de uma matriz esparsa e dois conjuntos de ndices, identificando as posies das linhas e colunas do elemento no nulo.
Matrizes esparsas so criadas a partir da funo sparse. Por exemplo:
APOSTILA DE MATLAB 44 44 44 44 ENGENHARIA DE PRODUO PLENA Esse mtodo no recomendado, pois implica na criao da matriz densa (eye(10)) primeiro, causando utilizao de muito recurso de memria.
Para converter uma matriz esparsa em densa, basta utilizar o comando full:
Comparando a quantidade de recurso utilizado pela mesma matriz, esparsa e densa, temos:
>> clear % limpa a memria
>> B = eye(2000); % cria matriz identidade densa de 200 x 200
>> Bs = sparse(B);
>> whos Name Size Bytes Class B 2000x2000 32000000 double array Bs 2000x2000 32004 sparse array
Grand total is 4002000 elements using 32032004 bytes
Repare que, embora ambas as matrizes possuam dimenso 2000 x 2000, a matriz esparsa ocupa apenas 0,1 % do espao ocupado pela matriz densa.
H vrias funes para soluo de sistemas envolvendo matrizes esparsas. Consulto o help do MATLAB (menu Help > Matlab Help Help > Matlab Help Help > Matlab Help Help > Matlab Help) buscando-se pela sentena sparse matrix sparse matrix sparse matrix sparse matrix.
APOSTILA DE MATLAB 45 45 45 45 ENGENHARIA DE PRODUO PLENA
11. 11. 11. 11. A AA ANLISE DE NLISE DE NLISE DE NLISE DE D DD DADOS ADOS ADOS ADOS
O MATLAB capaz de executar vrias anlises estatsticas em conjuntos de dados. Por conveno, os conjuntos de dados so armazenados em matrizes orientadas por colunas. Isso significa que, a menos que seja especificado o contrrio, cada coluna da matriz representa uma varivel diferente, e as linhas representam amostras distintas ou observaes.
11.1 11.1 11.1 11.1 An An An Anlise Estatstica Bsica lise Estatstica Bsica lise Estatstica Bsica lise Estatstica Bsica
Anlise estatstica normalmente envolve um conjunto grande de dados, por exemplo, a cotao de trs moedas diferentes (dlar, euro e libra) no ms de janeiro (31 dias) produz um conjunto de 4 x 31 = 124 dados. Digitar todos esses dados se torna uma tarefa impraticvel, principalmente se pensarmos em intervalos de tempo maiores (um ano, por exemplo!). A seguir, alguns exemplos: Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Importao de dados do Excel:
Para importar esses dados para o ambiente do MATLAB basta utilizar a ferramenta Import Import Import Import Wizard Wizard Wizard Wizard disponvel atravs do menu File > Import Data File > Import Data File > Import Data File > Import Data. O conjunto de dados acima deve estar em um arquivo no formato .xls .xls .xls .xls (formato do Excel). Como sugesto utilize o nome cota cota cota cotaca ca ca cao oo o- -- -jan jan jan jan- -- -200 200 200 2007 77 7.xls .xls .xls .xls. Aps acionar a funo Import Data Import Data Import Data Import Data, uma tela do Import Wizard Import Wizard Import Wizard Import Wizard parecida com a figura abaixo surgir na sua tela:
Basta concluir o processo de importao pressionando o boto Finish Finish Finish Finish. A matriz principal que conter os dados foi denominada data pela prpria ferramenta de importao. Para acessar os dados importados, basta executar na janela de comando:
APOSTILA DE MATLAB 47 47 47 47 ENGENHARIA DE PRODUO PLENA
Exemplo 2 Exemplo 2 Exemplo 2 Exemplo 2 Criando um grfico a partir dos dados importados. Crie o arquivo M de funo abaixo (grafico_cotacao.m grafico_cotacao.m grafico_cotacao.m grafico_cotacao.m):
function grafico_cotacao(mes, cotacao) if ( nargin ~= 2 ) erro ('Parametros esperados:') erro (' vetor mes: 31 dias') erro (' vetor cotacao 31 x 3') end plot(mes,cotacao) xlabel(' Dia do mes') ylabel(' Dollar, Euro, Libra') title(' Cotacao Jan/2007')
A execuo na janela de comandos do MATLAB fica assim:
>> grafico_cotacao(data(:,1),data(:,2:4))
O resultado pode ser observado abaixo:
Alm do grfico, algumas operaes bsicas podem ser realizadas sobre o conjunto de dados (varivel data).
Obtendo a mdia aritmtica com o comando mean:
>> cotacao_media = mean(data(:,2:4)) % dollar, euro e libra cotacao_media = 2.2277 2.8503 3.3035
APOSTILA DE MATLAB 48 48 48 48 ENGENHARIA DE PRODUO PLENA
Exemplo 3 Exemplo 3 Exemplo 3 Exemplo 3 - -- - Calculando o desvio de cada cotao diria com relao sua respectiva mdia:
Exemplo Exemplo Exemplo Exemplo 7 77 7 Aplicao de filtros. Neste caso ser aplicado um filtro de mdia de comprimento ser aplicado a cada coluna. O filtro definido a seguir:
4 * 4 * 4 * 4 * y yy yn nn n = x = x = x = xn nn n + x + x + x + xn n n n 1 1 1 1 + x + x + x + x n n n n 2 22 2 + x + x + x + x n n n n 3 33 3, , , , ou y yy yn nn n = ( = ( = ( = (x xx xn nn n + x + x + x + xn n n n 1 1 1 1 + x + x + x + x n n n n 2 22 2 + x + x + x + x n n n n 3 33 3) )) ) / // / 4 44 4
APOSTILA DE MATLAB 50 50 50 50 ENGENHARIA DE PRODUO PLENA
12. 12. 12. 12. I II INTERPOLAO DE NTERPOLAO DE NTERPOLAO DE NTERPOLAO DE D DD DADOS ADOS ADOS ADOS
A interpolao uma maneira de estimar o valor de uma funo entre valores dados por alguma tabela de pontos. A interpolao uma ferramenta valiosa quando no se pode calcular rapidamente a funo nos valores intermedirios desejados.
Dentre os mtodos existentes, a interpolao linear a mais simples. Ela amplamente utilizada pelo MATLAB para a representao de grficos. Por mais complicado que parea o grfico, no MATLAB ele representado por uma sucesso de segmentos de reta. Veja o exemplo a seguir:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Dois grficos da mesma funo representados com nmeros de pontos diferentes. Repare que quando o nmero de pontos aumenta, o grfico tende a ficar mais suave:
>> x1 = linspace(0, 2*pi, 60); % sessenta pontos de 0 a 2*pi >> x2 = linspace(0, 2*pi, 6); % seis pontos de 0 a 2*pi >> plot(x1, sin(x1), x2, sin(x2), '--') >> xlabel('x'), ylabel('sen(x)') >> title('Interpolacao Linear')
APOSTILA DE MATLAB 51 51 51 51 ENGENHARIA DE PRODUO PLENA
Exemplo Exemplo Exemplo Exemplo 2 22 2 Nesse exemplo estudaremos a relao entre o nvel de percepo do som pelo ouvido humano e a freqncia do som. A freqncia e o nvel relativo de presso so dados por:
>> nps = [76 66 59 49 43 40 38 22 14 9 6 3.5 2.5 1.4 0.7 0 -1 -3 ... -8 -7 -2 2 7 9 11 12]; % nvel de presso do som em dB
Ambos os vetores esto disponveis no arquivo freq_npl.m freq_npl.m freq_npl.m freq_npl.m. Basta executar o arquivo:
>> freq_npl
>> whos Name Size Bytes Class Hz 1x28 224 double array nps 1x28 224 double array Grand total is 56 elements using 448 bytes
Com os dados carregados, vamos represent-los graficamente usando um eixo x logartmico:
>> semilogx(Hz, nps, '-o')
>> xlabel('frequencia, Hz'), ylabel('nivel relativo de pressao do som, dB')
>> title('Limiar da audicao humana'), grid on
O resultado pode ser visto a seguir:
APOSTILA DE MATLAB 52 52 52 52 ENGENHARIA DE PRODUO PLENA
O grfico anterior mostra que a audio humana mais sensvel a freqncias em torno de 3 kHz.
Exemplo Exemplo Exemplo Exemplo 3 33 3 Estimar de diferentes maneiras o nvel de presso do som na freqncia 2.5 kHz:
>> s = interp1(Hz, nps, 2.5e3, 'linear') % interpolao linear s = -5.5000
>> s = interp1(Hz, nps, 2.5e3, 'cubic') % interpolao cbica s = -6.0488
>> s = interp1(Hz, nps, 2.5e3, 'spline') % interpolao splines cbicas s = -5.8690
>> s = interp1(Hz, nps, 2.5e3, 'nearest') % interp. pelo vizinho mais prximo s = -8
A interpolao linear o padro do MATLAB, pois fornece resultados relativamente bons e com rapidez. A interpolao pelo vizinho mais prximo, embora tenha dado um resultado muito fora da faixa nesse exemplo, pode ser utilizada com segurana quando o nmero de pontos muito grande. A interpolao por splines cbicas a que oferece o melhor resultado, mas possui o maior custo de processamento.
Exemplo Exemplo Exemplo Exemplo 4 44 4 Uma das atribuies mais comuns da interpolao com splines cbicas a suavizao de dados. Vamos utilizar esse recurso para olhar com uma lupa o intervalo de freqncia de 2,5 kHz a 3,5 kHz:
>> Hzi = linspace(2e3, 5e3); % olhando bem de perto o mnimo
A interpolao bidimensional interpola funes de duas variveis, z = f(x,y).
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Um processo de levantamento topogrfico submarino feito por radar embarcado em uma aeronave produz uma grade de pontos (x, y, z) em que cada coordenada (x, y) se encontra a 0,5 km uma da outra. Essa impreciso conseqncia da velocidade do vo e limitaes de processamento embarcado na aeronave. O resultado armazenado no arquivo topologia_sub.m topologia_sub.m topologia_sub.m topologia_sub.m, mostrado a seguir:
APOSTILA DE MATLAB 54 54 54 54 ENGENHARIA DE PRODUO PLENA
>> topologia_sub, whos % executa o arquivo topologia_sub
>> mesh(x,y,z) % grfico 3D
>> xlabel('eixo X, km')
>> ylabel('eixo Y, km')
>> zlabel('profundidade do oceano, m')
>> title('Medidas de profundidade do oceano')
APOSTILA DE MATLAB 55 55 55 55 ENGENHARIA DE PRODUO PLENA
Exemplo Exemplo Exemplo Exemplo 2 22 2 se quisermos obter uma estimativa da profundidade em um dado ponto? Podemos utilizar a funo interp2 para realizar esta tarefa. Como exemplo, queremos estimar a profundidade a nas coordenadas (x = 1,75 e y = 1,85). Na janela de comando, temos:
>> format long g >> zi = interp2(x, y, z, 1.75, 1.85, 'linear') % interpolacao linear zi = 2100.6
>> zi = interp2(x, y, z, 1.75, 1.85, 'cubic') % interpolacao cubica zi = 2100.672
>> zi = interp2(x, y, z, 1.75, 1.85, 'splines') % interpolacao com splines zi = 2100.71115186761
>> zi = interp2(x, y, z, 1.75, 1.85, 'nearest') % interpolacao vizinho mais % proximo zi = 2101
Exemplo Exemplo Exemplo Exemplo 3 33 3 A baixa amostragem do levantamento realizado torna o grfico muito agudo em alguns pontos. Mais uma vez, a interpolao pode ser utilizada para melhorar (suavizar) a aparncia do grfico (a rotina completa est no arquivo graf_topologia_sub.m graf_topologia_sub.m graf_topologia_sub.m graf_topologia_sub.m):
Passo 1: Interpolar em uma escala mais refinada.
>> xi = linspace(0,4,30); % eixo x refinado
>> yi = linspace(0,6,40); % eixo y refinado
Passo 2: Para cada valor em xi, desejamos fazer interpolaes sobre os valores em yi, ou seja, desejamos criar uma malha de todos os pares (xi, yi) e depois interpolar cada um desses pares. Para criar esses pares utilizaremos o comando meshgrid. Veja o exemplo a seguir:
>> size(zzi) % zzi e do mesmo tamanho que xxi e yyi
>> mesh(xxi, yyi, zzi) % grfico dos dados suavizados
>> hold on % mantem o estado atual do grfico
>> [xx, yy] = meshgrid(x, y); % malha dos dados originais
>> plot3(xx, yy, z + 0.1, 'ok') % dados originais levemente elevados para % mostrar os ns
>> hold off
>> xlabel('eixo X, km'), ylabel('eixo Y, km'), zlabel('profundidade, m')
>> title('Relevo submarino suavizado')
APOSTILA DE MATLAB 57 57 57 57 ENGENHARIA DE PRODUO PLENA
O resultado mostrado a seguir:
APOSTILA DE MATLAB 58 58 58 58 ENGENHARIA DE PRODUO PLENA
13. 13. 13. 13. P PP POLINMIOS OLINMIOS OLINMIOS OLINMIOS
O MATLAB possui diversas funes para a manipulao de polinmios. Veremos algumas a seguir.
13.1 13.1 13.1 13.1 Razes Razes Razes Razes
Encontra os valores para os quais um polinmio igual a zero, ou seja, encontrar as suas razes, muito simples no MATLAB.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Seja o seguinte polinmio:
x xx x 4 44 4 12 x 12 x 12 x 12 x 3 33 3 + 0 x + 0 x + 0 x + 0 x 2 22 2 + 25 x + 25 x + 25 x + 25 x 1 11 1 + 11 + 11 + 11 + 116 x 6 x 6 x 6 x 0 00 0
Para achar a raiz desse polinmio, precisamos primeiro representa-lo no ambiente do MATLAB:
>> p = [1 -12 0 25 116 ] p = 1 -12 0 25 116
Os coeficientes devem ser ordenados de acordo com o grau da varivel independente por ordem decrescente e os coeficientes nulos tambm devem ser representados:
A raiz do polinmio encontrada pela funo roots:
>> r = roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i
Exemplo Exemplo Exemplo Exemplo 2 22 2 Dadas as razes de um polinmio, possvel obter o referido polinmio:
13.2 13.2 13.2 13.2 Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso Multiplicao, Adio e Diviso
A multiplicao de polinmios realizada atravs da funo conv (convoluo entre polinmios).
APOSTILA DE MATLAB 59 59 59 59 ENGENHARIA DE PRODUO PLENA
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Multiplicar os polinmios a(x) = a(x) = a(x) = a(x) = x xx x 3 33 3 + + + + 2 x 2 x 2 x 2 x 2 2 2 2 + ++ + 3 x + 4 3 x + 4 3 x + 4 3 x + 4 e b(x) = b(x) = b(x) = b(x) = x xx x 3 33 3 + 4 + 4 + 4 + 4 x xx x 2 2 2 2 + 9 x + + 9 x + + 9 x + + 9 x + 16 16 16 16:
>> a = [1 2 3 4], b = [1 4 9 16];
>> c = conv(a, b) c = 1 6 20 50 75 84 64
O MATLAB no possui uma funo especfica para a adio de polinmios. O operador padro de soma pode ser usado para esse fim.
Exemplo Exemplo Exemplo Exemplo 2 22 2 Somar os polinmios a(x) = a(x) = a(x) = a(x) = x xx x 3 33 3 + + + + 2 x 2 x 2 x 2 x 2 2 2 2 + ++ + 3 x + 4 3 x + 4 3 x + 4 3 x + 4 e b(x) = b(x) = b(x) = b(x) = x xx x 3 33 3 + 4 + 4 + 4 + 4 x xx x 2 2 2 2 + 9 x + 16 + 9 x + 16 + 9 x + 16 + 9 x + 16:
>> d = a + b d = 2 6 12 20
Exemplo Exemplo Exemplo Exemplo 3 33 3 Somar os polinmios c cc c(x) = (x) = (x) = (x) = x xx x 6 66 6 + 6 + 6 + 6 + 6 x xx x 5 5 5 5 + 20 x + 20 x + 20 x + 20 x 4 44 4 + 50 x + 50 x + 50 x + 50 x 3 33 3 + 75 x + 75 x + 75 x + 75 x 2 22 2 + 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64 e d dd d(x) (x) (x) (x) = == = 2 2 2 2 x xx x 3 33 3 + + + + 6 66 6 x xx x 2 2 2 2 + + + + 12 12 12 12 x + x + x + x + 20 20 20 20:
>> e = c + [0 0 0 d] e = 1 6 20 52 81 96 84
A diviso de polinmios pode ser realizada com a funo deconv.
Exemplo Exemplo Exemplo Exemplo 4 44 4 Dividir o polinmio c cc c(x) = (x) = (x) = (x) = x xx x 6 66 6 + 6 + 6 + 6 + 6 x xx x 5 5 5 5 + 20 x + 20 x + 20 x + 20 x 4 44 4 + 50 x + 50 x + 50 x + 50 x 3 33 3 + 75 x + 75 x + 75 x + 75 x 2 22 2 + 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64 por b(x) b(x) b(x) b(x) = == = x xx x 3 33 3 + 4 + 4 + 4 + 4 x xx x 2 2 2 2 + 9 x + 16 + 9 x + 16 + 9 x + 16 + 9 x + 16:
>> [q, r] = deconv(c, b) % resulta em a(x) com resto zero q = 1 2 3 4 r = 0 0 0 0 0 0 0
13.3 13.3 13.3 13.3 Derivadas e Integrais Derivadas e Integrais Derivadas e Integrais Derivadas e Integrais
A derivada de um polinmio pode ser obtida pela funo polyder.
Exemplo Exemplo Exemplo Exemplo 1 11 1 Derivar o polinmio c cc c(x) = (x) = (x) = (x) = x xx x 6 66 6 + 6 + 6 + 6 + 6 x xx x 5 5 5 5 + 20 x + 20 x + 20 x + 20 x 4 44 4 + ++ + 50 x 50 x 50 x 50 x 3 33 3 + 75 x + 75 x + 75 x + 75 x 2 22 2 + 84 x + 84 x + 84 x + 84 x + 64 + 64 + 64 + 64:
Exemplo Exemplo Exemplo Exemplo 2 22 2 Integra o polinmio derivada derivada derivada derivada(x) = (x) = (x) = (x) = 6 66 6 x xx x 5 5 5 5 + 30 x + 30 x + 30 x + 30 x 4 44 4 + 80 x + 80 x + 80 x + 80 x 3 33 3 + 150 x + 150 x + 150 x + 150 x 2 22 2 + 84 + 84 + 84 + 84, utilizando a constante 64:
>> integral = polyint(derivada, 64) % recupera o polinmio c(x) integral = 1 6 20 50 75 84 64
13.4 13.4 13.4 13.4 Clculo de Polinmios Clculo de Polinmios Clculo de Polinmios Clculo de Polinmios
O clculo de polinmios consiste em avaliar o polinmio para um intervalo definido. A funo do que faz esse trabalho polyval.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Avaliar o polinmio p pp p(x) = (x) = (x) = (x) = 2 22 2 x xx x 3 3 3 3 + 3 x + 3 x + 3 x + 3 x 2 22 2 - -- - 10 x 10 x 10 x 10 x 15 15 15 15 na faixa de intervalos [-5, 5]:
>> p = [ 2 3 -10 -15 ]; % o polinmio
>> x = linspace(-5,5); % o intervalo de avaliao
>> v = polyval(p, x); % calculando p para os valores de x
APOSTILA DE MATLAB 61 61 61 61 ENGENHARIA DE PRODUO PLENA
13.5 13.5 13.5 13.5 Ajuste de Curvas Ajuste de Curvas Ajuste de Curvas Ajuste de Curvas
Em diversas reas do conhecimento, necessrio adaptar um curva com dados obtidos experimentalmente. A curva escolhida pode passar pelos pontos dados ou passar prximo a eles. Na situao mais comum, a curva e escolhida de maneira que a soma dos quadrados dos erros nos pontos dados seja minimizada, resultando no ajuste de curvas por quadrados mnimos quadrados mnimos quadrados mnimos quadrados mnimos. Embora o ajuste de curvas por quadrados mnimos possa ser feito utilizando qualquer conjunto de funes base, mais comum e direto utilizar-se de uma srie de potncias truncada, ou seja, um polinmio.
No MATLAB, a funo polyfit ajusta curvas pelo mtodo dos quadrados mnimos. Vejamos o exemplo a seguir:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Obter curvas que aproximam um conjunto de pontos obtidos experimentalmente utilizando polinmios de grau 1, 2 e outros:
Seja o conjunto de dados a seguir (arquivo ajuste_curva.m ajuste_curva.m ajuste_curva.m ajuste_curva.m):
Calculando a curva para um polinmio de grau um (regresso linear), temos:
>> n = 1;
>> p = polyfit(x, y, n) p = 10.3185 1.4400
O resultado o polinmio p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400 p(x) = 10.3185 x + 1.4400. Comparando esse resultado com os dados reais, temos:
>> xi = linspace(0, 1, 100);
>> yi = polyval(p, xi);
>> plot(x, y, '-o', xi, yi, '--')
>> xlabel('x'), ylabel('y=f(x)')
>> title('Aproximacao por regressao linear')
O grfico que compara a aproximao linear com o conjunto real de pontos visto a seguir: APOSTILA DE MATLAB 62 62 62 62 ENGENHARIA DE PRODUO PLENA
O mesmo processo pode ser realizado para uma aproximao de grau 2:
>> n = 2;
>> p = polyfit(x, y, n) p = -9.8108 20.1293 -0.0317
O resultado o polinmio p(x) = p(x) = p(x) = p(x) = - -- -9.8108 x 9.8108 x 9.8108 x 9.8108 x 2 22 2 + 20.1293 x + 20.1293 x + 20.1293 x + 20.1293 x - -- - 0.0317 0.0317 0.0317 0.0317. Comparando esse resultado com os dados reais, temos:
>> xi = linspace(0, 1, 100);
>> yi = polyval(p, xi);
>> plot(x, y, '-o', xi, yi, '--')
>> xlabel('x'), ylabel('y=f(x)')
>> title('Aproximacao quadrtica')
O grfico mostrado a seguir: APOSTILA DE MATLAB 63 63 63 63 ENGENHARIA DE PRODUO PLENA
Sugesto: tentar um ajuste com polinmio de ordem 10 (visto que a amostra real possui 11 pontos). Essa abordagem interessante? Justifique. APOSTILA DE MATLAB 64 64 64 64 ENGENHARIA DE PRODUO PLENA
14. 14. 14. 14. O OO OTIMIZAO TIMIZAO TIMIZAO TIMIZAO
Otimizao, no contexto aqui apresentado se refere ao processo de determinao de pontos onde uma funo y = g(x) assume valores especficos ou extremos. Um problema clssico encontrar os zeros de uma funo. O pacote bsico do MATLAB resolve esse problema para funes unidimensionais. Para achar zeros em funes multidimensionais necessrio o Toolbox de Otimizao. Outro problema comum, mas de soluo no trivial, a localizao de mximos e mnimos de funes. Nesse caso o pacote bsico do MATLAB atende para uma e muitas dimenses.
14.1 14.1 14.1 14.1 Determinao do Zero Determinao do Zero Determinao do Zero Determinao do Zero
A obteno de zeros de funes unidimensionais no MATLAB feita com o comando fzero.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Encontrando os zeros para a funo de Humps:
APOSTILA DE MATLAB 65 65 65 65 ENGENHARIA DE PRODUO PLENA
Por inspeo visual, os zeros da funo de Humps esto prximos de 1,3 e -0,2.
Atravs da funo fzero, podemos encontrar uma aproximao melhor para esses zeros:
>> format long % melhor preciso >> x = fzero('humps', 1.3) % obtendo o zero prximo de 1.3 x = 1.29954968258482
>> humps(x) % testando... ans = 0
A seguir, a varivel valor conter o resultado de humps(x), evitando a necessidade de fazer a chamada explicita da funo para testar o valor x (zero estimado).
>> [x, valor] = fzero('humps', -0.2) % obtendo o zero prximo de -0.2 x = -0.13161801809961 valor = 8.881784197001252e-016
A funo fzero tambm pode ser chamada para um intervalo, desde que haja troca de sinal no mesmo, conforme mostrado a seguir:
>> [x, valor] = fzero('humps', [-2, 0]) % intervalo correto (troca de sinal) x = -0.13161801809961 valor = 0
>> [x, valor] = fzero('humps', [0, 1.2]) % sem troca de sinal no intervalo ??? Error using ==> fzero The function values at the interval endpoints must differ in sign.
Para um melhor acompanhamento das funes de otimizao (padro e da Toolbox de Otimizao), existem alguns parmetros que podem ser definidos a critrio do usurio. Por exemplo: a funo fzero possui os parmetros definveis Display e TolX, que permitem, respectivamente, o controle da quantidade de detalhes a ser exibido no momento da execuo da funo e estabelece a tolerncia para a resposta final (a menor tolerncia possvel eps). Esses parmetros so manipulados pelas funes optimset e optimget.
Exemplo Exemplo Exemplo Exemplo 2 22 2 Utilizando o parmetro definvel Display da funo fzero para exibir as iteraes realizadas pela funo fzero:
Func-count x f(x) Procedure 1 -2 -5.69298 initial 2 0 5.17647 initial 3 -0.952481 -5.07853 interpolation 4 -0.480789 -3.87242 interpolation 5 -0.240394 -1.94304 bisection 6 -0.120197 0.28528 bisection 7 -0.140197 -0.201336 interpolation Zero found in the interval: [-2, 0].
x = -0.14019723625381 valor = -0.20133569692829
Para mais opes consulte a documentao das funes optimset e optimget no help do MATLAB.
14.2 14.2 14.2 14.2 Minimizao em Uma Dimenso Minimizao em Uma Dimenso Minimizao em Uma Dimenso Minimizao em Uma Dimenso
Em muitas aplicaes particularmente interessante determinar os extremos de uma funo, ou seja, seus mximos (picos) e mnimos (vales). Matematicamente, esses extremos so encontrados de forma analtica, determinando-se onde a derivada (inclinao) da curva igual a zero. H, entretanto, caso em que muito difcil ou impossvel determinar analiticamente os extremos de uma funo. Nesses casos necessrio procurar os extremos das funes analiticamente.
O MATLAB possui duas funes que desempenha essa funo, fminbnd e fminsearsh. Essas duas funes encontram mnimos de funes unidimensionais e dimenso n, respectivamente. Uma vez que o mximo de f(x) o mximo de f(x) o mximo de f(x) o mximo de f(x) igual ao mnimo de mnimo de mnimo de mnimo de f(x) f(x) f(x) f(x), fminbnd e fminsearch podem ser utilizadas para encontrar tanto os mnimos quanto os mximos.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Observando o grfico da funo de Humps da seo 14.1, percebe-se que h um mximo perto de 0,3 e um mnimo perto de 0,6. Atravs de fminbnd, esses extremos podem ser encontrados com maior preciso, conforme mostramos a seguir: APOSTILA DE MATLAB 67 67 67 67 ENGENHARIA DE PRODUO PLENA
% procurando o mximo (o mesmo que o mnimo de humps(x)) >> [xmax, valor] = fminbnd('-humps(x)', 0.2, 0.4, options) % de [0.2, 0.4] Func-count x f(x) Procedure 1 0.276393 -91.053 initial 2 0.323607 -91.4079 golden 3 0.352786 -75.1541 golden 4 0.300509 -96.5012 parabolic 5 0.300397 -96.5014 parabolic 6 0.300364 -96.5014 parabolic 7 0.300331 -96.5014 parabolic Optimization terminated successfully: ...
xmax = 0.300364137900245 valor = -96.5014072438705
Repare que o valor do mximo , na verdade, +96,5, pois o clculo foi feito com Humps.
14.3 14.3 14.3 14.3 Minimizao Minimizao Minimizao Minimizao em em em em Dimenses Mais Elevadas Dimenses Mais Elevadas Dimenses Mais Elevadas Dimenses Mais Elevadas
A funo fminsearch aplica um algoritmo simples para minimizar uma funo de vrias variveis, ou seja, fminsearch tenta encontrar o mnimo de f(x), onde f(x) uma funo escalar de um argumento vetorial x. O algoritmo implementado por fminsearch o Simplex, de Nelder-Mead.
Para ilustrar a utilizao de fminsearsh, veja o exemplo a seguir:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Achar o mnimo da funo de Rosembrock:
Vamos primeiro visualizar a funo em 3 dimenses, utilizando o eixo x para a varivel x1 e o eixo y para a varivel x2: APOSTILA DE MATLAB 68 68 68 68 ENGENHARIA DE PRODUO PLENA
% rosembrock.m x = [-1.5:0.125:1.5]; % intervalo da varivel x1 y = [-.6:0.125:2.8]; % intevalo da varivel x2 [X, Y] = meshgrid(x, y); % malha de todos os x e y Z = 100.*(Y - X.*X).^2 + (1 - X).^2; % funo de Rosembrock mesh(X, Y, Z) % grafico 3D de Rosembrock hidden off xlabel('x(1)'), ylabel('x(2)'), title('Funcao de Rosembrock') hold on plot3(1, 1, 1, 'k.', 'markersize', 30) % marcando o ponto de mnimo hold off
Para encontrar o mnimo, ilustrado no grfico anterior em (1, 1), devemos reescrever a funo em termos de x1 = x(1) x1 = x(1) x1 = x(1) x1 = x(1) e x2 = x(2) x2 = x(2) x2 = x(2) x2 = x(2). Faremos isso no seguinte arquivo M:
% rosembrock.m function f=rosembrock(x) % Funo de Rosembrock f = 100.*(x(2) - x(1).*x(1)).^2 + (1 - x(1)).^2; % funo de Rosembrock
Utilizando esse arquivo M de funo, fminsearch produz:
Usando opes, podemos tornar o resultado mais acurado. Fazemos isso aumentando a tolerncia do clculo da funo com o opo TolFun e a tolerncia de x com TolX:
Para aumentar a eficincia da computao numrica e melhorar as chances de convergncia do algoritmo de busca de zeros e extremos usando o MATLAB, algumas sugestes:
1- Comece com uma boa aproximao inicial. 2- Se componentes da soluo esto separados por vrias ordens de magnitude, considere a possibilidade de escalon-los para melhorar a eficincia e preciso da iterao. 3- Se o problema complicado, divida-o em problemas mais simples. 4- Tenha certeza que a funo no vai retornar nmeros complexos, Inf ou NANs. 5- Evite funes descontnuas. APOSTILA DE MATLAB 70 70 70 70 ENGENHARIA DE PRODUO PLENA
15. 15. 15. 15. I II INTEGRAO E NTEGRAO E NTEGRAO E NTEGRAO E D DD DIFERENCIAO IFERENCIAO IFERENCIAO IFERENCIAO
A integrao e a diferenciao so ferramentas fundamentais do Clculo. O MATLAB possui funes para aproximar numericamente a integrao e a inclinao de uma funo quando esta fornecida em um arquivo M ou como uma funo in-line.
A integrao pode ser realizada pela aproximao de uma funo por trapzios definidos a intervalos constantes em relao ao eixo x.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Aproximao trapezoidal da funo de Humps (arquivo integral_trap.m integral_trap.m integral_trap.m integral_trap.m):
% integral_trap.m x1 = -1:.17:2; % intervalo de 17 trapzios y1 = humps(x1); x2 = linspace(-1,2,100); % intervalo de 100 trapzios y2 = humps(x2); plot(x1, y1, 'ko:', x2, y2, 'b-'), hold on x = linspace(-1,2); y = zeros(1, size(x,2)); plot(x, y, 'k-') % eixo x for i=1:18 % lados dos trapezios plot([x1(i) x1(i)], [0 y1(i)], 'k:') end hold off
O grfico resultante mostrado a seguir:
APOSTILA DE MATLAB 71 71 71 71 ENGENHARIA DE PRODUO PLENA Repare que a representao tracejada da funo de Humps uma aproximao da representao com trao contnuo da mesma funo. A integral aproximada pode ser calculada por:
>> format long
>> area1 = trapz(x1, y1) % rea da aproximao com 17 trapzios area1 = 25.91740000817554
>> area2 = trapz(x2, y2) % rea da aproximao com 100 trapzios area2 = 26.34473119524596
Exemplo Exemplo Exemplo Exemplo 2 22 2 Calcule e exiba em grfico a funo I(x) = f(x) dx, para x em [x1, x] usando a funo cumtrapz (arquivo integral_ integral_ integral_ integral_acumula acumula acumula acumula.m .m .m .m):
% integral_acumula.m x = linspace(-1, 2, 100); y = humps(x); z = cumtrapz(x, y); size(z) plotyy(x, y, x, z) grid on xlabel('x'), ylabel('humps(x) e integral de humps(x)') title('Integral cumulativa de humps(x)')
O grfico resultante mostrado a seguir:
No eixo y direita est a escala de valores da funo Humps, no eixo y esquerda encontramos a escala de valores da integral da funo de Humps, I(x):
APOSTILA DE MATLAB 72 72 72 72 ENGENHARIA DE PRODUO PLENA
Melhor preciso pode ser obtida se a aproximao trapezoidal puder variar o intervalo de x de acordo com as caractersticas da funo (maiores inclinaes pedem uma diminuio na altura do trapzio, menores inclinaes pedem um aumento na altura). No confundir altura do trapzio com a sua base (nas figura do exemplo 1, as base esto na vertical). O MATLAB possui as funes quad e quadl que fazem esses ajustes automaticamente, resultado em maior preciso nos clculos.
Exemplo Exemplo Exemplo Exemplo 3 33 3 Calculo da integral da funo de Humps com maior preciso utilizando quad e quadl:
>> format long
>> z(end) % valor final de cumtrapz (preciso de 4 dgitos significativos) ans = 26.34473119524596
>> quad('humps', -1, 2) % preciso de 8 dgitos significativos ans = 26.34496049276723
>> quadl('humps', -1, 2) % preciso de 8 dgitos significativos ans = 26.34496047137897
No MATLAB tambm possvel resolver numericamente integrais duplas do tipo
Comparada integrao, a diferenciao numrica muito mais complicada. A integrao descreve uma propriedade global da funo, enquanto a diferenciao representa a inclinao de uma funo em um ponto. Como conseqncia, a diferenciao muito mais sensvel a pequenas variaes na funo. Particularmente, a diferenciao numrica deve ser evitada sempre que possvel, principalmente se os dados a serem derivados so obtidos experimentalmente. Nesse caso, melhor realizar um ajuste de curva polinomial, usando quadrados mnimos, e depois derivar o polinmio resultante.
Veremos a seguir um exemplo de diferenciao numrica que utiliza essa estratgia.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Diferenciao de uma curva obtida por ajuste de pontos usando o mtodo dos quadrados mnimos:
APOSTILA DE MATLAB 74 74 74 74 ENGENHARIA DE PRODUO PLENA
Seja o conjunto de dados a seguir (arquivo ajuste_curva.m ajuste_curva.m ajuste_curva.m ajuste_curva.m):
Realizando a aproximao para um polinmio de segunda ordem:
>> n = 2;
>> p = polyfit(x, y, n) p = -9.8108 20.1293 -0.0317
O resultado o polinmio p(x) = p(x) = p(x) = p(x) = - -- -9.8108 x 9.8108 x 9.8108 x 9.8108 x 2 22 2 + 20.1293 x + 20.1293 x + 20.1293 x + 20.1293 x - -- - 0.0317 0.0317 0.0317 0.0317. Comparando esse resultado com os dados reais, temos:
>> xi = linspace(0, 1, 100);
>> yi = polyval(p, xi);
>> plot(x, y, '-o', xi, yi, '--')
>> xlabel('x'), ylabel('y=f(x)')
>> title('Aproximacao quadrtica')
>> hold on % o grfico ainda no est concludo
A diferenciao do polinmio feita com o uso do comando polyder:
>> yder = polyval(pder, xi); % gera pontos da derivada para exibir grfico
>> plot(xi, yder, 'k:')
>> xlabel('x'), ylabel('y=f(x) e df(x)/dx')
>> hold off
A seqncia completa de comandos que gera o grfico a seguir est no arquivo derivada.m derivada.m derivada.m derivada.m. A amostragem de pontos est representada pelo sinal o, a curva obtida por ajuste de quadrados mnimos est representada em traos longos e a sua derivada em traos curtos.
APOSTILA DE MATLAB 75 75 75 75 ENGENHARIA DE PRODUO PLENA
Quando os dados so bidimensionais, a funo gradient utiliza diferenas centradas para estimar a inclinao em dada direo, em cada ponto tabulado. Vejamos o prximo exemplo:
Exemplo Exemplo Exemplo Exemplo 2 22 2 Calcular e representar graficamente o gradiente de uma funo elementar do MATLAB (funo peaks):
Todo o procedimento a seguir est documentado no arquivo gradiente.m gradiente.m gradiente.m gradiente.m, mostrado a seguir.
% gradiente.m [x, y, z] = peaks(20); % funo elementar bidimensional figure(1), mesh(x, y, z) % grfico de peaks size(x) size(y) size(z) dx = x(1,2) - x(1,1) % espaamento na direo x dy = y(2,1) - y(1,1) % espaamento na direo y [dzdx, dzdy] = gradient(z, dx, dy); % calcula o gradiente size(dzdx) size(dzdy) figure(2), contour(x, y, z) % exibe os contornos hold on quiver(x, y, dzdx, dzdy) % representa as setas (direo do crescimento) hold off title('Gradiente da funcao peaks')
Os dois grficos produzidos so exibidos a seguir: APOSTILA DE MATLAB 76 76 76 76 ENGENHARIA DE PRODUO PLENA Funo peaks:
Gradiente de peaks:
APOSTILA DE MATLAB 77 77 77 77 ENGENHARIA DE PRODUO PLENA
18. 18. 18. 18. G GG GRFICOS RFICOS RFICOS RFICOS B BB BIDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS IDIMENSIONAIS
At o momento, um grande nmero de grficos foi apresentado. Nesse captulo detalharemos alguns recursos relativos a grficos em duas dimenses.
18.1 18.1 18.1 18.1 Uso do Comando plot Function Uso do Comando plot Function Uso do Comando plot Function Uso do Comando plot Function
Veremos a seguir alguns exemplos de utilizao do comando plot: :: :
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Criando um grfico com seno e co-seno:
>> x = linspace(0, 2*pi, 30);
>> y = sin(x);
>> z = cos(x);
>> plot(x,y,x,z)
>> title('Seno e co-seno')
APOSTILA DE MATLAB 78 78 78 78 ENGENHARIA DE PRODUO PLENA 18.2 18.2 18.2 18.2 Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores Estilos de Linha, Marcadores e Cores
Alguns estilos de linha, marcadores e cores podem ser usados para diferenciar diferentes funes representados no mesmo grfico. Veja o exemplo a seguir.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Melhorando o grfico da seo 18.1:
>> plot(x, y, 'b:p', x, z, 'k-', x, 1.25*z, 'm+')
Para conhecer as opes do comando plot, faa:
>> help plot
18.3 18.3 18.3 18.3 Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos Grades, Eixos, Legendas e Ttulos
O comando grid on adiciona linhas de grade ao grfico, tornando a sua leitura mais vivel. O comando grid off desabilita a exibio das linhas de grade.
O comando box on habilita a exibio da caixa de eixos (essa opo o padro do MATLAB). O comando box off desabilita a exibio da caixa de eixos.
Podemos atribuir nomes aos eixos horizontal e vertical usando, respectivamente, os comandos xlabel e ylabel.
O comando axis([xmin xmax ymin ymax]) define os valores mnimo e mximo dos eixos com base nos valores fornecidos pelo vetor linha. APOSTILA DE MATLAB 79 79 79 79 ENGENHARIA DE PRODUO PLENA O comando title adiciona uma linha de ttulo ao grfico. possvel inserir um texto em qualquer posio do grfico com o comando text(x, y, texto). Vejamos um exemplo:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Melhorando o grfico da seo 18.2:
>> x = linspace(0, 2*pi, 30);
>> y = sin(x);
>> z = cos(x);
>> w = 1.5 .* y;
>> plot(x, y, 'b:p', x, z, 'k-', x, 1.25*z, 'm+')
>> box off
>> grid on
>> axis([-1, 7, -2, 2])
>> text(2.5, 0.7, 'sen(x)')
>> xlabel('eixo x')
>> ylabel('eixo y')
>> title('grafico experimental')
APOSTILA DE MATLAB 80 80 80 80 ENGENHARIA DE PRODUO PLENA
No MATLAB possvel adicionar novos grficos utilizando o comando hold, que quando ligado (hold on) capaz de desenhar um novo grfico sem sobrescrever o primeiro. Para que o novo grfico substitua o anterior (padro do MATLAB), use o comando hold off.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Repetir o grfico da seo 18.3 apenas adicionado novos grficos usando o comando hold:
>> x = linspace(0, 2*pi, 30); >> y = sin(x); >> z = cos(x); >> w = 1.5 .* y; >> plot(x, y, 'b:p') % observe o resultado gerado at aqui >> hold on >> box off >> grid on >> text(2.5, 0.7, 'sen(x)') >> axis([-1, 7, -2, 2]) >> plot(x, z, 'k-') % observe o resultado gerado at aqui >> xlabel('eixo x') >> ylabel('eixo y') >> title('grafico experimental') >> plot(x, w, 'm+') % observe o resultado gerado at aqui >> hold off
Essa seqncia de comandos est salva no arquivo graf_mult.m graf_mult.m graf_mult.m graf_mult.m.
O MATLAB suporta naturalmente que cada grfico seja exibido em figuras (janelas) diferentes. Para obter esse efeito deve-se usar o comando figure(n), onde n o nmero da figura. Para criar uma figura nova, entre com um nmero indito para a sesso corrente de execuo do MATLAB. As figuras podem ser fechadas com o comando close(n), onde n o nmero da figura.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Adaptar o arquivo graf_mult.m graf_mult.m graf_mult.m graf_mult.m para que cada grfico seja exibido em uma janela sepadada (resuldado no arquivo graf_mult_janela.m graf_mult_janela.m graf_mult_janela.m graf_mult_janela.m):
% graf_mult_janela. x = linspace(0, 2*pi, 30); y = sin(x); z = cos(x); w = 1.5 .* y; APOSTILA DE MATLAB 81 81 81 81 ENGENHARIA DE PRODUO PLENA % grafico 1: y = sin(x) figure(1), plot(x, y, 'b:p') % figure(1): abra janela 1 grid on text(2.5, 0.7, 'sen(x)') axis([0, 6, -2, 2]) xlabel('eixo x') ylabel('eixo y') title('grafico experimental sen(x)') % grafico 2: z = cos(x) figure(2), plot(x, z, 'k-') % figure(2): abra janela 2 grid on text(1, 0.7, 'cos(x)') axis([0, 6, -2, 2]) xlabel('eixo x') ylabel('eixo y') title('grfico experimental cos(x)') % grafico 3: w = 1.5*sen(x) figure(3), plot(x, w, 'm+') % figure(3): abra janela 3 grid on text(2.2, 1.4, '1.5 sen(x)') axis([0, 6, -2, 2]) xlabel('eixo x') ylabel('eixo y') title('grfico experimental 1.5*sen(x)')
O MATLAB possibilita que vrios grficos sejam inseridos na mesma figura atravs do comando subplot(m,n,p). Os grficos so exibidos em uma matriz m x n e o grfico ativo est na p-sima posio.
No MATLAB possvel exibir grficos de setor (comando pie), barras (comando bar), barras em trs dimenses (funo bar3), barras horizontais (funo barh), barras em 3d horizontais (funo bar3h), em forma de escada (funo stairs), em forma de hastes (funo stem) e outros.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Grfico em forma de setor:
>> a = [ .5 1 1.6 1.2 .8 2.1 ]; >> pie(a, a==max(a)); % exibe o grafico e destaca a maior fatia >> title('Matriculados por curso') >> legend('Filosofia', 'Ciencia Computacao.', 'Administracao', ... 'Ciencias Contabeis', 'Marketing', 'Engenharia de Producao') APOSTILA DE MATLAB 83 83 83 83 ENGENHARIA DE PRODUO PLENA
Exemplo Exemplo Exemplo Exemplo 2 22 2 Grfico em barra e escada. Arquivo gr gr gr gra aa aficos_barra.m ficos_barra.m ficos_barra.m ficos_barra.m:
% graficos_barra.m x = -2.9:0.2:2.9; y = exp(-x.*x); subplot(2, 2, 1) bar(x,y) title('barra bidimensional') subplot(2, 2, 2) bar3(x, y, 'r') title('barra tribidimensional') subplot(2, 2, 3) stairs(x, y, 'k') title('escada') subplot(2, 2, 4) barh(x, y, 'b') title('barra horizontal')
APOSTILA DE MATLAB 84 84 84 84 ENGENHARIA DE PRODUO PLENA
Exemplo Exemplo Exemplo Exemplo 3 33 3 Grfico mostrando barra de erros:
APOSTILA DE MATLAB 85 85 85 85 ENGENHARIA DE PRODUO PLENA
Veja o cdigo que produz o grfico anterior (arquivo gr gr gr gra aa aficos_barra ficos_barra ficos_barra ficos_barra_erro _erro _erro _erro.m .m .m .m) )) ):
% graficos_barra_erro.m x = linspace(0, 2, 21); y = erf(x); % funo de erro de x e = rand(size(x))/10; % e contem valores de erro aleatrios errorbar(x, y, e) title ('grfico com barra de erro')
Exemplo Exemplo Exemplo Exemplo 4 44 4 Grfico em hastes:
>> z = randn(30, 1); % dados aleatrios
>> stem(z, '-') % grfico em hastes
>> set(gca, 'YGrid', 'on')% coloca grades em Y
>> title('grafico em haste')
O grfico:
APOSTILA DE MATLAB 86 86 86 86 ENGENHARIA DE PRODUO PLENA
19. 19. 19. 19. G GG GRFICOS RFICOS RFICOS RFICOS T TT TRIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS RIDIMENSIONAIS
No MATLAB possvel exibir grficos em trs dimenses. Podem ser usadas cores para representar uma quarta dimenso.
19.1 19.1 19.1 19.1 Grficos de Linha Grficos de Linha Grficos de Linha Grficos de Linha
Os grficos de linha so representados com a funo plot3. Vejamos alguns exemplos:
% helice.m t = linspace(0, 10*pi); plot3(sin(t), cos(t), t) xlabel('sen(t)'), ylabel('cos(t)'), zlabel('t') text(0, 0, 0, 'Origem') grid on title('Helice') v = axis % exibe os eixos
APOSTILA DE MATLAB 87 87 87 87 ENGENHARIA DE PRODUO PLENA
Os grficos de linha so representados com a funo plot3. Vejamos alguns exemplos:
19.2 19.2 19.2 19.2 Funes Funes Funes Funes E EE Escala scala scala scalares de Duas Variveis res de Duas Variveis res de Duas Variveis res de Duas Variveis
Seja a funo z = f(x, y) z = f(x, y) z = f(x, y) z = f(x, y), onde x e y so variveis independentes:
No MATLAB, z zz z uma matriz que pode ser descrita em funo das matrizes x x x x e y yy y assim:
z(i,:) = f(x, y(i)) e z(:,j) = f(x(j), y)
Ou seja, a i ii i- -- -sima sima sima sima linha de z est associada i ii i- -- -sima sima sima sima linha de y yy y e a j jj j- -- -sima sima sima sima coluna de z zz z est associada a j jj j- -- -sima sima sima sima coluna de x xx x. O MATLAB oferece o comando meshgrid para executar esse processo:
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Entendendo o funcionamento do comando meshgrid:
>> x = -3:3 % intervalo do eixo x x = -3 -2 -1 0 1 2 3
Repare que meshgrid repetiu x xx x em cada uma das 5 linhas de y yy y e repetiu y yy y em cada uma das 7 colunas de x xx x. Dados X XX X e Y YY Y, se z = f(x, y) = (x + y) z = f(x, y) = (x + y) z = f(x, y) = (x + y) z = f(x, y) = (x + y) 2 22 2 , a matriz de valores que define a superfcie tridimensional dada por:
>> mesh(X, Y, Z) APOSTILA DE MATLAB 88 88 88 88 ENGENHARIA DE PRODUO PLENA
19.3 19.3 19.3 19.3 Grficos de Rede Grficos de Rede Grficos de Rede Grficos de Rede
Os grficos de rede so definidos por meio de coordenadas z dos pontos correspondentes a uma grade retangular no plano x-y. Muitos exemplos desse tipo foram exibidos at aqui.
O arquivo: % esferas.m [ X, Y, Z ]= sphere(12); subplot(1, 2, 1) mesh(X, Y, Z), title('Opaco') hidden on APOSTILA DE MATLAB 89 89 89 89 ENGENHARIA DE PRODUO PLENA axis square off subplot(1, 2, 2) mesh(X, Y, Z), title('Transparente') hidden off axis square off
Exemplo Exemplo Exemplo Exemplo 2 2 2 2 - -- - Variaes do comando mesh: (1) grfico de rede com curvas de nvel (funo meshc) e (2) grfico de rede com plano no nvel zero (funo meshz).
>> [X, Y, Z] = peaks(30);
>> figure(1), meshc(X, Y, Z) % grafico de rede com curvas de nvel
>> title('grafico de rede com curvas de nivel')
>> figure(2), meshz(X, Y, Z) % grafico de rede plano no nivel zero
>> title('grafico de rede com um plano zero')
APOSTILA DE MATLAB 90 90 90 90 ENGENHARIA DE PRODUO PLENA
19.4 19.4 19.4 19.4 Grficos de Superfcie Grficos de Superfcie Grficos de Superfcie Grficos de Superfcie
O grfico de superfcie parecido com o grfico de rede, exceto que no grfico de superfcie os espaos entre as linhas so preenchidos. Esses grficos so gerados usando a funo surf.
Exemplo 1 Exemplo 1 Exemplo 1 Exemplo 1 Tipos diferentes de grfico de superfcie (arquivo graf_superficie.m graf_superficie.m graf_superficie.m graf_superficie.m):
% graf_superficie.m [X, Y, Z] = peaks(20); figure(1), surf(X, Y, Z) xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z') title('grafico de superficie') figure(2), surf(X, Y, Z) shading flat xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z') title('grafico de superficie com shading flat') figure(3), surf(X, Y, Z) shading interp xlabel('eixo X'), ylabel('eixo Y'), zlabel('eixo Z') title('grafico de superficie com shading interpolado')
APOSTILA DE MATLAB 91 91 91 91 ENGENHARIA DE PRODUO PLENA
APOSTILA DE MATLAB 92 92 92 92 ENGENHARIA DE PRODUO PLENA
APOSTILA DE MATLAB ENGENHARIA DE PRODUO PLENA
B BB BIBLIOGRAFIA IBLIOGRAFIA IBLIOGRAFIA IBLIOGRAFIA
1) Hanselman, Duane e Littlefield, Bruce; M MM MATLAB ATLAB ATLAB ATLAB 6 66 6 C CC CURSO URSO URSO URSO C CC COMPLETO OMPLETO OMPLETO OMPLETO; ;; ; Pearson Education; Rio de Janeiro, 2003. 2) Gustafsson, Fredrik; Bergman, Niclas; M MM MATLAB ATLAB ATLAB ATLAB FOR FOR FOR FOR E EE ENGINEERS NGINEERS NGINEERS NGINEERS E EE EXPLAINED XPLAINED XPLAINED XPLAINED; ;; ; Pearson Education; Rio de Janeiro, 2003. Springer, 1a edio, maro de 2003.