Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NDICE
1. O MATLAB ...................................................................................................... 3 1.1. Caractersticas ............................................................................................ 3 1.2. Usos Tpicos............................................................................................... 3 1.3. Algumas Toolboxes Disponveis ............................................................... 3 2. Trabalhando com o MATLAB.......................................................................... 4 3. Operadores Mais Comuns................................................................................. 4 4. Refazendo Um Comando .................................................................................. 5 5. Criando Variveis.............................................................................................. 5 5.1. Olhando as Variveis ................................................................................. 6 5.2. Nomes de Variveis ................................................................................... 6 5.3. Variveis Especiais .................................................................................... 6 5.4. Modificando as Variveis .......................................................................... 7 5.5. Eliminando Variveis................................................................................. 8 6. Limpando o Espao de Trabalho ...................................................................... 8 6.1. Limpando Toda a rea de Trabalho .......................................................... 8 7. Comentrios e Pontuao.................................................................................. 8 8. Quebrando Uma Linha...................................................................................... 9 9. Nmeros Complexos ......................................................................................... 9 9.1. Identidade de Euler .................................................................................. 10 10. Funes Cientficas ....................................................................................... 11 11. Olhando as Variveis mais Detalhadamente ................................................ 17 12. Salvando o Trabalho ..................................................................................... 17 13. Recuperando o Trabalho ............................................................................... 18 14. Formato de Sada........................................................................................... 18 15. Gerenciamento de Arquivos ......................................................................... 19 16. Criando Arquivos M (Arquivos de Comandos) ........................................... 21 17. Operaes com Vetores e Matrizes............................................................... 24 17.1. Criao de Vetores ................................................................................. 24 17.2. Endereamento Vetorial......................................................................... 25 17.3. Construo de Vetores ........................................................................... 26 17.4. Vetores Coluna....................................................................................... 28 17.5. Criao de Matrizes ............................................................................... 29 17.6. Matemtica Escalar - Matriz .................................................................. 31 17.7. Matemtica Matriz - Matriz ................................................................... 32 17.8. Multiplicao Matricial.......................................................................... 33 18. Tamanhos e Endereamento ......................................................................... 34 19. Funes de Construo de Matrizes ............................................................. 40
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
20. Polinmios..................................................................................................... 42 20.1. Multiplicao ......................................................................................... 42 20.2. Adio .................................................................................................... 43 20.3. Diviso ................................................................................................... 43 20.4. Derivadas................................................................................................ 43 20.5. Clculo de Polinmios ........................................................................... 43 20.6. Expanso em Fraes Parciais ............................................................... 44 21. Sistemas de Equaes Lineares .................................................................... 46 22. Grficos Bidimensionais ............................................................................... 47 22.1. Estilos de Linha, Marcadores e Cores ................................................... 49 22.2. Estilos de Grficos ................................................................................. 49 22.3. Grades, Eixos, Legendas e Ttulos ........................................................ 50 22.4. Personalizao de Eixos......................................................................... 51 22.5. Impresso de Figuras ............................................................................. 53 22.6. Manipulao de Grficos ....................................................................... 53 22.7. Outros Recursos dos Grficos Bidimensionais ..................................... 55 23. Ajustes de Curvas e Interpolao.................................................................. 64 23.1. Ajuste de Curvas .................................................................................... 64 23.2. Interpolao Unidimensional................................................................. 66 24. Referncias Bibliogrficas ............................................................................ 70
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1. O MATLAB
Sua primeira verso foi escrita na Universidades do Novo Mxico e na Universidade de Stanford no final da dcada de 1970. Destinava-se aos cursos de: Teoria Matricial lgebra Linear Anlise Numrica
1.1. Caractersticas
O MATLAB um sistema interativo e uma linguagem de programao para computao tcnica e cientfica em geral. Ele integra a capacidade de fazer clculos, visualizao grfica e programao em um ambiente fcil de usar em que os problemas e as solues so expressos em uma linguagem matemtica familiar. O MATLAB tem como elemento de dados bsico uma matriz que no requer dimensionamento. Isso permite solucionar muitos problemas computacionais, principalmente os que envolvem formulaes matriciais ou vetoriais, em uma frao do tempo que seria necessrio para escrever um programa em uma linguagem como C ou FORTRAN.
usurio.
Alm disso, o MATLAB permite a construo de ferramentas reutilizveis. Voc pode facilmente criar suas prprias funes e programas especiais (conhecidos como arquivos M) em linguagem MATLAB. Denomina-se toolbox o conjunto de ferramentas para a resoluo de problemas em reas especficas. O MATLAB dispe de diversas toolboxes desenvolvidas por alguns dos maiores pesquisadores do mundo.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Prompt (Interpretador)
rea de Trabalho
As expresses so calculadas da esquerda para a direita com a operao de potenciao tendo a maior ordem de precedncia, seguida da multiplicao e diviso (ambas tendo a mesma ordem de precedncia), por sua vez seguidas da adio e da subtrao (ambas tendo a mesma ordem de precedncia). Pode-se usar parnteses para alterar essa ordem. Nesse caso, o clculo inicia-se nos parnteses amis internos e procede de dentro para fora.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Problema 1) Maria vai a papelaria e compra 4 borrachas por 25 centavos cada, 6 blocos de nota por 52 centavos cada e 2 rolos de fita por 99 centavos cada. Quantos itens Maria comprou e quanto eles custaram? Inicialmente, podemos adotar o mesmo mtodo da calculadora: 4+6+2 ans = 12 4*25 + 6*52 + 2*99 ans = 610 Observe que o MATLAB no se importa com espaos e chama o resultado de ans (abreviao de answer).
4. Refazendo Um Comando
Utilize a seta para cima do teclado para chamar os comandos anteriores ao prompt do MATLAB. Utilize a seta para baixo do teclado para chamar os comandos posteriores ao prompt do MATLAB. Utilize as setas laterais para mover o cursor dentro da linha de comando no prompt do MATLAB. Digite o comeo do comando e a seta para cima. O Mouse pode ser usado em conjunto com a rea de Transferncia para cortar, copiar e colar texto no prompt de comando.
5. Criando Variveis
Alternativamente, podemos resolver problemas armazenando as informaes em variveis. borrachas=4 borrachas = 4 blocos=6 blocos = 6 fitas=2; itens=borrachas+blocos+fitas itens = 12 custo=borrachas*25+blocos*52+fitas*99 custo =
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
610 O ponto-e-vrgula depois do fim da linha fitas=2; diz ao MATLAB para processar a linha mas no apresentar a resposta. Podemos ainda, perguntar qual foi o preo mdio dos itens comprados. custo_medio=custo/itens custo_medio = 50.8333
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
inf Infinito. 2 / inf ans = 0 NaN (ou) nan inf/inf ans = NaN i (e) j i=j= a = 3i a= 0 + 3.0000i No-nmerico.
1 (Nmero Imaginrio).
itens =
12
borrachas=6
borrachas =
itens
itens =
12 Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Observe que, modificando o nmero de borrachas para 6, o valor de itens no se alterou. Isso ocorre porque o MATLAB no recalcula o nmero de itens baseado no novo valor da varivel borrachas. Quando o MATLAB faz os clculos, ele utiliza os valores conhecidos no momento em que o clculo foi solicitado. Neste caso, para recalcular o nmero de itens, o custo total e o custo mdio seria necessrio chamar os comandos MATLAB apropriados e solicitar ao MATLAB que os recalculasse.
7. Comentrios e Pontuao
Todo texto depois do sinal de porcentagem "%" considerado um comentrio. borrachas=4 borrachas = 4 Pode-se colocar mais de um comando em uma linha, separando-os por vrgula "," ou ponto-e-vrgula ";". borrachas=4, blocos=6; fitas=2 borrachas = 4 %Nmero de borrachas
fitas = 2
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
9. Nmeros Complexos
Utiliza-se "i" ou "j" para indicar a parte imaginria de um nmero complexo. Os mesmos devem ser escritos junto ao nmero, sem separao. a = 2 + 3i, b = 5 -2j a= 2.0000 + 3.0000i
b= 5.0000 - 2.0000i Em geral, as operaes com nmeros complexos do por resultado nmeros complexos. Diferente de outras linguagens, o MATLAB trata da mesma forma as variveis reais e complexas.
c = 3 * (2 -sqrt(-4)*3) c= 6.0000 -18.0000i Para transformar uma varivel ou expresso em complexa deve-se utilizar a multiplicao. d = 6 + sin(pi/4)*i d= 6.0000 + 0.7071i As operaes matemticas com nmeros complexos so escritas da mesma maneira que aquelas com nmeros reais. e=(a+b)/c e= 0.0667 + 0.3667i verifique=j^2 %O quadrado de sqrt(-1) tem de ser igual a -1! %Dos dados anteriores
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
verifique = -1
= a + bi
em que a forma polar dada por um mdulo M e um ngulo e a retangular dada por a + bi. As relaes entre essas frmulas so:
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
10
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
2 b = imag(c) b= -3 M = sqrt(a^2 + b^2) M= 3.6056 a = M*cos(angulo_c_r) a= 2 b = M*sin(angulo_c_r) b= -3 d = conj(c) d= 2.0000 + 3.0000i
11
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
cos(x) cos(x) ans = -0.9668 tan(x) tan(x) ans = 0.2643 log(x) log(x) ans = 1.2238 log10(x) Logaritmo na base dez log10(x) ans = 0.5315 exp(x) exp(x) ans = 29.9641 rem(x,y) Resto da diviso de x por y a=6; b=10; rem(b,a) ans = 4 rem(b,x) ans = 3.2000 gcd(x,y) Mximo divisor comum dos inteiros x e y Exponencial ex Logaritmo natural Tangente Co-seno
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
12
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
gcd(a,b) ans = 2 gcd(a,x) ??? Error using ==> gcd Requires integer input arguments. lcm(x,y) Mnimo mltiplo comum dos inteiros x e y lcm(a,b) ans = 30 ceil(x) ceil(x) ans = 4 floor(x) Arredondamento para nmero inteiro na direo de menos infinito floor(x) ans = 3 round(x) Arredondamento para o nmero inteiro mais prximo round(x) ans = 3 fix(x) fix(x) ans = 3 sign(x) Funo Sinal: Retorna o sinal do argumento sign(x) ans = Arredondamento na direo de zero Arredondamento para nmero inteiro na direo de mais infinito
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
13
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1 sign(x*-2) ans = -1 sign(0) ans = 0 sign(c) ans = 0.5145+ 0.8575i Por qu? help sign %Ajuda para o uso da funo sign
SIGN Signum function. For each element of X, SIGN(X) returns 1 if the element is greater than zero, 0 if it equals zero and -1 if it is less than zero. For complex X, SIGN(X) = X ./ ABS(X). asin(x) Arco seno x=sqrt(2)/2 x= 0.7071 y=asin(x) y= 0.7854 y_graus=y*180/pi y_graus = 45.0000 acos(x) Arco co-seno y=acos(x) y= 0.7854
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
14
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
y_graus=y*180/pi y_graus = 45 atan(x) 4*atan(1) Arco tangente %uma forma de aproximar pi
ans =
Problema 3) Decaimento Radioativo O polnio, um elemento radioativo, tem uma meia-vida de 140 dias, o que significa que, devido ao decaimento radioativo, a quantidade de polnio restante depois de 140 dias a metade da original. Comeando com 10 gramas de polnio hoje, quanto vai restar depois de 250 dias? Soluo: Depois de meia-vida, ou 140 dias, restam 10 . 0,5 = 5 gramas. Depois de duas meias-vidas, ou 280 dias, restam 5 . 0,5 = 10 . 0,5 . 0,5 = 10 . (0,5)2 = 2,5 gramas. Portanto, a soluo correta estaria entre 5 e 2,5 gramas, e a quantidade restante depois de um certo perodo de tempo dada por: quantidade restante = quantidade inicial . (0,5)tempo/meia-vida
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
15
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Soluo em MATLAB: quant_inic=10; meia_vid =140; tempo=250; quant_rest =quant_inic * 0.5^(tempo/meia_vida) Q_final = 2.9003 Problema 4) Clculo de Juros Voc decidiu comprar um carro novo por R$ 18.500,00. O vendedor est oferecendo duas opes de financiamento: a) Taxa de Juros de 0,24% ao ms paga durante 4 anos. b) Taxa de Juros de 0,74% ao ms paga durante 4 anos, com desconto de fbrica de R$1.500,00. Qual o melhor negcio? Soluo: O pagamento mensal P em um emprstimo de A reais, com uma taxa mensal amortizado em M meses, : de juros R,
R (1 + R )M P = A M (1 + R ) 1
gerando uma quantia total paga de T = P . M. Soluo em MATLAB: format bank % usa o formato de sada de banco A=18500; % total do emprstimo M=12*4; % nmero de meses FR=1500; % desconto de fbrica %primeira opo de financiamento R=0.24/100; % taxa mensal de juros P=A*(R*(1+R)^M/((1+R)^M -1)) % pagamento P= 408.50 T1=P*M % custo total do carro T1 = 19608.22 % segunda opo de financiamento R=0.74/100; % taxa mensal de juros P=(A-FR)*(R*(1+R)^M/((1+R)^M -1)) % pagamento P= 422.08 Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
16
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
T2=P*M %custo total do carro T2 = 20259.73 Dif=T2-T1 Dif = 651.51 Com base no resultado, percebemos que a melhor opo de financimento a primeira.
Bytes Class 8 double array 8 double array 8 double array 8 double array
Grand total is 4 elements using 32 bytes Alm dessas funes, o item Show Workspace do menu File cria uma janela GUI, chamada de Workspace Browser, que contm as mesmas informaes fornecidas pelo comando whos. Alm disso, ela permite que voc apague variveis selecionadas. Esta janela tambm criada quando pressionamos o item Workspace Browser na barra de ferramentas da janela de Comandos.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
17
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
diary off %Encerra o comando diary e depois fecha o arquivo.
O comando save permite o armazenamento de uma ou mais variveis do espao de trabalho do MATLAB no formato do arquivo de sua escolha. File Save Workspace As save Saving to: MATLAB.mat armazena todas as variveis no formato binrio do MATLAB no arquivo MATLAB.mat. save aula1 armazena todas as variveis no formato binrio do MATLAB no arquivo aula1.mat. save aula1 a b armazena as variveis a e b, em formato binrio, no arquivo aula1.mat. save aula1 a b -ascii armazena as variveis a e b, em formato ASCII de 8 dgitos, no arquivo aula1.mat. save aula1 a b ascii -doble armazena as variveis a e b, em formato ASCII de 16 dgitos, no arquivo aula1.mat.
format short format long format short e format long e format short g format long g format hex format bank format rat format +
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
18
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Os comandos de formatao tambm podem ser acionados a partir do menu de barra do MATLAB. Selecione a opo Options, dentro dele selecione Numerical Format e mova o cursor sobre o formato desejado. format compact suprime a maioria das linhas em branco; permite que mais informao seja colocada na tela ou na pgina. Ele independe de outros comandos de formatao.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
19
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Para que o diretrio do usurio se torne o diretrio de trabalho (diretrio atual) deve-se clicar no boto Browse:
Em Drives, deve-se escolher o diretrio raiz e em seguida, na caixa acima, o diretrio desejado. Clicando em OK, o diretrio escolhido passar a ser o diretrio atual. Clicando na linha do diretrio atual, na parte central da janela do path aparecer quais so os arquivos MATLAB que se encontram nesse diretrio. Se desejar adicionar um diretrio ao Path basta clicar na opo Add to Path... do menu Path, escolher pela janela que aparecer o diretrio desejado, escolher adicionar na frente, Add to Front (primeiro diretrio a ser pesquisado depois do diretrio atual), ou no final do caminho Add to Back (ltimo diretrio a ser pesquisado Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
20
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
depois do diretrio atual). O lugar onde um diretrio fica no caminho de procura pode ser importante como veremos no decorrer do estudo.
Percebemos que apesar dos comandos estarem escritos num arquivo, uma vez executado, suas variveis passam a pertencer ao Workspace. Suponha agora que a quantidade inicial deva ser informada pelo usurio. Neste caso, usaremos o comando input. A funo input pode ser misturada com outras operaes, tal como as demais funes comuns, aceitando qualquer expresso vlida co MATLAB. Ema algumas situaes, desejvel saber quais comandos foram utilizados para se obter uma certa resposta. Nestes casos, usamos o comando echo que tem a funo de controlar a exibio dos comandos dos arquivos M na janela de comandos. % Calculo do Decaimento Radiotivo % Quantidade Inicial = quant_inic Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
21
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
clc % Limpa a rea de Trabalho clear % Exclui todas as variveis criadas anteriormente echo on quant_inic=input(Quantidade Inicial em g > ); meia_vida=140; tempo=250; quant_rest =quant_inic * 0.5^(tempo/meia_vida); disp(quant_rest) echo off
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
22
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Agora a varivel quant_inic no est mais definida dentro do arquivo. Tem-se uma maior flexibilidade para a variao dos parmetros sem que haja necessidade de repetio de comandos. Outros comandos que so muito utilizados dentro de arquivos M para as funes de visualizao e deteco de erros so os comandos keyboard e pause. O comando keyboard tem a funo de transferir temporariamente o controle para o teclado (pressione return para sair). O comando pause suspende a execuo at que o usurio pressione alguma tecla. Por exemplo: % Calculo do Decaimento Radiotivo % Quantidade Inicial = quant_inic quant_inic=input(Quantidade Inicial em g > ); meia_vida=140; tempo=250; keyboard quant_rest =quant_inic * 0.5^(tempo/meia_vida); disp(quant_rest) Executando obtemos: decaimento Quantidade Inicial > 60 K whos Name Size Bytes Class meia_vida quant_inic quant_rest tempo 1x1 1x1 1x1 1x1 8 double array 8 double array 8 double array 8 double array
Grand total is 4 elements using 32 bytes K return 17.4019 Nesta execuo vemos o seguinte: Como o comando keyboard foi colocado antes dos clculos, possvel modificar as variveis j que elas ainda no foram utilizadas. Para sair do modo de controle do teclado
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
23
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
necessrio utilizar o comando return. Quando estamos no modo de controle de teclado, isto indicado pelo prompt K. O comando pause utilizado para esperar que o usurio aperte uma tecla qualquer para continuar com a execuo dos comandos. Isto utilizado quando o arquivo vai apresentando resultados intermedirios e se deseja analisa-los. Tambm possvel utilizar o comando pause(n) onde n o nmero de segundos que se deseja que a sequncia seja interrompida. Temos ainda o comando waiforbuttonpress que suspende a execuo at que o usurio pressione uma tecla ou um boto do mouse.
tambm pode-se escrever um vetor linha somente separando os elementos do vetor por espaos: vet1 = [ 1 2 3 vet1 = 1 2 3 2 1 2 1]
Se o desejar possvel misturar as duas formas. Uma das grandes vantagens do MATLAB que ele consegue tratar variveis matriciais e vetoriais (quase) do mesmo modo em que trata elementos individuais, por exemplo: vet2= sqrt(vet1) vet2 = 1.0000 1.4142 1.7321 1.4142 1.0000
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
24
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
0.7351 Observe no caso de vet4 que a apresentao do resultado ficou um pouco confusa, devido a que o clculo produziu um nmero complexo, e o MATLAB arranjou a apresentao para dar espao a em caso de todos os elementos do vetor forem complexos. Como um elemento do vetor no tinha espao na linha, foi colocado em baixo, e agregado apresentao os ndices das colunas (Columns 1 through 4 e Column 5).
vet1([2 5 3]) ans = 2 1 3 Observe que a ordem dos ndices pode ser arbitrria. Quando os elementos que se deseja acessar esto em seqncia, pode-se utilizar : vet1(2:5) ans = 2 ou vet1(1:2:5) ans = 1 3 1 3 2 1
Onde 1 : 2 : 5 indica os elementos que comeam pelo ndice 1 e vo de dois em dois at o ndice 5. De forma reversa: Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
25
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
vet1(5:-1:2) ans = 1 2 3 2
Isto porque o operador : por si s j serve para criar vetores. Quando se deseja acessar o ltimo elemento do vetor pode-se utilizar a palavra reservada end. vet1(3:end) ans = 3 2 1
Pode ser que a base de tempo seja de 0 a 2 segundos em intervalos de 0.1 segundos. tempo=0:.1:2 tempo = Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Que tambm pode ser criado como: tempo=(0:20)*.1 tempo = Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
26
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Columns 8 through 14 0.7000 0.8000 0.9000 1.0000 1.1000 1.2000 1.3000
Ou tambm com o auxilio da funo linspace: linspace(0,2,21) ans = Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Onde agora indicado o primeiro elemento, o ltimo e a quantidade de elemento que se deseja que o vetor possua, mas no posso indicar o incremento. Tambm possvel criar vetores cujos elementos so as potncias de 10, por exemplo: logspace(1,2,6) ans = 10.0000 15.8489 25.1189 39.8107 63.0957 100.0000 Que equivalente a fazer: 10.^(1:.2:2) ans = 10.0000 15.8489 25.1189 39.8107 63.0957 100.0000 O operador .^ um operador que indica que os expoentes devem ser aplicados um a um ao elemento 10. Isto um assunto que ser tratado com mais profundidade em outra seo. Assim como possvel criar vetores individualmente de cada uma das formas, pode-se misturar-las para criar vetores das mais diversas formas, por exemplo: vetorestranho=[3:-1.2:-1,0 2.5,logspace(0.01,0.1,3)] vetorestranho = Columns 1 through 7 3.0000 1.8000 0.6000 -0.6000 0 2.5000 1.0233
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
27
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Columns 8 through 9 1.1350 1.2589
Tambm posso utilizar vetores j criados ou parte deles para criar novos vetores: vetornovo=[vet1(1:3),vet4(5:-1:3)] vetornovo = Columns 1 through 4 1.0000 2.0000 3.0000 0.7351
28
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1.2882 1.4289 1.5849 Como acontece com a transposio matemtica, se o vetor for formado por nmeros complexos, sua transposio cria um vetor transposto e conjugado: ac=sqrt(-4:-1) ac = 0 + 2.0000i act=ac' act = 0 - 2.0000i 0 - 1.7321i 0 - 1.4142i 0 - 1.0000i Quando o que se deseja a transposio dos elementos sem conjugar utiliza-se o operador ponto-aspas .'. act1=ac.' act1 = 0 + 2.0000i 0 + 1.7321i 0 + 1.4142i 0 + 1.0000i A operao transposio, como de esperar transforma tambm um vetor coluna em um vetor linha: vecx=vetc3' vecx = 1.0471 1.1614 1.2882 1.4289 1.5849 0 + 1.7321i 0 + 1.4142i 0 + 1.0000i
Este operador como ser visto mais na frente tambm opera com matrizes.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
29
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
0 1 1 0
Neste primeiro exemplo pode-se observar que para indicar elementos separados nas linhas, como feito com os vetores, pode-se faze-lo com vrgulas ou com espaos, entretanto, o indicador de coluna seguinte deve sempre estar presente ou ser substitudo pelo return ou enter: mat_1=[0.1 0.4 0.3 1 0.9 0.8 0.1 0 1.1 0.5 0.4 0.2] mat_1 = 0.1000 0.9000 1.1000 0.4000 0.8000 0.5000 0.3000 0.1000 0.4000 1.0000 0 0.2000
Utilizando todas as formas j vistas para criar vetores, permite criar matrizes com as mesmas ferramentas. Por exemplo: vv=1:4; v1=8:-1:5; mat_b=[vv',v1'] mat_b = 1 2 3 4 8 7 6 5
O detalhe mais importante a se considerar que todas as linhas (todas as colunas) de uma matriz devem ter a mesma quantidade de elementos. Este fato apesar de ser evidente nem sempre fica claro quando a matriz criada por mtodos diferentes dos de escrever direitamente um a um. mat_c=[1 2 3; 4 5] Number of elements in each row must be the same. mat_c1=[vv',v1] ??? All matrices on a row in the bracketed expression must have the same number of rows. O operador transposio como j foi antecipado, tambm funciona com matrizes. mat_d=[1:3;4:6] mat_d = 1 4 2 5 3 6
mat_dt=mat_d' mat_dt = 1 2 3 4 5 6
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
30
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Pode-se observar que como os vetores e as matrizes compartilham os mesmos mtodos de construo (e como veremos a mesma matemtica), pode-se considerar os vetores como matrizes unidimensionais (compostas de uma linha ou de uma coluna) o que simplifica seu tratamento.
mat_a*-1 ans = -1 -2 -3 -4 -5 -6 0 -1 -1 -4 -7 0
Entretanto em algumas situaes o resultado desejado no o que a matemtica e o MATLAB daro como resposta. Para essas situaes existem alguns operadores especiais. Por exemplo quando desejamos elevar todos os termos de uma matriz a um expoente devemos utilizar o operador .^ j que o operador ^ por si s aplicado a uma matriz o exponencial da matriz. mat_d.^2 ans = 1 16 4 9 25 36
No exemplo anterior se fosse utilizado mat_d^2 o MATLAB daria uma mensagem de erro j que isso equivale a fazer mat_d * mat_d que pode apresentar um resultado vlido somente se mat_d fosse quadrada (mesmo nmero de linhas que de colunas) como ser visto mais na frente. Este operador tambm funciona se tento elevar um nmero a diferentes expoentes que esto numa matriz. ex=[1 2 3;4 5 6;7 8 9] ex = 1 4 7 2 5 8 3 6 9
2.^ex ans = 2 4 8 16 32 64 128 256 512 Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
31
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB 17.7. Matemtica Matriz - Matriz
Como acontece na matemtica a soma e a subtrao de duas matrizes s possvel se forem do mesmo tamanho, por exemplo: clear a=[1 2 3;4 5 6] a= 1 4 2 5 3 6
a+c ??? Error using ==> + Matrix dimensions must agree. A multiplicao e a diviso elemento a elemento de duas matrizes tambm requer que a dimenso das duas matrizes seja a mesma. Entretanto a notao um pouco diferente , no caso .* e ./ estando reservado o * e a / para a multiplicao e diviso matricial clssica. a.*b ans = 9 16 21 24 25 24 b./a ans = 9.0000 1.5000 4.0000 1.0000 2.3333 0.6667
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
32
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
d=[1 2 3;3 2 1] d= 1 3 2 2 3 1
c= 9 8 7 c*a ans = 33 28 23 48 41 34 63 54 45 6 5 4
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
33
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
118 73
Onde observa-se que c * a <> a * c. Deve-se prestar muita ateno a este detalhe j que umas das principais fontes de erros na matemtica matricial. A diviso de matrizes ainda mais complicado j que somente pode-se utilizar como divisor uma matriz quadrada j que a operao matriz exponencial ^ s definida para matrizes quadradas. Dividir uma quantidade qualquer igual a multiplica-la pela inversa do seu divisor, por exemplo: f=[1 2;3 4] f= 1 3 f^-1 ans = -2.0000 1.0000 1.5000 -0.5000 c*f^-1 ans = -9.0000 -8.5000 -8.0000 c/f ans = -9.0000 -8.5000 -8.0000 6.0000 5.5000 5.0000 6.0000 5.5000 5.0000 2 4
Bytes Class 48 double array 48 double array 48 double array 48 double array 48 double array 48 double array 72 double array 32 double array
Grand total is 49 elements using 392 bytes Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
34
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
onde pode-se observar que o tamanho (size) est indicado na forma clssica nxm onde n indica a quantidade de linhas da matriz e m a quantidade de colunas. Se se deseja saber qual o tamanho individual de cada matriz pode-se utilizar a funo size(X) tam_a=size(a) tam_a = 2 3 Esta funo d como resposta um vetor no qual o primeiro elemento indica a quantidade de linhas e o segundo a quantidade de colunas. Tambm possvel saber s a quantidade de linhas da matriz: size(a,1) ans = 2 Ou a quantidade de colunas: size(a,2) ans = 3 A funo length(X) retorna o nmero de linhas ou colunas (o que for maior) da matriz X. length(a) ans = 3 length(c) ans = 3 A forma de indicar primeiro as linhas e depois as colunas a forma geralmente utilizada pelo MATLAB para todas as operaes, inclusive para se referir a um elemento da matriz, utilizada essa forma. b(2,3) ans = 4 Est-se observando o elemento que fica na segunda linha e na terceira coluna da matriz b. c(1:2,2) ans = 6 Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
35
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
5 Neste ltimo esto-se observando os elementos da primeira e segunda linha que se encontram na segunda coluna. Quando se deseja obter os elementos de toda uma linha ou de toda uma coluna podem-se utilizar varios mtodos. No primeiro, se conhecido o tamanho da matriz, pode-se fazer: ex ex = 1 4 7 2 5 8 3 6 9 %mostra a matriz ex
ex(2,1:3) ans = 4 5 6
Como com vetores, pode-se utilizar a palavra reservada end para indicar o ltimo elemento. ex(2,1:end) ans = 4 5 6
O MATLAB permite ainda uma simplificao maior, utilizar simplesmente os dois pontos : para indicar toda a linha ou toda a coluna (isto tambm se aplica a vetores, entretanto no utilizvel). ex(2,:) ans = 4 5 6
Se o ndice do elemento desejado for maior que o tamanho da matriz, o MATLAB acusar um erro. b(2,1:5) ??? Index exceeds matrix dimensions. Problema 5) Decaimento Radioativo O polnio, um elemento radioativo, tem uma meia-vida de 140 dias, o que significa que, devido ao decaimento radioativo, a quantidade de polnio restante depois de 140 dias a metade da original. Comeando com 10 gramas de polnio hoje, quanto vai restar depois de 250 dias? Soluo: Usando a soluo apresentada anteriormente, a quantidade restante depois de um certo perodo de tempo dada por: quantidade restante = quantidade inicial . (0,5)tempo/meia-vida Soluo em MATLAB: Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
36
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
quant_inicial=10; meia_vida=140; tempo=7:7:70 %o ltimo dia das prximas 10 semanas tempo = 7 14 21 28 35 42 49 56 63 70
quant_rest=quant_inicial*0.5.^(tempo/meia_vida) quant_rest = Columns 1 through 7 9.6594 9.3303 9.0125 8.7055 8.4090 8.1225 7.8458
O uso de matemtica vetorial faz com que se torne fcil calcular a expresso para mltiplos valores de uma varivel. Note que a exponenciao elemento a elemento .^ usada porque queremos calcular 0,5 elevado a cada componente do vetor. Um grfico com esses dados pode ser traado facilmente no MATLAB:
8.5
7.5
5 6 Nmero da semana
10
Problema 6) O Problema da Semana, estudado nas escolas de ensino mdio, consiste em determinar todos os nmeros menores que 1000 que so divisveis por 7, mas tm resto 1 quando so divididos por 2, 3, 4, 5 e 6. Soluo: No h soluo analtica para este problema, de modo que ela tem de ser encontrada por busca. Se voc comear com todos os mltiplos de 7 menores que 1000. todos os nmeros que no satisfazem as condies restantes podem ser desprezados, restando a soluo desejada.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
37
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Soluo em MATLAB: %semana.m arquivo M de comandos para resolver o problema da %semana n=7:7:1000; %todos os mltiplos de 7 menores que 1000 numero=length(n) %nmero de possveis solues n(rem(n,2)~=1)=[]; %os elemntos que no so soluo so %rejeitados numero=length(n) n(rem(n,3)~=1)=[]; %atribuindo a eles uma varivel vazia numero=length(n) n(rem(n,4)~=1)=[]; %a funo rem calcula o resto de uma %diviso numero=length(n) n(rem(n,5)~=1)=[]; numero=length(n) n(rem(n,6)~=1)=[] A execuo desse arquivo de comandos produz duas solues: semana numero = 142
numero = 71
numero = 24
numero = 12
numero = 2
n= 301 721 Claramente, no foi difcil eliminar a maioria das candidatas soluo. Problema 7) No processo de manufatura nas sees de fundio de uma fbrica automotiva, peas so mergulhadas na gua para resfriar e ento mergulhadas em um banho cido para clarear. Com o tempo, a
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
38
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
concentrao do cido decresce em conseqncia da gua introduzida na imerso e da soluo removida quando as peas so retiradas do banho cido. Para manter a qualidade, a acidez da soluo no deve ser menor que um determinado limite mnimo. Comeando com uma concentrao de 90% de cido na soluo, admitindo-se que a concentrao mnima seja de 50%, e admitindo-se ainda que a gua introduzida e removida em cada mergulho varia de 1% a 10% e que uma certa quantidade de cido tambm removida com a pea, de maneira que o volume da soluo cida permanea constante, pergunta-se: quantas peas podem ser mergulhadas no banho cido antes de cair abaixo da acidez mnima? Soluo: Usando a soluo apresentada anteriormente:
n=
Soluo no MATLAB:
%arquivo m de comandos problema7 con_inicial=90; con_min=50; perda=1:10 %considera de 1% a 10%, em incrementos de 1% n=floor(log(con_inicial/con_min)./log(1+perda/100)) stem(perda,n) xlabel('Perda, em porcentagem, em cada mergulho') ylabel('Nmero de mergulhos') title('Exemplo de mergulho em banho cido')
A execuo desses comandos produz os seguintes dados e traa o grfico de haster que aparece a seguir:
problema7 perda = 1 2 3 4 5 6 7 8 9 10
n= 59 29 19 14 12 10 8 7 6 6
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
39
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Exemplo de mergulho em banho cido 60
50
Nmero de mergulhos
40
30
20
10
matriz identidade
eye(2) ans = 1 0 0 1
zeros
matriz de zeros
zeros(2,3) ans = 0 0 0 0 0 0
ones
matriz de 1's
ones(2,1) ans = 1 1
diag
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
40
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1 0 0 0 0 0 0 2 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 4
Se A uma matriz quadrada, ento diag(A) um vetor cujos componentes so os elementos da diagonal de A.
A=[3 11 5; 4 1 -3; 6 2 1] A= 3 4 6 11 5 1 -3 2 1
possvel construir uma matriz a partir de blocos. Exemplo, se A uma matriz 3 x 3, ento:
B = [A, zeros(3,2); zeros(2,3), eye(2)] B= 3 4 6 0 0 11 5 1 -3 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1
B matriz 5 x 5.
rand
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
41
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
0.6068 0.4860 0.8913 magic 0.0185 0.8214 0.4447 0.9218 0.7382 0.1763 0.9169 0.4103 0.8936
quadrado mgico
magic(3) ans = 8 3 4 1 5 9 6 7 2
20. Polinmios
No MATLAB, os polinmios so representados por vetores linha contendo seus coeficientes em ordem decrescente. Por exemplo, o polinmio x4 12x3 + 0x2 + 25x + 116 introduzido como:
p=[1 -12 0 25 116] p= 1 -12 0 25 116
Por conveno, os polinmios so vetores linha e as razes so vetores coluna. A partir das razes, tambm possvel construir o polinmio associado:
pa=poly(r) pa = 1.0000 -12.0000 -0.0000 25.0000 116.0000
20.1. Multiplicao
A multiplicao polinomial efetuada por meio da funo conv (convoluo entre dois vetores). Considerando os polinmios a(x) = x3 + 2x2 + 3x + 4 e b(x) = x3 + 4x2 + 9x + 16, seu produto dado por:
a=[1 2 3 4]; b=[1 4 9 16]; c=conv(a,b) c= 1 6 20 50 75 84 64
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
42
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Logo, c(x) = x6 + 6x5 + 20x4 + 50x3 + 75x2 + 84x + 64.
20.2. Adio
Quando os dois polinmios forem de ordens diferentes, aquele que tiver menor ordem ter de ser preenchido com coeficientes iguais a zero, a fim de torn-lo da mesma ordem do polinmio de ordem mais alta.
d=a+b d= 2 6 12 20
e=c+[0 0 0 d] e= 1 6 20 52 81 96 84
20.3. Diviso
A diviso de um polinmio por outro pode ser feita com a funo deconv.
[q,r]=deconv(c,b) q= 1 2 3 4
r= 0 0 0 0 0 0 0
O resultado nos diz que c dividido por b nos d o polinmio quociente q e o resto r.
20.4. Derivadas
f=polyder(e) f= 6 30 80 156 162 96
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
43
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
x 3 + 4x 2 - 7x - 10 100
80
60
40
20
-20 -2
-1
1 x
Temos:
n=[1 -10 100] n= 1 -10 100 d=[1 10 100 0] d= 1 10 100 0 % razes de n(x)/d(x) % denominador % numerador
z= roots(n) z=
5.0000 + 8.6603i 5.0000 - 8.6603i p=roots(d) p= 0 -5.0000 + 8.6603i -5.0000 - 8.6603i % plos de n(x)/p(x)
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
44
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
[nd,dd]=polyder(n,d) nd = -1 20 -100 -2000 -10000 % derivada em relao a x
dd = Columns 1 through 6 1 Column 7 0 [r,p,k]=residue(n,d) r= 0.0000 + 1.1547i 0.0000 - 1.1547i 1.0000 20 300 2000 10000 0
k= []
Neste caso, a funo residue retorna os coeficientes r dos resduos (ou da expanso em fraes parciais), seus plos associados p e o termo polinomial k. Como a ordem do numerador menor que a do denominador, no h termos direitos. Sendo assim, a expanso em fraes parciais do polinmio racional dado anteriormente :
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
45
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
A funo residue realiza duas operaes, sendo uma a inversa da outra, com base no nmero de argumentos de entrada e sada que so utilizados.
Para que esse problema tenha soluo nica necessrio que o determinante da matriz A seja diferente de 0.
det(A) ans = 27
Sendo isso verdade, h duas formas de usar o MATLAB para determinar a soluo de A x = b sendo uma delas mais recomendvel. A maneira menos indicada, mas mais direta, consiste em calcular x = A-1 b explicitamente:
x=inv(A)*b x= 25.0000 22.0000 99.0000
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
46
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
A maneira mais recomendvel de resolver o sistema consiste em usar o operador matricial de diviso esquerda.
x=A\b x= 25.0000 22.0000 99.0000
z=cos(x); plot(x,y,x,z)
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
47
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7
Neste exemplo, seno(x) versus x e cosseno(x) versus x foram representados no mesmo grfico. O comando plot automaticamente desenhou a segunda curva em cor diferente na tela. Muitas curvas podem ser representadas de uma s vez por meio da introduo de pares adicionais de argumentos.
W=[y;z]; plot(x,W) % cria uma matriz do seno e do cosseno % faz o grfico das colunas de W versus x
-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
Quando o comando plot executado com apenas um argumento, como em plot(Y), ele age de maneira diferente, dependendo do tipo dos dados contidos em Y. Se Y armazenar valores complexos, plot(Y) interpretado como plot(real(Y),imag(Y)). Em todos os outros casos, a parte imaginria das componentes do vetor de entrada ignorada. Por outro lado, se Y armazenar valores reais, plot(Y) interpretado como plot(1:length(Y),Y), ou seja, feito um grfico de Y versus o ndice de seus elementos. Quando Y uma matriz, essa interpretao vale para cada uma de suas colunas.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
48
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB 22.1. Estilos de Linha, Marcadores e Cores
Smbolo b g r c m y k w Cor Azul Verde Vermelho Ciano Magenta Amarelo Preto Branco Smbolo . o x + * s d v ^ < > p h Marcador Ponto Crculo x + Estrela Quadrado Losango Tringulo para baixo Tringulo para cima Tringulo para esquerda Tringulo para direita Pentagrama Hexagrama Smbolo : -. -Tipo de Linha Linha contnua Linha pontilhada Traos e pontos Linha tracejada
O MATLAB comea com o azul e segue ciclicamente pelas sete primeiras cores da tabela para cada nova curva. O tipo de linha habitualmente usado o contnuo. No h marcador padro. Se uma cor, um marcador e um estilo de linha so especificados, a cor se aplicar tanto aos marcadores como linha. Para conseguir um grfico com uma cor diferente para os marcadores, faa dois grficos para os mesmos dados alterando a especificao das curvas.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
49
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
plot(x,y,x,z)
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7
grid off, box on % Restaura a caixa dos eixos e oculta a grade text(2.5,0.7,'sen(x)') % Adiciona ao grfico um texto identificando a curva do seno na posio (2.5,0.7) gtext('cos(x)') % Adiciona o texto desejado com o mouse.
O comando gtext muda para a janela de figuras em uso e desenha nela uma cruz que segue o mouse at que voc d um clique com o mouse ou pressione uma tecla. O texto ser colocado com o canto inferior esquerdo do primeiro caractere naquela posio.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
50
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Curvas do seno e co-seno 1 0.8 sen(x) 0.6 Variveis dependente Y e Z 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 Varivel independente X 5 6 7 Variveis dependente Y e Z 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 Varivel independente X 5 6 7 cos(x) 1 0.8 sen(x) Curvas do seno e co-seno
axis off axis([xmin xmax ymin ymax]) V=axis axis auto axis(auto) axis manual axis xy
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
51
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
axis ij direita e o vertical cresce de baixo para cima. Usa o sistema de coordenadas matriciais, de modo que a origem do grfico aparea no canto superior esquerdo. O eixo horizontal cresce da esquerda para a direita, mas o eixo vertical cresce de cima para baixo. Faz com que o grfico atual tenha a forma de um quadrado, em lugar do retngulo habitual. Define os valores de escalamento para ambos os eixos como sendo iguais. O mesmo que axis equal, mas ajustando a caixa do desenho de modo a torn-la to pequena quanto possvel. Mantm a proporo entre os eixos, evitando que seja alterada quando h mudana de ponto de vista. Desfaz o efeito dos comandos axis square, equal, tight e vis3d.
axis square axis equal axis tightequal axis tight Axis vis3d Axis normal
cos(x)
axis ij % Virando o grfico de cabea para baixo axis square equal % Comando axis com dois parmetros
Curvas do seno e co-seno -1 -0.8 -0.6 Variveis dependente Y e Z -0.4 -0.2 0 0.2 0.4 0.6 sen(x) 0.8 1 0 1 2 3 4 Varivel independente X 5 6 7 0 1 2 3 4 Varivel independente X 5 6 2 cos(x) Variveis dependente Y e Z -2 -1.5 -1 -0.5 0 0.5 sen(x) 1 1.5 cos(x) Curvas do seno e co-seno
axis xy normal
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
52
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Curvas do seno e co-seno 1 0.8 sen(x) 0.6 Variveis dependente Y e Z 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 Varivel independente X 5 6 7 cos(x)
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
53
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 1 2 3 4 5 6 7
Para desenhar dois ou mais grficos em diferentes janelas, use o comando figure na janela de comandos, ou o item New Figure do menu File da janela de comandos ou da janela de figuras. O comando figure sem parmetros cria uma nova janela. possvel escolher uma janela especfica para ser usada com padro selecionando-a com o mouse ou utilizando o comando figure(n), em que n o nmero da janela que ser usada pelos comandos plot subseqentes. Uma janela pode conter mais de um conjunto de eixos. O comando subplot(m,n,p) subdivide a janela de figuras atual em uma matriz com m por n regies nas quais se pode traar grficos e ativa a regio de ordem p. Os subgrficos so numerados da esquerda para a direita, primeiro na linha superior, depois na segunda linha e da por diante.
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) % Selecionando o grfico no alto, esquerda plot(x,y), axis([0 2*pi -1 1]), title('sen(x)') subplot(2,2,2) % Selecionando o grfico no alto, direita plot(x,z), axis([0 2*pi -1 1]), title('cos(x)') subplot(2,2,3) % Selecionando o grfico em baixo, esquerda plot(x,a), axis([0 2*pi -1 1]), title('2sen(x)cos(x)') subplot(2,2,4) % Selecionando o grfico em baixo, direita plot(x,b), axis([0 2*pi -20 20]), title('sen(x)/cos(x)')
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
54
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
sen(x) 1 0.5 0 -0.5 -1 1 0.5 0 -0.5 -1 cos(x)
sen(x)/cos(x)
loglog equivalente ao comando plot, exceto pelo fato de escalas logartmicas serem usadas para ambos os eixos. semilogx equivalente ao comando plot, exceto pelo fato de uma escala logartmica ser usada para o eixo x, enquanto o eixo y usa uma escala linear. semilogy equivalente ao comando plot, exceto pelo fato de uma escala logartmica ser usada para o eixo y, enquanto o eixo x usa uma escala linear. area(x,y) equivalente a plot(x,y), exceto pelo fato de que a rea entre os valores 0 e y preenchida. O valor de y que serve como base para o preenchimento pode ser especificado, sendo igual a zero em caso contrrio. Grficos em formato de torta (ou pizza) podem ser criados usando o comando pie(a,b), em que a um vetor contendo valores e b um vetor lgico opcional que descreve quais fatias devem ser separadas do resto.
a=[.5 1 1.6 1.2 .8 2.1]; pie(a,a==max(a)); % Traa o grfico e separa a maior fatia title('Um exemplo de grfico em formato de torta')
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
55
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Um exemplo de grfico em formato de torta 7%
14%
29%
22% 11%
17%
Utilizando o grfico de Pareto, os dados so mostrados na forma de barras, em ordem decrescente, juntamente com uma curva que fornece os valores acumulados associados aos pontos.
pareto(a); title('Um exemplo de grfico de Pareto')
Um exemplo de grfico de Pareto 7 97%
83%
69%
56%
42%
28%
14%
0 6 3 4 2 5 1
0%
Para traar curvas diferentes no mesmo grfico usando escalas diferentes par o eixo y, usa-se a funo plotyy.
x=-2*pi:pi/10:2*pi; y=sin(x); z=2*cos(x); subplot(2,1,1), plot(x,y,x,z) title('Dois grficos com a mesma escala.') subplot(2,1,2), plotyy(x,y,x,z)
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
56
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
title('Dois grficos com escalas diferentes.');
Dois grficos com a mesma escala. 2 1 0 -1 -2 -8 1 0.5 0 -0.5 -1 -8
-6
-4
-2
8 2 1 0 -1 -2
-6
-4
-2
Grficos de barras e em escada podem ser gerados por meio dos comandos bar, bar3, barh e stairs. Apresenta-se agora um exemplo de curvas em forma de sino:
x=-2.9:0.2:2.9; y=exp(-x.*x); subplot(2,2,1) bar(x,y) title('Grfico de barras') subplot(2,2,2) bar3(x,y) title('Grfico de barras 3-D') subplot(2,2,3) stairs(x,y) title('Grfico em escada') subplot(2,2,4) barh(x,y) title('Grfico de barras horizontal')
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
57
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
O comando hist(y) cria um histograma de dez divises para os dados no vetor y.hist(y,n), em que n um escalar, desenha um histograma com n divises. hist(y,x), em que x um vetor, desenha um histograma usando as divises especificadas em x. Apresenta-se agora um exemplo de histograma de uma curva em forma de sino a partir de dados Gaussianos:
x=-2.9:0.2:2.9; % Especifica as divises a serem usadas y=randn(5000,1); % Cria 5000 pontos aleatrios, com distribuio normal hist(y,x); % Desenha o histograma title('Histograma de distribuio normal')
Histograma de distribuio normal 450 400 350 300 250 200 150 100 50 0 -3
-2
-1
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
58
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Seqncias discretas de dados podem ser representadas graficamente por meio da funo stem. stem(z) cria um grfico dos dados contidos no vetor z conectados ao eixo horizontal por uma linha. Um argumento opcional de string de caracteres pode ser usado para especificar o tipo de linha. stem(x,z) cria um grfico de pontos z nos valores especificados de x.
z=randn(50,1); % Cria dados aleatrios com distribuio normal stem(z,':'); % Cria um grfico de hastes com linhas pontilhadas title('Grfico de hastes de distribuio normal')
Grfico de hastes de distribuio normal 4
-1
-2 0 5 10 15 20 25 30 35 40 45 50
Pode-se colocar barras de erro nos grficos. errorbar(x,y,e) cria um grfico do vetor x versus vetor y, com barras de erro especificadas pelo vetor e. Todos os vetores dever ter o mesmo comprimento. Para cada ponto (xi,yi), uma barra de erro desenhada a uma distncia ei acima e ei abaixo de cada ponto.
x=linspace(0,2,21); % Cria um vetor y=erf(x); % y a funo erro de x e=rand(size(x))/10; % e contm valores de erro aleatrios errorbar(x,y,e); % Cria o grfico title('Grfico com barras de erro')
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
59
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Grfico com barras de erro 1.2
0.8
0.6
0.4
0.2
-0.2 -0.5
0.5
1.5
2.5
Grficos em coordenadas polares podem ser criados pelo comando polar(t,r,S), em que t o vetor que contm o ngulo em radianos, r o vetor que contm o raio e S uma string de caracteres opcional que pode ser usada para descrever as cores, os smbolos ou o estilo de linha. Veja o comando plot para uma descrio de strings apropriadas.
t=linspace(0,2*pi); r=sin(2*t).*cos(2*t); polar(t,r) title('Grfico polar de sen(2t)cos(2t)')
Grfico polar de sen(2t)cos(2t) 90 120 0.4 0.3 150 0.2 0.1 180 0 30 0.5 60
210
330
240 270
300
Dados complexos podem ser representados graficamente com os comandos compass (bssola) e feather (pena). compass(z) desenha um grfico que mostra o ngulo e o mdulo dos elementos complexos de z na forma de setas partindo da origem. feather(z) cria o grfico com os mesmo dados usando setas que
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
60
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
saem de pontos eqidistantes em uma linha horizontal. compass(x,y) e feather(x,y) so equivalentes a compass(x+i*y) e feather(x+i*y).
z=eig(randn(20,20)); compass(z) title('Grfico de bssola dos autovalores de uma matriz aleatria')
Grfico de bssola dos autovalores de uma matriz aleatria 90 120 4 150 2 30 6 60
180
210
330
240 270
300
10
15
20
25
O comando rose(v) desenha um histograma polar com 20 divises para os ngulos no vetor v. rose(v,n), em que n um escalar, desenha um histograma com n divises. rose(v,x) em que x um vetor, desenha um histograma usando as divises especificadas em x. A seguir, um exemplo de um histograma em ngulo:
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
61
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
v=randn(1000,1)*pi; rose(v) title('Histograma angular de distribuio normal')
Histograma angular de distribuio normal 90 120 60 150 40 20 30 80 60
180
210
330
240 270
300
O comando ginput oferece uma forma para selecionar pontos de um grfico em uso por meio do mouse. [x,y]=ginput(n) toma at n pontos dos eixos atuais e retorna suas coordenadas nos vetores coluna x e y. Se n omitido, um nmero ilimitado de pontos reunido at que a tecla Return ou Enter seja pressionada. Como exemplo, criaremos o grfico de uma funo e ento marcaremos alguns pontos selecionados com o mouse.
x=linspace(-2*pi,2*pi,60); y=sin(x).^2./(x+eps); plot(x,y) title('Grfico de sen(x)^2/x') [a,b]=ginput(8); % toma at 8 pontos hold on plot(a,b,'mo') % Plota os pontos coletados hold off
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
62
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Grfico de sen(x)2/x 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -8
-6
-4
-2
O comando fplot oferece uma maneira fcil de criar o grfico de uma funo de uma varivel entre limites especificados, sem criar um conjunto de dados para a varivel. fplot(fun,[xmin xmax]) cria um grfico da funo fun sobre o intervalo xmin x xmax com escalamento automtico do eixo y. fplot(fun,[xmin xmax ymin ymax]) especifica tambm os limites do eixo y.
fplot('sin(x)./x',[-20 20 -.4 1.2]) title('Grfico de f(x)=sen(x)/x') xlabel('x') ylabel('f(x)')
Grfico de f(x)=sen(x)/x 1.2 1 0.8 0.6 f(x) 0.4 0.2 0 -0.2 -0.4 -20
-15
-10
-5
0 x
10
15
20
O comando fill(x,y,c) preenche o polgono bidimensional definido pelos vetores coluna x e y com a cor definida por c. Os vrtices do polgono so especificados pelos pares (xi,yi). Se necessrio, o polgono fechado pela conexo do ltimo vrtice ao primeiro.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
63
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
t=(1/8:2/8:15/8)'*pi; % Vetor coluna[pi/8;3pi/8;...;15pi/8] x=sin(t); y=cos(t); fill(x,y,'r') % Um crculo preenchido com vermelho usando somente 8 pontos axis square text(0,0,'PARE','FontSize',88,'HorizontalAlignment','center') title('Placa Pare')
Placa Pare 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1
-0.5
0.5
Para usar polyfit, alm dos dados anteriores, devemos fornecer a ordem ou grau do polinmio. Se escolhermos n=1 para o grau do polinmio, a melhor aproximao linear ser encontrada. Isso freqentemente chamado de regresso linear. Por outro lado, se escolhermos n=2, um polinmio quadrtico ser encontrado.
n=2; p=polyfit(x,y,n) p=
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
64
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
-9.8108 20.1293 -0.0317
A sada de polyfit um vetor linha com os coeficientes do polinmio. Aqui a soluo y = 9,8108 x 2 + 20,1293 x 0,0317 . Para comparar a soluo do ajuste de curva aos pontos dados, traamos ambas as curvas:
xi=linspace(0,1,100); Cria os dados do eixo x para traar o polinmio. z=polyval(p,xi); Chama a funo polyval para calcular o polinmio p nos pontos dados em xi. plot(x,y,'-o',xi,z,':') Mostra os dados originais (x,y), marcando os pontos com o e unindo-os com retas e traa o polinmio definido pelos dados xi e z, usando uma linha pontilhada. xlabel('x'), ylabel('y=f(x)') title('Ajuste de curva de segunda ordem') Coloca nomes nos eixos e no grfico.
Ajuste de curva de segunda ordem 12
10
6 y=f(x) 4 2 0 -2 0 0.1 0.2 0.3 0.4 0.5 x 0.6 0.7 0.8 0.9 1
A escolha do grau do polinmio , de certa forma, arbitrria. So necessrios dois pontos para definir uma reta ou um polinmio de primeira ordem. So necessrios trs pontos para definir um polinmio quadrtico ou de segunda ordem. Seguindo-se essa progresso, necessita-se de n+1 pontos para especificar de forma nica um polinmio de ordem n. Dessa forma, no caso anterior, em que h 11 pontos, poderamos escolher um polinmio at a dcima ordem. Entretanto, dadas as propriedades numricas pobres de polinmios de ordem elevada, no se deve escolher uma ordem maior que a necessria. Alm disso, medida que a ordem do polinmio aumenta, a aproximao torna-se menos suave, j que os polinmios de ordem superior podem ser derivados mais vezes at que se tornem zero. Por exemplo, escolhe-se um polinmio de dcima ordem:
pp=polyfit(x,y,10); format short e % Muda o formato de visualizao de nmeros pp.' % Mostra os coeficientes do polinmio como uma coluna ans = -4.6436e+005 2.2965e+006
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
65
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
-4.8773e+006 5.8233e+006 -4.2948e+006 2.0211e+006 -6.0322e+005 1.0896e+005 -1.0626e+004 4.3599e+002 -4.4700e-001
Observe a ordem de grandeza dos coeficientes do polinmio nesses caso, em comparao com aqueles obtidos no ajuste quadrtico anterior. Observe tambm a diferena de sete ordens de grandeza entre o menor (4,4700e-01) e o maior (5,8233e+06) coeficiente.
zz=polyval(pp,xi); % Calcula o polinmio de dcima ordem plot(x,y,'o',xi,z,':',xi,zz) % Representa graficamente os dados xlabel('x'), ylabel('y=f(x)') title('Ajuste de curva de segunda e dcima ordens')
Na figura abaixo, os dados originais esto marcados com o, o ajuste de curvas quadrtico encontra-se pontilhado e o ajuste de curva de dcima ordem est representado por uma linha contnua. Observe as ondulaes que aparecem entre os pontos dados nos extremos esquerdo e direito da curva do ajuste de dcima ordem. A filosofia do quanto mais melhor no necessariamente se aplica aqui.
Ajuste de curva de segunda e dcima ordens 16 14 12 10 8 6 4 2 0 -2
y=f(x)
0.1
0.2
0.3
0.4
0.5 x
0.6
0.7
0.8
0.9
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
66
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1
Dos dois grficos da funo seno, o que tem 60 pontos muito mais suave e mais preciso entre os pontos do que o que s tem 6 pontos. O MATLAB apresenta diversas funes de interpolao, interp1 interpola dados unidimensionais; interp2 interpola dados bidimensionais,; interp3 interpola dados tridimensionais; e interpn interpola dados de dimenses maiores. Para ilustrar a interpolao unidimensional, tem-se o exemplo do limiar da audio, isto , o nvel mnimo de som perceptvel ao ouvido humano que varia com a freqncia. Medidas tpicas so:
Hz=[20:10:100 200:100:1000 1500 2000:1000:10000]; % Freqncia em Hertz semilogx(Hz,nps,'-o') nps=[76 66 59 54 49 46 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 decibis (dB) semilogx(Hz,nps,'-o') xlabel('Freqncia , Hz') ylabel('Nvel relativo de presso do som, dB') title('Limiar da audio humana') grid on
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
67
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
Limiar da audio humana 80 70 Nvel relativo de presso do som, dB 60 50 40 30 20 10 0 -10 1 10
10
10 Freqncia , Hz
10
Com base na Figura acima, a audio humana mais sensvel a sons por volta de 3 kHz. Com esses dados, vamos estimar, por diferentes modos, o nvel de presso do som em uma freqncia 2,5 kHz.
s=interp1(Hz,nps,2.5e3) s= -5.5000 s=interp1(Hz,nps,2.5e3,'linear') s= -5.5000 s=interp1(Hz,nps,2.5e3,'cubic') s= -5.8690 s=interp1(Hz,nps,2.5e3,'spline') s= -5.8690 s=interp1(Hz,nps,2.5e3,'nearest') s= -8 % Vizinho mais prximo % Interpolao por Splines % Interpolao Cbica % Interpolao Linear novamente % Interpolao Linear
O primeiro dos dois resultados retorna exatamente o que mostrado na figura em 2,5 kHz, j que o MATLAB interpola linearmente entre os pontos dados em grficos. As repostas da interpolao cbica e interpolao usando splines so prximas entre si, uma vez que ambas ajustam cbicas, isto , polinmios de Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
68
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
terceira ordem, ainda que de modos diferentes. O pior resultado de interpolao aquele fornecido pelo vizinho mais prximo, pois, nesse caso, o valor obtido nada mais que o dado de entrada mais prximo do valor dado. Dado um conjunto de pontos, usa-se a interpolao por splines para calcular os dados em intervalos menores.
Hzi=linspace(2e3,5e2); % Olhando muito perto do mnimo npsi=interp1(Hz,nps,Hzi,'cubic'); % Interpolando perto do mnimo i=find(Hz>=2e3 & Hz<=5e3); % Determinando os ndices dos dados originais perto do mnimo semilogx(Hz(i),nps(i),'-o',Hzi,npsi) % Representando graficamente dados velhos e novos xlabel('Freqncia, Hz') ylabel('Nvel relativo de presso do som, dB') title('Limiar da audio humana') grid on
Limiar da audio humana -2
-4
-5
-6
-7
-8
-9 3 10 Freqncia, Hz
10
A linha tracejada corresponde interpolao linear, a linha contnua, interpolao cbica e os dados originais encontram-se marcados com o. Buscando uma resoluo mais refinada no eixo das freqncias e usando interpolao cbica, temos uma estimativa mais suave do nvel de presso do som. A inclinao da soluo cbica no muda abruptamente nos pontos dados. Assim, pode-se fazer uma estimativa melhor da freqncia de maior sensibilidade:
[nps_min,i]=min(npsi) nps_min = -8.4245 % Mnimo e ndice do mnimo
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
69
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO CENTRO DE TECNOLOGIA E CINCIAS FACULDADE DE ENGENHARIA LABORATRIO DE COMPUTAO DO CICLO BSICO, LCB
3.3333e+003
O ouvido humano mais sensvel a sons prximos de 3,3 kHz. Interp1 possui duas restries, no se pode pedir resultados fora do limite da varivel independente: por exemplo, interp1(Hz,nps,1e5) conduziria a um erro (resultaria em NaN). A varivel independente tem de ser monotnica, isto , precisa sempre crescer ou sempre decrescer. Hz monotnica.
Rua So Francisco Xavier, No 524, Bloco F, 5o andar, Sala 5045-F, Maracan, Rio de Janeiro, RJ CEP: 20550-013, Tel.: (0xx21) 587-7914, Fax: (0xx21) 254-2619, http://www.labbas.eng.uerj.br
70