Baixe o app para aproveitar ainda mais
Prévia do material em texto
Matlab para Iniciantes Desmistificando o Matlab Edição Especial para II Curso de Introdução ao Matlab e Aplicações em Neurociências da Sociedade Brasileira Neurociências e Comportamento SBNeC MATLAB para Iniciantes – Desmistificando o MATLAB [ 2 ] Seu Cadastro É Muito Importante para Nós Se quiser receber notícias e eventos relacionados com o Matlab e com os autores deste livro, por favor, dirija-se ao link abaixo e preencha nosso cadastro, colocando o assunto Livro Matlab. http://www.marianrogers.com.br/matlab.html Gostaríamos muito de receber seus comentários, depoimentos e experiências com este livro! Com sua colaboração e conhecendo melhor suas preferências e interesses poderemos deixar transformar este livro e nossas outras obras para atende-lo cada vez melhor. Obrigado por escolher este livro como parte de sua experiência de leitura e aprendizado! Fale Conosco Se detectar algum problema com este livro, por favor, encaminhe-nos um e-mail para que possamos realizar os devidos esclarecimentos e correções. Sobre as dúvidas sobre pacotes de software e licenças sugerimos que sejam encaminhadas ao distribuidor e revendedor do Matlab que poderá prestar-lhe os devidos esclarecimentos. E-mail para contato: contato@marianrogers.com.br Twitter: @marian_rogers MATLAB para Iniciantes – Desmistificando o MATLAB [ 3 ] Mariana Antonia Aguiar Rogerio Akira Furucho Alexandre Erdmann Silva Matlab para Iniciantes Desmistificando o Matlab Edição Especial para II Curso de Introdução ao Matlab e Aplicações em Neurociências da Sociedade Brasileira Neurociências e Comportamento SBNeC 2ª Edição São Paulo 2012 - Agbook MATLAB para Iniciantes – Desmistificando o MATLAB [ 4 ] Ao meu marido e a minha família que sempre acreditaram em meus projetos e sonhos e nunca os questionaram, mesmo quando pareciam loucuras. Mariana Antonia Aguiar A minha esposa, meus pais, irmãos, sobrinhos, sogra, cunhados e Tigor que sempre acreditarem na minha infinidade de ideias, sonhos e projetos. Rogerio Akira Furucho A minha esposa, meus pais, irmãos que sempre me deram o apoio necessário e acreditaram nos sonhos e projetos. Alexandre Erdmann Silva MATLAB para Iniciantes – Desmistificando o MATLAB [ 5 ] AGRADECIMENTOS Esta obra demandou muito esforço, tempo e a contribuição de muitas pessoas: professores, pesquisadores, consultores, empresários, estudantes e profissionais de várias áreas. Agradecimentos primeiros a Deus pelos dons recebidos como sabedoria, inteligência, ciência e fortaleza. Agradecimentos carinhosos a nossos familiares que puderam acompanhar a evolução das ideias e a construção da obra e contribuir com seu amor, incentivo, compreensão, apoio e paciência. Em especial a nossos pais Terezinha e Antonio (in memoriam), Izaura e Newton, Guerda e João Luiz, aos nossos irmãos, sobrinhos e afilhados. Agradecimentos a nossos professores, alunos e amigos das universidades USP, UNIFESP, UFABC, ESPM, FEI, SENAC e FMU/FISP pelos conselhos, inspirações, trocas de experiências e de conhecimentos. Agradecimentos à Sociedade Brasileira de Neurociência e Comportamento – SBNeC, em especial à Presidenta Profª Dra. Cecilia Hedin Pereira, ao Vice-Presidente Prof. Dr. John MATLAB para Iniciantes – Desmistificando o MATLAB [ 6 ] Fontenele Araújo e aos seus representantes discentes M.Sc. Douglas Engelke e M.Sc. Renato Filev que organizaram conosco a 2ª edição deste treinamento em 2012. Agradecimentos também especiais ao Prof. Dr. Marcus Vinícius Baldo e à M.Sc. Renata Lima, respectivamente Presidente e Representante Discente 2008-2001 da SBNeC, que promoveram conosco o I Curso de Introdução ao Matlab e Aplicações em Neurociências em 2010. Agradecimentos especiais ao Prof. Dr. Javier Ropero Pelaez que prontamente aceitou e se dispôs a proferir o módulo de Redes Neurais Artificiais na edição do curso em 2010 e ao Prof. Dr. André Cravo que apresentou os tópicos sobre Eletroencefalograma – EEG e Psycho Toolbox nas duas edições do treinamento. Agradecimentos a todos os participantes das duas edições do curso, cuja troca de experiências e sugestões serviram para aprimorarmos o então esboço deste livro. Agradecimentos especiais ao Prof. Dr. Gilberto Fernando Xavier por suas orientações e pela disponibilização do Laboratório de Neurociência e Comportamento do Instituto de Biociências da USP para realização de nossas pesquisas em Neurociências. MATLAB para Iniciantes – Desmistificando o MATLAB [ 7 ] Agradecimentos aos consultores e profissionais do Centro de Inovação, Empreendedorismo e Tecnologia – CIETEC, onde está instalada a Marian Rogers Consultoria, Projetos e Treinamentos Ltda., que fazem da experiência da incubação uma grande lição de vida. MATLAB para Iniciantes – Desmistificando o MATLAB [ 8 ] "Onde quer que haja mulheres e homens, há sempre o que fazer, há sempre o que ensinar, há sempre o que aprender." Paulo Freire MATLAB para Iniciantes – Desmistificando o MATLAB [ 9 ] PREFÁCIO À 2ª EDIÇÃO MATLAB1 é um software de alta performance voltado, principalmente, para o cálculo numérico, aspecto este que fez sua fama originalmente em cursos e disciplinas da área de ciências exatas. Sua propriedade é da empresa The Matworks Inc. que atualmente possui um único representante no Brasil. O software reúne análise numérica, cálculo com matrizes, processamento de sinais, construção de gráficos e interface com usuário em um ambiente amigável onde problemas e soluções são expressos como na matemática, ao contrário da programação tradicional que possui sua sintaxe com a variável sempre à esquerda. O MATLAB é um sistema cujo elemento básico de informação é uma matriz que, diferentemente de outras linguagens estruturadas, não requer dimensionamento, o que é muito útil nas diversas aplicações a que se destina. 1 Matlab é uma marca registrada da empresa The MathWorks Inc., 3 Apple Hill Drive, Natick, MA 01760-2098, US, Fone: 508-647-7001, www.mathworks.com MATLAB para Iniciantes – Desmistificando o MATLAB [ 10 ] Essa característica permite a resolução de muitos problemas numéricos em um prazo menor quando comparado a um programa semelhante em outras linguagens, como Basic, C ou C++. Ao contrário do que muitos podem imaginar, o MATLAB não é uma ferramenta para uso exclusivo em aplicações de Matemática ou Engenharia. Pelo contrário, diversas aplicações em Medicina, Biologia, Genética, Neurociências, entre outras, encontram no MATLAB uma ferramenta poderosa e facilmente aplicável para auxílio à resolução de seus problemas. Assim, este livro além de possuir como objetivo a facilitação do aprendizado desta importante ferramenta de estudo, análise e resolução de problemas também possui a pretensão de desmistificar as aplicações e usabilidade do MATLAB para que preconceitos sejam vencidos. O MATLAB não é uma ferramenta para uso exclusivo de programadores e sim para todos aqueles que querem ou pretendem ter uma ferramenta computacional poderosa em suas mãos com extrema facilidade de uso. MATLAB para Iniciantes – Desmistificando o MATLAB [ 11 ] Você também pode integrar os programas originários do MATLAB com outras linguagem de programação e aplicações, além de poder compartilhar seus códigos com outras pessoas pois sua base é formada por arquivos tipo texto com extensão ".m". Bem vindo ao grupo de usuários do MATLAB! Esperamos que você aproveite este livro em seus estudos,pesquisas e análises. Os autores MATLAB para Iniciantes – Desmistificando o MATLAB [ 12 ] SOBRE OS AUTORES Mariana Antonia Aguiar Graduada em Engenharia Elétrica com Habilitação em Informática Industrial pela Universidade Estadual Paulista "Júlio de Mesquita Filho" (1998) e mestre em Engenharia Elétrica, área de Engenharia de Sistemas, pela Escola Politécnica da Universidade de São Paulo (2001). Possui experiência como docente no ensino superior há mais de uma década, lecionando em instituições como UNESP Campus de Sorocaba, UniFEI em São Bernardo do Campo e FASP também em São Paulo. Desde 2001 leciona nas Faculdades Integradas de São Paulo (FISP/FMU) nos cursos de Engenharia e Tecnologia. É sócia-fundadora da empresa Marian Rogers Consultoria, Projetos e Treinamentos Ltda. atualmente integrante da maior incubadora de empresas da América Latina localizada na USP, o CIETEC – Centro de Inovação, Empreendedorismo e Tecnologia. Também é idealizadora e co-fundadora da Incubadora Universitária, destinada a treinamentos de capacitação e consultoria para projetos desenvolvidos pelos universitários. É colaboradora do Laboratório de Neurociência e Comportamento do Instituto de Biociências da USP, locais onde realiza seus estudos preliminares para o programa de doutorado em MATLAB para Iniciantes – Desmistificando o MATLAB [ 13 ] parceria com a UFABC. Também pertence ao Núcleo de Ciências Cognitivas (NAPCC) da USP. Possui experiência de mais de uma década na área de Engenharia de Diagnóstico e Inteligência Artificial atuando em projetos conjuntos com o Prof. Dr. Zsolt L. Kóvacs, da EPUSP, além da experiência nas áreas de Controle e Automação, Automação Bancária, Tecnologia da Informação e Engenharia Elétrica. Possui publicações nacionais e internacionais sobre Inteligência Artificial e Redes Neurais Artificiais e sobre seus estudos relacionados às Ciências Cognitivas, principalmente nas áreas de Atenção e Memória. É também colaboradora da revista ES Magazine. http://lattes.cnpq.br/2055998711979194 Rogerio Akira Furucho Idealizador e co-fundador da Incubadora Universitária atua também como Coach e Consultor de Novos Projetos. Sócio- Fundador da Marian Rogers Consultoria onde atua como Consultor de Negócios e Instrutor. Professor do curso de pós-graduação Gestão de Negócios no SENAC-SP e dos cursos de Engenharia na FISP/FMU. Engenheiro Elétrico com habilitação em Acionamentos e Controle pela UNESP, MBA em Marketing de Serviços pela ESPM, mestrando pela UFABC/USP, com aperfeiçoamentos na Fundação Vanzolini e MATLAB para Iniciantes – Desmistificando o MATLAB [ 14 ] na FGV-EAESP. Apresenta sólida experiência profissional nas áreas de gerenciamento de projetos, estratégia empresarial, administração de marketing, gestão da qualidade, empreendedorismo e desenvolvimento de novos produtos, serviços, software e negócios em empresas dos segmentos de TI, financeiro, energia, eletrometalúrgico, eletro- eletrônico e de engenharia. Possui experiência acadêmica diferenciada como professor universitário nas áreas de Engenharia, Gestão e TI do SENAC, FISP, FMU, FIAM-FAAM, FASP e IPEP. Professor voluntário do projeto de inclusão digital da Paróquia São Vito Mártir. Autor do livro Matlab para Iniciantes – Desmistificando o Matlab. Palestrante nas áreas de Empreendedorismo e Plano de Negócios. Possui publicações nacionais e internacionais nas áreas de Engenharia Diagnóstica, Automação e Controle, Administração, Engenharia de Software e Segurança da Informação e escreve artigos para a revista Engenharia de Software Magazine. http://lattes.cnpq.br/6679308235302590 Alexandre Erdmann Silva Graduado em Engenharia Elétrica com especialização em Automação e Controle pela Faculdades Integradas de São Paulo – FISP (2005) e pós-graduado em Automação MATLAB para Iniciantes – Desmistificando o MATLAB [ 15 ] Industrial pelo SENAI (2008). Co-fundador da Incubadora Universitária, atua como Consultor e Coach de Novos Projetos incubados. Atualmente é professor das Faculdades Integradas de São Paulo - FISP e das Faculdades Metropolitanas Unidas. Possui sólida experiência acadêmica de 4 anos como professor universitário nas áreas de Tecnologia da Informação, Engenharia e dos cursos de Engenharia Elétrica, Engenharia Computação, Engenharia Mecatrônica, das Faculdades Integradas de São Paulo - FISP, Faculdades Metropolitanas Unidas - FMU, Possui importante experiência profissional de 9 anos em empresas dos segmentos de informática, e automação bancária, suporte técnico em manutenção e hardware de servidores IBM, HP e DELL. Tem interesse também em estudos nas áreas de Tecnologia da Informação e desenvolvimento de soluções automatizadas para pesquisas. MATLAB para Iniciantes – Desmistificando o MATLAB [ 16 ] SUMÁRIO AGRADECIMENTOS ...................................................... 5 PREFÁCIO À 2ª EDIÇÃO ............................................... 9 SOBRE OS AUTORES .................................................. 12 INTRODUÇÃO AO MATLAB ......................................... 18 CARREGANDO O MATLAB ........................................... 18 EXECUTANDO COMANDOS ......................................... 21 OBTENDO INFORMAÇÕES SOBRE O AMBIENTE .......................... 29 FORMATOS NUMÉRICOS DE SAÍDA ....................................... 31 ENTRADA E MANIPULAÇÃO DE DADOS ...................... 34 MATRIZES ................................................................. 34 ELEMENTOS DAS MATRIZES .............................................. 37 FUNÇÕES DE CRIAÇÃO DE MATRIZES ................................... 43 OPERAÇÕES COM MATRIZES ............................................. 46 OPERAÇÕES COMPARATIVAS ............................................. 57 MANIPULAÇÃO DE VETORES E MATRIZES .................. 59 FUNÇÕES DE CONSULTA E MANIPULAÇÃO DE MATRIZES ............. 62 FUNÇÕES PARA ANÁLISES DE DADOS ....................... 73 COMO CONSTRUIR GRÁFICOS NO MATLAB ................ 79 GRÁFICOS BIDIMENSIONAIS ............................................. 80 ESCALA LOGARÍTMICA E COORDENADA POLAR ........................ 90 PLOTANDO GRÁFICOS TRIDIMENSIONAIS E CONTORNOS............. 91 FUNÇÕES MATEMÁTICAS COMUNS ...................................... 97 COMPLEMENTAÇÃO SOBRE GRÁFICOS .................................. 98 FUNÇÕES PARA PLOT DE IMAGENS ...................................... 99 PROGRAMAÇÃO NO MATLAB .................................... 100 COMANDOS DA LINGUAGEM ........................................... 100 TIPOS DE VARIÁVEIS ................................................... 116 ANÁLISE E SIMULAÇÃO DE DADOS .......................... 126 FUNÇÕES E ARQUIVOS .M .............................................. 126 MATLAB para Iniciantes – Desmistificando o MATLAB [ 17 ] ESTRUTURA DAS FUNÇÕES ............................................. 126 CARACTERÍSTICAS DAS FUNÇÕES ..................................... 127 FUNÇÕES PRIMÁRIAS ................................................... 128 SUBFUNÇÕES ............................................................ 128 IMPORTAÇÃO E EXPORTAÇÃO DE DADOS ................ 132 CRIANDO ARQUIVOS .M .......................................... 148 EXECUTANDO ARQUIVOS .M ........................................... 151 INTERFACE GRÁFICA DO USUÁRIO (GUI)................ 153 INTERFACE VIA LINHA DE COMANDO .................................. 153 CAIXA DE DIÁLOGO ..................................................... 154 INTERFACE VIA FERRAMENTA GUIDE ................................. 156 BLANK GUI .............................................................. 157 MENU ..................................................................... 159 BARRA DE FERRAMENTAS ...............................................160 ALIGN OBJECTS ......................................................... 161 MENU EDITOR ........................................................... 162 TAB ORDER EDITOR .................................................... 166 OBJETOS DE CONTROLE ................................................ 168 INTEGRAÇÃO DOS OBJETOS DE CONTROLE ........................... 170 PROGRAMANDO GUIS CRIADAS ....................................... 171 PROPRIEDADES DEFAULT DAS FUNÇÕES DE CALLBACK ............. 175 ADICIONANDO CÓDIGO PARA OS COMPONENTES NO CALLBACK. ... 177 ÍNDICE REMISSIVO ................................................ 191 MATLAB para Iniciantes – Desmistificando o MATLAB [ 18 ] INTRODUÇÃO AO MATLAB Agora que você já sabe o que é o MATLAB vamos iniciar nossos estudos. CARREGANDO O MATLAB Localize o ícone do MATLAB em seu Gerenciador de Programas do Windows ou em seu Desktop. O ícone do programa assemelha-se ao apresentado a seguir: Figura 1: Ícone do MATLAB Um duplo clique no ícone carrega o aplicativo MATLAB. Quando o MATLAB é carregado, normalmente três janelas são exibidas: a Janela de Comando (Command Windows), a Janela de Diretórios (Current Directory) e a Janela de Histórico de Comandos (Command History) - Figura 2. MATLAB para Iniciantes – Desmistificando o MATLAB [ 19 ] Figura 2: Janelas padrão do MATLAB A Janela de Comando é ativada quando se inicia o MATLAB, e o prompt padrão (>>) é exibido na tela. A partir desse ponto, o MATLAB está pronto para receber as instruções do usuário. Todos os comandos utilizados pelo usuário serão listados na janela de Histórico de Comandos. Já os arquivos e diretórios que estão presentes no diretório corrente do MATLAB serão exibidos na janela de Diretório Corrente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 20 ] Para você saber qual diretório está corrente no MATLAB ou para alterá-lo, localize na barra de ferramentas superior da janela de comandos a barra de diretório, como a seguir: Figura 3: Barra de diretório corrente do MATLAB Nesta barra você pode alterar o diretório corrente para o diretório de seu projeto, por exemplo. O MATLAB "procurará" os arquivos para execução neste diretório indicado, caso nada seja "dito" ao contrário. Bem, agora que você conhece as principais janelas do MATLAB, podemos avançar mais um passo. MATLAB para Iniciantes – Desmistificando o MATLAB [ 21 ] EXECUTANDO COMANDOS Agora iremos aprender como o MATLAB executa instruções ou comandos. Primeiramente, clique dentro da Janela de Comandos. Você verá que uma barra vertical (chamada pipe) ficará piscando próxima ao prompt do MATLAB esperando sua digitação. Pense no MATLAB como uma grande calculadora que você precisa passar os comandos para execução. Essa janela de comandos seria a janela de sua calculadora. É nela que você digitará e visualizará seus comandos. Para entrar com uma pequena conta, digite a equação a seguir e aperte o "ENTER" (não digite o >> apenas o comando). >> A = 1 + 1 Você terá como resposta: >> A = 1 + 1 A = 2 MATLAB para Iniciantes – Desmistificando o MATLAB [ 22 ] Viu? É muito fácil executar comandos no MATLAB! Neste cálculo você utilizou uma variável chamada A que recebeu a resposta da soma de 1 + 1. Variáveis podem se atribuídas para facilitar o manuseio e a representação de sua equação ou comando. Elas podem ser escritas em variáveis maiúsculas e minúsculas formando, inclusive, palavras. Se não for utilizada uma variável para receber o resultado da expressão, o próprio MATLAB utiliza a variável padrão ans, que representa a palavra "answer" (resposta). Por exemplo: >> 1 + 1 ans = 2 O MATLAB é case sensitive, ou seja, ele faz diferença entre letras maiúsculas e minúsculas. Se você utilizar a mesma variável para duas equações, a resposta da primeira será perdida! Isto vale para a variável ans também! MATLAB para Iniciantes – Desmistificando o MATLAB [ 23 ] Para entrar com outras operações além da adição, é só digitar: Multiplicação: >> A = 2 * 4 Quando se pressiona a tecla "ENTER" o MATLAB responde com: >> A = 2 * 4 A = 8 Colocando-se os dados entre parênteses, o MATLAB obedece a ordem dos mesmos, igual a uma calculadora. >> A = 1 + 2 * 4 A = 9 Observe que o resultado é diferente se você não colocar os parênteses na soma. O MATLAB obedece a precedência de operadores matemáticos, mas por garantia é sempre bom você colocar os parênteses em expressões mais complexas. MATLAB para Iniciantes – Desmistificando o MATLAB [ 24 ] >> A = (1 + 2) * 4 A = 12 Para a divisão você deve utilizar a barra "/" e para a subtração o sinal de menos "−" >> B = (4/2) − 1 B = 1 MATLAB para Iniciantes – Desmistificando o MATLAB [ 25 ] Tabela 1: Outros operadores matemáticos úteis Operação Operador MATLAB Exemplos Exponencial exp ( ) >> exp(2) ans = 7.389056098930650e+000 Logaritmo Natural log ( ) >> log(10) ans = 2.302585092994046e+000 Logaritmo Base 10 log10 ( ) >> log10(10) ans = 1 Potência Base 2 pow2 ( ) >> pow2(3) ans = 8 Potência (a elevado à b) a ^ b >> a = 3 ^ 3 a = 27 Raiz quadrada sqrt ( ) >> sqrt(64) ans = 8 Número PI () pi >> pi ans= 3.141592653589793e+000 MATLAB para Iniciantes – Desmistificando o MATLAB [ 26 ] pi é um número constante no MATLAB e você pode utilizá-lo diretamente em uma operação. Por exemplo: pi * 2 Para consultar a ajuda de qualquer comando, você pode digitar no MATLAB a palavra help seguida do comando desejado finalizando com um "ENTER". Com isso, o MATLAB exibirá toda a explicação sobre o comando desejado. Exemplo: >> help sqrt SQRT Square root. SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive. See also sqrtm, realsqrt, hypot. Overloaded methods: darray/sqrt sym/sqrt Reference page in Help browser doc sqrt MATLAB para Iniciantes – Desmistificando o MATLAB [ 27 ] As teclas com setas podem ser usadas para se encontrar comandos utilizados anteriormente, para nova execução ou para sua reedição. Os comandos voltam como em lista, do mais recente para o mais antigo. Caso você digite um comando errado, que o MATLAB não entenda, ele te responderá com a seguinte mensagem: >> lo10(10) ??? Undefined function or method 'lo10' for input arguments of type 'double'. Além das teclas com setas, outras teclas podem ser utilizadas para reeditar a linha de comando. A seguir é dada uma breve descrição destas teclas: Home move para o começo da linha End move para o final da linha Del apaga um caracter à direita Backspace apaga um caractere à esquerda O ponto-e-vírgula também pode ser utilizado no final de um comando quando você não quiser "ver" o resultado do mesmo. Assim, para um cálculo ou comando que você não deseja verificar o valor imediato, ou para entradas de dados MATLAB para Iniciantes – Desmistificando o MATLAB [ 28 ] que produzem grande quantidade de dados de saída, o ";" é frequentemente utilizado. >> log(2) ans = 6.931471805599453e−001 ou, com o ";", teríamos: >> log(2); >> MATLAB para Iniciantes – Desmistificando o MATLAB [ 29 ] Obtendo informações sobre o ambiente Alguns comandos existentes no MATLAB são utilizados para a obtenção de informações que ficam armazenadas na área de trabalho do sistema, o chamado Workspace. Por exemplo, o comando abaixo retorna as variáveis que foramutilizadas até o momento, incluindo a ans: >> who Your variables are: A B M a ans O comando whos produz informações mais detalhadas sobre as variáveis utilizadas: >> whos Name Size Bytes Class Attributes A 1x1 8 double B 1x1 8 double M 1x3 24 double a 1x1 8 double ans 1x1 8 double MATLAB para Iniciantes – Desmistificando o MATLAB [ 30 ] Cada elemento de uma matriz tipo Real requer 8 bytes de memória, assim a matriz M de dimensão 1x3 utiliza 24 bytes e todas as variáveis juntas listadas anteriormente utilizam um total de 56 bytes. MATLAB para Iniciantes – Desmistificando o MATLAB [ 31 ] Formatos numéricos de saída O comando format é utilizado para modificar o formato numérico exibido na tela, afetando somente o modo como os números são exibidos e não como eles são processados ou salvos. Se o número é exato ele é mostrado em um formato sem qualquer ponto decimal. Por exemplo: >> 102 ans = 102 Se, entretanto, seu valor não é inteiro exato, existem várias possibilidades de formatar a saída. O formato "default" é o chamado short, mostra aproximadamente 5 dígitos significativos ou usa notação científica. Por exemplo, a expressão: >> 4/3 é mostrada, para cada formato usado, da seguinte maneira: MATLAB para Iniciantes – Desmistificando o MATLAB [ 32 ] format short 1.3333 format short e 1.3333e+000 format long 1.33333333333333 format long e 1.333333333333333e+000 format hex 3ff5555555555555 format rat 4/3 format bank 1.33 Os símbolos "+", "−", e "espaço em branco" são mostrados, respectivamente para elementos positivos, elementos negativos e zeros. Para salvar os dados e variáveis utilizados durante seu trabalho, você dispõe do comando save. Ele salva seu ambiente, ou workspace com extensão .mat. >> save meu_workspace.mat Este comando salvará seu workspace no diretório corrente do MATLAB. Para recuperar o seu workspace em sua próxima sessão do MATLAB, você pode utilizar o comando load. Exemplo: >> load meu_workspace MATLAB para Iniciantes – Desmistificando o MATLAB [ 33 ] Para limpar as variáveis do ambiente, você pode utilizar o comando clear all. >> clear all Uma variação do comando clear pode ser utilizada para apagar variáveis isoladamente, por exemplo, no comando abaixo, apenas as variáveis a e b são limpas: >> clear a b MATLAB para Iniciantes – Desmistificando o MATLAB [ 34 ] ENTRADA E MANIPULAÇÃO DE DADOS Matrizes O MATLAB trabalha essencialmente com um tipo de objeto que é uma matriz numérica retangular podendo conter elementos complexos ou não. Aqui trataremos apenas das matrizes simples. Mesmo um sinal sendo contínuo no tempo, como uma forma de onda, quando ele "entra" no MATLAB ele se transforma em um sinal discreto, ou seja, o que você terá é uma coleção de pontos amostrados do sinal analógico original na forma de matrizes Uma das grandes vantagens do MATLAB é sua manipulação com matrizes ser extremamente fácil quando comparada a outras linguagens de programação. Você pode inserir uma matriz no MATLAB de diferentes formas: - Digitando a matriz na Janela de Comando, - Como resultado de um comando ou função, MATLAB para Iniciantes – Desmistificando o MATLAB [ 35 ] - Lidas a partir de um arquivos ".m", - Carregadas a partir de um arquivo de dados externo que não seja um ".m", como por exemplo, um ".txt". Veremos manipulação de arquivos (.txt e .m) mais tarde. Não se preocupe com esses tópicos agora. O modo mais fácil de inserir matrizes pequenas no MATLAB é digitando-as. Para se digitar uma matriz, você deve saber algumas coisas: - Todos os elementos devem estar envolvidos por colchetes; - Cada elemento dentro de uma mesma linha, isto é, cada coluna da matriz, deve ser separado por espaços em branco ou vírgulas; - As linhas devem ser separadas por ponto e vírgula. Como exemplo, temos a matriz M: >> M = [1 2 3; 4 5 6; 7 8 9] M = 1 2 3 4 5 6 7 8 9 MATLAB para Iniciantes – Desmistificando o MATLAB [ 36 ] A matriz M é salva na memória do computador, ficando armazenada para seu uso posterior. Em substituição ao ponto-e-vírgula, as matrizes podem ser introduzidas linha a linha através do comando "ENTER", o que é geralmente indicado para matrizes de grande dimensão, obtendo-se o mesmo resultado do método anterior. Por exemplo, conseguimos a mesma matriz M anterior digitando: >> M = [1 2 3 4 5 6 7 8 9] M = 1 2 3 4 5 6 7 8 9 MATLAB para Iniciantes – Desmistificando o MATLAB [ 37 ] Elementos das Matrizes Os elementos das matrizes podem ser formados pelo resultado de qualquer expressão do MATLAB, por exemplo: >> M = [-1.3 2 /2 3^3] M = -1.30 1.00 27.00 Para se manipular um elemento da matriz você pode utilizar seu índice entre parênteses. >> M(1) ans = -1.30 O índice de uma matriz no MATLAB começa em 1 e segue na ordem crescente até o final da mesma. Lembre-se que a indicação de um elemento, para matrizes de mais de uma linha, deve ser feita com o índice da linha seguido do índice da coluna, separados por uma virgula. Exemplo: M(1,2) será o elemento da primeira linha, segunda coluna da matriz M. MATLAB para Iniciantes – Desmistificando o MATLAB [ 38 ] Matrizes grandes podem ser geradas a partir da união de matrizes pequenas. Por exemplo, aproveitando-se a matriz M já utilizada anteriormente, teremos: >> r=[10 11 12] r = 10 11 12 >> A=[M;r] A = 1 2 3 4 5 6 7 8 9 10 11 12 Sub-matrizes podem ser extraídas de outras matrizes utilizando-se ":" como indicativo de intervalo. Por exemplo: >> B = A(1:3,:) B = 1 2 3 4 5 6 7 8 9 que resulta na seleção das três primeiras linhas e todas as colunas da matriz M. MATLAB para Iniciantes – Desmistificando o MATLAB [ 39 ] Para o MATLAB, uma matriz é um nome genérico utilizado para expressar também vetores linha (1 linha para x colunas) ou coluna (x linhas para 1 coluna) ou ainda um único escalar (1 linha e 1 coluna) ou matrizes M x N. Um elemento individual da matriz pode ser alterado incluindo os seus subscritos entre parênteses e realizando uma adição, por exemplo, com outros elementos da matriz. Por exemplo, dada a matriz B já definida anteriormente: >> B(3,3) = B(1,3) + B(3,1) B = 1 2 3 4 5 6 7 8 10 Em notação matemática, teríamos: B i , j = B(i,j) Podemos, similarmente, acessar a matriz para extrair um vetor de seus elementos, contínuo ou não. MATLAB para Iniciantes – Desmistificando o MATLAB [ 40 ] >> B(1:2,3) ans = 3 6 O comando acima define uma submatriz 2x1, ou vetor coluna, que consiste dos dois elementos da terceira coluna da matriz B. Similarmente, temos: >> B(1:2,1:2) ans = 1 2 4 5 Que define uma matriz quadrada 2x2, que contém como elementos as primeiras duas linhas e as das primeiras duas colunas da matriz B original. Para extrair todos os elementos de uma linha ou coluna, você pode utilizar o símbolo ":" no lugar de um índice, como anteriormente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 41 ] >> B(1:2,:) ans = 1 2 3 4 5 6O comando acima define uma matriz retangular 2x3, que contém a primeira e segunda linha e todas suas colunas da matriz B original. O termo end também pode ser utilizado quando deseja-se que o intervalo se estenda até o final, no lugar dos : vistos. >> C = B(3, 1: end) C = 7 8 10 É possível também extrair submatrizes utilizando-se indexação seqüencial e, para isso, deve-se utilizar os [ ]. MATLAB para Iniciantes – Desmistificando o MATLAB [ 42 ] Por exemplo: >> B B = 1 2 3 4 5 6 7 8 10 >> D = B([1 3; 2 4]) D = 1 7 4 2 A indexação segue por coluna e depois por linha, ou seja, a matriz B, para a indexação seqüencial, ficaria representada pelos índices: B = B1 B4 B7 B2 B5 B8 B3 B6 B9 Os métodos para se obterem submatrizes são importantes para extraírem colunas, linhas ou grupos de elementos originários de matrizes grandes e, com isso, possibilitar o manuseio de dados para visualização de resultados. MATLAB para Iniciantes – Desmistificando o MATLAB [ 43 ] Funções de Criação de Matrizes Para os exemplos que veremos a seguir, deve-se lembrar que: n: representa a dimensão da matriz quadrada; n,m: representam a dimensão da matriz retangular (n linhas por m colunas). ones: cria matriz de um's. >> O = ones (4) O = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 zeros: cria matriz de zeros. >> Z = zeros (4) Z = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 MATLAB para Iniciantes – Desmistificando o MATLAB [ 44 ] eye: cria matriz identidade (com 1 na diagonal principal e 0 nos outros elementos). >> E = eye (3,4) E = 1 0 0 0 0 1 0 0 0 0 1 0 rand: cria matriz de números pseudo-aleatórios uniformemente distribuídos entre 0 e 1. >> R = rand(3,5) R = 0.1419 0.7922 0.0357 0.6787 0.3922 0.4218 0.9595 0.8491 0.7577 0.6555 0.9157 0.6557 0.9340 0.7431 0.1712 MATLAB para Iniciantes – Desmistificando o MATLAB [ 45 ] magic: cria uma matriz quadrada onde as linhas e as colunas tem a mesma soma. >> M = magic(4) M = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 NaN: cria uma matriz onde as os elementos são "não número" ou Not a Number. >> N = NaN(3,2) N = NaN NaN NaN NaN NaN NaN MATLAB para Iniciantes – Desmistificando o MATLAB [ 46 ] Operações com Matrizes As operações com matrizes no MATLAB são: Transposta; Adição; Subtração; Multiplicação; Divisão à direita; Divisão à esquerda; Exponenciação; MATLAB para Iniciantes – Desmistificando o MATLAB [ 47 ] Transposta Para se transpor uma matriz, ou seja, transformar linhas em colunas e vice-versa, utiliza-se, no MATLAB, o caractere apóstrofo ( ' ) ao final da matriz ou da variável que a representa. Exemplo: >> B B = 1 2 3 4 5 6 7 8 10 >> B' ans = 1 4 7 2 5 8 3 6 10 Para vetores linha, a operação transposta torna-os vetores colunas, e vice-versa. MATLAB para Iniciantes – Desmistificando o MATLAB [ 48 ] Exemplo: >> X = [1 0 11] X = 1 0 11 >> X' ans = 1 0 11 Adição e Subtração A adição e a subtração de matrizes são indicadas, respectivamente, por "+" e "-", similarmente aos escalares já vistos. Importante: para operações de soma e subtração de matrizes faz-se necessário que elas possuam as mesmas dimensões, ou seja, número de linhas e colunas iguais. Por exemplo, a soma com as matrizes mostradas acima, B + X, não é possível e nem está correta porque B é 3x3 e X é 1x3. Porém se definirmos uma nova matriz A também 3x3, teremos: MATLAB para Iniciantes – Desmistificando o MATLAB [ 49 ] >> A= ones(3) A = 1 1 1 1 1 1 1 1 1 >> C= A + B C = 2 3 4 5 6 7 8 9 11 Pode-se também utilizar um operador escalar para realizar a adição e a subtração com matrizes, ou seja, estamos falando de uma matriz 1x1. Neste caso, o escalar é adicionado ou subtraído de todos os elementos da matriz. Por exemplo, utilizando-se o vetor X definido anteriormente, temos: MATLAB para Iniciantes – Desmistificando o MATLAB [ 50 ] >> X X = 1 0 11 >> Y = X − 3 Y = -2 -3 8 Multiplicação A multiplicação de matrizes é indicada por "*" assim também como a multiplicação entre escalares. Exemplo: >> X X = 1 0 11 >> Y Y = -2 -3 8 >> X*Y' ans = 86 MATLAB para Iniciantes – Desmistificando o MATLAB [ 51 ] Lembrando-se da matemática, a multiplicação de duas matrizes só é possível se o número de colunas da primeira for igual ao número de linhas da segunda. Como o resultado é um escalar, é evidente que o resultado da multiplicação Y'*X será o mesmo. Também sabemos que um escalar pode multiplicar qualquer matriz, independentemente de sua dimensão. Como exemplo, vamos utilizar nosso escalar pi definido no começo do livro: >> pi*X ans = 3.1416 0 34.5575 A multiplicação escalar também é possível através dos operadores ponto-asterisco ".*" MATLAB para Iniciantes – Desmistificando o MATLAB [ 52 ] Exemplo: >> A = [1 2; 3 4] A = 1 2 3 4 >> B = [5 6; 7 8] B = 5 6 7 8 >> A.*B ans = 5 12 21 32 Divisão Existem dois símbolos possíveis para divisão de matrizes no MATLAB "\" e "/". Se A é uma matriz quadrada não singular (quando possui matriz inversa), então A/B e A\B correspondem respectivamente à A*inv(B) e inv(A)*B, mas o resultado é obtido diretamente. Por exemplo: MATLAB para Iniciantes – Desmistificando o MATLAB [ 53 ] >> A/B ans = 3.0000 -2.0000 2.0000 -1.0000 >> A\B ans = -3 -4 4 5 Lembrando que a inversa de uma matriz, ou no MATLAB, inv(A), é a matriz que, quando multiplicada pela primeira, resulta na matriz identidade. A determinação de uma matriz inversa de ordem n é dada através da multiplicação por uma matriz B genérica, sendo que o resultado deverá ser uma matriz identidade. Na matemática, temos: Para indicar a matriz inversa de A utiliza-se a notação A-1 MATLAB para Iniciantes – Desmistificando o MATLAB [ 54 ] >> A A = 1 2 3 4 >> inv(A) ans = -2.0000 1.0000 1.5000 -0.5000 >> A * inv(A) ans = 1.0000 0 0.0000 1.0000 A divisão escalar também pode ser realizada através do operador "./". A divisão escalar, para relembrar, faz a divisão de cada elemento da primeira matriz pelo elemento que encontra-se na mesma posição da segunda matriz, ou seja, A1,1/B1,1 e assim, sucessivamente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 55 ] Por exemplo: >> A A = 1 2 3 4 >> B B = 5 6 7 8 >> A./B ans = 0.2000 0.3333 0.4286 0.5000 Exponenciação A função de exponenciação é muito útil para em diversas aplicações e pode ser empregada no MATLAB tanto em números escalares quanto em matrizes. A expressão A^n eleva A à n-ésima potência e é possível apenas se A é matrizquadrada e n um escalar sendo que a exponenciação é interpretada como n multiplicações sucessivas. Por exemplo: MATLAB para Iniciantes – Desmistificando o MATLAB [ 56 ] >> A A = 1 2 3 4 >> A^3 ans = 37 54 81 118 A potência de um escalar também pode ser obtida com o operador ".^". Como no exemplo abaixo: >> A.^B ans = 1 64 2187 65536 MATLAB para Iniciantes – Desmistificando o MATLAB [ 57 ] Operações Comparativas Estes são os seis operadores usados para comparação de valores, incluindo matrizes com as mesmas dimensões: < menor <= menor ou igual > maior >= maior ou igual == igual ~= diferente any verdadeiro se algum elemento não é zero all verdadeiro se todos os elementos são não zero A comparação é feita entre os pares de elementos correspondentes e o resultado é uma matriz composta dos números um e zero, com 1 representando VERDADEIRO e 0, FALSO. Por exemplo: >> 2 + 2 ~= 4 ans = 0 Pode-se usar também os operadores lógicos & (E − AND) e | (OU − OR). MATLAB para Iniciantes – Desmistificando o MATLAB [ 58 ] Por exemplo: >> 1== 1 & 4 == 3 ans = 0 >> 1== 1 | 4 == 3 ans = 1 Se utilizarmos matrizes, temos: >> A == B ans = 0 0 0 0 >> A ~= B ans = 1 1 1 1 MATLAB para Iniciantes – Desmistificando o MATLAB [ 59 ] MANIPULAÇÃO DE VETORES E MATRIZES O MATLAB é uma ferramenta completa para se trabalhar com matrizes, permitindo a manipulação de linhas, colunas, elementos individuais e partes das mesmas. Vetores Os dois pontos, ":", conforme visto, é um caractere importante no MATLAB e seu uso indica "continuidade". A declaração abaixo gera um vetor linha contendo os números de 0 a 10 com incremento unitário. >> x = 0 : 10 x = 0 1 2 3 4 5 6 7 8 9 10 MATLAB para Iniciantes – Desmistificando o MATLAB [ 60 ] Outros incrementos podem ser utilizados, positivos ou negativos. >> y = 0 : 0.1 : 1 y = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 >> y = 1 : -0.1 : 0 y = 1.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000 0.2000 0.1000 0 Pode-se, também, gerar vetores usando a função linspace, como no exemplo abaixo. linspace: retorna um vetor linearmente espaçado entre seus elementos. Por exemplo, o comando abaixo criará um vetor linearmente espaçado entre 0 e 1 contendo 5 elementos. A sintaxe do comando linspace é: (ValorInicial, ValorFinal, NúmeroElementos) MATLAB para Iniciantes – Desmistificando o MATLAB [ 61 ] >> k = linspace(0,1,5) k = 0 0.2500 0.5000 0.7500 1.0000 Se o número de elementos desejados for omitido, o MATLAB assume N = 100. Por exemplo, digite o comando abaixo e verifique sua saída: >> k = linspace(0,1) logspace: retorna um vetor espaçado em escala logarítmica entre seus elementos. >> logspace(1,5,5) ans = 10 100 1000 10000 100000 MATLAB para Iniciantes – Desmistificando o MATLAB [ 62 ] Funções de Consulta e Manipulação de Matrizes det: retorna o determinante de uma matriz. Para uma matriz quadrada 2 x 2 tem-se: det(A) = a11* a22 − a21* a12 Exemplo: >> A A = 1 2 3 4 >> det(A) ans = -2 Lembremos que, entre outras propriedades: - Determinante de uma matriz identidade: det(eye) = 1 - Determinante de uma matriz nula: det(N) = 0 - Se uma linha ou coluna for nula: det(N) = 0 - Uma matriz A e sua transposta contêm o mesmo determinante: det(A’) = det(A) MATLAB para Iniciantes – Desmistificando o MATLAB [ 63 ] inv: conforme já visto, este comando retorna a matriz inversa. Supondo A = [3 1; 2 1], pelos cálculos matemáticos, teríamos uma matriz genérica B = [a b; c d] sendo a matriz inversa da matriz A. Portanto: A* B 3 1 2 1 a b c d 1 0 0 1 3a c 3b d 2a c 2b d 1 0 0 1 Assim: 3a c 3b d 2a c 2b d 1 0 0 1 e Resolvendo os sistemas encontramos os valores: a = 1, b = –1, c = –2 e d = 3 MATLAB para Iniciantes – Desmistificando o MATLAB [ 64 ] Portanto a matriz B, que é a inversa da matriz A, seria formada pelos elementos: B 1 1 2 3 Fazendo a prova, temos que B*A resulta na matriz identidade: B * A 1 1 2 3 3 1 2 1 1 0 0 1 Portanto a matriz A é inversível e sua inversa é a matriz: B A1 1 1 2 3 Para resolver esse mesmo problema no MATLAB, teríamos simplesmente: >> A = [3 1; 2 1] A = 3 1 2 1 >> B=inv(A) B = 1.0000 -1.0000 -2.0000 3.0000 MATLAB para Iniciantes – Desmistificando o MATLAB [ 65 ] reshape: faz um redimensionamento de uma matriz, mantendo o número original de elementos. A sintaxe do comando reshape(a, m, n), sendo a = matriz, m,n = novas dimensões da matriz: >> a1 = 1:6 a1 = 1 2 3 4 5 6 >> a2 = reshape(a1, 2, 3) a2 = 1 3 5 2 4 6 >> a2 = reshape(a1, 3, 2) a2 = 1 4 2 5 3 6 Para que o comando reshape funcione corretamente, o mesmo número de elementos da matriz original deve ser mantido no formato final, ou seja, uma matriz 3x2 deve manter 6 elementos em qualquer formato. MATLAB para Iniciantes – Desmistificando o MATLAB [ 66 ] numel: retorna o número de elementos da matriz. >> N = numel(a2) N = 6 size: retorna um vetor contendo o número de elementos de linha e de colunas da matriz. >> a2 a2 = 1 4 2 5 3 6 >> size(a2) ans = 3 2 MATLAB para Iniciantes – Desmistificando o MATLAB [ 67 ] lenght: retorna o comprimento do vetor ou dimensão máxima da matriz. Equivale a max (size (a2)) >> a2 a2 = 1 4 2 5 3 6 >> length(a2) ans = 3 >> max(size(a2)) ans = 3 sort: coloca os elementos da matriz em ordem crescente. Sintaxe: A = sort (B) ou A = sort(B, Dim) Sendo: B = matriz Dim = dimensão a ser ordenada. Case não exista, a matriz é ordenada por coluna. Para coluna, Dim = 1. Para linha, Dim = 2. MATLAB para Iniciantes – Desmistificando o MATLAB [ 68 ] >> B = magic (3) B = 8 1 6 3 5 7 4 9 2 >> sort (B) ans = 3 1 2 4 5 6 8 9 7 >> sort (B,2) %ordem crescente por linha ans = 1 6 8 3 5 7 2 4 9 Para se colocar a matriz em ordem decrescente, pode-se utilizar a função sort combinada com a função fliplr (inverte a ordem dos elementos da esquerda para a direita) ou flipud (inverte a ordem dos elementos de cima para baixo). MATLAB para Iniciantes – Desmistificando o MATLAB [ 69 ] fliplr: inverte a ordem dos elementos da esquerda para a direita. >> B B = 8 1 6 3 5 7 4 9 2 >> sort(B) ans = 3 1 2 4 5 6 8 9 7 >> fliplr(sort(B)) %inverte a ordem da direita para esquerda ans = 2 1 3 6 5 4 7 9 8 MATLAB para Iniciantes – Desmistificando o MATLAB [ 70 ] flipud: inverte a ordem dos elementosde cima para baixo. >> B B = 8 1 6 3 5 7 4 9 2 >> sort(B) ans = 3 1 2 4 5 6 8 9 7 >> flipud(sort(B)) %ordem decrescente por coluna ans = 8 9 7 4 5 6 3 1 2 Você viu um comando % nos exemplos anteriores. Ele é utilizado para se fazer comentários na linha de comando ou em arquivos, ou seja, o MATLAB ignora o texto escrito após o símbolo do percentual até encontrar o final da linha. MATLAB para Iniciantes – Desmistificando o MATLAB [ 71 ] rref: retorna uma matriz com a solução de um sistema linear. Como exemplo, sendo o seguinte sistema linear: No MATLAB, teríamos a representação deste sistema como a matriz: >> A = [1 1 2 9; 2 4 -3 1; 3 6 -5 0] A = 1 1 2 9 2 4 -3 1 3 6 -5 0 >> rref(A) ans = 1 0 0 1 0 1 0 2 0 0 1 3 Ou seja, a solução do sistema é dada pela última coluna da matriz resultante do comando rref, ou seja, x = 1, y = 2 e z = 3. MATLAB para Iniciantes – Desmistificando o MATLAB [ 72 ] find: utilizado para localizar um determinado elemento em uma matriz. >> find(A==-3) ans = 8 >> [r, c] = find(A==-3) r = 2 c = 3 >> A pesquisa com o find pode utilizar qualquer símbolo para comparação visto anteriormente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 73 ] FUNÇÕES PARA ANÁLISES DE DADOS mean: retorna a média dos pontos apresentados. median: retorna a mediana dos pontos. std: retorna o desvio padrão. var: retorna a variância dos dados apresentados. max: retorna o valor máximo dos dados apresentados. min: retorna o mínimo valor dos dados apresentados. sum: retorna a soma de todos os dados. prod: retorna o produto de todos os dados apresentados. MATLAB para Iniciantes – Desmistificando o MATLAB [ 74 ] >> matriz=rand(1,5) matriz = 0.4018 0.0760 0.2399 0.1233 0.1839 >> mean(matriz) ans = 0.2050 >> median(matriz) ans = 0.1839 >> std(matriz) ans = 0.1262 >> var(matriz) ans = 0.0159 MATLAB para Iniciantes – Desmistificando o MATLAB [ 75 ] >> max(matriz) ans = 0.4018 >> min(matriz) ans = 0.0760 >> sum(matriz) ans = 1.0249 >> prod(matriz) ans = 1.6609e-004 Você talvez queira gerar submatrizes a partir de linhas e/ou colunas não contínuas de uma matriz. Para as matrizes, os subscritos vetores permitem o acesso a submatrizes contínuas e descontínuas. MATLAB para Iniciantes – Desmistificando o MATLAB [ 76 ] >> A = [1 2 3 4 5;6 7 8 9 10;11 12 13 14 15; 16 17 18 19 20] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> B=[A(:, 1:2:4), A(:,5)] B = 1 3 5 6 8 10 11 13 15 16 18 20 O mesmo procedimento pode ser aplicado para linhas ou colunas, montando-se as matrizes conforme os dados forem necessários. As matrizes no MATLAB podem assumir mais do que 2 dimensões, ou seja, no MATLAB as matrizes podem ser multidimensionais. MATLAB para Iniciantes – Desmistificando o MATLAB [ 77 ] Para isso, você pode criá-las à partir das matrizes já vistas, acrescentando uma ou mais dimensões a sua forma: Figura 4: Esquemático de matrizes tridimensionais Exemplo: >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> A(:,:,2)=[-1 -2 -3; -4 -5 -6] A(:,:,1) = 1 2 3 4 5 6 A(:,:,2) = -1 -2 -3 -4 -5 -6 MATLAB para Iniciantes – Desmistificando o MATLAB [ 78 ] >> A A(:,:,1) = 1 2 3 4 5 6 A(:,:,2) = -1 -2 -3 -4 -5 -6 Você pode estender este conceito para quantas dimensões forem necessárias! As operações matriciais não podem ser realizadas com matrizes multidimensionais, como por exemplo, a multiplicação matricial (A*A). MATLAB para Iniciantes – Desmistificando o MATLAB [ 79 ] COMO CONSTRUIR GRÁFICOS NO MATLAB A construção de gráficos no MATLAB é mais uma de suas facilidades! Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais com qualquer tipo de escala e coordenada. Existe no MATLAB uma vasta biblioteca de comandos gráficos. MATLAB para Iniciantes – Desmistificando o MATLAB [ 80 ] Gráficos Bidimensionais Estes são os comandos para plotar gráficos bidimensionais: plot Plotar linear. loglog Plotar em escala loglog. semilogx Plotar em semilog. semilogy Plotar em semilog. fill Desenhar polígono 2D. polar Plotar em coordenada polar. bar Gráfico de barras. stem Seqüência discreta. stairs Plotar em degrau. errorbar Plotar erro. hist Plotar histograma. rose Plotar histograma em ângulo. compass Plotar em forma de bússola. feather Plotar em forma de pena. fplot Plotar função. comet Plotar com trajetória de cometa. MATLAB para Iniciantes – Desmistificando o MATLAB [ 81 ] Comando plot Se Y é um vetor, plot(Y) produz um gráfico linear dos elementos de Y versos o índice dos mesmos elementos. Por exemplo, para plotar os números [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0.14], entre com o vetor e execute o comando plot: >> Y = [0.0, 0.48, 0.84, 1.0, 0.91, 0.6, 0.14]; >> plot(Y) >> e o resultado é mostrado na Janela Gráfica: Figura 5: Gráfico de um vetor de números reais MATLAB para Iniciantes – Desmistificando o MATLAB [ 82 ] Se X e Y são vetores com dimensões iguais, o comando plot(X,Y) produz um gráfico bidimensional dos elementos de X versos os elementos de Y, por exemplo: >> t = 0:0.05:4*pi; >> y = sin(t); >> plot(t,y) >> resulta em: Figura 6: Gráfico da função seno MATLAB para Iniciantes – Desmistificando o MATLAB [ 83 ] O MATLAB pode também plotar múltiplas linhas em apenas um gráfico. Existem duas maneiras, na primeira é usado apenas dois argumentos, como em plot(X,Y), onde X e/ou Y são matrizes. Então: - Se Y é uma matriz e X um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de Y versos o vetor X. - Se X é uma matriz e Y é um vetor, plot(X,Y) plota sucessivamente as linhas ou colunas de X versos o vetor Y. - Se X e Y são matrizes com mesma dimensão, plot(X,Y) plota sucessivamente as colunas de X versos as colunas de Y. - Se Y é uma matriz, plot(Y) plota sucessivamente as colunas de Y versos o índice de cada elemento da linha de Y. A segunda e mais fácil maneira de plotar gráficos com múltiplas linhas é usando o comando plot com múltiplos argumentos. Por exemplo: >> plot(t, sin(t), t, cos(t), t, sin(t + pi), t, cos(t + pi)) MATLAB para Iniciantes – Desmistificando o MATLAB [ 84 ] Figura 7: Gráfico de múltiplas funções trigonométricas na mesma janela MATLAB para Iniciantes – Desmistificando o MATLAB [ 85 ] Estilos de Linha e Símbolo Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser controlados ou modificados. Por exemplo: >> X = 0:0.05:1; >> subplot(1,2,1), plot(X,X.^2,'k*') >> subplot(1,2,2), plot(X,X.^2,'k -') Figura 8: Exemplo de subplot com uma linha e duas colunas MATLAB para Iniciantes – Desmistificando o MATLAB [ 86 ] Comando subplot O comando subplot visto anteriormente, conforme você deve ter notado, pode ser utilizado para gerar vários gráficos dentro da mesma janela.Assim, o subplot trabalha com a sintaxe: subplot(quantidade_de_linhas, quantidade_de_colunas, posição_plot) Ou seja, o subplot trata a janela de plotagem como uma matriz, você precisa falar para ele em quantas linhas e em quantas colunas essa janela será dividida e em qual "espaço" você quer colocar seu gráfico. Você pode dividir a janela em quantas partes desejar, porém, cada vez os espaços para os gráficos ficam menores. MATLAB para Iniciantes – Desmistificando o MATLAB [ 87 ] Outros tipos de linhas, pontos e cores também podem ser usados: TIPO DE LINHA _ _______________ -- -------------------- -. -.-.-.-.-.-.-.-.-.-.-.-. . .............................. TIPO DE PONTO . ....................... * * * * * * * * * ° ° ° °° ° ° ° ° ° ° + ++++++++++ x xx x x x x x x CORES y amarelo m lilás c azul claro r vermelho g verde b azul escuro w branco k preto MATLAB para Iniciantes – Desmistificando o MATLAB [ 88 ] Comando figure Para cada comando plot que você utiliza, a figura na janela é substituída. Para que você não perca seus dados plotados e possa ter múltiplas janelas de gráficos, você pode utilizar o comando figure. >> figure Para cada comando figure dado, uma nova janela de gráfico é criada. A janela corrente para plotagem será a última ou aquela que você clicar por último, por isso, tenha cuidado! Figura 9: Resultado do comando figure MATLAB para Iniciantes – Desmistificando o MATLAB [ 89 ] Comando bar O comando bar(X) mostra um gráfico de barras dos elementos do vetor X, e não aceita múltiplos argumentos. >> M = magic(4) M = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> bar(M) >> figure >> bar(M,'stacked') >> Você também pode plotar os gráficos em barras na horizontal: >> barh(M) >> figure >> barh(M,'stacked') MATLAB para Iniciantes – Desmistificando o MATLAB [ 90 ] Outros comandos de plot: >> area(M) >> stairs(M(1,:)) >> pie(M) >> stem(M(1,:)) Escala Logarítmica e Coordenada Polar O uso de loglog, semilogx, semilogy e polar é idêntico ao uso de plot. Estes comandos são usados para plotar gráficos em diferentes coordenadas e escalas: - polar(Theta,R) plota em coordenadas polares o ângulo THETA, em radianos, versos o raio R; - loglog plota usando a escala log10 x log10; - semilogx plota usando a escala semi-logarítmica. O eixo x é log10 e o eixo y é linear; - semilogy plota usando a escala semi-logarítmica. O eixo x é linear e o eixo y é log10; MATLAB para Iniciantes – Desmistificando o MATLAB [ 91 ] Plotando Gráficos Tridimensionais e Contornos Estes são alguns comandos para plotar gráficos tridimensionais e contornos. plot3 Plotar em espaço 3D. fill3 Desenhar polígono 3D. comet3 Plotar em 3D com trajetória de cometa. contour Plotar contorno 2D. contour3 Plotar contorno 3D. clabel Plotar contorno com valores. quiver Plotar gradiente. mesh Plotar malha 3D. meshc Combinação mesh/contour. surf Plotar superfície 3D. surfc Combinação surf/contour. surfil Plotar superfície 3D com iluminação. slice Plot visualização volumétrica. cylinder Gerar cilindro. sphere Gerar esfera. O comando mesh(X,Y,Z) cria uma perspectiva tridimensional plotando os elementos da matriz Z em relação ao plano definindo pelas matrizes X e Y. MATLAB para Iniciantes – Desmistificando o MATLAB [ 92 ] Por exemplo: >> [X,Y] = meshgrid(-2:0.2:2, -2:0.2:2); >> Z = X.* exp(-X.^2 - Y.^2); >> mesh(X,Y,Z) Figura 10: Gráfico tridimensional com a função mesh E o comando contour(Z,10) mostra a projeção da superfície acima no plano xy com 10 iso-linhas: MATLAB para Iniciantes – Desmistificando o MATLAB [ 93 ] Figura 11: Gráfico bidimensional com a função com a função contour Outros exemplos: Digite os comandos abaixo e veja outros tipos de gráficos que surgirão. Exemplo 1: >>x = -4*pi: 0.1: 4*pi; >> y = -4*pi: 0.1: 4*pi; >>plot3(cos(x), sin(y), (x+y)); MATLAB para Iniciantes – Desmistificando o MATLAB [ 94 ] Exemplo 2: >>x = -2: 0.2: 2; >>y = -5: 0.2: 5; >>[Mx, My] = meshgrid(x,y); >>Mz = exp(sin(Mx)) .* cos(My); >>mesh(Mx, My, Mz); >>surf (Mx, My, Mz); >>meshc(Mx, My, Mz); >>meshz(Mx, My, Mz); >>waterfall(Mx, My, Mz); >>surfc(Mx, My, Mz); MATLAB para Iniciantes – Desmistificando o MATLAB [ 95 ] Anotações no Gráfico O MATLAB possui comandos de fácil utilização para adicionar informações em um gráfico: title Título do gráfico. xlabel Título do eixo-X. ylabel Título do eixo-Y. zlabel Título do eixo-Z. text Inserir anotação no gráfico. gtext Inserir anotação com o "mouse". grid Linhas de grade. Por exemplo: >> fplot('sin', [-pi pi]) >> title('Gráfico da função f(x)=seno(x), -pi<x<pi') >> xlabel('x') >> ylabel('f(x)') >> grid MATLAB para Iniciantes – Desmistificando o MATLAB [ 96 ] Figura 12: Exemplo de anotações em gráficos MATLAB para Iniciantes – Desmistificando o MATLAB [ 97 ] Funções Matemáticas Comuns Abaixo, encontram-se algumas funções matemáticas mais comumente utilizadas. Tabela 2: Funções matemáticas úteis Função Descrição abs(x) Módulo de x acos(x) Arco cujo coseno é x cos(x) Coseno de x ( x em radianos) cosh(x) Coseno hiperbólico de x exp(x) Exponencial : e x gcd(x, y) MDC dos inteiros x e y imag(x) Parte imaginária de um complexo lcm(x, y) MMC dos inteiros x e y log(x) Logaritmo natural de x log10(x) Logaritmo de x na base 10 real(x) Parte real de x round (x) Arredonda o valor de x sin(x) Seno de x (em radianos) sinh(x) Seno hiperbólico de x sqrt(x) Raiz quadrada de x tan(x) Tangente de x MATLAB para Iniciantes – Desmistificando o MATLAB [ 98 ] Complementação sobre Gráficos Tabela 3: Comandos úteis para gráficos Função Descrição xlabel('Texto x') Coloca 'Texto x' no eixo x do gráfico ativo. ylabel('Texto y') Coloca 'Texto y' no eixo y do gráfico ativo. title('Titulo') Coloca 'Titulo' no gráfico ativo. figure Abre uma nova janela de gráfico. grid Coloca as linhas de grid no gráfico ativo. legend('leg 1', 'leg 2') Coloca legenda no gráfico na ordem das linhas plotadas. axis([xmenor xmaior ymenor ymaior]) Redimensiona a janela do gráfico para as coordenadas dadas. subplot(qtlinhas, qtcolunas, posição) Faz uma divisão matricial da janela de gráfico e desenha o gráfico em questão na posição desejada. hold on Congela o gráfico ativo para que outros plots possam sobrepor o atual. Na sobreposição, se necessário, os eixos são ajustados automaticamente. hold off Descongela o gráfico ativo. Após este comando, um novo comando de plot ocasionará a substituição do atual. MATLAB para Iniciantes – Desmistificando o MATLAB [ 99 ] Funções para Plot de Imagens Para se plotar ou exibir imagens, você possui o comando imshow. Teste os comandos abaixo. >> foto1=imread('cameraman.tif'); >> foto2=imread('peppers.png'); >> subplot(1,2,1) >> imshow(foto1) >> subplot(1,2,2) >> imshow(foto2) No exemplo acima, você encontrou dois comandos básicos para manipulação de imagens: imread, que lê a imagem e a carrega como matriz numérica, e o comando imshow, que exibe a imagem carregada. Outros comandos de manipulação de imagens estão disponíveis no MATLAB incluindo comandos de processamento das mesmas, como filtros, extração de bordas, etc, porém eles não fazem parte do escopo desta parte do curso. MATLAB para Iniciantes – Desmistificando o MATLAB [ 100 ] PROGRAMAÇÃO NO MATLAB O MATLAB também dispõe de umconjunto de funções para programação e execução de códigos lógicos muito parecido com a linguagem C. Assim, estruturas de decisão, repetição e modularização da linguagem também estão disponíveis para a utilização e otimização das funcionalidades do MATLAB. Comandos da Linguagem Estrutura de repetição "for" Permite que um grupo de comandos seja repetido um número fixo de vezes. Sua sintaxe é dada por: for <var = início : fim> <comandos> end MATLAB para Iniciantes – Desmistificando o MATLAB [ 101 ] Exemplo: >> for a = 1:5 y = 2* a end y = 2 y = 4 y = 6 y = 8 y = 10 MATLAB para Iniciantes – Desmistificando o MATLAB [ 102 ] Para usar dois comandos "for" (for aninhado) >> for m = 1:4 for n = 1:3 a(m, n) = 2; end end >> disp(a) 2 2 2 2 2 2 2 2 2 2 2 2 O comando disp(a) apresenta o conteúdo da variável a. O "passo" do comando "for" também pode ser diferente de 1. Para isso, faz-se necessário a especificação do passo a ser dado. MATLAB para Iniciantes – Desmistificando o MATLAB [ 103 ] Exemplo: >> for a = 1:2:10 y = 2* a end y = 2 y = 6 y = 10 y = 14 y = 18 O intervalo também pode ser decrescente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 104 ] Exemplo: >> for a = 10:-2:1 y = 2* a end y = 20 y = 16 y = 12 y = 8 y = 4 Outros exemplos de uso do for aplicado a vetores e matrizes: MATLAB para Iniciantes – Desmistificando o MATLAB [ 105 ] >> M=rand(1,5) M = 0.9561 0.5752 0.0598 0.2348 0.3532 >> for i = 1:length(M) M(i) end ans = 0.9561 ans = 0.5752 ans = 0.0598 ans = 0.2348 ans = 0.3532 MATLAB para Iniciantes – Desmistificando o MATLAB [ 106 ] Para percorrer os elementos de matrizes, nós precisamos do chamado for aninhado, que é um for dentro do outro: >> for linha=1:size(M,1) for coluna=1:size(M,2) M(linha,coluna) end end ans = 0.8212 ans = 0.1690 ans = 0.6477 ans = 0.0154 ans = 0.6491 ans = 0.4509 ans = 0.0430 ans = 0.7317 ans = 0.5470 MATLAB para Iniciantes – Desmistificando o MATLAB [ 107 ] No exemplo acima, você visualizou o resultado do for que exibiu todos os elementos da linha 1 (todas as colunas da linha 1) para depois mudar para a linha 2 e assim sucessivamente. O for interno tem que ser executado completamente para que o for externo possa ser incrementado novamente, até o término do comando. Você pode aninhar quantos for precisar, apenas lembre-se da ordem de execução dos mesmos: de "dentro" para "fora". Estrutura de repetição "while" Similar ao comando for, o comando while também executa um looping controlado. Sintaxe: while <expressão> <comandos> end MATLAB para Iniciantes – Desmistificando o MATLAB [ 108 ] Exemplo: >> num = 0; >> a = 1; >> while (1+a) < 6 a = a + 1 num = num + 1 end a = 2 num = 1 a = 3 num = 2 a = 4 num = 3 a = 5 num = 4 MATLAB para Iniciantes – Desmistificando o MATLAB [ 109 ] Cuidado com o comando while pois quem controla sua parada, diferentemente do for, é você com o incremento ou decremento da variável de controle. Se esse controle não for executado corretamente, o MATLAB pode entrar em while(true), que nunca tem fim, que o muitos chama hoje de "efeito Matrix". Estrutura de decisão "if - else – end" Utilizado para decisão e conseqüente desvio de fluxo do programa, a estrutura "if – else – end" pode também ser utilizada sem o comando "else" intermediário. Sintaxe (sem o "else"): if <expressão> <comandos> end MATLAB para Iniciantes – Desmistificando o MATLAB [ 110 ] Exemplo: >> a = input('digite o valor de a ==> '); digite o valor de a ==> 1 >> b = input('digite o valor de b ==> '); digite o valor de b ==> 2 >> if a > 5 b = a + 1 end Neste caso, se o valor de a lido for menor que 5, o valor de b impresso será o mesmo que foi lido. Se o valor de a lido for maior que 5, então o valor de b impresso será igual ao de a + 1. Sintaxe (com o "else"): If <expressão> <comandos> else <comandos> end MATLAB para Iniciantes – Desmistificando o MATLAB [ 111 ] Exemplo: >> a = input('digite o valor de a ==> '); digite o valor de a ==> 4 >> b = input('digite o valor de b ==> '); digite o valor de b ==> 5 >> if a > 5 b = a + 1; else b end b = 5 O else será executado somente se a condição testada por if não for satisfeita. Uma observação importante a ser feita é que o else sempre diz respeito ao último if imediatamente anterior a ele. Para o MATLAB, esse problema fica minimizado, pois o end só aparece no final da estrutura, para outras linguagens, esse problema torna-se mais evidente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 112 ] Estrutura de decisão "switch case" Quando se tem várias opções de escolha, o uso do if-else- end não se torna muito adequado. Para isso, tem-se estrutura switch case que, funcionalmente, assemelha-se ao comando anterior. Exemplo: >> x = 3.5; >> unidade = 'm'; >> switch unidade % Converte x para centímetros case {' inch',' in'} y = x * 2.54; case {'feet', 'ft' } y = x * 2.54 * 12; case {'metro','m'} y = x/100; otherwise disp('acabou') end >> disp( 'y = '); y = >> disp(y) 0.0350 MATLAB para Iniciantes – Desmistificando o MATLAB [ 113 ] O resultado será y = 0.0350, que representa a conversão de 3.5 metros centímetros. A lógica dentro do comando case é a OU−OR. Tratamento de Erros em Programação – uso do "try - catch" Quando você cria um programa complexo, normalmente, você precisa garantir que seu programa não feche ou pare sua execução caso um erro inesperado ou mesmo previsível, ocorra. Para isso, a estrutura try-catch é utilizada. Normalmente, o bloco try é executado. Dentro dele, você coloca o código que deseja executar e que pode ser passível de erro em tempo de execução. Caso um erro nesse código ocorra, o bloco catch é executado. Dentro do bloco catch você pode colocar mensagens de erro, entrada de dados, jumps, etc, ou seja, tudo o que você julgar necessário para que seu programa continue sendo executado corretamente. Se você não utilizar MATLAB para Iniciantes – Desmistificando o MATLAB [ 114 ] o catch, a mensagem de erro do MATLAB é suprimida também mas seu processamento segue normalmente, não há o tratamento do erro. Ao comando catch pode ser adicionado o me, que detém o erro que o MATLAB identificou. Através dele você pode criar arquivos de log para análise posterior do erro encontrado e corrigir ou refiná-lo seu código. >> try lo(10) catch me disp('meu erro') disp (me) end meu erro MException object with properties: identifier: 'MATLAB:UndefinedFunction' message: 'Undefined function or method 'lo' for input arguments of type 'double'.' stack: [0x1 struct] cause: {} >> >> try lo(10) end MATLAB para Iniciantes – Desmistificando o MATLAB [ 115 ] O comando me é uma estrutura, ou seja, você pode visualizar ou utilizar separadamente seus componentes: >> me.identifier ans = MATLAB:UndefinedFunction >> me.message ans = Undefined function or method 'lo' for input argumentsof type 'double'. MATLAB para Iniciantes – Desmistificando o MATLAB [ 116 ] Tipos de Variáveis Até agora, no MATLAB, nós vimos basicamente o tipo de dado double, aplicado a valor numérico. Porém, o MATLAB apresenta outros tipos de variáveis: string (ou cadeia de caracteres, struct (ou estrutura) e cell array (célula de dados). string Nós já vimos manipulação de texto quando utilizamos os comandos de títulos e legendas de gráficos. Para o MATLAB identificar um texto e poder diferenciá-lo de uma variável, o texto deve vir entre aspas simples. >> texto='MATLAB' texto = MATLAB MATLAB para Iniciantes – Desmistificando o MATLAB [ 117 ] A palavra MATLAB é um vetor de caracteres com 6 elementos, ou seja, um char array 1x6. >> whos texto Name Size Bytes Class Attributes texto 1x6 12 char Para visualizar cada elemento em seu código ASCII, você pode digitar: >> double(texto) ans = 77 65 84 76 65 66 A tabela ASCII é o código que está por traz de cada caracter legível que conhecemos. Para visualizar a tabela, você pode executar o comando: >> for i=1:255 I(i) = char(i); end >> I MATLAB para Iniciantes – Desmistificando o MATLAB [ 118 ] O comando char exibe o valor numérico em seu formato texto. Para concatenar textos na linha, podemos utilizar: >> texto1= 'BOM CURSO' texto1 = BOM CURSO >> texto2= ' DE MATLAB' texto2 = DE MATLAB >> texto3= [texto1 texto2 '!!'] texto3 = BOM CURSO DE MATLAB!! Para concatenar textos na coluna é só inserir o ponto-e- vírgula ";" entre os elementos, lembrando apenas que ele trata os textos como vetores, e por esse motivo eles devem ter a mesma dimensão. MATLAB para Iniciantes – Desmistificando o MATLAB [ 119 ] >> txt1 = 'oi' txt1 = oi >> txt2='voce' txt2 = voce >> txt3=[txt1;txt2] ??? Error using ==> vertcat CAT arguments dimensions are not consistent. Para corrigir este problema, você pode utilizar a função strvcat que ajusta os tamanhos dos textos inserindo espaços para completá-los. >> txt3 = strvcat(txt1,txt2) txt3 = oi voce >> size(txt3) ans = 2 4 MATLAB para Iniciantes – Desmistificando o MATLAB [ 120 ] struct A struct ou estrutura permite que você una valores de tipos diferentes na mesma variável, podendo identificá-lo por nomes diferentes: >> str = struct('Nome',{'MATLAB'},'Dia',{07},'Horas',{[09 12 13 16]}) str = Nome: 'MATLAB' Dia: 7 Horas: [9 12 13 16] >> whos str Name Size Bytes Class Attributes str 1x1 424 struct >> str.Nome ans = MATLAB >> str.Dia ans = 7 >> str.Horas ans = 9 12 13 16 MATLAB para Iniciantes – Desmistificando o MATLAB [ 121 ] Você pode manipular as variáveis internas da estrutura normalmente, basta utilizar o ponto que significa "pertence" ou "está contido". Este tipo de variável proporciona uma grande liberdade para tratamento dos dados, mantendo-os em um mesmo índice para controle: >>str(2) = struct('Nome',{'MATLAB2'},'Dia',{08},'Horas',{[13 15 17 19]}) str = 1x2 struct array with fields: Nome Dia Horas >> str(1).Nome ans = MATLAB >> str(2).Nome ans = MATLAB2 Neste exemplo acima, você criou na mesma estrutura str anteriormente já criada novas informações. MATLAB para Iniciantes – Desmistificando o MATLAB [ 122 ] Você pode fazer isso sucessivamente, conforme sua necessidade. Para manipulá-las, você precisará identificar qual parte da estrutura você deseja através do índice da struct. >> str(2).Horas ans = 13 15 17 19 >> str(2).Horas(1) ans = 13 MATLAB para Iniciantes – Desmistificando o MATLAB [ 123 ] cell array Similarmente à estrutura, o cell array também permite o armazenamento de diferentes tipos de variáveis, porém identificadas pelo mesmo nome. >> celula = cell(2) celula = [] [] [] [] >> whos celula Name Size Bytes Class Attributes celula 2x2 16 cell Neste comando você criou uma célula vazia que pode ser preenchida posteriormente. MATLAB para Iniciantes – Desmistificando o MATLAB [ 124 ] >> celula(1,1) = {ones(3)} celula = [3x3 double] [] [] [] >> celula(1,2) = {'Curso de MATLAB'} celula = [3x3 double] 'Curso de MATLAB' [] [] >> celula(2,1) = {-3.56} celula = [3x3 double] 'Curso de MATLAB' [ -3.5600] [] >> celula(2,2) = {0:10} celula = [3x3 double] 'Curso de MATLAB' [ -3.5600] [1x11 double] Diferentemente da matriz e da struct, o cell array utiliza chaves { } para se referenciar a seus elementos. Se você utilizar os parênteses, sua resposta será a célula e não seus elementos. MATLAB para Iniciantes – Desmistificando o MATLAB [ 125 ] Para manipular os elementos, você utiliza seu posicionamento dentro do cell array. Exemplo: >> celula{1,1} ans = 1 1 1 1 1 1 1 1 1 >> celula{1,2} ans = Curso de MATLAB >> celula(1,1) ans = [3x3 double] MATLAB para Iniciantes – Desmistificando o MATLAB [ 126 ] ANÁLISE E SIMULAÇÃO DE DADOS Funções e Arquivos .m No MATLAB, pode-se também criar códigos modulares utilizando-se funções geradas em arquivos .m. Estrutura das funções Para se criar uma função no MATLAB, deve-se declarar o nome do arquivo igual ao nome da função. Dentro do arquivo, além de comentários iniciais, o primeiro comando deve ser o protótipo (ou assinatura) da função e, internamente a ele, o código correspondente. Exemplo: function [Ret1, ..., RetN] = nome_função(Par1, ..., ParM) <Bloco de comandos> Sendo: - function: palavra reservada que indica que a função está iniciada. MATLAB para Iniciantes – Desmistificando o MATLAB [ 127 ] - Ret1, ..., RetN: retornos da função. - nome_função: nome da função que deverá ser utilizado em sua chamada. - Par1, ..., ParM: parâmetros de entrada da função. - <Bloco de comandos>: bloco de comandos que compõe a função. A chamada da função deve ser feita como se segue: >> [RetA, ..., RetN] = nome_função(P1, ..., PM) Características das funções Neste livro, iremos detalhar dois tipos de funções utilizadas pelo MATLAB: as funções primárias e as subfunções. Um arquivo .m pode conter diversas funções, porém, uma só pode ser a principal, as outras devem ser subfunções. Isso porque, a função primária deve possuir o mesmo nome do arquivo .m. MATLAB para Iniciantes – Desmistificando o MATLAB [ 128 ] Funções primárias Devem conter o código da rotina principal; Devem obrigatoriamente possuir o mesmo nome do arquivo .m que a contém; Devem ser as primeiras funções listadas no arquivo .m. Subfunções Seguem a mesma sintaxe da função primária, tendo parâmetros de entrada e códigos de retorno; Subfunções só podem ser chamadas por outras funções definidas no mesmo arquivo .m; As variáveis utilizadas em uma subfunção só existem dentro dela, ou seja, as variáveis são locais. Exemplo de utilização de funções: Abra um novo arquivo .m e copie e salve o código abaixo. Lembre-se que o nome do arquivo .m deve ser o mesmo da função criada (neste caso, estatística). MATLAB para Iniciantes – Desmistificando o MATLAB [ 129 ] %estatistica.m - calcula variaveis estatisticas
Compartilhar