2. Apostila ITA - Curso MATLAB

download 2. Apostila ITA - Curso MATLAB

of 45

Transcript of 2. Apostila ITA - Curso MATLAB

NTRODUAO EM MATLAB Por Marcos Antonio da Rocha Ferreira Introduo em MATLAB ii 1. INTRODUO................................................................................................ 4 1.1. O QUE O MATLAB?..................................................................................... 4 1.2. AMBIENTE DE TRABALHO................................................................................. 4 1.3. LINHA DE COMANDO.......................................................................................... 6 1.4. UTILIZAO DO COMANDO HELP................................................................... 7 1.5. COMANDOS DO SISTEMA OPERACIONAL..................................................... 8 2. MATRIZES E VETORES......................................................................... 9 2.1. VARIVEIS NO MATLAB................................................................................. 9 2.1.1. CRIAO DE VETORES ATRAVES DA LINHA DE COMANDO ................................... 10 2.1.2. CRIAO DE MATRIZES ATRAVES DA LINHA DE COMANDO.................................. 11 2.2. CRIAO DE MATRIZES ATRAVS DE FUNES...................................... 11 2.2.1. MATRIZ IDENTIDADE............................................................................................. 11 2.2.2. MATRIZ COMPOSTA POR ELEMENTOS UNITARIOS ................................................. 12 2.2.3. MATRIZ NULA....................................................................................................... 12 2.2.4. MATRIZ ALEATORIA.............................................................................................. 12 2.3. INDEXAO......................................................................................................... 13 2.4. CONCATENAO DE MATRIZES..................................................................... 14 2.5. REMOO DE VETORES.................................................................................. 15 2.6. EXERCCIOS........................................................................................................ 16 3. OPERAES COM MATRIZES E VETORES..................... 18 3.1. OPERAES ARITMTICAS COM MATRIZES.............................................. 18 3.2. OPERADORES RELACIONAIS......................................................................... 20 3.3. OPERADORES LGICOS.................................................................................. 22 3.4. EXERCCIOS........................................................................................................ 23 4. FUNES........................................................................................................ 26 4.1. FUNES ESCALARES.................................................................................... 26 4.2. FUNES ESTATSTICAS ................................................................................ 27 4.3. FUNES VETORIAIS....................................................................................... 28 4.4. FUNES MATRICIAIS ..................................................................................... 29 4.5. SCRIPT E FUNES.......................................................................................... 29 4.6. EXERCCIOS........................................................................................................ 30 5. IMPORTAO E EXPORTAO DE ARQUIVOS........... 32 Introduo em MATLAB iii 5.1. COMANDOS LOAD E SAVE......................................................................... 32 5.2. COMANDO IMPORTDATA - IMPORTAO DE DADOS ....................... 33 5.4. COMANDO FOPEN - EXPORTAO DE DADOS FORMATADOS.......... 34 5.5. COMANDO FCLOSE - EXPORTAO DE DADOS FORMATADOS ....... 35 5.6. COMANDO FPRINTF - EXPORTAO DE DADOS FORMATADOS....... 35 5.7. EXERCCIOS........................................................................................................ 36 6. PROGRAMAO EM MATLAB..................................................... 37 6.1. ESTRUTURAS DE CONTROLE NO MATLAB.............................................. 37 6.2. ESTRUTURA DE REPETIO - INSTRUO FOR...................................... 37 6.2. ESTRUTURA DE REPETIO - INSTRUO WHILE................................. 38 6.3. ESTRUTURA CONDICIONAL - INSTRUO IF............................................ 39 6.4. ESTRUTURA CONDICIONAL - INSTRUO CASE................................... 40 6.5. COMANDO DE PARADA - BREAK................................................................ 42 6.6. ARQUIVOS ".M"................................................................................................. 43 6.7. EXERCCIOS........................................................................................................ 43 BIBLIOGRAFIA.................................................................................................. 45 Curso de MATLABIntroduo ao MATLAB 4 1. Introduo 1.1. O que o MATLAB? Desde a sua primeira verso (1984) o MATLAB (Matrix Laboratory) tido como produto lder nareadecomputaonumricaecientfica.Masdoqueumsoftware,oMATLABum ambienteintegradodemodelagemdesistemasealgoritmos,idealparaaimplementaode projetos complexos, e por esta razo vem sendo adotado como ferramenta de desenvolvimento padro pelas principais universidades e empresas no mundo. OMATLABumncleodeumambientedecomputaodeumambientedecomputao numrico baseado em matrizes que integram: -Funes de tratamento numrico de performance; -Sofisticados recursos de gerao de grficos para visualizao; -Poderosa linguagem de programao de alto nvel.Seuselementosbsicossomatrizesquenorequeremdimensionamento.Elepermite implementar e resolver problemas matemticos muito mais rpida e eficientemente que atravs de outras linguagens como C, Java, Dephi e Fortran. Ainda,oMATLABpossuiumafamliadeaplicativosespecficos(toolboxes),queso coleesdefunesusadaspararesolverdeterminadosproblemastaiscomo:otimizao, manipulaoalgbrica,redesneurais,processamentodesinais,simulaodesistemas dinmicos, entre outros. 1.2. Ambiente de TrabaIho O ambiente de trabalho do MATLAB est organizado em reas. As reas principais so: -LinhadeComando(CommandWindows)Figura1.areaondesodigitados dadoseinstruesparaoMATLABeexibidososresultados.Asteclas''(seta para cima) e '*' repetem comandos digitadosanteriormente; -rea de Memria (Workspace) Figura 1.b rea de memria do MATLAB, na qual ficam armazenadas todas as variveis definidas interativamente (criadas na linha de comando)noMATLAB.Seumavarivelforclicadaduasvezessurgirajanelade edio da workspace, local onde essa varivel pode ser editada de forma visual; Curso de MATLABIntroduo ao MATLAB 5 -HistricodeComandos(CommandHistory)Figura1.creaondeficam armazenadostodososcomandodigitadosnalinhadecomando.Paraexecutaras linhasarmazenadasnohistricodecomandosnecessriooseguinte procedimento: com o mouse selecione a linha desejada, pressione o boto direito do mouseparaexibiromenudeopesquedisponibilizaaopo[EvaluateSelection] para executar as instrues selecionadas; -DiretrioCorrente(CurrentDirectory)Figura1.dexibeouconfiguraodiretriode trabalho corrente. Figura 1. TeIa principaI do MATLAB: Iinha de comando (A), workspace(B), histrico(C) e diretrio corrente(D). A D B C Curso de MATLABIntroduo ao MATLAB 6 1.3. Linha de Comando A linha de comando ativada quando se inicia o MATLAB, e o "prompt" padro (>>) exibido na tela. A partir deste ponto, o MATLAB espera as instrues do usurio. MATLABumalinguagemdeexpresso.Nasuajanelalinhadecomandoeleinterpretae avalia as expresses digitadas, que so geralmente na forma: Varivel = expresso Por exemplo: ||.|

\||.|

\|=5tan logtx Seria equivalente em linha de comando do MATLAB como: >> x=log(sqrt(tan(pi/5))) x = -0.1597 A ferramenta MATLAB 'case sensitive', ou seja, a linguagem diferencia maisculas de minsculas. Por exemplo, um erro comum o seguinte: >> x=LOG(sqrt(tan(pi/5))) ??? Capitalized internal function LOG; Caps Lock may be on. O MATLAB retorna um erro avisando que o comando foi digitado em maisculo e recomenda desativar a tecla 'Caps Lock'. Portanto: -NO digite comando MATLAB em maisculo; -NO utilize maiscula em nome de variveis; -NO utilize maiscula em nome de funes; Curso de MATLABIntroduo ao MATLAB 7 -Em resumo, NO utilize maiscula para NADA no MATLAB.Por default o MATLAB trabalha em "modo verboso. Ou seja, aps o usurio ter terminado de digitar o comando e teclado imediatamente o MATLAB exibe o resultado na tela.Caso deseje no exibir imediatamente os resultados do MATLAB utilize no final do comando ';'.Por Exemplo: >> x=log(sqrt(tan(pi/5))); >> 1.4. UtiIizao do Comando HeIp OcomandomaisimportantedoMATLABohelp:queforneceinformaessobreamaior parte de um tpico especfico. Por exemplo: >> help title TITLEGraph titIe. TITLE('text') adds text at the top of the current axis.

TITLE('text','Property1',PropertyVaIue1,'Property2',PropertyVaIue2,...) sets the vaIues of the specified properties of the titIe.

H = TITLE(...) returns the handIe to the text object used as the titIe.

See aIso XLABEL, YLABEL, ZLABEL, TEXT. Note-se que no exemplo mostrado para adicionar o ttulo a um grfico, TITLE ('TEXT') est escritoemIetrasmaiscuIassomenteparadestacar.importantesalientarquetodosos comandos do MATLAB devem ser escritos em Ietras minscuIas, portanto, para adicionar o texto "Ttulo do Grfico" a um grfico, deve-se utilizar: >> title ('Ttulo do Grfico') Curso de MATLABIntroduo ao MATLAB 8 1.5. Comandos do Sistema OperacionaI Para controlar a janela da linha comando, o MATLAB disponibiliza os comandos do sistema operacional: ComandoDescrioExempIo cd Ou pwd nforma ou altera diretrio corrente. >> cd C:\MATLABR12\work >> cd \ >> cd C:\ dir Ou Is Lista contedo do diretrio. >> dir ... mat.m what ExibeosarquivosdoMATLABcontidono diretrio. >> what M-files in the current directory C:\MATLABR12\work mat which dentifica e localiza arquivos. >> which mat C:\MATLABR12\work\mat.m >> which xyz xyz not found. ! Chama um comando do sistema operacional. >> !dir *.* O volume na unidade C no tem nome. O nmero de s,rie do volume , B4E8-E5F6 Pasta de C:\MATLABR12\work 04/03/200410:43.04/03/200410:43..04/03/200410:43 5 mat.m 1 arquivo(s)5 bytes 2pasta(s)1.175.961.600bytes disponveiscIcLimpa a tela da linha de comando.>> clc whyNohelp,essecomandodescritocomo "Fornecerespostassucintasquasetodas perguntas.Naverdade,um'ovodepscoa' dos programadores do MATLAB.>> why Some hamster suggested it. Curso de MATLABMatrizes, a Base do MATLAB 9 2. Matrizes e Vetores 2.1. Variveis no MATLAB Todas as variveis do MATLAB so do tipo matriz e a sua criao automtica. Em alguns casos, um tratamento especial dado a uma matriz 1 x 1 (escaIar) ou a matrizes 1 x n ou n x 1 (vetores). Existem algumas variveis que so intrnsecas ao MATLAB e que no podem ser apagadas. ansResposta mais recente no atribuda a nenhuma varivel. epsPreciso da mquina. reaImaxMaior nmero de ponto flutuante. reaIminMenor nmero de ponto flutuante.. pi3.14159265358979 i, j Unidadeimaginria( 1 ).Deveserobservadoque comoessasletraspodemserusadascomonomede varivelconvmterocuidadodeconfirmaroseuvalor antes de usar. Variaveis EscalaresVetoresMatrizes Vetores LinhaVetores Colunas Numericos'Strings Curso de MATLABMatrizes, a Base do MATLAB 10 2.1.Como Criar Matrizes e Vetores? As matrizes e vetores podem ser produzidos no MATLAB de diferentes modos: -ntroduzida na Janela de Comando (lista explcita de elementos), mtodo mais simples apresentado agora; -Geradas por comandos e funes intrnsecas do MATLAB (Ex. funo zeros, ones, rand, etc.); -Criadas em arquivos ".m. Este mtodo ser abordado em detalhes no tpico sobre criao de funes em script; -Carregadas a partir de um arquivo de dados externo. Mtodo que ser abordado no tpico sobre importao e exportao de dados no MATLAB; -Utilizando mtodos de programao for. Mais detalhes no tpico sobre programao. 2.1.1. Criao de Vetores Atravs da Linha de Comando O caractere dois pontos, ":", permite a gerao de vetores na linha de comando do MATLAB. Por exemplo: >> a=1:5 a = 1 2 3 4 5 Outros incrementos podem ser utilizados, como o do seguinte exemplo: >> y = 0 : pi/4 : piy = 00.78541.57082.35623.1416 Curso de MATLABMatrizes, a Base do MATLAB 11 2.1.2. Criao de Matrizes Atrves da Linha de Comando OmtodomaisfcildeintroduzirpequenasmatrizesnoMATLAButilizandoumalista explcita.Oselementosdecadalinhadamatrizsoseparadosporespaosembrancoou vrgulaseascolunasseparadasporpontoevrgula,colocando-separntesisemvoltado grupo de elementos que formam a matriz com o objetivo de a limitar. Por exemplo, introduzindo a expresso: >> a=[1 2 3; 4 5 6; 7 8 9]a =1 2 3 4 5 6 7 8 9 AmatrizaguardadanamemriaRAMdocomputador,ficandoarmazenadaparauso posterior.Asmatrizespodemtambmserintroduzidaslinhaalinha,oqueindicadopara matrizes de grande dimenso. Por exemplo: >> a=[1 2 3 4 5 6 7 8 9] 2.2. Criao de Matrizes Atravs de Funes O MATLAB disponibiliza uma srie de funes para criao imediata de matrizes com caracteristicas "especiais. Esses tipos de matrizes possuem ampla utilizao em aplicaes MATLAB. As principais funes so descristas nos prximos tpicos. 2.2.1. Matriz Identidade Demodoaconstruirumamatrizidentidadequadradaoucomdimensonxm,afunoa utilizar dada por eye (n, m). Exemplo: >> eye(3) Curso de MATLABMatrizes, a Base do MATLAB 12 ans =1 0 0 0 1 0 0 0 1 2.2.2. Matriz Composta por EIementos Unitrios No caso de ser necessria a obteno de uma matriz composta apenas por elementos unitrios, temos que: >> ones(n,m). Por exemplo: >> ones(3) ans = 1 1 1 1 1 1 1 1 1 2.2.3. Matriz NuIa Para efetuar qualquer tipo de manipulao matricial poder ser til a construo de uma matriz composta por elementos nulos: >> zeros(n,m). Por exemplo: >> zeros(3) ans = 0 0 0 0 0 0 0 0 0 2.2.4. Matriz AIeatria A elaborao de testes para qualquer script desenvolvido no MATLAB, ou para utilizao de um outro qualquer modo, poder fazer uso de matrizes compostas por nmeros aleatrios uniformemente distribudos no intervalo entre 0 e 1: >> rand(n,m). Por exemplo: >> rand(3) ans =0.95010.48600.4565 0.23110.89130.0185 0.60680.76210.8214 Curso de MATLABMatrizes, a Base do MATLAB 13 2.3. Indexao O padro de indexao matricial no MATLAB a forma tradicional (linha, coluna). Por exemplo: >> a=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] a = 1 2 3 4 5 6 7 8 9101112 13141516 >> a(2,3)%Acesso ao elemento da linha 2 na coluna 3 ans = 7 Da mesma forma que possvel obter um elemento de uma matriz (que um escalar, ou seja, uma matriz 1 x 1), tambm possvel obter pedaos inteiros da mesma matriz. Por exemplo, seja a matriz a: >> a=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] a = 1 2 3 4 5 6 7 8 9101112 13141516 >> a (2:4, 3:4) ans = 7 8 1112 1516 Curso de MATLABMatrizes, a Base do MATLAB 14 Como podemos traduzir a operao feita acima pelo MATLAB? O MATLAB interpretou da seguinte forma: pegue todos elementos da linha 2 at a linha 4 e selecionedesta linhas os elementos localizados entre 3 a 4 colunas. Outra facilidade deste mtodo de indexao visto no exemplo a seguir: >> a(:,3) ans = 3 7 11 15 Nesta notao Usar os dois pontos sozinhos significa todos os elementos da respectiva linha ou coluna. Estetipodenotaofacilitaenormementeacriaodeprogramas.Saberaproveitaresse importante recurso do MATLAB ajuda a evitar muita "dor de cabea na elaborao de rotinas em MATLAB. 2.4. Concatenao de matrizes Concatenar matrizes consiste em formar uma matriz a partir de outras menores. A notao dnticautilizadaparaformarmatrizescomnmeros.Osseguintesexemplosilustrama concatenao de matrizes. >> a= [1 2; 3 4] a =1 2 3 4 >> r= [a a; a a] r = 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 >> b= (1:4)' b = 1 2 Curso de MATLABMatrizes, a Base do MATLAB 15 3 4 >>r= [b b [a;a]] r = 1 1 1 2 2 2 3 4 3 3 1 2 4 4 3 4 2.5. Remoo de Vetores possvel remover de uma dada matriz qualquer conjunto de linhas e colunas. Para tal, basta atribuir o valor de uma matriz vazia definida por"[] s linhas e colunas que se pretende remover. No exemplo que se segue, elimina-se a 2 coluna da matriz a. >> a= [1 2; 3 4]; >> a= [a a; a a] a = 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 >> a(:,2)= [] a =1 1 2 3 3 4 1 1 2 3 3 4 A remoo de um elemento isolado de uma matriz NO POSSVEL uma vez que esta deixaria de respeitar as propriedades de uma matriz. Segue a baixo a mesagem de erro retornado pelo MATLAB quando se tenta efetuar essa operao. Curso de MATLABMatrizes, a Base do MATLAB 16 >> a(1,2)=[] ???Indexed empty matrix assignment is not allowed. 2.6. Exerccios 1.Gere uma seqncia de nmeros pares com incio em 4 e a terminar no nmero 100. 2.Gere uma seqncia numrica decrescente com incio em 5 e a terminar em -5. 3.Gere uma seqncia numrica com 100 elementos pertencentes ao intervalo [0 . . . 1]. 4.Gereumaseqnciadenmerosmltiplosde3compreendidosentre100e132, dispostos num vetor por ordem decrescente. 5.Criar um vetor de nmeros pares entre 31 e 75 6.Gere uma seqncia a comear em t e acabar em ~t com um passo de 15t. 7.Crie uma matriz 3 3 em que todos os elementos so iguais a 3. 8.Crie um vetor coluna com 100 elementos aleatrios com uma distribuio uniforme. 9.Crie uma matriz 4 4 em que todos os elementos so iguais a 1 + j2. 10.Com a funo eye crie uma matriz diagonal 4 4 em que todos os elementos da diagonal so iguais a 3. 11.Gere o seguinte vetor: x comea em 0, vai at 152, passo 10*t. 12.Construa um vetor com 128 elementos com a seguinte seqncia.13.[ 0 1 0 ~1 0 1 ... 0 ~1 ] 14.Crie uma matriz com dimenso 4 4 em que cada coluna seja o vetor v = [1, 2, 3, 4]. 15.Formeamatrizquadradacomdimenso66constitudaporquatroblocosemqueos elementos de cada bloco sejam "um ou zero, tal como ilustrado na seguinte matriz: 16. 1 1 1 0 0 01 1 1 0 0 01 1 1 0 0 00 0 0 1 1 10 0 0 1 1 10 0 0 1 1 1 17.Gereumamatrizcomdimenso88constitudapornmerosaleatriosobtidoscoma funorand,eobtenhaumasub-matrizconstitudapelascolunasdendicempar utilizando a tcnica de remoo de colunas. Curso de MATLABMatrizes, a Base do MATLAB 17 18.Resolva o exerccio anterior utilizando uma soluo sem "[]. 19.Gere um vetor com todos os nmeros inteiros de 1 a 101 e elimine os elementos pares. 20.Considerando as seguintes matrizes: 0 23 83 1412 11 10 98 7 6 54 3 2 1= a0 10 1 , 03 2 01 , 40 4 , 7 =tb a)Atribua o elemento a32 varivel c b)Atribua o elemento b22 varivel c c)Atribua os elementos a11, a12 e a13 um vetor d d)Atribua a 3 coluna da matriz b a um vetor d e)Atribua a 2 linha de b primeira linha de a. Dica: preencha os espaos restantes com 0. f)Atribua a 4 linha de a 2 linha de a. Curso de MATLABOperaes com Matrizes 18 3. Operaes com Matrizes e Vetores 3.1. Operaes Aritmticas com Matrizes OMATLABpossuidoistiposdiferentesdeoperaesaritmticas.Asoperaesaritmticas matriciais so definidas pelas regras da lgebra Linear. As operaes aritmticas com vetores so efetuadas elemento por elemento. O caractere de ponto decimal ". distingue as operaes matriciais das operaes com vetores. No entanto, como as operaes matriciais e com vetor soiguaisparaasomaeparaasubtrao,opardecaracteres".+e".-"nosousados. Considere o seguinte exemplo: >> a=[1 2 3 4] a = 1 2 3 4 >> b=[5 6 8 9] b = 5 6 8 9 As operaes aritmticas bsicas com matrizes no MATLAB so: +Soma>> a+b ans = 6 8 1113 -Subtrao>> a-b ans = -4-4 -5-5 *Multiplicao>> a*b ans = 2124 4754 Curso de MATLABOperaes com Matrizes 19 .*Multiplicao escalar>> a.*b ans = 512 2436 /Diviso matricial ( equivalente a a*b-1) >> a/b ans = 2.3333 -1.3333 1.6667 -0.6667 ./Diviso escalar>> a./b ans = 0.20000.3333 0.37500.4444 \Diviso "esquerda (equivalente aa-1*b) >> a\b ans = -2.0000 -3.0000 3.50004.5000 Asoperaesacimacitadassodefinidassomenteseasmatrizespossuremasmesmas dimenses.Aexceoparaaoperaodemultiplicao,emquedefinidasomentesea segunda dimenso de a for igual primeira dimenso de b. Almdasoperaesaritmticasbsicas,oMATLABdisponilizatambmasseguintes operaes com matrizes: ^Potncia (matriz^escalar,equivalente a a*a*a) >> a^3 ans = 3754 81 118 .^Potncia escalar>> a.^b ans =164 6561262144 'Transporta>> a' ans = 1 3 2 4 Curso de MATLABOperaes com Matrizes 20 ()Precedncia>> a+b*a ans = 2436 3856 >> (a+b)*a ans = 3044 5074 3.2. Operadores ReIacionais Os operadores usados para comparao de duas matrizes (ou mais matrizes) com as mesmas dimenses so expressos por: < Menor Maior >= Maior ou iguaI == IguaI ~= Diferente Acomparaofeitaentreosparesdeelementoscorrespondenteseoresultadouma matriz composta de nmeros um (1) e zero (0), representando respectivamente VERDADEIRO e FALSO. Por exemplo, >> 2 + 2 ~= 4 ans = 0 Para uma matriz essa operao relacional seria feita da seguinte forma: >> a=[2 3 4;5 2 7;9 2 7] a = 2 3 4 5 2 7 9 2 7 ~~ a~3 Curso de MATLABOperaes com Matrizes 21 ans 0 0 1 1 0 1 1 0 1 Osoperadores"=apenasusamaparterealdosoperandospara comparao.Osoperadores"==e"~=testamtantoaparterealcomoaimaginria.Estes operadores tm precedncia entre os operadores lgicos e aritmticos. Uma alternativa para os operadores relacionais a funo find(). Segue um exemplo de sua utilizao: >> a=rand(3) a = 0.85010.18240.6509 0.24880.07070.9050 0.89530.00960.7060 >> find (a>0.8) ans = 1 3 8 Existem ainda algumas funes que so teis com os operadores lgicos, com any ou aII. Por exemplo: >> a=[1:6] a = 12 3 4 5 6 >> any(a>4)%Existe algum elemento do vetor maior que 4? ans = 1 >> all(a>4)%Todos os elementos do vetor so maiores que 4? ans = 0 Curso de MATLABOperaes com Matrizes 22 3.3. Operadores Lgicos Os smbolos "&", "|", e "~" correspondem respectivamente aos operadores lgicos AND, OR e NOT. Permitem efetuar operaes lgicas entre matrizes com a mesma dimenso compostas porelementoszero(0)eum(1)quecorrespondemaFALSOeaVERDADEIRO, respectivamente.a&brealizaoANDlgico,a|befetuaoORlgico,e~aapresentao complemento dos elementos de A. A funo xor(a,b) implementa a operao OR excIusivo. & "e" Igico | "ou" Igico~ Negao xor() "ou" excIusivo Essas operaes podem ser visualizadas pela seguinte "tabela verdade: A B And & OR | XOR xor 00000 01011 10011 11110 Os operadores lgicos possuem a precedncia mais baixa em comparao aos operadores aritmticos e relacionais. A precedncia entre os diversos operadores lgicos dada por: -NOT possui a precedncia mais elevada; -AND e OR tm igual precedncia, e so avaliados da esquerda para a direita. Considere as seguintes matrizes: >> a=rand(1,3) a = 0.26520.41870.2065 b = 0.56480.84860.5509 Curso de MATLABOperaes com Matrizes 23 >> a0.3 ans = 0 1 0 3.4. Exerccios 20. Considere os vetores e matrizes: a=3,132 1081 , 9 = f43 13 074 65 , 4 3287 34 5= ib=-23,004 iieg*48 12t=c=5*t 24 51 912 4 2 12 5 , 2 32 , 0e ht +=43 , 7 4 , 5 3 = d 21.Realize as seguintes operaes aritmticas: a)a + b +epsb)g c * f c)c b * (a / b) f) h* i d)d e g) a * h i/ c e)e' + 2 * f f)f*i 22.Seja o vetor x = 1:10. Verifique as afirmativas: a)(x.^2) == ( x.*x)b)a = [1 2 3; 4 5 6; 7 8 9]; a^2 == a.^2 c)any((x.^3)>(3*x))Curso de MATLABOperaes com Matrizes 24 d)all((x./(x+1))>((x+1)./(x+1.5))) 23.Extrair a partir do vetor x do exerccio anterior: a)Elementos maiores que 5. b)Elementos diferentes de 3 e 5. c)Elementos iguais a 2 5 8 9. d)Elementos cujo resto da diviso por 3 1. Dica: utilize a funo rem. 24.Gere a seqncia {1, 2, 3, . . . , 9, 10} e extraia os nmeros maiores que 4. 25.Gere uma seqncia aleatria com distribuio normal e elimine os elementos negativos. 26.Dado que x = [1 5 2 8 9 0 1] e y = [5 2 2 6 0 0 2], executar e explicar os resultados dos seguintes comandos: a)x > y b)y < x c)x == y d)x = x f) x | y g)x & y h) x & (~y) i)(x>y)|(yy)&(y> exp(5) ans = 148.4132 abs VaIor absoIuto >> abs(-2.9) ans = 2.9000 log Logaritmo naturaI >> log(1) ans = 0 log10 Logaritmo base 10 >> log10(10) ans = 1 sqrt Raiz quadrada >>sqrt(81) ans = 9 sin Seno >> sin(pi/2) ans = 1 asin Arco seno >> asin(1) ans = 1.5708 tan Tangente >> tan(60) ans = 0.3200 atan Arco tangente >> atan(60) ans = 1.5541 round Arredondamento ao inteiro mais prximo >> round(0.5) ans = 1 floor Arredondamento ao inteiro mais prximo na direo de menos infinito (- ) >> floor(0.5) ans = 0 ceil Arredondamento ao inteiro mais prximo na direo de mais infinito (+ ) >> ceil(0.1) ans = 1 Curso de MATLABFunes, tudo pronto no MATLAB 27 remResto da diviso signFuno sinaI 4.2. Funes Estatsticas OMATLABpossuiumagrandevariedadedefunesestatsticasparaanalisardados. Quandoestasfunesrecebemumamatrizcomoentrada,aoperaoaplicadasobrecada colunadamatriz.Paracalcularamdiadecadaumadascolunasdeumamatrizpodemos fazer: >> m=randn(100,3); >> mean(m) ans = -0.0099 -0.1476 -0.0677 Para calcular o desvio padro pode-se fazer >> std(m) ans = 0.99770.96590.9777 E para obter um histograma de cada coluna de m: >> hist(m) -3 -2 -1 0 1 2 30510152025 Sepretenderum histograma com mais classes basta acrescentar um segundo argumento funo com o nmero pretendido. Curso de MATLABFunes, tudo pronto no MATLAB 28 4.3. Funes Vetoriais OutrasfunesdoMATLABoperamessencialmentesobrevetores(IinhaecoIuna),mas numa matriz n x m, agem de coluna por coluna para produzir um vetor linha com o resultado da suaaplicaoparacadacoluna.possveloperarsobrelinhaporlinhatranspondoamatriz, por exemplo: mean(v')'. v |0.9103 0.3282 0.2470 0.0727 0.7665; 0.7622 0.6326 0.9826 0.6316 0.4777; 0.2625 0.7564 0.7227 0.8847 0.2378; 0.0475 0.9910 0.7534 0.2727 0.2749; 0.7361 0.3653 0.6515 0.4364 0.3593| ~~mean (v')'ans 0.46490.6973 0.5728 0.4679 0.5097 Outrosexemplosdefunesvetoriaisquepermitemaanlisedainformaocontidanas colunas das matrizes so detalhados na tabela abaixo. Considere o vetor exemplo: v = rand(1,5) v =0.20280.19870.60380.27220.1988: max Valor mximo dos elementos de cada coluna >> max(v) ans = 0.6038 sum Soma dos eIementos de cada coIuna >> sum(v) ans = 1.4763 median VaIor mediano de cada coIuna >> median(v) ans = 0.2028 min VaIor mnimo dos eIementos de cada coIuna >> min(v) ans = 0.1987 prod Produto dos eIementos de cada coIuna >> prod(v) ans = 0.0013 sortOrganizao dos eIementos da coIuna por ordem decrescente de vaIor >> sort(v) ans = 0.19870.19880.20280.27220.6038 Curso de MATLABFunes, tudo pronto no MATLAB 29 4.4. Funes Matriciais GrandepartedaversatilidadedoMATLABvemdassuasfunesmatriciais.Asmais usadas so detalhadas na tabela abaixo. Considere a matriz exemplo abaixo: >>m=[1 2 3 4; 5 6 7 8] m = 1 2 3 4 5 6 7 8 size Retorna um vetor contendo o tamanho de cada dimenso da matriz. >> size(m) ans = 2 4 length Retorna o comprimento do vetor ou dimenso mxima do da matriz. >> length(m) ans = 4 diag Retorna a diagonaI de uma matriz ou cria uma matriz diagonaI. >> diag(m) ans = 1 6 fliplrInverte a ordem dos eIementos da matriz da esquerda para direita fliplr(m) ans = 4 3 2 1 8 7 6 5 flipud Inverte a ordem dos eIementos de cima para baixo. >> flipud(m) ans = 5 6 7 8 1 2 3 4 reshape Reformata matriz>> m=1:6 m = 1 2 3 4 5 6 >> m2=reshape(m,2,3) m2 = 1 3 5 2 4 6 4.5. Script e Funes OscomandosdoMATLABsonormalmenteintroduzidosatravesdafaneladecomando,ondeuma unica linha de comando e introduzida e processada imediatamente.Curso de MATLABFunes, tudo pronto no MATLAB 30 OMATLABetambemcapazdeexecutarseqnciasdecomandosarmazenadasemarquivos.Os arquivosquecontmasdeclaraesdoMATLABsochamadosarquivos".m",econsisteem seqncias de comandos normais do MATLAB escrito no Iormato texto (ASCII).Para editar um arquivo texto na fanela de comando do MATLAB utilize o comando 'edit. Os arquivos podem, tambem, ser editados Iora do MATLAB utilizando qualquer editor de texto.Existem dois tipos de arquivos m: -ScriptSeqnciadecomandosdoMatlab,queservebasicamenteparaautomatizaralgum processo repetitivo. Alem disso, no trabalha com parmetros de entrada nem de saida, sempre trabalhacomvariaveisdoworkspace(variaveispredeIinidasedeIinevariaveisnoworkspace); -FunoTambem uma e uma seqncia de comandos do Matlab, mas que aceita parmetros deentrada,retornaparmetrosdesaida,enaqualepossivelimplementar,alemdecalculos, estruturas logicas para criao de mecanismos de analise, deciso e controle. Funes utilizam seu proprio espao de memoria para armazenar suas variaveis locais. 4.6. Exerccios 30.Dado um vetor t = 1:0. 2:2, calcular as seguintes expresses: a.ln(2 + t + t^2) b.cos(t).cos(t)+sin(t).sin(t) c.arc tg(t) d.cot(t) e.sec(t)*sec(t)+cot(t)-1 31.Calcular as expresses com o MATLAB a.2 + round (6/9+3*2)/2-3 b.2 + floor(6/9+3*2)/2-3 c.2 + ceil(6/9+3*2)/2-3 32.Gere um vetor com um milho de amostras obtidas com a funo rand. Calcule a sua mdia, desvio padro e visualize o seu histograma com 100 classes. 33.Gere agora um vetor com um milho de amostras com a funo randn.Calcule a sua mdia, desvio padro e visualize o seu histograma com 100 classes. Quais as diferenas em relao ao exemplo anterior? Curso de MATLABFunes, tudo pronto no MATLAB 31 34.Gere uma seqncia com 100 elementos iguais unidade e calcule a sua mdia e desvio padro. 35.Entre a seguinte matriz: 12 11 10 98 7 6 54 3 2 1 Ento execute os seguintes comandos sobre esta matriz: rot90, diag, tril, triu. 36.Dado o vetor a = [2 7 9 7; 3 1 5 6; 8 1 2 5], explique o resultado dos seguintes comandos: a.reshape(A,2,6) b.flipud(a) c.fliplr(a) d.a(1:3,:) e.[a; a(1:2,:)] f.sum(a) g.sum(a') h.sum(a,2) i.[[a; sum(a)][sum(a,2); sum(a(:))]] Curso de MATLABProgramao em MATLAB 32 5. Importao e Exportao de Arquivos 5.1. Comandos LOAD e SAVE Com estes comandos possvel guardar num arquivo, variveis do MATLAB que estejam no workspace. O comando save permite guardar as variveis para disco e o comando load permite carreg-las para o workspace. O exemplo seguinte ilustra a funcionalidade destes comandos. >>a= rand(2) a = 0.61543 0.92181 0.79194 0.73821 >>b= rand(1,3) b= 0.9501 0.2311 0.6068 >>save arquivo a b >>load arquivo Senenhumnomedearquivoforfornecido,asvariveisseroarmazenadasemarquivo chamado MATLAB.mat. O arquivo do tipo .mat o formato de armazenamento de dados mais eficiente (mais compacto e rpido) disponvel no MATLAB. OscomandosloadesavepermitemigualmenteguardararquivosemformatoASC (AmericanStandardCodeforInformationInterchange),cdigopadropararepresentaode caracterescomoletras,dgitos,sinaisdepontuao,cdigosdecontroleeoutrossmbolos. Tambmdenominaoarquivotextoquefoieditadosemqualquerrecursoassociado (acentuao,negrito,sublinhado,fontesdeletras,etc.).Sendomaisfcilparaousurio verificarocontedocomumsimpleseditordetexto.Abaixoumexemplodautilizaodesse parmetro: >>save arquivo a b -ascii Curso de MATLABProgramao em MATLAB 33 5.2. Comando IMPORTDATA - Importao de Dados Ocomandoimportdataverificaaextensodonomedoarquivofornecidoeexecutaa importao dos dados utilizando a funo conveniente.A sintaxe deste comando a seguinte: estrutura_de_dados = importdata(arquivo) Parmetros de entrada: -Arquivo nome do arquivo a ser importado; Parmetro de sada: -estrutura_de_dados- estrutura de dados importados. Abaixo segue os Iormatos reconhecidos pela Iuno importdata: ExtensoDescrioFuno MATFormato Matlabload CVSNumero separados por ,`cvsread DLMNumero delimitadodlmread TABNumeros tabuladosdlmread XLSPlanilhas do MS-Excelxlsread WK1Planilha do Lotus 123wk1read AVIFormato de animao (video)aviread TIFF PNG BMP GIF PCX ICO Formatos de imagens. imread AUFormato de audioauread WAVFormato de audiowavread Autilizaodocomandoimportadata(nolugardocomandoIoad)altamente recomendvel,devidoasuaversatilidadenaaberturadediferentestiposdearquivosno MATLAB. Curso de MATLABProgramao em MATLAB 34 5.3. Exportao de Dados Formatados A utilizao do comando save possui a desvantagem de no permitir a formatao dos dados de sada. Para suprir essa necessidade, foi definida uma srie de comandos especiais para a utilizao de sadas formatadas de dados no MATLAB. Os principais comandos seriam: fopen, fcIose, fprintf.5.4. Comando FOPEN - Exportao de Dados Formatados Abre arquivos, sua sintaxe a seguinte: fp=fopen(arquivo,acesso) [fp, msg]=fopen(arquivo,acesso) Parmetros de entrada: -Arquivo nome do arquivo -Acesso tipo de acesso: 'r' apenas para leitura; 'w' gravao (cria arquivo se necessrio); 'a' para anexao (cria arquivo se necessrio). Parmetro de sada: -fp apontador para arquivo (file pointer); -msg em caso de erro na abertura do arquivo, retorna a mensagem de erro. >>[fp,msg]=open('arquivo1.txt', 'r'); fp=3 msg=' ' >>[fp,msg]=open('arquivo1.txt', 'r'); fp=-1 msg= Cannot open file. Existence? Permissions? Memory? . . . Nocasodeaberturadearquivocorreta(primeiroexemplo),afunofopenretorna mensagem de erro vazia. No caso de erro de abertura de arquivo (segundo exemplo), a funo retorna -1. Curso de MATLABProgramao em MATLAB 35 5.5. Comando FCLOSE - Exportao de Dados Formatados Fecha arquivo, sua sintaxe a seguinte: st=fclose(fp) st=fclose(all) Parmetros de entrada: -fp apontador do arquivo a ser fechado (file pointer); -all fecha todos os arquivos abertos. Parmetros de sada: -st status da execuo da funo. 0 indica execuo correta e -1, erro. >>st=fclose(fp); 5.6. Comando FPRINTF - Exportao de Dados Formatados Essa instruo grava dados em arquivos formatados. Sua sintaxe a seguinte: nbyte = fprintf(fp,fmt, dados) Parmetro de entrada: -fp apontador do arquivo (file pointer); -dados dados a serem gravados; -fmt -cadeia de caracteres com formato de gravao de cada dado (similar ao utilizado em linguagem C/C++). Parmetro de sada: -nbyte nmero de bytes gravados. >>fp=fopen('dados.txt','w');%cria arquivo>>x=rand|(3); >>fprintf(fp,'%f %f %f \n'); Curso de MATLABProgramao em MATLAB 36 ans= 81 >>fclose(fp); A funo fprintf trabalha com matrizes e trata, eficientemente, o conjunto de dados em uma s chamada. Desta forma, no necessrio criar um procedimento de repetio (for ou whiIe) 5.7. Exerccios 37.Escrever uma rotina em MATLAB, para contar e exibir a freqncia de cada valor de uma seqncia de N valores. Por exemplo, para N = 8, se a seqncia for: 17 30 00 1500 17 23 17 o programa deve mostrar algo semelhante a: 17 ocorre 3 vezes 30 ocorre 1 vez 00 ocorre 2 vezes 15 ocorre 1 vez 23 ocorre 1 vez OprogramadevelerovalorN,eosvaloresdaseqnciadeumarquivochamadoseq.txt que tenha sido digitado previamente. Curso de MATLABProgramao em MATLAB 37 6. Programao em MATLAB 6.1. Estruturas de ControIe no MATLAB Oscomandosquecontrolamofluxoespecificamaordemeaestruturadeclculodo programa.NoMATLABestescomandossosemelhantesaosusadosnalinguagemC,mas com uma estrutura diferente. O MATLAB apresenta as seguintes estruturas de controle: -Estruturas de repetio: for e while; -Estruturas condicionais: if-else-end e switch-case. 6.2. Estrutura de Repetio - Instruo FOR Esta instruo permite a repetio de um conjunto de instrues. A sintaxe de utilizao a seguinte: for varivel= incio:passo:fim, nstruo 1 nstruo 2 ... end A seguir podemos ver alguns exemplos de utilizao >>r= 10; >>for n= 1:10, >>r= r+10 >>end No difcil verificar que a expresso direita do sinal de igual na instruo for apenas cria um vetor e que se pode utilizar a instruo for da seguinte forma >>r=10; Curso de MATLABProgramao em MATLAB 38 >>v= 1:10; >>for n= v, >>r= r+10 >>end Ainstruoforsdeveser utilizada quandonoseencontra outraformadeimplementaro algoritmo, pois como veremos no tpico sobre Otimizao de algoritmos no MATLAB, torna a execuo do programa muito lenta uma vez que o Matlab utiliza uma linguagem interpretada. 6.2. Estrutura de Repetio - Instruo WHILE Estrutura de repetio usada quando no se sabe, a priori, o nmero de iteraes que sero executadas. Em geral, a expresso um escalar, mas vetores tambm so vlidos.Sua sintaxe pode se descrita como: whiIe expresso instruo end Segue um exemplo da utilizao da instruo while: a = l;b = 15; whiIe a