Transcript

MATLAB Guia de utilizao Motemt|co Computoc|ono| Fro|. A|exondre Ferre|ro Sontos Fro| Montserrot Fortuny Hered|o Mestrado em Lngenharia de ProcessosNcleo de Desenvolvimento 1ecnolgico RegionalMATLAB Programa de Engenharia de Processos/NDTR/UNITpg.2 CONTEDO Prefcio _____________________________________________________________ 3 1. Conceitos Bsicos de Matrizes e Vetores ________________________________ 4 1.1. Operaes entre matrizes_____________________________________________ 5 1.2. Algumas propriedades fundamentais das matrizes _________________________ 6 1.3. Algumas propriedades fundamentais de operaes entre matrizes _____________ 9 1.4. Valores caractersticos e vetores caractersticos de matrizes quadradas _________ 9 2. Introduo ao Matlab_______________________________________________ 11 2.1. Utilizando strings__________________________________________________ 12 3. Utilizando funes matemticas elementares____________________________ 13 4. Trabalhando com vetores e matrizes __________________________________ 13 4.1. Construindo vetores________________________________________________ 14 4.3. Construindo matrizes_______________________________________________ 16 4.4. Manipulando vetores e matrizes ______________________________________ 16 4.5. Comparando vetores e matrizes_______________________________________ 18 4.6. Realizando operaes matriciais ______________________________________ 19 4.7. Utilizando matrizes especiais ________________________________________ 19 4.8. Ordenando matrizes________________________________________________ 20 4.9. Utilizando matrizes multidimensionais _________________________________ 20 4.10. Utilizando listas __________________________________________________ 21 4.11. Utilizando estruturas ______________________________________________ 22 4.12. Utilizando matrizes esparsas ________________________________________ 22 5. Analisando dados __________________________________________________ 23 6. Trabalhando com polinmios ________________________________________ 24 7. Confeccionando grficos ____________________________________________ 25 7.1. Grficos bidimensionais ____________________________________________ 25 7.2. Grficos tridimensionais ____________________________________________ 28 8. Trabalhando com tempo ____________________________________________ 30 9. Obtendo modelos empricos__________________________________________ 31 9.1. Regresso linear___________________________________________________ 31 10. Iniciando um programa ____________________________________________ 32 11. Utilizando comandos de fluxo e operadores lgicos _____________________ 33 11.1. Utilizando a funo for ___________________________________________ 33 11.2. Utilizando a funo while_________________________________________ 34 11.3. Utilizando a funo if-else-end _________________________________ 35 12. Resolvendo um sistema de equaes algbricas_________________________ 36 13. Resolvendo um sistema de equaes diferenciais _______________________ 37 14. Como saber mais sobre o MATLAB?_________________________________ 38 15. Exerccios resolvidos ______________________________________________ 39 Exerccios___________________________________________________________ 42 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.3 Prefcio O objetivo deste guia apresentar ao usurio iniciante do MATLAB noes bsicas de utilizao deste aplicativo. Inicialmente, realizada uma rpida reviso dos conceitos de lgebraMatricial.Emseguida,feitaumabrevedescriodosoftware,ondeso apresentadasasprincipaiscaractersticasepotencialidadesdoaplicativo. Posteriormente, separados em itens, so descritos alguns comandos importantes para a utilizaodoMATLAB.NoesdeprogramaoemMATLABtambmso apresentadasnesteguia,bemcomooscomandosempregadosnaresoluode sistemasdeequaesnolinearesedeequaesdiferenciaisordinrias.Sugestes para consultas futuras e alguns exerccios de fixao so apresentados ao final do texto. MATLAB(MATrixLABoratory)umsoftwareinterativodealtaperformancevoltado para o clculo numrico e cientfico.. O MATLAB integra anlise numrica, clculo com matrizes, processamento de sinaise construode grficos em ambiente fcil de usar onde problemas e solues podem ser expressos como eles so escritos na matemtica ounaformadeumalinguagemdeprogramao.NoMATLABoelementobsicode informao uma matriz que no requer dimensionamento, dispensandotarefas como declaraodevariveis,alocaodememria,utilizaodeponteiros,permitindoa resoluodemuitosproblemasnumricosemapenasumafraodotempoquese gastaria para escrever um programa semelhante em linguagem Fortran, Basic ouC. A potencialidade do software est muito alm do que ser mostrado neste guia. Trata-se deumambientedealtonvelquepossuiferramentasavanadasdeanlisee visualizaodedados.Maisdoqueumaplicativo,oMATLABtambmpossui caractersticas de linguagem de programao.AsfunesmatemticasjexistentesnoMATLABsootimizadas,programadasem linguagemMATLABeestoagrupadasdeacordocomareadeinteresseem toolboxes.Assim,ousuriotemacessoaosarquivosdasfunesmatemticasoque possibilitaarealizaodealteraesnasrotinasjexistentes.Todavia,valeressaltar queestasalteraessodesaconselhveisesdevemserrealizadascomoltima alternativa. Aracaju, 10 de Fevereiro de 2005 Alexandre F. Santos Montserrat Fortuny MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.4 1. Conceitos Bsicos de Matrizes e Vetores Os clculos/operaes assim como conceitos envolvendo matrizes e vetores constituem abasedosmtodosnumricosquetratamdasoluodesistemaslineareseno linearesdeequaesalgbricasoudiferenciais.Arepresentaodestessistemasem termosmatriciais/vetoriaisextremamentemaiscompactaecorrentenaliteratura tcnica.Comovisa-senestecaptuloapresentarosconceitosbsicosdesteassunto especialmenterelacionadoscomaplicaesemEngenhariadeProcessos,os elementosdematrizesevetoresseroemprincpionmerosouvariveisreaisano ser quando explicitamente especificados como complexos. Uma matriz um arranjo retangular de nmeros em m linhas e n colunas, mxn, sendo representada como A (letras maisculas em negrito) pertencente a ?mxn, isto : A ?mxn. O elemento da linha i e coluna j de A representado por aij (correspondente letra minscula com o sub-ndice ij ) ou (A)ij . A matriz completa geralmente escrita na forma:A= (((((

mn m2 m12n 22 211n 12 11a a aa a aa a a

,ouemformamaiscompactaporA=(aij),com i=1,...,m e j =1,...,n. Se duas matrizes A e B apresentam o mesmo nmero de linhas e o mesmo nmero de colunas so ditas do mesmo tipo.Se A= (aij ) tal que aij = 0 para todo i e j ento a matriz A dita nula e representada por 0. Se n=m a matriz A dita quadrada. Se n=m e aij = aji para i,j =1,...,n a matriz quadrada A dita simtrica. Exemplo:M= ((((

4 0 20 5 32 3 1

note que a matriz simtrica M tem sua prpria imagem refletida atravs da diagonal principal. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.5 Se n=1 tem-se um vetor coluna ou simplesmente vetor designado por v (letra minscula em negrito) e representado por:v=(((((

m21vvv

?m. Sem=1tem-seumvetorlinhadesignadoporvT(letraminsculaemnegritocomo sobre-ndice T de transposto) e representada por: vT= (v1v2 v3 ... vn) ?1xn. Se m=n=1 tem-se um escalar (real)(letra minscula grega), ou seja:?.A matriz A ?mxn pode ser parcionada por: a) colunas na forma:A=( )n 2 1a a aondeaj= ((((((

mj2j1jaaa

?mparaj=1,...,nsoosnvetorescolunasda matriz A; b) linhas na forma:A= ((((((

TmT2T1aaa

onde Tia =( )in i2 i1a a a?1xn,parai=1,...,msoosmvetoreslinhas da matriz A. 1.1. Operaes entre matrizes Asoperaesdeadioousubtraosodefinidasapenasparamatrizesdomesmo tipo, assim se A e B so matrizes (m x n ) ento a matriz C , tambm (m x n ), soma ou subtrao de A com B, representada por C = A B, tem como termo geral : cij = aij bijpara i = 1, ... ,m e j = 1, ... ,n . Se um escalar qualquer, a matriz A uma matriz cujo termo geral aij. A operao de multiplicao de matrizes A Bs definida se o nmero de colunas de A (primeiraparceladoproduto)forigualaonmerodelinhasdeB(segundaparcelado produto). Assim, temos: C=A B, onde A (m,n) , B (n,p) e C (m,p) que apresenta como termo geral: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.6 = =n1 jjk ij ikb a c , para i=1, ..., mek=1,...,p. importanteressaltarquealeidecomutatividadenosatisfeitapeloprodutoentre matrizes, ou seja, em qualquer caso temos a seguinte regra geral: A BB A. AoperaodetransposiodeumamatrizA(m,n)consisteemtrocaraslinhaspelas colunas de A; esta nova matriz chamada de matriz transposta de A, representada por AT, e uma matriz (n,m) cujo termo da linha j e coluna i a ijTija a = , para j=1,...,n e i=1,...,m. Se a matriz A simtrica, ento: A = AT. 1.2. Algumas propriedades fundamentais das matrizes Aspropriedadesqueserodescritasaseguiraplicam-seexclusivamenteamatrizes quadradas (n,n) e a vetores coluna (n,1) e a vetores linha (1,n). Define-se como matriz unitria ou matriz identidade a matriz I cujo elemento geral : ()== =j i que sempre 0j i se apenas 1ij ijI ,ondeijchamadodedeltadeKronecker,deste modoamatrizidentidadeumamatrizdiagonalcujostermosdadiagonalsotodos unitrios,assim:I= (((((

1 0 00 1 00 0 1

,entendendo-secomomatrizdiagonalumamatriz quadradaemqueapenasoselementosdadiagonal(tambmchamadadediagonal principal)sononulos.Umamatrizdiagonalumcasoparticulardematrizesdita esparsas,quesomatrizesqueapresentamumgrandenmerodeelementosnulos, sendo os elementos nonulos mais a exceo do que a regra. Geralmente, uma matriz diagonalD= (((((

n21d 0 00 d 00 0 d

, representada na forma mais compacta: D= diag( )n 2 1d d d. Note que toda matriz diagonal simtrica. Uma propriedade muito importante da matriz identidade : I A = A I = A, isto , a matriz identidade pr-multiplicada ou ps-multiplicada por qualquer matriz quadrada de mesma dimenso no altera o valor de elemento algum desta matriz. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.7 Asmatrizestriangularessomatrizesqueapresentamtodososelementossob(ou sobre) a diagonal nulos, podendo assumir as seguintes classificaes: matriz triangular superior ou matriz U ,com Uij =0 se i>j matriz triangular inferior ou matriz L ,com Lij =0 se j>i Exemplo:U= ((((

2 0 03 3 03 1 2Exemplo:L= ((((

2 1 70 3 90 0 5 Matriz U triangular superiorMatriz L triangular inferior O trao de uma matriz quadrada A a soma dos elementos de sua diagonal, isto : ==n1 iiia ) ( r t AUmamatrizquadradaApodereceberasseguintesclassificaesquandoinseridaem uma forma quadrtica como se segue: f(x) = xT Ax x x x 1-Positiva definida se xT A x xx x > 0 para todo vetor x 0 (isto , no nulo).2-Positiva semidefinida se xT Ax x x x0 para todo vetor x. 3-Negativa definida se xT Ax x x x < 0 para todo vetor x 0. 4-Negativa semidefinida se xT Ax x x x0 para todo vetor x. 5- Indefinida se xT Ax x x x assume tanto valores positivos quanto negativos. OdeterminantedeumamatrizAumescalarobtidoatravsdasomadetodosos produtos possveis envolvendo um elemento de cada linha e cada coluna da matriz, com o sinal positivo ou negativo conforme o nmero de permutaes dos ndices seja par ou mpar.Suaobtenoesuarepresentao,apesardeserumdosconceitosmais preliminares envolvendo matrizes, no so tarefas triviais e o conceito de determinante serutilizadonestasnotasapenascomobasedeoutraspropriedadesdematrizes quadradas.Assim,odeterminantedeAdesignadopordet(A)podeserrepresentado por: n 2 1i n, i 2, i 1,a a a ) det( = A ouentoatravsdoconceitodecofatordo elementoijdamatrizA(representadoporAij)queodeterminantedamatrizobtida cancelando a linhai e acoluna j da matrizA com o sinal mais ou menos conforme i+j seja par ou mpar, assim: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.8 ) det( ) 1 ( Aijj iij =+ ondeijrepresentaamatrizquadrada(n-1,n-1)obtidapelaeliminaodalinhaiea coluna j de A. Tem-se ento: = =n1 jij ijA a ) det(ANaprtica,entretantopraticamenteimpossvelcalcularodeterminantedematrizes atravsdestasregrasgeraisporenvolverumnmeromuitograndedetermos(na realidade n!, assim mesmo com matrizes relativamente pequenas como com n=10 tem-se3milhesdetermos).Felizmente,paraosnossospropsitos,apenasasregrasa seguir sero suficientes: 1-OdeterminantedeumamatrizAmantm-seinalteradosesomarem-seatodosos elementosdequalquerlinha(oucoluna)oscorrespondenteselementosdeumaoutra linha (ou coluna) multiplicados pela mesma constante ; 2- se aij o nico elemento no nulo da linha i ou da coluna j ento: ij ijA a ) det( = A3- A=((

d cb a ento:c b d ad cb a) det( =((

= A Daregra(1)verifica-sequesedet(A)=0,entoAapresentaduaslinhas(oucolunas) proporcionaisentresi.Deumaformamaisgeral,pode-seafirmarqueumalinha(ou coluna)deApodeserescritacomocombinaolineardealguma(s)linha(s)(ou colunas)damesmamatriz.Daregra(2)demonstra-sequeseAforumamatriz triangular ento det(A) simplesmente o produto dos elementos de sua diagonal. Se det(A) = 0 diz-se que a matriz A singular, e caso det(A)0, ento A dita regular. Se C=A B, ento det(C)= det(A) det(B). Se B = AT ento det(B)= det(A), isto det (AT) = det (A). AmatrizadjuntadeumamatrizAcorrespondetranspostadamatrizobtida substituindo cada elemento da matriz A pelo seu correspondente cofator, isto , se a matriz adjunta de A ento o elemento da linha i e coluna j de Aji. A propriedade mais importante da matriz adjunta diz respeito ao produto: A = A = det(A) I.Se det(A)0 (A regular) define-se a inversa de A como: AAA~) det(11 = que tem como propriedade: A A-1 = A-1 A = I que existe apenas se det(A)0.MATLAB Programa de Engenharia de Processos/NDTR/UNITpg.9 Note que) det(1) det(1AA =

Exemplo: Considere a seguinte matriz (2x2): A=((

d cb a,assim,seuscofatoresso: = = = =a A ; b Ac A ; d A22 2112 11,permitindodeterminara matrizadjunta: = ((

a cb d, note que: A = A= ((

1 00 1) c b d a ( =det(A) I. ((

=a cb d) c b d a (11A ,isto, paradeterminarainversadeumamatriz(2x2)bastatrocaroselementosdadiagonal principal,trocarosinaldoselementosdadiagonalsecundriaedividiramatriz resultante pelo determinante da matriz original. SeA-1=AT,isto,ainversadamatrizigualasuatransposta,entoamatrizA chamada de matriz ortogonal e neste caso o det(A)=+1 ou -1. 1.3. Algumas propriedades fundamentais de operaes entre matrizes Asleisdeassociaoedecomutaosovlidasparaasoperaesde adio/subtrao, assim:(A+B)+C = A+(B+C) e A+B = B+A. So vlidas tambm as leis de associao e de distribuio para a multiplicao, assim: (AB)C = A(BC) ; A(B+C) = AB + AC e (A+B)C = AC + BC Para a matriz transposta tem-se as seguintes propriedades: (A+B)T = AT + BT e(AB)T = BT AT e para a matriz inversa:(AB)-1 = B-1 A-1e (A-1)T= (AT)-1 1.4. Valores caractersticos e vetores caractersticos de matrizes quadradas Dada uma matriz A pode-se determinar um escalar e um vetor v tal que a equao: A v = v seja satisfeita, o escalar chamado de valor caracterstico ou autovalor da matrizAevchamadodevetorcaractersticoouautovetordeA.Aequaode definio do valor e vetor caractersticos pode tambm ser escrita na forma: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 10 (A I) v=0,transformando-seassimemumsistemalinearehomogneode equaes que apresenta soluo apenas se a matriz (A I) for singular, isto : det (A I) = (((((

nn n2 n12n 22 211n 12 11a a aa a aa a a

=p()=0, que o polinmio de grau n em chamadodepolinmiocaractersticodeA,cujasnrazessoosvalores caractersticos ou autovalores de A. Verifica-se, pela expanso deste determinante, que o nico termo de grau n e (n-1) em o correspondente ao produto da diagonal principal de A I, isto :(a11 ) (a22 ) (ann ) sendo todos os demais termos de grau inferior a (n-1), alm disto como p(0)=det(A) o termo independente de em p() det(A), permirtindo assim concluir que p() = ()n +(a11 + a22 + . . . + ann) (-)n-1 +. . . +det(A)=0 Multiplicando-se membro a membro por (-1)n , tem-se: p() = n(a11 + a22 + . . . + ann) n-1 +. . . +(-1)n det(A)=0 (notequeapesardeter-semultiplicadomembroamembrodaexpressopor(-1)n, manteve-seanotaop()paradesignaropolinmiocaracterstico,jqueomesmo est igualado a zero sendo assim irrelevante seu sinal). Pela expresso de p() deduz-se que: (a) 1+2+. . . +n = a11 + a22 + . . . + annou seja:== n1 ii) ( tr A(b) 1 2 . . . n = det(A)ou seja: ) det(n1 iiA = = (c)comop()=det(A I)=0seAforsingulartem-sedet(A)=0;destaforma p(0)=det(A)=0, isto , se A for singular =0 necessariamente valor caracterstico de A. Exemplo: Encontre todos os autovalores da matrizA=((

3 11 3 Calculando p() = det (A I) = 0, temos: det (A I) =det((

3 11 3= (3) (3) 1= 2 Soluo do polinmio: =2 e =4 (autovalores de A). MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 11 2. Introduo ao Matlab NoMATLABosnomesdasvariveisdevemserpalavrasnicas,semainclusode espaos e no devem conter acentos. As regras bsicas para nomes devariveis so apresentadas na Tabela 2.1. Tabela2.1: Regras bsicas para nomes de variveis no MATLAB. As variveis so sensveis a letras maisculas e minsculas Itens, itens e ITENS So entendidascomo diferentes variveis. As variveis podem possuir at 31 caracteres. Os caracteres alm do 31 so ignorados. Oquevoceachadestenomedevariavel Pode ser usado como nome de varivel. O nome da varivel deve comear com uma letra, seguida de qualquer nmero, letra ou sublinhado. O_que_voce_acha_deste_nome e X51 podem ser utilizados como nome devariveis. ExistemalgumasvariveisespeciaisqueoMATLAButilizaquesoapresentadasna Tabela2.2.Seousurioredefineestasvariveis,oMATLABpassaaatribuiranova funo s mesmas. Tabela 2.2: Variveis especiais utilizadas pelo MATLAB VarivelSignificado AnsVarivel padro usada para resultados. PiRazo entre o permetro da circunferncia e seu dimetro. EpsPreciso relativa da mquina. InfInfinito NaN nanNo numrico i j 1 j i = =NarginNmero de argumentos de entrada de uma funo. NargoutNmero de argumentos de sada de uma funo. RealminMenor nmero real positivo utilizvel pela mquina. RealmaxMaior nmero real positivo utilizvel pela mquina. Caso o usurio necessite apagar alguma varivel da memria do MATLAB, isto pode ser realizado utilizando-se o comando clear. Por exemplo: a=10; a a = 10 clear a a ??? Undefined function or variable 'a'. Seanecessidadedousuriofordeapagartodasasvariveisqueestosendo utilizadasdeve-seutilizarocomandoclearall.Seporoutrolado,ousuriodesejaa MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 12 listagemdetodasasvariveisqueestosendoutilizadas,bastautilizarocomando who. Por exemplo: >> a=10; b=a; >> who Your variables are: a b >> Todo o texto depois do sinal de porcentagem (%) considerado comentrio. Alm disso, pode-se colocar mais de um comando em uma linha, separando-os por vrgula ou ponto e vrgula. A vrgula diz ao MATLAB para mostrar o resultado aps executar o comando. J o ponto-e-vrgula dispensa a visualizao. Por exemplo: a=10;b=20, % isto um comentrio b = 20 a a = 10 Quando se deseja continuar o comando na prxima linha, o sinal utilizado pelo MATLAB representado por 3 pontos (...). Isso s funcionar se os pontos estiverem entre nomes de variveis e operaes. Este comando no funciona para comentrios. Ou seja: >> a=10; b=20; >> c=a+... b c = 30 >> OusuriopodeinterromperaexecuodoMATLAB,aqualquermomento, pressionandooCrtl-c.Paralimparoworkspaceousuriodeveutilizarocomandoclc. 2.1. Utilizando strings OMATLABentendecomostringsoconjuntodecaracteres(vetordecaracteres) colocados entre aspas simples. Assim, para acessar uma parte da varivel necessrio listar a localizao dos caracteres. Ou seja: >> s='esta variavel e uma string' s = esta variavel e uma string >> >> s(6:13), % retirando a palavra variavel da string s ans = variavel >> MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 13 3. Utilizando funes matemticas elementares ATabela3.1apresentaumalistagemdasprincipaisfunesmatemticasqueo MATLABpossui.ValeressaltarqueoMATLABtrabalhaapenascomradianos(2 radianos = 360). Tabela 3.1: Principais funes matemticas utilizadas pelo MATLAB. FunoSignificado acos(x) Arco coseno. acosh(x) Arco coseno hiperblico. asin(x) Arco seno. asinh(x) Arco seno hiperblico. atan(x) Arco tangente. atanh(x) Arco tangente hiperblico. cos(x) Coseno cosh(x) Coseno hiperblico. exp(x) Exponencial: ex gcd(x,y) Mximo divisor comum entre os inteiros x e y. log(x) Logaritmo natural. log10(x) Logaritmo na base 10. rem(x,y) Resto da diviso de x por y. round(x) Arredondamento para o nmero inteiro mais prximo. sign(x) Funo sinal. Retorna o sinal do argumento x. sin(x) Seno sinh(x) Seno hiperblico. sqrt(x) Raiz quadrada. tan(x) Tangente tanh(x) Tangente hiperblica. 4. Trabalhando com vetores e matrizes OMATLABfoidesenvolvidoespecialmenteparatrabalharcomrepresentaes matriciais. Desta forma, o usurio deve dar preferncia para este tipo de representao quantoestiverutilizandooMATLAB,jqueistosignificaarealizaodeclculoscom maior eficincia. OMATLABmanipulavetoresdeumamaneirasimpleseintuitiva.Considerequese deseja calcular a funo y = sen(x) em 0 > b=[a a a].' b = 0.00 + 2.00i 0.00 + 2.00i 0.00 + 2.00i >> 4.3. Construindo matrizes Para a construo de matrizes no MATLAB utilizam-se ponto e vrgula para separar os elementos de uma linha da outra: g=[1 2 3 4; 5 6 7 8] g = 1 2 3 4 5 6 7 8 4.4. Manipulando vetores e matrizes Considerando-se vetores ou matrizes, a adio, a subtrao, a multiplicao e a diviso por um escalar simplesmente aplica a operao a todos os elementos do vetor. Ou seja: g=[1 2 3 4; 5 6 7 8]; 2*g-1 ans = 1 3 5 7 9 11 13 15 g/2+1 ans = 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 17 J as operaes entre vetores e/ou matrizes no so to simples. Quando dois vetores oumatrizespossuemamesmadimenso,aadioeasubtraosorealizadas elemento a elemento pelo MATLAB. Ou seja: g=[1 2 3 4; 5 6 7 8]; h=[1 1 1 1; 2 2 2 2]; g+h ans = 2 3 4 5 7 8 9 10 g-h ans = 0 1 2 3 3 4 5 6 Quandosedesejamultiplicarduasmatrizes,elementoporelemento,deve-seutilizaro smbolodemultiplicaoescalarpontuada(.*).Opontoqueprecedeoasterisco, smbolopadrodemultiplicao,dizaoMATLABparafazeramultiplicaoelemento por elemento. A multiplicao sem o ponto significa multiplicao matricial. Ou seja: g=[1 2; 5 6]; h=[1 1; 2 2]; g.*h ans = 1 2 1012 g*h ans = 5 5 1717 Para a diviso de matrizes, elemento por elemento, deve-se utilizar o smbolo de diviso escalar pontuada ./. Novamente o ponto que precede o smbolo padro de diviso diz ao MATLAB para fazer a diviso elemento por elemento. A diviso sem o ponto significa diviso matricial. Ou seja: g=[1 2; 5 6]; h=[1 8; 2 4]; g./h ans = 1.0000 0.2500 2.5000 1.5000 g/h ans = 0 0.5000 -0.6667 2.8333 possvel elevar cada elemento de uma matriz a uma dada potncia. Para isto aplica-se o operador .^n, onde n potncia que se deseja aplicar a cada elemento da matriz. Ou seja: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 18 g=[1 2; 5 6]; g.^2 ans = 1 4 2536 ATabela4.4.1forneceaindaalistagemdealgunscomandosteisdemanipulao matricial. Tabela 4.4.1: Comandos teis de manipulao matricial utilizados pelo MATLAB. FunoSignificadoExemplo Considere em todos os exemplos:((

=4 32 1A ; r=1 A(r,:) Fornece a submatriz de A cujas linhas so definidas pelo vetor r e que inclui todas as colunas. A(r,:) ans = 1 2 A(:,r) Fornece a submatriz de A cujas colunas so definidas pelo vetor r e que inclui todas as linhas. A(:,r) ans = 1 3 A(:) Fornece todos os elementos de A em um vetor coluna, percorrendo as colunas de A pela ordem crescente de seus ndices. A(:) ans = 1 3 2 4 4.5. Comparando vetores e matrizes Os comandos mais utilizados para comparao entre vetores e matrizes so listados na Tabela 4.5.1. Tabela 4.5.1: Comandos teis de comparao entre vetores e matrizes. FunoSignificadoExemplo Considere em todos os exemplos:((

=4 32 1A ; ((

=2 56 1B ; ((

=4 32 1Cisequal(A,B) Varivel lgica: verdadeira se A e B so idnticos. isequal(A,B) ans = 0 isequal(A,C) ans = 1 ismember(A,B) Varivel lgica: verdadeira quando os elementos de A so tambm elementos de B. ismember(A,B) ans = 1 1 0 0 ismember(A,C) ans = 1 1 1 1 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 19 4.6. Realizando operaes matriciais A Tabela 4.6.1 fornece as principais funes matriciais existentes no MATLAB. Tabela 4.6.1: Principais funes matriciais existentes no MATLAB. FunoSignificadoExemplo Considere em todos os exemplos:((

=4 32 1A det(A) Calcula o determinante da matriz A. det(A) ans = -2 d=eig(A) [V,D]=eig(A) Determina os autovalores e autovetores de A. d=eig(A) d = -0.3723 5.3723 [V,D]=eig(A) V = -0.8246-0.4160 0.5658-0.9094 D = -0.37230 0 5.3723 inv(A) Calcula a matriz inversa da matriz inv(A) ans = -2.0000 1.0000 1.5000-0.5000 poly(A) Calcula a equao caracterstica de A. poly(A) ans = 1.00 -5.00 -2.00 rank(A) Determina o nmero de linhas e colunas linearmente independentes de A. rank(A) ans = 2 svd(A) Calcula a decomposio em valores singulares. svd(A) ans = 5.4650 0.3660 4.7. Utilizando matrizes especiais A Tabela 4.7.1 fornece algumas matrizes especiais existentes no MATLAB. Tabela 4.7.1: Matrizes especiais existentes no MATLAB. FunoSignificadoExemplo eye Matriz identidade. eye(3) ans = 1 0 0 0 1 0 0 0 1 ones Matriz onde todos os elementos so iguais a 1. ones(2) ans = 1 1 1 1 rand Matriz com elementos aleatrios distribudos entre 0 e 1. rand(2) ans = 0.9501 0.6068 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 20 0.2311 0.4860 randn Matriz com elementos aleatrios distribudos que seguem a distribuio normal e tm mdia zero e varincia igual a 1 rand(3) ans = 0.8913 0.0185 0.6154 0.7621 0.8214 0.7919 0.4565 0.4447 0.9218 zeros Matriz onde todos os elementos so iguais a 0. zeros(2) ans = 0 0 0 0 4.8. Ordenando matrizes A ordenao dos elementos de um vetor ou de uma matriz pode ser realizada utilizando ocomandosort.Autilizaodestecomandopossibilitaaindaoarmazenamentoda localizao original dos dados. Assim: >> a=rand(1,3) a = 0.04389532534714 0.02718512299667 0.31268504808015 >> sort(a) ans = 0.02718512299667 0.04389532534714 0.31268504808015 >> a=rand(4,3) a = 0.01286257467300 0.03533832396916 0.01635493355000 0.38396728849430 0.61239548137302 0.19007458907973 0.68311596780460 0.60854036122399 0.58691847188467 0.09284246174092 0.01575981791975 0.05758108987829 >> [a_ordenado_l,ord]=sort(a(1,:)), % ordena a linha 1 de "a" a_ordenado_l = 0.01286257467300 0.01635493355000 0.03533832396916 ord = 1 3 2 >> [a_ordenado_c,ord]=sort(a(:,2)), % ordena a coluna 2 de "a" a_ordenado_c = 0.01575981791975 0.03533832396916 0.60854036122399 0.61239548137302 ord = 4 1 3 2 4.9. Utilizando matrizes multidimensionais Para a utilizao de matrizes multidimensionais so necessrios 3 ndices ao invs dos 2adotadosduranteautilizaodematrizesbidimensionais.AFigura4.8.1mostraa forma visual de interpretar matrizes multidimensionais. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 21 Figura 4.8.1: Forma visual de interpretar matrizes multidimensionais. Asmatrizesmultidimensionaispodemserconstrudasemanipuladasutilizandoos mesmos comandos apresentados para as matrizes bidimensionais, desta forma: >> M = rand(2,4,3) M(:,:,1) = 0.496552449703100.821629160735340.817974340839250.34197061827022 0.899769175169610.644910384193840.660227556441600.28972589585624 M(:,:,2) = 0.341193569414880.727113216929680.838496044938080.37041355663212 0.534079017626600.309290159790960.568072461007780.70273991324038 M(:,:,3) = 0.546571151829110.694567240425550.794821080200930.52259034908071 0.444880204672910.621310130795410.956843448444880.88014220741133 >> M(1,1,1) ans = 0.49655244970310 4.10. Utilizando listas As listas (ou disposio em clulas, cell arrays) so formas especiais de representar de matrizes.Nestetipoderepresentao,cadaelementodamatrizpodecontermatrizes com diferentes dimenses. O exemplo abaixo ilustra a criao de uma lista. >> a=1:3; b=rand(2,2); c=1; d={a c}; >> lista={a b c d} lista = [1x3 double][2x2 double][1]{1x2 cell} >> Paraamanipulaodoselementosdeumalistatambmsoutilizadaschavese parnteses como exemplificado abaixo. >> a=1:3; b=rand(2,2); c=1; d={a c}; >> lista={a b c d}; >> lista{1} ans = 1 2 3 >> lista{1}(1,2) ans = 2 >> MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 22 4.11. Utilizando estruturas As estruturas so matrizes especiais utilizadas pelo MATLAB para armazenar dados de naturezasdiferentes.Asestruturasdiferemdaslistasporpossuremnomesque identificamalocalizaodosdados.Oexemploabaixoevidenciaautilizaode estruturas. >> resultado.alunos='maria'; >> resultado.notas=[9 8.5]; >> resultado resultado = alunos:'maria' notas:[9 8.50000000000000] >> resultado(2).alunos='joao'; >> resultado(2).notas=[10 7]; >> resultado resultado = 1x2 struct array with fields: alunos notas >> resultado.alunos ans = maria ans = joao >> Uma outra forma de gerar estruturas utilizando o comando struct. >> resultado=struct('alunos','maria','notas',[9 8.5]); >> resultado resultado = alunos: 'maria' notas: [9 8.50000000000000] >> resultado.notas ans = 9.000000000000008.50000000000000 >> 4.12. Utilizando matrizes esparsas Asmatrizesesparsassoaquelasondeapenasalgunsdeseuselementospossuem valoresdiferentesdezero.Nestecaso,oarmazenamentodetodaamatrizrepresenta umdesperdciodeespaodearmazenagemedepodercomputacionalemoperaes aritmticas com zeros. No MATLAB possvel considerar a esparticidade de uma matriz utilizando os comandos sparse e full. Ocomandosparsearmazenaoselementosnonulosdamatrizoriginal, desconsiderandooselementosiguaisazero.Jocomandofullrescreveamatriz esparsa original. Ou seja: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 23 >> clear all >> X=[1 0 5 6 0 0 0; 0 0 0 0 1 0 0] X = 1 0 5 6 0 0 0 0 0 0 0 1 0 0 >> >> >> S = sparse(X) S = (1,1) 1 (1,3) 5 (1,4) 6 (2,5) 1 >> whos Name Size Bytes Class S 2x780sparse array X 2x7 112double array Grand total is 18 elements using 192 bytes >> X2=full(S) X2 = 1 0 5 6 0 0 0 0 0 0 0 1 0 0 >> whos Name Size Bytes Class S 2x780sparse array X 2x7 112double array X2 2x7 112double array Grand total is 32 elements using 304 bytes >> >> 5. Analisando dados A anlise de dados no MATLAB feita utilizando-se matrizes orientadas por coluna. As diversas variveis so armazenadas em diferentes colunas e cada linha representa uma observaodiferentedecadavarivel.Asprincipaisfunesdeanlisededadosso apresentadas na Tabela 5.1 Tabela 5.1: Principais funes de anlise de dados. FunoSignificadoExemplo Considere em todos os exemplos:((((

=9 8 76 5 43 2 1Acorrcoef(A) Coeficientes de correlao >> corrcoef(A) ans = 1 1 1 1 1 1 1 1 1 cumprod(A) Produto acumulativo das colunas de A. cumprod(A) ans = 12 3 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 24 4 1018 28 80 162 cumsum(A) Soma acumulativa ao longo das colunas de A. cumsum(A) ans = 123 579 12 15 18 max(A) Mximo ao longo das colunas de A. max(A) ans = 7 8 9 mean(A) Mdia ao longo das colunas de A. mean(A) ans = 4 5 6 min(A) Mnimo ao longo das colunas de A. min(A) ans = 1 2 3 prod(A) Produto ao longo das colunas de A. prod(A) ans = 28 80 162 std(A) Calcula o desvio padro ao longo das colunas de A. std(A) ans = 3 3 3 sum(A) Soma os elementos ao longo das colunas de A. sum(A) ans = 12 15 18 6. Trabalhando com polinmios NoMATLAB,umpolinmiorepresentadoporumvetorlinhacontendoseus coeficientes em ordem decrescente. Por exemplo, o polinmio x4 12.x3 + 25.x + 116 representado da seguinte forma: p=[1 -12 0 25 116] p = 1 -12 0 25 116 Valeressaltarqueostermoscomcoeficientesiguaisazerodevemserincludos. Atravsdousodocomandorootspossvelencontrarasrazesdeumdado polinmio. Ou seja: p=[1 -12 0 25 116]; r=roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 25 Dadas as razes do polinmio, tambm possvel construir o polinmio associado. Para isto, utilizado o comando poly: pp=poly(r) pp = 1.0000 -12.00000 25.0000 116.0000 Amultiplicaodepolinmiosrealizadapelocomandoconv.Destaforma, considerando o produto de dois polinmios f1(x) = x3 + 2.x2 + 3.x + 4 e f2(x) = x3 + 4.x2 + 9.x + 16 temos: f1=[1 2 3 4]; f2=[1 4 9 16]; f3=conv(f1,f2) f3 = 1 6 20 50 75 84 64 O resultado desta operao o polinmio f3(x) = x6 + 6.x5 + 20.x4 + 50.x3 + 75.x2 + 84.x + 64. A funo deconv utilizada para dividir um polinmio por outro. Considerando-se as funes f3(x) e f2(x) anteriores, temos: [q,r]=deconv(f3,f2) q = 1 2 3 4 r = 0 0 0 0 0 0 0 Como resultado, o comando retorna o polinmio resultante q, que neste caso a funo f1(x), e o resto da diviso r. OMATLABpossuiafunopolyderqueutilizadanaobtenodederivadasde polinmios. Ou seja: f1=[1 2 3 4]; d=polyder(f1) d = 3 4 3 7. Confeccionando grficos 7.1. Grficos bidimensionais UmadasfunesqueoMATLABpossuiparaelaboraodegrficosafuno fplot. Este comando calcula a funo a ser representada e certifica-se de que suas MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 26 propriedades estejam bem representadas. Como entrada, o fplot precisa da funo a ser representada (como varivel string) e do domnio do grfico. Ou seja: f='2*exp(-x).*sin(x)'; fplot(f,[0 8]) Outrafunoutilizadaparaconfeccionargrficosbidimensionais,ondef=f(x),a funoezplot.Estafunotambmtemcomoargumentosdeentradaumafuno string e um intervalo de variao. Se f = f(x,y), o comando ezplot representa a funo considerando f(x,y)=0. >> ezplot('x^3 + y^3 - 5*x*y + 1/5',[-3,3]) Ocomandomaiscomumutilizadoparaelaboraodegrficosbidimensionaisno MATLABocomandoplot.Essecomandocriagrficosdevetoresdedadosem eixos adequados e conecta os pontos a linhas retas. Por exemplo: x=linspace(0, 2*pi, 30); y=sin(x); plot(x,y) possvel utilizar o comando plot para traar mais de um grfico no mesmo sistema de eixos. Ou seja: x=linspace(0, 2*pi, 30); y=sin(x); z=cos(x); plot(x,y,x,z) DuranteaconfecodeumgrficonoMATLAB,ousuriopodeescolheracoreo estilodaslinhasbemcomoomarcadorutilizado.ATabela7.1mostraoscdigos utilizados e o exemplo abaixo evidencia a utilizao dos mesmos. x=linspace(0, 2*pi, 30); y=sin(x); z=cos(x); plot(x,y,'b:p',x,z,'m+--') Ousuriopodeaindamodificaracordefundodogrficoutilizandoocomando colordef. Neste caso, sugere-se ao usurio consultar o help na rea de trabalho do MATLAB ( help colordef). O comando grid on adiciona linhas de grade ao grfico nas posies dos eixos que h marcadores. O comando grid off remove as linhas de grade. Vale ressaltar que o MATLAB comea sempre com grid off. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 27 Tabela 7.1: Cdigos para marcadores, cores e tipos de linha na confeco de grficos no MATLAB. Cores de linhasMarcadoresTipo de linha smbolocorSmboloMarcadorSmboloTipo de linha B azul . ponto - linha contnua G verde O crculo : linha pontilhada R vermelho x x -. traos e pontos C ciano + + -- linha tracejada M magenta * estrela Y amarelo s quadrado K preto d Losango W branco < tringulo para a esquerda > tringulo para a direita p pentagrama h hexagrama Paraatribuirnomesaoseixos,podeserutilizadooscomandoscomandoxlabele ylabel. O comando title adiciona um ttulo ao grfico. Ou seja: x=linspace(0, 2*pi, 30); y=sin(x); plot(x,y,'r-.>') grid on xlabel('x') ylabel('seno(x)') title('grfico') grid off Paracriarlegendasnogrfico,ousuriopodeutilizaroscomandoslegendou gtext. Ou seja: x=linspace(0, 2*pi, 30); y=sin(x); z=cos(x); plot(x,y,x,z) legend('seno(x)','coseno(x)') legend off % retira a legenda gtext('seno(x)') gtext('coseno(x)') possvelcriarumajanelacommaisdeumsistemadeeixos.Paraisto,utilizadoo comando subplot(m,n,p) . Este comando subdivide a janela de grficos em uma matriz com m por n regies. A varivel p indica a localizao do grfico. Ou seja: x=linspace(0, 2*pi, 30); y=sin(x); z=cos(x); a=2*sin(x).*cos(x); b=sin(x)./(cos(x)+eps); subplot(2,2,1) plot(x,y) axis([0 2*pi -1 1]) % define os valores: mnimos e mximos p/ x e y title('seno(x)') subplot(2,2,2) plot(x,z), axis([0 2*pi -1 1]), title('coseno(x)') subplot(2,2,3) plot(x,a), axis([0 2*pi -1 1]), title('2.seno(x).coseno(x)') subplot(2,2,4) plot(x,b), axis([0 2*pi -20 20]), title('seno(x)/coseno(x)') MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 28 Almdosgrficosjelaborados,outrosrecursosgrficosbidimensionaisso disponveis no MATLAB. So eles: grfico tipo torta: a=[.05 .15 .5 .05 .05 .2]; pie(a) pie(a, a==max(a)) % traa o grfico separando a maior fatia grficos com escalas diferentes: x=-2*pi:pi/10:2*pi; y=sin(x); z=2*cos(x); subplot(2,1,1),plot(x,y,x,z), title('escalas iguais'), subplot(2,1,2),plotyy(x,y,x,z), title('escalas diferentes'), grficos de barras: x=-2.9:0.2:2.9; y=exp(-x.*x); subplot(2,2,1), bar(x,y), subplot(2,2,2), bar3(x,y), subplot(2,2,3), stairs(x,y), subplot(2,2,4), barh(x,y), grfico com barras de erros: x=linspace(0,2,21); y=erf(x); % y a funo erro de x e=rand(size(x))/10; % contm valores de erros aleatrios errorbar(x,y,e) grficos com pontos selecionados manualmente: x=linspace(-2*pi, 2*pi,60); y=sin(x).^2./(x+eps); plot(x,y) [a,b]=ginput(5) % toma 5 pontos hold on % Para escrever por cima do grfico anterior plot(a,b,'mo') hold off % Libera o grfico anterior para ser eliminado 7.2. Grficos tridimensionais Ocomandoplotparagrficosbidimensionaisestendidoparaostridimensionais com o comando plot3. Este comando cria grficos de linhas tridimensionais. t=linspace(0,10*pi,1000); plot3(sin(t),cos(t),t) MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 29 O comando meshgrid utilizado para gerar matrizes x e y, contendo linhas e colunas repetidas. Esse par de matrizes, x e y, pode ser ento usado para calcular funes de duasvariveisusandoosrecursosdoMATLABdematemticavetorial.Umavez estabelecidososvaloresdospontosaseremrepresentadosemumgrfico tridimensional, o comando mesh pode ser utilizado para gerar um grfico de rede e o comandosurfpodeserutilizadoparagerarumasuperfcie.Joscomandos contourecontour3geramascurvasdenvel.Umaformasimilardocomando contourocomandopcolorondesoutilizadascoresdistintasparadelimitar regies de alturas diferentes. Ou seja: >> x=-3:0.1:3; y=x; [X,Y]=meshgrid(x,y); Z=X.^3 + Y.^3 - 5*X.*Y + 1/5; >> mesh(X,Y,Z) >> surf(X,Y,Z) >> contour(X,Y,Z,40) >> contour3(X,Y,Z,40) >> pcolor(X,Y,Z) possvel para o usurio trocar as cores padro utilizadas pelo MATLAB na confeco de grficos. Para isto, utiliza-se dos mapas de cores que so matrizes com trs colunas. Cada linha define uma cor particular, usando os nmeros 0 a 1.>> x=-3:0.1:3; y=x; [X,Y]=meshgrid(x,y); Z=X.^3 + Y.^3 - 5*X.*Y + 1/5; >> surf(X,Y,Z), colormap([1 1 1]) % branco >> surf(X,Y,Z), colormap([.5 .5 .5]) % cinza >> O usurio pode ainda escolher um dos mapas de cores j existente no MATLAB (Tabela 7.2.1). Tabela 7.2.1: Mapas de cores utilizadas pelo MATLAB. Funo Descrio do mapa de cores HsvEscalar com cores saturadas. HotPreto-vermelho-amarelo-branco GrayEscalar linear de tons de cinza. BoneEscala de tons de cinza levemente azulados. Copper Escala linear de tons acobreados. Pink Tons pastis de rosa. White Mapa de cores totalmente branco. Flag Vermelho, branco, azul e preto alternados. Jet Uma variante do mapa hsv Prism Mapa de cores denominado prisma. Cool Tons de ciano e magenta. lines Mapa de cores que usa as mesmas cores do comando plot. colorcube Mapa de cores denominado cubo colorido. summer Tons de amarelo e verde. autumn Tons de vermelho e amarelo. winter Tons de azul e verde. spring Tons de magenta e amarelo. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 30 >> x=-3:0.1:3; y=x; [X,Y]=meshgrid(x,y); Z=X.^3 + Y.^3 - 5*X.*Y + 1/5; >> surf(X,Y,Z), colormap([summer]) >> surf(X,Y,Z), colormap([hot]) Paraacrescentarumalegendanogrficotridimensional,ousuriodeveutilizaro comando colorbar. >> >> x=-3:0.1:3; y=x; [X,Y]=meshgrid(x,y); Z=X.^3 + Y.^3 - 5*X.*Y + 1/5; >> surf(X,Y,Z), colormap([winter]), colorbar >> 8. Trabalhando com tempo O MATLAB possui vrias funes para manipular datas e horas. A funo clock , por exemplo, fornece a data e a hora atuais em um vetor. >> T=clock T = 1.0e+003 * 2.003 0.001 0.009 0.010 0.031 0.057 >> Os elementos que retornam no vetor T ao se aplicar o comando clock so: ano,ms, diadoms,hora,minutosesegundos.Jafunodateforneceadataatualcomo um texto no formado dia-ms-ano. Ou seja: >> date ans = 09-Jan-2003 Os comandos tic e toc podem ser utilizados para cronometrar uma operao. Ou seja: >> tic; plot(rand(5)); toc elapsed_time = 0.11000000000000 Afunocputimeforneceotempo,emsegundos,daUnidadeCentralde Processamento (CPU) usado pelo MATLAB desde o incio da sesso corrente. Ou seja: >> to=cputime; plot(rand(5)); cputime-to ans = 0.11000000000058 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 31 9. Obtendo modelos empricos O MATLAB possui funes que possibilitam a obteno de diferentes modelos empricos taiscomo:modelosARX,ARMAX,redesneuronaiseaindamodelosobtidosvia regressolinearenolinear.Nestaapostila,autilizaodaregressolinear exemplificada. 9.1. Regresso linear O comando utilizado pelo MATLAB para a realizao de regresso linear denominado regress.Parautilizarestecomandoousuriodeveforneceramatrizcomas variveis independes e um vetor com a varivel dependente. Cada linha da matriz ou do vetordevecorresponderaumaobservao.Casoomodelolinearpossuauma constante,amatrizcomasvariveisindependentesdevepossuirumaltimacoluna com valores iguais a 1. O exemplo abaixo ilustra a utilizao deste comando: >> clear all >> x=[(100:200)'+randn(101,1) (300:400)'+randn(101,1) ones(101,1)]; >> % matriz com variaveis independentes >> P1=2; P2=1; P3=100; y=P1*x(:,1)+P2*x(:,2)+P3; y=y+randn(101,1); >> % vetor com variaveis dependentes >> [P,Pin,R,Rin,stat]=regress(y,x,0.05); >> P % parametros do modelo P = 1.93344230551157 1.06793100944515 86.20341131968449 >> Pin % intervalo de confiana para os parametros Pin = 1.0e+002 * 0.01813296312069 0.02053588298954 0.00947622221814 0.01188239797076 0.62069772941691 1.10337049697678 >> stat stat = 1.0e+005 * 0.00000999899004 4.851193481557840 >> Osintervalosdeconfianaparaosparmetrosdomodeloforamcalculados considerando um nvel de confiana igual a 95%. Isto porque usamos o valor 0,05 como terceiro argumento de entrada para a funo regress.O5oargumentodesada,nestecasodenominadostat,fornecerespectivamente:o valordeR2,oresultadodotestedehipteseF(testa-sesetodososcoeficientesdo modelo obtido so iguais a zero) e o p-valor associado a este teste. Durante a realizao do teste F assume-se a existncia de uma constante no modelo. Neste caso, o modelo obtido consegue descrever cerca de 99,9899% da variabilidade experimental e podemos MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 32 considerar, com grande segurana, que todos os coeficientes do modelo no so iguais a zero. Oserrosverificadosentreosvalorespreditospelomodeloeosreais,bemcomoo intervalodeconfianaparaestesvaloressofornecidosatravsdo3oedo4o argumentodesadadafunoregress.Nestecaso:ReRin.Umamelhor visualizaodestainformaopodeserobtidaatravsdocomandorcoplotcomo exemplificado abaixo. >> rcoplot(R, Rin) Neste caso, todos os resduos que no atingirem o valor zero so considerados outliers. O MATLAB tambm possui funes destinadas realizao de regresses no lineares. Nestecaso,asomadosquadradosdosresduos,verificadosentreosvaloresreaise preditos pelo modelo, minimizada utilizando um mtodo de otimizao Quasi Newton (Levenberg-Marquardt).Paramaisdetalhessugere-seaconsultaaocomando nlinfit. (help nlinfit). 10. Iniciando um programa Todos os comandos descritos anteriormente podem ser utilizados durante a elaborao de um programa em MATLAB. Antesdecomearaprogramar,vocdeveescolherqualodiretriodetrabalho.A programaoemMATLABrealizadaatravsdaelaboraodearquivostipom. Sendo assim, uma vez escolhido o diretrio de trabalho, voc deve abrir um arquivo m seguindooseguintecaminho:FileNew M-file.Nestearquivodeveserescritoo programa. Uma vez escrita a rotina a ser executada, deve-se salvar o arquivo. Para rodar a rotina, deve-se digitar o nome do arquivo tipo m no workspace do MATLAB. O MATLAB possui diversas funes que so particularmente apropriadas para o uso em arquivos tipo m. Estas funes so apresentadas na Tabela 10.1. Tabela 10.1: Principais funes utilizadas em arquivos tipo m. VarivelSignificado Disp(texto) Mostra o texto escrito entre as aspas. Input Solicita ao usurio que fornea algum dado de entrada. Pause Suspende a execuo at que o usurio pressione alguma tecla. Pause(n) Suspende a execuo por n segundos. Exemplo: 1. Abra um arquivo novo tipo m; MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 33 2. Digite: % Primeiro programa clear all %limpa toda a memria disp('Rodando programa ...'); n=input('Qual o valor final de x desejado?'); x=0:n; y=x.^2; plot(x,y); pause(2) xlabel('x'); ylabel ('y'); 3. Salve o programa com o nome prog1; 4. V rea de trabalho do MATLAB e digite prog1. A(s) primeira(s) linha(s) comentada(s) existente(s) no arquivo .m (so) exibida(s) caso o usurio utilize o comando help + nome do arquivo. Ou seja: >> help prog1 Primeiro programa >> 11. Utilizando comandos de fluxo e operadores lgicos 11.1. Utilizando a funo for Os loops for possibilitam que uma srie de comandos seja repetida por um nmero de vezesfixoepredefinido.Valeressaltarqueocomandofor nopodeserencerrado atribuindo-se valores ao contador (no exemplo n) dentro do loop. Exemplo: 1. Abra um arquivo novo tipo m; 2. Digite: clear all for n=1:10 x(n)=n/2; n=10; % ao final do primeiro clculo de x n = valor maximo end x 3. Salve o programa com o nome prog2; 4. V rea de trabalho do MATLAB e digite prog2. 5. A resposta obtida ser: prog2 x = Columns 1 through 7 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 34 Columns 8 through 10 4.0000 4.5000 5.0000 Naturalmente, possvel a utilizao de mais de uma estrutura for. Exemplo: 1. Abra um arquivo novo tipo m; 2. Digite: clear all for n=1:5 for m=5:-1:1 A(n,m)=n^2+m^2; end disp(n) end A 3. Salve o programa com o nome prog3; 4. V rea de trabalho do MATLAB e digite prog3. 5. A resposta obtida ser: prog3 1 2 3 4 5 A = 25 10 17 26 58 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50 11.2. Utilizando a funo while Os loops while executam um grupo de comandos um nmero indefinido de vezes. Exemplo: 1. Abra um arquivo novo tipo m; 2. Digite: clear all n=1; while n5 custo=0.8*custo; % desconto de 20% end custo 3. Salve o programa com o nome prog5; 4. V rea de trabalho do MATLAB e digite prog5. 5. A resposta obtida ser: prog5 custo = 200 Exemplo: 1. Abra um arquivo novo tipo m; 2. Digite: clear all m=5 if m==10; disp('m igual a 10'); elseif m> prog6 m = 5 m menor que 10 >> Observaoimportante:Comojmencionadoanteriormente,oMATLABum programadesenvolvidoparatrabalharcommatrizes.Sendoassim,quandosedeseja umloopondeoobjetivocalcularumaexpressodiversasvezes,maiseficiente trabalhar utilizando notao matricial. Por exemplo: o prog2.m seria mais eficiente se o loop fosse eliminado e a varivel x fosse definida da seguinte forma: x=0.5*(1:10). 12. Resolvendo um sistema de equaes algbricas NoMATLABafunoutilizadapararesolversistemasdeequaesalgbricasno linearesdenominadafsolveeselocalizanotoolboxdeotimizao.Paramais detalhesarespeitodestafuno,sugere-seconsultarohelpdigitandohelpfsolvena pgina principal do MATLAB. Omtodopadro,utilizadopararesoluodosistemapelocomandofsolve,o Gauss-Newton com um mtodo misto (quadrtico e cbico) de busca em linha. Caso o usurio prefira, pode ser utilizado o mtodo de Levenberg-Marquardt em alternativa ao Gauss-Newton. Exemplo: Considere o sistema de equaes algbricas no lineares apresentado abaixo (12.1): = + = 0 e x 2 x0 e x x 221x2 1x2 1(12.1) Para resolver este sistema no MATLAB, realize as seguintes tarefas: 1. abra um novo arquivo m e escreva: function F=fun1(x) F(1)=2*x(1)-x(2)-exp(-x(1)); F(2)=-x(1)+2*x(2)-exp(-x(2)); 2. salve o arquivo como fun1; 3. abra um segundo arquivo m e escreva: clear all x0=[-5 -5]; % estimativas iniciais para x(1) e x(2) options(1)=1; % p/ mostrar detalhes sobre o clculo que ser realizado x=fsolve('fun1',x0,options) % chamada da rotina que resolve o sistema 4. salve este segundo arquivo como teste1; MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 37 5. v rea de trabalho do MATLAB e digite teste1. O programa retornar o seguinte resultado: teste1 f-COUNTRESID STEP-SIZE GRAD/SD 347071.21 -9.41e+004 8966.8281 -1.81e+003 151.99465 3.855.6 200.0006320510.895-0.0867 25 1.39647e-0150.998 -1.89e-009 Optimization Terminated Successfully x = 0.56710.5671 13. Resolvendo um sistema de equaes diferenciais OMATLABpossuidiversasfunesdestinadasresoluodesistemasdeequaes diferenciais ordinrias. Nesta apostila utilizaremos a funo ode23. Para mais detalhes a respeito destas funes, sugere-se consultar o help digitando help ode23 na rea de trabalho do MATLAB. Omtodopadroutilizadopararesoluodosistemadeequaesdiferenciaispelo comando ode23 o Runge Kutta. Exemplo: ConsidereosistemadeequaesdiferenciaisapresentadoporSimmons(1988) descrito em 13.1: + = + =y 2 x 3dtdyy 2 xdtdx(13.1) Assuma as condies iniciais apresentadas pela equao (13.2): t = 0: x = 2y = 3(13.2) Para resolver este sistema no MATLAB, realize as seguintes tarefas: 1. abra um novo arquivo m e escreva: function [dy]=fun2(t,y) dy(1)=y(1)+2*y(2); dy(2)=3*y(1)+2*y(2); dy=[dy(1);dy(2)]; 2. salve o arquivo como fun2; 3. abra um segundo arquivo m e escreva: MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 38 clear all yo=[2 3]; % condio inicial tspan=[0 1]; % intervalo no qual ser realizada a integrao [de 0 1] [t,y]=ode23('fun2',tspan,yo); plot(t,y); xlabel('tempo'); ylabel('variveis x e y'); legend(['x(t)';'y(t)']) 4. salve este segundo arquivo como teste2; 5.vreadetrabalhodoMATLABedigiteteste2.Oprogramaretornarcomo resultado um grfico apresentando a evoluo das funes x(t) e y(t) de 0 a 1. De acordo com Simmons (1988) o sistema apresentado (13.1) possui a soluo analtica descrita pela equao 13.3. Esta soluo confere com a soluo numrica apresentada pelo programa. = =t 4t 4e 3 ye 2 x(13.3) SIMMONS, G. F., Clculo com Geometria Analtica, Vol. 2, 1 ed. So Paulo,McGraw-Hill, 1988 14. Como saber mais sobre o MATLAB? OMATLABpossuiumabibliotecacomvriosarquivostipopdf.Cadaumdestes arquivosdizrespeitoaumtoolboxdoMATLAB.Aseguirapresentadaumalistagem comaindicaodequalarquivodeveserconsultadopelousurio,seomesmo necessitaraprofundarseusconhecimentossobreostpicosapresentadosnesta apostila.Almdisso,buscou-seadicionaralgunsassuntosdeinteressepara profissionaisdaengenhariaquenosotratadosnestematerial.Partedaliteratura citada foi utilizada para a confeco desta apostila. Tabela 14.1: Arquivos pdf recomendados. AssuntoArquivopdf Comandos bsicos de utilizao, descrio do programa getstart.pdfThe Language of Technical Computing, Getting Started with MATLAB, 136 pginas, 6a verso, 2000 Tratamento estatstico de dados (regresso linear, ANOVA, regresso no linear, matriz de correlao, planejamento fatorial, PCA)stats_tb.pdf Statistics Toolbox, 560 pginas, 3a verso, 2000 Controle de processosusingcontrol.pdfControl System Toolbox, 591 pginas, 1a verso, 2000 Controle preditivo de processosmpc.pdfModel Predictive Control Toolbox, 250 pginas, 1a verso, 1998 Resoluo de sistemas de equaes diferenciais parciaispde.pdfPartial Differential Equation Toolbox, 284 pginas, 1997 MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 39 Redes neuronaisnnet.pdfNeural Networks Toolbox, 846 pginas, 4a veso, 2000 Identificao de processos (modelos ARX, ARMAX,) ident.pdfSystem Identification Toolbox, 368 pginas,5a verso, 2000 Otimizaooptim_tb.pdfOptimization Toolbox, 330 pginas, 2a verso, 2000 Utilizao simultnea do Excel e do MATLABexlink.pdfExcel Link , 74 pginas, verso 1.1.2, 1999 15. Exerccios resolvidos Exerccio 1 - Dinmica de Populaes Osarquivos-maseguircontmoscomandosnecessriosparasolucionaroproblema de dinmica de populaes. Para fcil utilizao o cdigo do arquivo deve ser gravado no diretrio do MATLAB com o nome runpop.m Primeiramentevamoscriaroquechamaremosdeprogramaprincipal (runpop.m),utilizaremosestenomepoisestearquivochamaroarquivosubseqente (pop.m) que funciona neste caso como funo. Programa principal % leitura dos dados iniciais para um sistema de edo 2x2 %initial = [0 0.25]; clg %axis; initial(1) = input('Primeiro dado inicial da presa '); initial(2) = input('Segundo dado inicial do predador '); % Intervalo de tempo usado [ti,tf] ti = input('Tempo inicial '); tf = input('Tempo final '); % Constantes referentes a presa e ao predador %k1 = input('Taxa de nascimento da presa '); %k2 = input('Taxa de mortandade da presa '); %k3 = input('Taxa de nascimento do predador '); %k4 = input('Taxa de mortandade do predador '); k1 = 3. k2 = 0.002 k3 = 0.0006 k4 = 0.5 [x, num_y] = ode23('pop',ti,tf,initial); subplot(211), plot(x,num_y(:,1),'- g'),... title('Populacao da Presa'),xlabel('t'),grid,... subplot(212),plot(x,num_y(:,2),'- g'),... title('Populacao do Predador'),xlabel('t'),grid Funo pop (Salvar como pop.m ) function xf = pop (t,x) global k1 k2 k3 k4 k1=3.; k2=0.002; k3=0.0006; k4=0.5; xf(1)= k1*x(1)-k2*x(1)*x(2); MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 40 xf(2)= k3*x(1)*x(2)-k4*x(2); Visualizando a soluo Agora que j criamos os arquivos necessrios para a soluo do problema, s digitar no prompt do MATLAB >> runpop sero pedidos alguns dados como populao inicial de presa, predadores, tempo inicial e final. Para os dados Populao inicial da presa = 0,8 Populao inicial do predador = 0,2 Tempo Inicial = 0 Tempo Final = 50 Oresultadoserexibidograficamente,apresentandoarelaoentrecrescimentoda presa em relao ao predator e vice-versa. Exemplo 2 - Trajetria de uma bola de tnis com top spin Osarquivos-maseguircontmoscomandosnecessriosparasolucionare disponibilizar visualmente o problema da trajetria de tnis em diferentes casos. Vejaocdigodoprogramaprincipalquesersalvocomonometenis.m(Preste atenonodiretrioondeestosendogravadoosarquivos;senoquiserter problemas, salve todos os arquivos no diretrio do MATLAB). Programa Principal % Problema para a trajetria de uma bola de tnis viajando no vcuo, % e no ar na presena de um spin (rotao) % tenisV = caso no vcuo % As 4 funes tenisA = caso no ar sem spin % utilizadas so : tenisAsp = caso no ar com rotao positiva % tenisAfs = caso no ar com rotao negativa % Variveis que sero usadas pelas funes com os campos vetoriais global g alpha w etha % Inicializando as variveis % Constantes bsicas em unidades MKS clg g = 9.81; d = 0.063; m = 0.05; rho = 1.29; alpha = pi*d^2/(8*m)*rho; etha = 1; w = 20; % Condies iniciais h = 1; v0 = 25; theta = pi/180*15; xin = [0, h, v0*cos(theta), v0*sin(theta)]; % Tempo de vo no vcuo tmaxid = (xin(4) + sqrt(xin(4)^2 + 2*g*xin(2)))/g; % soluo no vcuo [tV, xV] = ode23('tenisV',0,tmaxid,xin); % soluo no ar sem spin [tA, xA] = ode23('tenisA',0,tmaxid,xin); % soluo com spin [tAsp, xAsp] = ode23('tenisAsp',0,tmaxid,xin); MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 41 % Preparando a sada grfica do problema N = max(xV(:,1)); x =0:N/100:N; axis([0, max(xV(:,1)), 0 , max(xV(:,2))]) hold % comando que permite sobrepor os trs grficos (plots) seguintes %1 plot(x, spline(xV(:,1), xV(:,2), x), ':g'); %2 plot(x, spline(xA(:,1), xA(:,2), x), '-- g'); %3 plot(x, spline(xAsp(:,1), xAsp(:,2), x), '-w'); plot(xV(:,1), xV(:,2), ':g'); plot(xA(:,1), xA(:,2), '-- g'); plot(xAsp(:,1), xAsp(:,2), '-w'); Funo tenisV.m Funo que calcula o campo vetorial para a bola no vcuo. function xdot = tenisV(t,x) global g g=9.81; xdot(1) = x(3); xdot(2) = x(4); xdot(3) = 0; xdot(4) = -g; Funo tenisA.m Funo que calcula o campo vetorial para a bola no ar sem rotao. function xdot = tenisA(t,x) %sem spin a constante de Magnus CM e ZERO. global g alpha v = sqrt(x(3)^2+x(4)^2); xdot(1) = x(3); xdot(2) = x(4); xdot(3) = -alpha*0.508*x(3)*v; xdot(4) = -g -alpha*0.508*x(4)*v; Funo tenisAsp.m Funo que calcula o campo vetorial para a bola no ar com rotao. function xdot = tenisAsp(t,x) global g alpha w etha v = sqrt(x(3)^2+x(4)^2); % clculo do campo levando em conta as constantes de arraste CD % e a de Magnus CM aux1 = (0.508 +1/(22.503 + 4.196*(v/w)^0.4))*alpha*v; aux2 = etha*w/(2.022*w + 0.981*v)*alpha*v; xdot(1) = x(3); xdot(2) = x(4); xdot(3) = -aux1*x(3) + aux2*x(4); xdot(4) = -g -aux1*x(4) - aux2*x(3); Visualizando a soluo Agora que j criamos os arquivos necessrios para a soluo do problema, s digitar no prompt do MATLAB >> tenis Entoobteremosumgrficoqueilustraatrajetriadaboladetnisnos3casosque foram estudados:1- A linha pontilhada indica a trajetria da bola no vcuo. 2- A linha tracejada indica a trajetria da bola no ar com rotao. 3- A linha contnua indica a trajetria da bola no ar com rotao. MATLAB Programa de Engenharia de Processos/NDTR/UNITpg. 42 Exerccios Srie A 1) Considere os resultados experimentais apresentados na Tabela A: Tabela A: Resultados experimentais. Experimento Concentraes: Ca e Cb 10,5 0,8 20,4 0,75 1.1) armazene os dados da Tabela A em uma matriz bidimensional; 1.2) armazene os dados da Tabela A em uma matriz multidimensional. 2) Crie uma matriz de dimenso 4x4 e a chame de A. (Sugesto: crie uma matriz com nmeros aleatrios). 2.1) apague a 2 linha de A; 2.2) apague a 3 coluna de A. Srie B 1) Represente graficamente as seguintes funes: 1. z = -x2 + 2.y2onde 10< x


Top Related