Você está na página 1de 255
PROGRAMAGAO EM WATLAB PARA ENGENHEIROS Stephen J. Chapman \| Programacao em MATLAB® Engenhetros Stephen J. Chapman BAE SYSTEMS Australia ‘Tradugio Técnica: Flavio Soares Correa da Silva PRD em Inteligéncia Artificial pela University of Edinburgh, livre-docente e professor associado do Depto. de Ciénciada = Computacio, Instituto de Matematica e Estatstica da USP THORIFON. Gerente Editoria: ‘adison Pereira Editora de Desenvolvimento: Eugenia Pssat rodutora Editorial: ‘Ada Santos Seles Produtora Gréfie: Patricia La Rosa © Copyignt 2002 by Brookale 28 ection © Copyright 2003 para a Lingua Portugues adquido por Fonera Thomson tearing ida, ums divisto a Thomson tearing, inc. Thomson Learing™ @ una marca reistads aqu uileada sb beenga. Impresso no Bras Printed in rae. 1234 050803 ua Tap, 114~ 30 andar Pereizes CEP 0235-000 Sto Paula ~ SP Tel: (17) 3665-9900 Fx: (11) 3665.9991 sec@thomsonieatning com br rr thomsonlearing com br songson. Titulo Original: MATLAB® Programming for Engineers Tradugio Técnica: Fis Soares Corea da iva Copidesque: Glauco Per Damas eos 0s ets resenades Nenhuma part deste iro odes ser reproduridasejam (as fore os melas tempregados sem a pernssie, por esto, da Editors, as infratores apicamse as sanceesprevstas nas stiges 102, 104, 106 e 107 de (29.610, 619 oe ‘evereko 1998 Revisso: Fernanda Ameida Unie e Mana Alice da Costa, Composig Segmento & Co, Producdes Grafica Uc capa: ui Prods Visual e Assessor Lida Dados internacionais de Catalogagée na Publicaczo (cr) (Camara Brasileira do Livro, 5, Brasil CChapenan, Stephen J Programacao em MATLAB® pars engenheces/ Stephen J. Chapman eal téene Fo Soares (Corea da Sha,» S30 Pale Ponsa Thomson Leaning, 2003 Titulo original MATLAB proaramming for engines IS8h-25.221-0325.9 1. Analse nameca— Processoment de doe 2. MATLAB L Thu, 03-1935 coD-st9.a0285513 Indices para catslogo sistematice: | Anise numésce: Apicacs0 deMATLAB 519.40285513 2. MATLAB : Aplagao em fans numérica $¥9.402855123 Este livro é dedicaio a minha esposa Rosa, pds 25 anos maracilhosos juntos. Sumario Pretécio xv 1 Introdugao ao MATLAB 1 a 12 13 ‘Vantagens do MATLAB 1 Desvantagens do MATLAB 3 O Ambiente MATLAB 3 13.1 A Area de Trabalho MATLAB 4 132 AJanela de Comandos 4 133. AJanela de Histérico de Comandos 7 134 OEspago de Lancamento 7 135 AJanela de Edigio/Depuragao. 8 13.6 Janela de Figuras 9 137 OEspaco de Trabalho MATLAB 10 138 ONavegador do Espago de Trabalho 11 ‘ 139 Obtendo Ajuda 13 13.10 Alguns Comandos Importantes 14 1.3.11 O Caminho de Busca MATLAB 15 Utilizando 0 MATLAB como Prancheta de Rascunhos 16 Resumo 18 15.1 Resumodo MATLAB 19 Exercicios 19 viii 1 Preramapto em WATLAg® para Enpeoeios 23 24 25 26 27 28 29 210 2a 2az 213 2a 245 22.1 Iniciando Varidveis em Expressées de Atribuigio 25 222. Iniciando com Expresses de Atalho 27 223. Iniciando com Fungées Predefinidas 28 224 Iniciando Variaveis com Entrada pelo Teclado 29 Matrizes Multidimensionais 31 23.1 Armazenando Matrizes Multidimensionais em Meméria 32 232 Acessando Matrizes Multidimensionais com um Unico Subscript 33 Submatrizes 34 24.1 AFungio end 35 242 Utilizando Submatrizes no Ledo Esquerdo de uma Declaragio de Atribuiggo 35 243 Atribuindo um Escalar a uma Submatriz 37 Valores Especiais 37 Exibindo Dados de Saida 39 26.1 Alterando o Formato-Padrio 39 262 AFungio disp 40 263. Saida Estruturada Usando a Fungio fprintt 40 Arquivos de Dados 42 Operagdes com Escalares e Matrizes 44 28.1 Operagdes com Escalares 45 282 Operagdes com Matrizes 45 Hierarquia de Operacdes 48 Eung6es Predefinidas MATLAB 51 2.10.1 Resultados Opcionais 51 2.102 Utilizando Fungdes MATLAB com Matrizes como Entrada 52 2.103 Fungdes MATLAB Comuns Introdugio a Diagramas 52 2.11.1 Utilizando Diagramas xy Simples 54 2.112 Imprimindo um Diagrama 55 2.113 Diagramas Maltiplos 56 2414 Cores de Linhas, Estilos de Linhas, Estilos de Marcadores e Legendas 56 2.115 Escalas Logaritmicas 58 Exemplos 59 Depurando Programas MATLAB. 67 Resumo 69 2.14.1 Resumo de Boas Priticas de Programagio 69 2.142 Resumo do MATLAB 70 Exercicios 72 Expressdes de Ramificagdo e Projeto de Programa 79 31 32 33 Introdusio a Tée Uso de Pseudocs Operadores Relacionais e Légicos 85 33.1 Operadores Relacionais 85 332 Nota de Atencio a Respeito dos Operadores icas de Projeto Top-Down 79 333 Operadores Légicos 88 334 Fungies Logicas 90 34 Ramificagées 92 341 A€strutura if 92 342 Exemplos de Utilizagdo de Estruturas if 94 343 Notas a Respeito do Uso de Estruturas if 100 344° A€Strutura switch 102 345 AEstrutura cry/catch 104 35 Caracteristicas Adicionais de Diagramas 106 35.1 Controlando os Limites nos Diagramas dos Eixos xe y 106 35.2 Desenhando Muiltiplos Diageamas sobre os Mesmos Eixos 109 35.3 Criando Maltiplas Figuras 109 354 Subdiagramas 110 355 Controle Avangado de Linhas Desenhadas 111 35.6 Controle Avangado de Cadeias de Texto 113 357 Diagramas Polares 113 358 Anotando e Armazenando Diagramas 121 3.6 Notas Adicionais a Respeito da Depuragio de Programas MATLAB 123, 3.7 Resumo 126 3.7.1 Resumo de Boas Praticas de Programagio. 127 37.2 ResumodoMATLAB 127 38 Exercicios 128 Lagos 135 41 OLagowhite 135 42 OlLasofor 141 421 Detalhes de Operagio 148 422 As Expresses break e continue 152 423. Lagos Aninhados 153 43° Matrizes Logicas e Vetorizagio 155 43.1 Almportincia das Matrizes Légicas 432. Criando o Equivalente a Estruturas if /e: 44 Exemplos Adicionais 161 45 Resumo 176 45.1 Resumo de Boas Priticas de Programagio 176 452. Resumo do MATLAB 176 46 Exercicios 177 com Matrizes Légicas 159 « Fungdes Definidas pelo Usuario 185 5.1 Introduio a Fungdes MATLAB. 186 5.2 Passagem de Varidveis em MATLAB: O Esquema de Passagem por Valor 192 33 Argumentos Opcionais 202 8.4 Compartilhando Dados pelo Uso de Meméria Global 207 55. Preservando Dados Entre Chamadas de uma Fungio 215, 5.6 FungOes de Fungdes 220 5.7 Subfungdes e FungGes Privadas 224 5.8 Resumo 226 | Programapso em MAILAW™ para Engentwiras ‘Sumicio | 581 Resumo de Boas Pritcas de Programagio 226 73. Matrizes Estruturas. 30 582 _Resumodo MATLAB 227 731 Criando Estruturas 304 59. Exercicios 228 732. Adicionando Campos a Estruturas 306 733 Removendo Campos de Estruturas 307 6 Dados Complexos, Dados de Caracteres eTipos Adicionals de Diagramas 239 734 Usando Dados em Matrizes Estruturas 308 61 Dados Complexos. 239 735. AsFuncies getfielde set field 309 6:11 Varidveis Complexas 241 736 Usando a Fungio size com Matrizes Estruturas 310 612 Usando Nuimeros Complexos com Operadores Relacionais. 242 737 Aninhando Matrizes Estruturas 310 613 Fungdes Complexas. 242 738 Resumo das Fungies structure 311 6.14 Colocando Dados Complexos em Diagramas 246 7A Resumo 312 ; 62 Fungées de Cadeias de Caracteres 230 7.4.1 Resumo de Boas Priticas de Programacio 313 62.1 Fungdes de Conversio de Cadeias de Caracteres 250 74.2 Resumo do MATLAB 313 6.22 Criando Matrizes Bidimensionais de Caracteres 250 75 Exercicios 314 , 623. Concatenagio de Cadeias de Caractees 251 . | ) 624 Comparasio de Cadeins ce Caracteres 252 8 Fungées de Entrada/Saida 317 625. Busca/Substituiglo de Caracteres Dentro de uma Cadein. 254 81 “A Funcio textread 317 | €26 Conversio para Maldscula e Miniseuls 256 82. Mais Informag6es sobre os Comandos oad e save 319 | 627 Conversbes de Numero para Cadeia de Caracteres 256 83 Uma Introducio ao Processamento de Arquivos MATLAB 321 628 Conversbes de Cadeia de Caracteres para Niimero 258 84 Abrindo e Fechando Arquivos 322 £29. Rewme 258 841 AFungio fopen 323 ais 264 842 AFuncéo fclose 326 85 Fungdes de E/S Binérias 326 851 AFungio fwrite 326 852 AFungdo fread 327 8.6 Fungdes de E/S Estruturadas 330 861 AFungio fprintf 330 8.62. Entendendo as Especificagdes de Conversio de Formato 332 863 Como as Cadeias de Caracteres de Formato Sio Utilizadas 334 63. Matrizes Multidimensi 6A Diagramas Bidimensionais Adicionais 266 6.4.1 Tipos Adicionais de Diagramas Bidimensionais 266 642 Fungoes para Diagramas 271 643 Histogramas 272 65 Diagramas Tridimensionais 274 65.1 Diagramas Tridimensionais deLinha 274 1 ce oo Diagrams dimensional deSpeie Malia eCurvede Nive 276 set Reece nee i ‘esumo 8.6.5 AFungao fget1 339 6.6.1 Resumo de Boas Préticas de Programagio 280 B66 Afunio fgets 309 j 662 _Resumo do MATLAB 280 87 Comparando Fungées de E/S Bindtias eEstruturadas 339 67 Exerefios 281 88 Posicionamento de Arquivo e FungBes de Estado. 345 881 AFungio exist 343 7 Matrzes Esparsas, Matrizes Celulares e Estruturas 225 882 APungio terror 347 : 7A Mattizes Esparsas 285 883 Aungo feor 348 ‘ 71. OTipode Dados sparse 287 884 AFungio fte1l 348 72. Matrizes Celulares 292 885 AFungio frewina 348 | 7.2.1 Criando Matrizes Celulares 294 . 8.8.6 AFungio fseck 348 722 Usando Chaves |) como Constntores de Cétulas 295 89. Fungioutimport 354 x 723. Vendo o Contedido de Matrizes Celulares 296 8:10 Resumo. 356 724 Estendendo Matrizes Celulares. 296 8.10.1 Resumo de Boas Pritcas de Programagao 357 / 725. Apagando Células em Matrizes 298 810.2 Resumo do MATLAB 357 726 Usando Dados em Matrizes Celulares 298 11 Exercicios 358 72.7 Matrizes Celulares de Cadeias de Caracteres 299 728 Almportancia das Matrizes Celulares 300 9 Graficos de Controle 361 72.9 Resumo das Fungées da Matriz. cell 303 9.1 O Sistema de Gréficos MATLAB 361 10 1 roymayan en mnreny para engerneias 92 93 94 95 96 97 98 99 9.0 on 92 943 Controles de Objetos 363, Examinando e Modificando Propriedades de Objetos 363 93.1 Modificando Propriedades do Objeto no Momento da Criagio 363, 932 Modificando Propriedacies de Objetos apés a Criagio 364 Usando set para Listar Valores Possiveis de Propriedades 370 Dados Definidos pelo Usuario 372 Localizando Objetos 373 Selecionando Objetos com o Mouse 375 Posigio e Unidades 373 98.1 Posigies de Objetos figure 378 9.82 Posigdes de Objetos axes e uicos 983. Posigdes de Objetos text 379 Posigbes de Impressio 382 Propriedades Default e de Fabrica 383 Propriedades de Objetos Graficos 385 Resumo 385 9.12.1 Resumo de Boa Pratica de Programagio 386 9.122 Resumo do MATLAB 386 Exercicios 387 Interfaces Gréficas de Usuérios 389 10.1 102 103 104 10; 106 ‘Como Funciona uma Interface Gréfica de Usuério 389 Criando e Exibindo uma Interface Grifica de Ususrio 390 10.21 Espiando Por Trés dos Panos 100 10.22 A Fstrutura de uma Subfungiade Retorno 402 1023 Adicionando Dados de Aplicagio a uma Figura 403 1024 Algumas Fungoes Uteis 404 Propriedades de Objetos 404 ‘Componentes da Interface Grifica de Usuétio 405 104.1 Campos de Texto 407 1042 Caixas de Edigio 407 1043 Quadros 407 1044 Botses 407 10.45 Chaves 409 10.46 Caixas de Verificasio e Marcadores 409 1047 Menus Dinamicos 412 1048 Caixas de Listagem 412 1049 Réguas 415 Caixas de Didlogo 420 105.1 Caixas de Didlogo de Erro e de Aviso 421 1052 Caixas de Dislogo de Entrada 421 1053 As Caixas de Dislogo uigettileevisetfile 422 Menus 423 106. Suprimindo o Menu-Padrio 26 10.62 Criando seus Préprios Menus 427 10.63 Teclas de Aceleragao e Mneménicos de Teclado 428, 10.64 Criando Menus de Contexto 28 Somivio | xiil 10.7 Dicas para Criar Interfaces Grificas de Usuério Eficientes 434 10.7 Dicas de Ferramentas 434 1072 Peode 435 10.73 Melhorias Adicionais 437 108 Resumo 441 10.8.1 Resumo de Boas Praticas de Programacio 443 1082 Resumo do MATLAB 443 109 Exercicios 444 Apéndice A Conjunto de Caracteres ASCII 447 ‘Apéndice B Respostas para os Testes 449 indice Remissivo 463, Prefacio MATLAB (que abrevia MATrix LABoratory ~ Laboratdrio de Matrizes) é um programa de computador de uso especifico, otimizado para executat célculos centificas e de engenharia. Ele nasceu como um programa para operagies mateméticas sobre matrizes, ‘mas ao longo dos anos transformou-se em um sistema computacional flexivel capaz de resolver essencialmente qualquer problema técnico. (© programa MATLAB implementa a linguagem MATLAB, e oferece uma ampla biblioteca de fungSes predefinidas para que a programacio técnica se torne mais fécil e eficiente. Essa variedade extremamente ampla de fungdes torna muito mais fécil resolver problemas técnicos em MATLAB do que em outras linguagens, como Fortran ou C. Este livro apresenta a linguagem MATLAB e mostra como utilizé-la para resolver problemas téenicos tipicos. Esta obra ensina 0 MATLAB como uma linguagem de programacio técnica, ‘mostrando aos estudantes como escrever programas limpos, efftientes ¢ bem-docu: ‘mentados. Ela nao tem a pretensio de ser uma descrigio completa de todas as centenas de fungdes MATLAB. Em vez disso, ensina como usar 0 MATLAB como uma lingua- ‘gem, e como localizar qualquer funcio desojada através dos recursos de ajuda on-line do MATLAB, (Os primeiros seis capitulos sio feitos para servir como texto para um curso de “In- trodugio a Programacio/Resolugio de Problemas” para estudantes calouros de enge- mharia. Esse material deve se adequar folgadamente para um curso de nove semanas com trés horas por semana. Os capitulos restantes cobrem t6picos avangados como entrada/saida e interfaces graficas de usudrios. Esses capitulos podem ser cobertos ‘em cursos mais longos, ou usados como referéncia por estudantes de engenharia ‘ou engenheiros que utilizem 0 MATLAB como parte de seus cursos ou atividades AVL | Programagéo em MATLAB® para Engenhenas Esta edigdo &especifieamente devotada is versdes 6.0 ¢ 6.1 do MATLAB. Embora a linguagem MATLAB basica tenha se mantido constante desde a versio 50, as ferra- rmentas integradas, as anelas e o subsistema de ajuda mudaram drasticamente. Adicio- ralmente, um paradigma completamente novo para projetos de interfaces graficas de ‘usuério MATLAB foi introduzido na de 6.0. Os usuarios que trabatham com versdes do MATLAB anteriores & de 6.0 precisam estar conscientes que a descrigio do desenvolvie ‘mento de interfaces grificas de usuario no Capitulo 10 nao serve para eles, O livio também cobre as melhorias pequenas, porém importantes, na prépria lin- ‘guagem, como a introdugao da expresso cont inue. ‘As Vantagens do MATLAB para Programagao Técnica MATLAB apresenta muitas vantagens, em comperago com linguagens de computador ‘convencionais, para resolugio de problemas técnicos. Dentre elas, temos: 1, Facilidade de Uso MATLAB € uma linguagem interpretada, assim como muitas verses de Basi. Como Basic, 6 muito fécil de usar. O programa pode ser usado como prancheta de rascunhos para avaliar expresses digitadas em linha de comando, ou para executar programas grandes previamente escritos, Programas podem ser escri- tos e modificados com facilidade usando o ambiente de desenvolvimento inte- grado embutido, bem como depurados usando o depurador MATLAB, Por ser muito fécil de usar, a linguagem é ideal para uso educacional e para desen- volver rapidamente protstipos de novos programas, Muitas ferramentas de desenvolvimento de programas sio fornecidas para tomar o programa facil de usar. Dentre elas, temos um editor/depurador, lum navegador de espaco de trabalho e muitos programas de demonstracio. 2, Independéncia de Plataforma MATLAB tem suporte em muitos sistemas computacionais diferentes, propor. cionando, em grande medida, uma independéncia de plataforma, No momento de preparagio deste livro, a linguagem tinha suporte em Windows 9x/NT/2000 em diversas versdes de UNIX. Programas escritos em uma plataforma fun- cionam em todas as outras, earquivos de dados escritos em qualquer plataforma poclem ser lidos transparentemente em todas as outras. Como resultado, pro- {gramas escritos em MATLAB podem migrar para novas plataformas quando as necessidades do usuario se alteram, 3. Fungies Predefinidas MATLAB ver completo, com uma grande biblioteca de fungies predefinidas que proporcionam solugbes testadas e empacotadas para muitas tarefas técnicas bésicas. Por exemplo, suponha que vocé esteja escrevendo um programa que precise calcular a estatistica associada ccm um conjunto de dados de entrada Na maioria das linguagens, voc? precisaria escrever suas préprias sub-rotinas ou fungdes para implementar 03 cileulos como média aritmética, desvio padrio, mediana etc. Essas e centenas de outras fungbes s20 construfdas jana linguagem MATLAB, tornando seu trabalho muito mais fel Prtécio Além da grande biblioteca de fungées construfda na linguagem basica MATLAB, existem muitas outras caixas de ferramentas especializadas dispo- niveis para ajudar a resolver problemas complexos em areas especificas. Por exemplo, um usuario pode comprar caixas de ferramentas-padrio para resolver problemas em processamentos de sinais, sistemas de controle, comu- nicagoes, processamentos de imagens ¢ redes neurais, dentre muitas outras. 4. Diagramas Independentes de Dispositivos Diferente de outras linguagens de computador, MATLAB tem diversos coman- dos para imagens ¢ desenhos integrais. Os desenhos e as imagens podem ser exibidos em qualquer dispositive grafico suportado pelo computador onde est funcionando o MATLAB. Esse recurso toma o MATLAB uma ferramenta notavel para visualizar dados téenicos, 5. Interface Grafica de Ususrio MATLAB jinclui ferramentas que permitem que um programador corstrua interativamente uma interface grafica de usuario (GUI, do inglés Graphica! User Interface) para seu programa. Com esse recurso, 0 programador € capaz de pro- jetar programas sofisticados para analise de dads que podem ser operados por ‘usudrios relativamente inexperientes. 6. Compilador MATLAB: A flexibilidade e a independéncia de plataforma do MATLAB sfo propor- cionadas pela compilagao de programas MATLAB em um pseudocédigo inde- ppendente de dispositivo, e pela interpretacio das instrugées do pseudocSdigo em lempo de execucio. Essa abordagem é semelhante 2 usada na linguagem de programagio Visual Basic, da Microsoft. Infelizmente, 0 programa resultante por vezes pode ser lento, pois o cédigo MATLAB 6 interpretado em vez decom: pilado, Indicaremos aspectos que tendem a reduzir a velocidade da execusio de programas, quando 0s encontrarmos. Um compilador MATLAB separado esté disponivel. Ele pode compilar lum programa MATLAB como um executivel verdadero que executa mais ripido ‘que o cédigo interpretado. Essa é uma grande forma de converter um programa de protstipo MATLAB em um executdvel apropriado para venda e distribuicio Caracteristicas deste Livro Muitas caracteristicas deste livro t@m por objetivo enfatizar a mancira apropriada de escrever programas MATLAB. Essas caracteristicas devem ser iteis para um estudante aprendendo a usar 0 MATLAB e para quem ja trabalha com esse programa. Dentre las, temos: 1. Enfase na metodologia de projetos top-down CO livzo apresenta uma metodologia de projets top-down no Capitulo 3, eentio a utiliza de forma consistente no sew decorter. Essa metodologia encorja 0 cestudante a pensar a respeito do projeto apropriado de um programa anes de | Progranagte om MATLAB are Egos iniciar a codificagao. Ela enfatiza a importancia de definir claramente o proble- ‘maa ser resolvido e os dados requeridos de entrada e saida antes de iniciar qualquer outra atividade. Uma vez definido apropriadamente 0 problema, ensina o estudante a aplicar o refinamento passo a passo para subdividir a tarefa ‘em sublarefas menores, ¢ implementat as sublarefas como sub-rotinas ou fangdes separadas. Finalmente, a metodologia utilizada ensina a importancia de efetuar testes em todos 08 estégios do proceso, tanto testes unitdrios das rotinas componentes como testes exaustivos do produto final 0 processo formal de projeto ensinado no livro pode ser assim resumido: Estabelega claramente 0 problema que vocé esté tentando resolver. ‘* Defina os dados de entrada requerides pelo programa e os dados de saida produzidos por ele + Desereva 0 algoritmo que vocé pretende implementar no programa. Esse passo requer projeto fop-ioum e decomposigao passo a passo, fazendo uso de pseudocsdigo ou de diagramas de fluxo, ‘+ Transforme o algoritmo em sentengas MATLAB, ' Teste o programa MATLAB. Nesse passo estio incluldas os testes unitirios de fungdes espectficas e 0 teste exaustivo do programa final, com diferentes conjuntos de dados. 2, Bnfase em fungBes O livro enfatiza 0 uso de fungGes para a decomposigio ligica de tarefas em subtarofas menores, Ele ensina as vantagens das fungies para ocultar dados. Enfatiza também a importancia dos testes unitérios das fungSes antes de com- bind-las no programa final. O livro mostra ainda os erros comumenteefetuados com fungies ¢ como evitélos, 3, Enfase em ferramentas MATLAB © livro ensina 0 uso apropriado das ferramentas pré-construidas MATLAB para facilitar a programagio e depuragio de programas, As ferramentas tratadas sio o Espaco de Langamento, o Editor/Depurador, o Navegador do Espago de Trabalho, o Navegador de Ajuda e ferramentas de projeto de GUI 4. Notas de boa pritica de programagio As notas enfatizam as boas priticas de programagio & medida que so apre- sentadas, para a conveniéncia do estudante. Além disso, as boas priticas de programagio aprosentadas em um capitulo sdo resumidas no seu final. Apre sentamos a seguir uma nota de boa prittca de programacio, Boa Pratica de Programagao Sempre destaque com tabulagio 0 corpo de uma construgdo if, com dois ou mais cespagos, para melhorar a legibilidade do cédigo. Priicio | xix 5. Notas de erros de programagio Essas notas enfatizam erros comuns que podem ser evitados. Apresentamos a seguir uma nota de erros de programacio, Sempre verifique se os seus nomes de varveis nao se repetem nos primeiros 31 carac- teres. Se isso nao ocorrer, o MATLAB néo conseguird diferenciar as varidveis, EATS 6. Bnfase nas estruturas de dados No Capitulo 7, temos uma discusséo detalhada a respeito das estruturas de dados MATLAB, incluindo matrizes esparsas, matrizes de células e matrizes de estruturas. O uso apropriado dessas estruturas de dados ¢ ilustado nos os sobre Grificos de Apoic e Interfaces Graficas de Usudrios. Caracteristicas Pedagdgicas- Os primeizos seis capitulos deste livro sio projetados especificamente para uso em ccursos de Introdugio 4 Programagio e a Resolugao de Problemas. Deve ser possivel cobrir esse material confortavelmente em um curso de nove semanas, com trés horas semanais. Se 0 tempo for insuficiente em algum programa particular de engenharia, 0 Capftulo 6 poders ser eliminado; os capitulos remanescentes ainda assim ensinario 0 fundamentos de programagao e uso do MATLAB para resolugio de problemas. Essa caracteristica deve ser atraente para 0s proessores de engenharia pressionedos para compactar cada vez mais material dentro de um curriculo finito Os capitulos seguintes tratam de material avangado que seré stil para estudantes © engenheiros ao longo de suas carreiras. Vie material inclui recursos avangados de entrada/saida e 0 projeto de interfaces gralw ss de usuarios para os programas. O livro inclui diversas caracteristicas jn njcladas para dar suporte 3 compreens30 do estudante.* Estdo incluidos 15 testes, sistribuidos a0 longo dos capitulos. As respostas a todas as perguntas esto apres: nladas no Apéndice B.Os testes podem ser usados como autotestes de compreensic Alim disso, temos aproximadamente 140 exercicios de final de capitulo. As boas prilias de programacéo so apresentadas em todos os capitulos em quadros de Boa Priti de ProgramacSo, e os ertos comuns so apresentados em notas de Erros de Prograni,io. O material de final de capitulo é com- posto por Resumos de Boas Priticas de Mugramagio e Resumos de Comandos FungOes MATLAB. * NIE: Hi no final do tivo, um encart de fgur pelt de cada igara que no péde se exbido lords, Eas sustram alga pono especial a ree tons de cine Agradecimentos Quero agradecer a minha esposa, Rosa, e a nossos filhos Avi, David, Rachel, Aaron, Sarah, Naomi, Shira e Devorah, por serem pessoas t20 agradveis ¢inspirarem todos os ‘meus esforcos. Stephen J. Chapman Capitulo 1 Introdugao ao MATLAB MATLAB (que abrevia MATrix LABoratory ~ Laborat6rio de Matrizes) é um programa de computador especializado e otimizado para célculos cientificas e de engesharia, Inicialmente, era projetado para cflculos com matrizes; ao longo dos anos, transformou-se em um sistema computacional flexivel, capaz. de resolver essencialmente qualquer problema técnico. (© programa MATLAB implementa a linguagem de programagio MATLAB, junta: mente com uma grande biblioteca de fungoes predefinidas que tornam as tarefas de programagao téenica mais féceis eficientes. Este livro apresenta a linguagem MATLAB ‘e mostra como utilizé-la para resolver problemas técnicos tipicos. MATLAB é um programa muito grande, com uma rica variedade de funsGes. Até ‘mesmo a versio bdsica do MATLAB, sem ferramentas adicionais, 6 muito mais rica que outras linguagens de programacio técnica. Existem mais de 1.000 fungées no produto MATLAB, e as ferramentas adicionais ampliam esses recursos com muito mais fungoes fem diferentes especialidades. Este livro nao pretende apresentar ao leitor todas as fangdes MATLAB, Em vez disso, o usuério aprende os furdamentos de como escrever, depurar e otimizar bons programas MATLAB, juntamente com um subconjunio das fungSes mais importantes. Outro aspecto igualmente importante é que o programador aprende a utilizar as ferramentas do préprio MATLAB para localizar a fungdo adequa. da a um proposito especifico a partir da enorme gama de opsdes disponiveis. 1.4. Vantagens do MATLAB MATLAB tem muitas vantagens, em comparagao com linguegens computacionais con- vencionais, para resolver problemas técnicos. Dentre elas, temos: 2 | Provan em MATLAB ar gees 1 Facilidade de Uso MATLAB € uma linguagem interpretada, assim como diversas versbes de Basic. ‘Como 0 Basic, ele é muito cil de usar. C programa pode ser usado como pran- cheta de rascunhos para avaliar expressées digitadas em linha de comando, ou pode ser utilizado para executar programas grandes escritos previamente. Os programas podem ser facilmente escritas e modificados no ambiente integrado de desenvolvimento, e depois depurados por meio do depurador MATLAB, Como a linguagem € muito fécil de usar, ele € ideal para o desenvolvimento rapido de protétipos para novos programas. Diversas ferramentas para desenvolvimento de programas sio fornecidas, 0 que failta o uso do programa. Dentre elas, temas um editor/ depurador integrado, sum navegador do espago de trabalho e diversos programas de demonstragio. 2 Independéncia de Plataforma MATLAB tem suporte em diferentes sistemas computacionais, 0 que propor ciona independéncia de plataforma. No momento da preparagio deste livro, a linguagem tem suporte em Windows 95 /98/ME /NT/2000 e diferentes versses de UNIX. (Versdes mais antigas do MATLAB eram disponiveis para computa- dores Macintosh ¢ VAX, as quais ainda sio utilizadas em diversos locais) Programas escritos em qualquer plataforma so executados nas outras plata- formas, e arquivos de dados escritos em qualquer plataforma podem ser lidos transparentemente nas outras. Com iso, programas escritos em MATLAB podem migrar para novas plataformas cas0 0 usuidrio precise da mudanca. 3. Fungies Predefinidas MATLAB vern completo, com uma grande biblioteca de fungSes predefinidas, ue representam solugGes testadas e empacotadas para diversas tarefas técnicas basicas. Por exemplo, suponha que vocé esteja escrevendo um programa para calcular as estatisticas relacionadas com um conjunto de dados de entrada, Na ‘majoria das linguagens, vocé precisaria escrever suas proprias sub-rotinas ou fungSes para implementar os célculos de média aritmética, desvio-padrao, me- diana, ete. Essas e centenas de outras fungOes fazem parte da linguagem MAT- LAB, assim facilitando o seu trabalho, ‘Alem da grande biblioteca de funcées presentes na linguagem MATLAB. bisica, diversas ferramentas especificas estéo disponiveis para ajudar a resolver problemas complexos em dreas especificas. Por exemplo, um usudrio pode adquirir ferramentas-padrao para resolver problemas em Processamento de Sinais, Sistemas de Controle, Comunicasies, Processamento de Imagens ¢ Redes Neurais, além de outros. Fxistem :ambém muitos programas MATLAB dle uso livre, que sio contribuigées de usudrios compartilhadas por meio da pagina WWW do MATLAB, 4 Desenhos Independentes de Dispositives Diferente da maioria das linguagens de computador, MATLAB tem muitos co- ‘mandos para desenhos e imagens. Os desenhos e imagens podem ser apresen- tados em qualquer dispositivo de saida grifica suportado pelo computador que executa 0 MATLAB. Esse recurso torna 0 MATLAB uma ferramenta excepeional Para visualizagao de dados téenicos, Captus 1 imoarzoz0 areas | 3 5 Interface Grafica de Usuério | MATLAB tem ferramentas que permitem a um usudrio construir interativa- rmente uma interface grafica de usudrio (GUL, do inglés Graphical User Interface) para seus programas. Com esse recurso, 0 programador pode projetar pr gramas sofisticados de andlise de dados, os quais podem ser operados por Usuarios relativamente inexperientes. 6 © Compilador MATLAB A flexibilidade ea independéncia de plataforma do MATLAB resultam da com- pilagao de programas MATLAB em um e6digo independente de dispositiva denominado peode, e da interpretacio em tempo de execusao das instrugdes em peode. Essa abordagem € similar & adotada pela linguagem Visual Besic da Microsoft. Infelizmente, os programas resultantes podem as vezes se tornar Tentos, pois 0 cédigo MATLAB é interpretado em vez de compilado. Indicaremos fos aspectos que tendem a tornar a execugio de programas mais lenta quando os encontrarmos. Existe um compilador MATLAB separado. Ele pode compilar um pro- .grama MATLAB como um programa efetivamente executavel, que é mais répido que o cédigo interpretado. Essa & uma boa forma de converter um programa protétipo MATLAB em um programa executavel que pode ser vendide e dis- tuibuido a usudtios. 1.2. Desvantagens do MATLAB MATLAB tem duas desvantagens principais. Primeiro, ele é uma linguagem interpretada, por isso pode ser mais lento que linguagens compiladas. Esse problema pode ser dimi ruido pela estruturacio apropriada dos programas MATLAB e pelo uso do compilador MATLAB para compilar o programa final MATLAB para distibuigdo e uso geral A segunda desvantagem 6 0 custo: uma cépia completa do MATLAB é de cinco a dex vezes mais cara que um compilador convencional C ou Fortran, Esse custo rela vamente alto é mais do que compensado polo tempo reduzido requerido para um engenheiro ou cientsta criar um programa —o que torna o MATLAB eficaz para empresas. Ele pode ser muito caro, entretanto, para a compra individual. Felizmente, existe uma versio de estudante mais barata do MATLAB, que é uma excelente ferramenta para estucantes que queiram aprender a linguagem. A versio de estudante do MATLAB é essencialmente idéntica & versio completa 1.3. 0 Ambiente MATLAB A unidade fundamental de dados em qualquer programa MATLAB é a matriz. Uma ‘matriz é uma colegio de valores de dados organizados em linhas e colunas, determi nada por um nome tinico. Valores individuais de dados em uma matriz podem ser aces- sados por meio do nome da matriz seguido de indices entre parénteses que identificam @ linha e a coluna de um valor particular, Até mesmo escalares sio tratados como matrizes em MATLAB ~ eles sio simplesmente matrizes com apenas uma linha e uma coluna. Aprenderemos a criar ¢ a manipular matrizes MATLAB no Capitulo 2. _ 4 Pregramapto am uatAg® para Empntois Na execugio do MATLAB podem ser exibidasjanelas de diferentes tipos, as quais aceitam comands ou exibem informagdes. Os ts tipos mais importantes de janelas ‘io Janela de Comandos, onde podem ser colocados comandas; Janela de Figuras, que exibem desenhos e graficos; e Janelas de Edigio/Depuragio, que permitem a um usuario eriar e modificar programas MATLAB. Vamos ver exemplos desses tréstipos de janelas na presente segio. ‘Além disso, o MATLAB pode exibir outras janelas de auxiio e que possbilitam a0 usuario examinar 0 valor de varidveis definidas em meméria, Vamos examinar aqui algumas dessas janelas adicionais, e examinar as outras quando discutiemos como depurar programas MATLAB 1.3.1 A Area de Trabalho MATLAB Ao iniciar o MATLAB Versio 6, aparece uma janela especial denominada area de tra- balho MATLAB. A configuragio inicial da rea de trabalho MATLAB € exibida na Figura 1.1. Ela integra diversas ferramentas para gerenciar arquivos, varidveis ¢ apli- cagbes dentro do ambiente MATLAB As principais ferramentas presentes na drea de trabalho MATLAB, ou que podem ser acescadas a partir dela, sio as seguintes: * Janela de Comandos * Janela de Hist6rico de Comandos * Espago de Langamento * Janela de Edigdo/Depuragio * Janela de Figuras *+ Navegador do Espaco de Trabalho e Editor de Matrizes + Navegador de Ajuda + Navegador do Diret6rio Corrente ‘Vamos discutir as fungbes dessas ferramentas em segies posteriores deste capitulo, 1.3.2 A Janela de Comandos (O lado direito da érea de trabalho MATLAB contém a Janela de Comandos. Um usué- tio pode inserir comandos interativos pelo marcador de comands (>), na Janela de ‘Comandos, ¢ eles serio executados de imediato, Um exemplo de célculo interativo simples 6 seguinte: suponha que vocé queira calcular a érea de um circulo com raio de 2,5 m. Iso pode ser feito pela janela de coman- dos MATLAB, digitando: >> area = pi * 2.592 19.6350 apts vaio aouaTias | & ‘OEspago de Langament. tobe una anore de se contol permite ecueiagso, Disparao gue um sui veriique fdorsvapes e feramentas —Mavegader de ou modiqueo dretéto ‘ra cata produto ‘Nua corrente Seen: se eee fice ce Poneto bonnie Adanela de Hitrico 0 Navegador fe Camandos exbe 05 comandos anteriores Diretiio 0 Navegador a Arado Corrante bees arqutes Trabalho ede as vars bo dretéiacarente——defnidas na rea de tabato Figura 1.4. érea de trabalho MATLAB. A aparéneia exata da janela pode deri igeirzmente fem diferentes tipos de computador. © MATLAB calcula a resposta assim que a tecla Enter é pressionada, e armazena 0 resultado em uma variavel (na realidade, em uma matriz 1 x 1) denominada area. O contedido dessa varidvel é exibido na Janela de Comandos, conforme mostrado na Figura 1.2, ea varidvel pode ser usada em outros céleulos, (Note que x é predefinido no MATLAB, por isso podemos simplesmente usar pi sem antes termos de declarar set valor como 3.141592... ‘Se uma declaragio é muito extensa para ser digitada em uma tinica linha, ele pode ser complementada em linhas sucessivas digitando reticéncias (..) no final de cada 6 | Prosramagso em aULAB pra Eger: Figura 1.2 Janela de Comandos fica mais & direta na étea de trabalho. Os usustios podem inserir comandos e ver as respostas al linha, ¢ ento continvando na linha seguinte. Por exemplo, as duas expresstes a seguir Sio idénticas: ML = 14 2/2 44/36 1/4 1/5 4 1/67 mlel+ 121s ia. 41/5 + 1/6 Em vez de digitar comandos diretamente na Janela de Comandos, uma série de comands pode ser colocada em um arquivo, ¢ 9 arquivo inteiro pode ser executado, quando digitamos seu nome na Janela de Comandios. Esses arquives so denominados arquivos de scripts. Arquivos de scripts (e fungSes de scripts, como veremos) sio tam- bbém chamados arquives M, por terem uma extensio de arquivo * .m" Casa ioaupozonaruse | 7 Figura 1.3 AJanela de Histérico de Comandos, mostrando dois comandos sendo apagadis. 1.3.3 A Janela de Histérico de Comandos A Janela de Histérico de Comandos exibe uma lista dos comandos que um usuario inseriu na Janela de Comandos. 4 lista de comandos anteriores pode se estencler a exe cugies anteriores do programa. Os comandos permanecem na lista até serem apagados. Para reexecutar qualquer comando, simplesmente clique duas vezes sobre ele com 0 botdo esquerdo do mouse, Para apagar um ou mais comandas da Janela de Histérico de Comandos, selecione os comandos e clique sobre eles com 0 botdo direito do mouse Surgird um menu, que permitird ao usuario apagar os itens (ver Figura 1.3). 1.3.4 0 Espago de Langamento © Bspago de Langamento 6 uma ferramenta especial que agrupa referéncias a docu _mentacio, demonstragies e ferramentas relacionadas para o proprio MATLAB e para finaris oo Denos | fatcurcenenisestory | fiockapece fares Eb siine (cor bssees) Oreos rece es) bgicore ses ne $b edaarasn comater Heh sugat Frocessing Tootbor dh seantarten Tonthow Launen pag_[ Workspace J Figura 1.4 © Espago de Langamento. cada conjunto de ferramentas que vocé adquire. A informacio é organizada por pro- duto, com todas as referéncias listadas abaixo de cada produto ou conjunto de ferra- mentas. Pessoas diferentes irdo adquirir produtos diferentes, portanto, 0 contetido exato dessa janela varia de instalagdo para instalagio. ‘A Figura 14 mostra o Espago de Langament> com referéncias expandidas para MATLAB bésico. Ao clicar duas vezes sobre um desses itens, voce pocle obter ajuda para usar o MATLAB, executar os programas de demonstracio, acessar as ferramentas- padrio fornecidas com o programa ou visitar a pagina WWW do MATLAB na Internet 1.3.5 A Janela de Edigéo/Depuragao Uma Janela de Edigio/Depuragao é usada para criar novos arquives M ou modificar os jd existentes. Uma Janela de Edicao/Depuracio 6 criada automaticamente quando vocé ctia um novo arquivo M ou abre um. Vocé pode criar um novo arquivo M selecionando “File/ New /M-file” no menu da area de trabalho, ou clicando sobre o icone C} na Barra de Ferramentas. Vocé pode abrir um arquivo M selecionando “File/Open” no menu da frea de trabalho ou clicando sobre o icone ina Barra de Ferramentas. A Janela de Edigio/Depuracio é essencialmente tum editor de textos de progra- mas, com caracteristicas da linguagem MATLAB destacadas por cores diferentes. ‘Comentarios em um arquivo M aparecem em verde, variéveis e mimeros, em preto, cadeias de caracteres, em vermelho, e palavras-chave da linguagem, em azul, Um exem- plo de Janela de Edigao contendo um arquivo M simples é exibido na Figura 1.5. Esse arquivo calcula a drea de um circule, dado o sew raio, e exibe o resultado. saloLx| oe eee OeGelsoeo (Af! 00/609 08) mPa E Fou 15 AJanela de Edigio/Depuragio, exibindo o arquivo czic_area m. Uma vez gravado o arquivo M, ele pode sor executado ao digitarmos seu nome na Janela de Comandos. Para 0 arquivo M da Figura 1.5, os resultados $30 » cale_area The area of the circle is 19.635 ‘AJanela de Edigdo /Depuragao também funciona como depurador, conforme vere- ‘mos no Capitulo 2 1.3.6 Janela de Figuras Ua Janela de Figuras ¢ usada para exibie gréficos MATLAB. Uma figura pode ser a representacio gréfica bidimensional ou tridimensional de dados, uma imagem ov uma GUL Um arquivo de script simples que calcula e desenha a fungi seno (x) é mostrada a seguir: & sincxm: Bese arquivo M calcula e desenha a % funggo seno{x) para 0 <= x <= 6. 0.2 y = sinix) plot ix, yi Se.esse arquivo for gravado com o nome sin_x.m, um usurio poderé executé-lo digi- tando *sin_x* na Janela de Comandos. Quando 0 arquivo de script for executado, 0 10 | Progam MATAR gra gees “=1513) EER Wow Fest Tone Wann Hep Joeualrar7|eee o| os o| 02 22] 04 os} Figura 1.6 Desenho MATLAB de seno (x) versus x MATLAB abriré ume Janela de Figuras e desenhard a fungSo seno (x) dentro dela. O desonho resultante é exibido na Figura 1.6 1.3.7 0 Espago de Trabalho MATLAB Uma declaragao da forma z= 10 ccria uma varidvel denominada z, armazena 0 valor 10 nessa variavel e a grava em uma parte da meméria do computador denominada espago de trabalho. Um espaco de tra- balho é a colegio de todas as variaveis e matrizes que podem ser usadas pelo MATLAB quando um comando, arquivo M ou fungao em particular esta em execugao. Todos os ‘comandos executados na Janela de Comandos (e todos os arquivos de script executados a pattir da Janela de Comandos) compartitham um espago de trabalho comum, para que eles possam compartihar varidveis. Conforme veremos neste livro, as fungdes MATLAB diferem dos arquivos de script, pois cada fungio tem seu préprio espago de trabalho separado. " Uma lista de todas as variaveis e matrizes no espaco de trabalho corrente pode ser gerada por meio do comando whos. Por exemplo, apés executar 0s arquivos calc_area e sin_x, 0 espago de trabalho contém as seguintes variéveis: >» whos Nane Size Bytes Class area bd 8 double array radius 1xl 8 double array et 1x32 64 char array x 1x61 488 double array ¥ 1x61 488 double array id total is 156 elements using 1056 bytes CO arquive de script calc_area criou as variveis area, radius e string, eo arquivo de script s in_x criow as varidveis x e y. Observe que todas as variaveis estao no mesmo ‘espaco de trabalho. Se dois arquivos de script forem executados sucessivamente, 0 segundo arquivo de script poders usar varidveis criadas pelo primeiro, ( contetido de qualquer variavel ou matriz pode ser determinado pela digitacio do nome apropriado na Janela de Comandos. Por exemplo, 0 conteddo de string pode ser obtido da seguinte forma: >» string string = ‘The area of the circle is 19.635 ‘Uma varivel pode ser apagada do espago de trabalho usando o comando clear. Esse comando tem a seguinte forma: clear varl var2 onde var € var? sio os nomes das variéveis a serem apagadas. O comando clear variables, ou simplesmente clear, apaga todas as varidveis do espaco de trebalho corrente, 1.3.8 0 Navegador do Espago de Trabalho (© contesido do espaco de trabalho corrente pode também ser examinado por meio do Navegador do Espaco de Trabalho baseado em GUI. Na configuragio bésica, 0 Nave- gador do Espaco de Trabalho aparece no canto superior esquerdo da érea de trabalho, Por meio dele, temos uma apresentagio gréfica da mesma informago dada pelo co- ‘mando whos, € 0 que é apresentado 6 atualizado dinamicamente cada vez que tmuda 0 contetido do espaco de trabalho. © Navegador do Espaco de Trabalho também permite que um ustrio modifique o contetido de qualquer varidvel no espago de trabalto, ‘Uma tipica Janela do Navegador do Espaco de ‘Trabalho ¢ exibida na Figura 1.7. Como vocé pode ver, ela exibe a mesma informacio que o comando whos. Clicat duas vezes sobre qualquer variavel na janela aciona o Editor de Matrizes (Figura 1.8), que Permite que 0 usuario modifique a informagdo armazenada em uma varidvel, — Figura 1.7 4 > [iaveen Fad Workspace ‘ONavegador do Espaco de Trabalho, ana ora RATS] | soe Fw , x Tat Ts a eee eee 0 ase Figura 1.8 © Fiditor de Matrizes € acionado clicando duss vezes sobre uma varidvel no Navegador do Espaco de Trabalho. O Efitor de Matrizes permite que 0 ususrio rodifique os valores contidos em uma varidvel ou matriz, Capitula t dnteodupdo ao MATLAB | 13, #9 +a) 1" Seisicina [© Finding Functions and Properties 2 Bevan Bien TP eStecre sence Becwecsaor Printing the Documentation Figura 1.9 © Navegador de Ajuda Uma ou mais variaveis podem ser apagadas do espago de trabalho pela selecio com o mouse e utilizagao da tecla Delete, ou clicando com o botio direito do mouse e selecionando a opgao de apagar. 1.3.9 Obtendo Ajuda Vocé pode obter ajuda no MATLAB de trés maneiras. © métode preferido € utilizar 0 Navegador de Ajuda. Vocé pode iniciar 0 Navegacor de Ajuda selecionando 0 fcone de Ajuda localizado na barra de ferramentas, ou digitando he1pdesk ou help na Janela de Comandos. E possivel também obter ajuda navegando pela documentagio do MATLAB, ou voc’ pode procurar os detalhes de um comanda em particular. © Navegador de Ajuda € mostrado na Figura 1. Existem também duas formas baseadas em linhas de comando para obter ajuda. A Primera forma é digitar help ou hep seguido de um nome de fungSo na Janda de Comandos. Se voce digitar somente help, 0 MATLAB exibiré uma lista de possiveis S6picos de auda na Janela de Comandos, Se uma fungio especfica ou nome de conunto de ferramentas for acrescentado, seré apresentada ajuda para aquela fancio ot con- junto de ferramentas especitio. ‘Asegunda maneira de obter ajuda 6 0 comando Look for. Ele difere do comando help, pois este procura por un nome de funcéo que case perfeitamente com 0 forne- cido, enquanto 0 comando lookfor pesquisa informagao resumida e répida para cada fanggo. Assim, 0 comando Looktor é mais lento que o help, mas aumenta a chance de fomnecer informagio util. Por exemplo, suponha que vocé esteja procurando uma fungio para inverter uma matriz. 0 MATLAB nao tem uma funcio chamada inverse, assim, 0 comando help inverse no encontrar nada. Por outro lado, 0 comando lockfox inverse apresentard os seguintes resiltados: >» lookfor inverse INVHILB Inverse Hilbert matrix. ACOS. Inverse cosine. ACOSH Inverse hyperbolic cosine ACOT Inverse cotangent ACOTH Inverse hyperbolic cotangent ACSC Inverse cosecant. ACSCH Inverse hyperbolic cosecent ASEC Inverse secant ASECH Inverse hyperbolic ASIN. Inverse sine. ASIN Inverse hyperbolic sine. ATAN Inverse tangent. ATAN2 Four quadrant inverse tangent. ATANH Inverse hyperbolic tangent. ERFINV Inverse error function. INV Mat PINV Pseudoinverse. IFFT Inverse discrete Fourier transform IPT? Two-dimensional inverse discrete Fourier transform. IFFIN N-dimensional inverse discrete Fourier transform. IPERMUTE Inverse permute array dimensions Com essa lista, podemos verificar que a funcio de interesse se chama inv. 1.3.10 Alguns Comandos importantes Se vocé esté iniciando no MATLAB, algumas demonstragdes podem ajudar a fornecer luma idéia de seus recursos. Para executar as demonstragdes fornecidas ro MATLAB, digite demo na Janela de Comandos, ou selecione “demos” do Espago de Langamento. (© contesido da Janela de Comandos pode ser esvaziado a qualquer momento usando o comand cic, eo contetide da Janela de Figuras corrente pode ser esvaziado fa qualquer momento usando 0 comando cl. As varidveis no espaco de trabalho podem ser esvaziadas com 0 comando clear. Conforme jé visto, o contetido do espago de trabalho persiste entre execugSes de comandos e arquivos M separados, por iss0 & possivel que os resultados de um problema tenham efeitos sobre 0 outro que vocé tenta resolver, apr hmeOOR ae TORN NS Para evitar essa possibilidade, uma boa idéia ¢ usar 0 comando clear no inicio de cada célculo independente, Outro comando importante 6 o abort. Se um arquivo M der a impressao de estar executando por tempo demasiado, ele pode conter um lago infinito e nunca temminar. Nesse caso, 0 usuario pode recuperar 0 controle digitando control-c (abreviade como sc) na Janela de Comandos. Esse comando € digitado pressionando a tecla Control e digitando “c” a0 mesmo tempo. Quando o MATLAB detecta um *c, ele interrempe 0 programa em execucio e devolve um marcador de comandos. ponto de exclamagao (1) € outro caractere especial importante. Seu uso especial 6 enviar um comando para o sistema operacional do computador. Qualquer caractere depois do ponto de exclamacio ser enviado para o sistema operacional e executado como se tivesse sido digitado na linha de comando do sistema operacional. Isso permite a inclusdo de comandos de sistema operacional diretamente em programas MATLAB. Finalmente, voc? pode acompanhar tudo o que for feito durante uma sessio MATLAB por meio do comando diary. A forma desse comando é diary nome do arquivo ‘Ap6s digitar esse comando, uma cépia de todos os dados de entrada e da maioria dos dados de saida digitados na Janela de Comandlos € ecoacdla no arquivo didtio, Bsa é uma excelente ferramenta pata recriar eventos quando algo sai errado durante uma sessd0 MATLAB. O comando diary off suspende a entrada de dados no arquivo de idtio, eo comando diary on reiniciaos dados de entrada 1.3.11. 0 Caminho de Busca MATLAB OMATLAB utiliza um caminho de busca para encontrar os arquivos M. Os arquivos M do MATLAB sio organizados em diretrios em seu sistema de arquivos. Muitos desses diretérios de arquivos M sao fornecidos junto com 0 MATLAB, e os usudrios podem adicionar outros. Se um ustario insere um nome diante do marcader do MATLAB, 0 interpretador MATLAB tenta encontrar o nome da seguinte forma 1. Ele procura pelo nome como uma variével. Se ele for uma variavel, o MATLAB exibe 0 contetido corrente da variavel. 2. Ele verifica se o nome é uma fungio ou comando predefinido.Se for, o MATLAB executa a fungio ou comando. 3, Ble verifica se o nome é um arquivo M no diretério corrente, Se for, o MATLAB executa a funcio ou comando. 4. Ble verifica se o nome é um arquivo M em qualquer diret6rio no caminto de ‘busca, Se for, o MATLAB executa a fun¢ao ou comando. Observe que 0 MATLAB verifica primeira os nomes de varidveis, portanto, se vocé definir uma varidvel com 0 mesmo nome de uma funcio ou comando MATLAB, 16 | Pograrto em MATA para Engetros aquela fungio ou comando se tornard inacessivel. Esse ¢ um erro comum cometide por ‘usudrios novatos, Erros de Programagao Nunca use uma varivel com nome igual ao de uma fungio ou comando MATLAB. Se ‘voc fizer isso, aquela funcio ou comando ficaré inacessivel. Além disso, se houver mais de uma fungi ou comando com © mesmo nome, 0 primeiro encontrado no caminho de busca sera executado, e os outros permanecerio inacessiveis. Iss0 6 um problema comum para novatos, pois as vezes cles criam arquivos M. com nomes iguais aos de fungGes MATLAB-padrao, o que toma esses arquivos inacessiveis, Erros de Programagao Nunca erie um arquivo M com nome igual ao de uma funcio ou comando MATLAB, OMATLAB contém um comando especial (hich) para ajudara descobrir qual ver- io de um arquivo esté sendo executada, e onde ele estélocalizado. Isso pode ser util para descobrir conflitos de nomes de arquivos. O formato desse comando which nome da fungao, onde nome da funcdo é o nome da fungao que voct esta tentando localizar. Por exemplo, a fungio de produto cartesiano cross .m pode ser localizada asin: > which crose D: \Mat 1abRi2\toolbox\matlab\ spec: n\eross.in caminho de busca do MATLAB pode se: analisado e modificado a qualquer ‘momento pela selegio do Caminho de Busca no Espago de Langamento, ou digitando edittpath na Janela de Comandos. O Caminho de Busca esta apresentado na Figura 1,10. Ele permite que 0 usuério acrescente, remove ou modifique a ordem dos diretsrios no caminho. Outras fungdes relacionadas com caminhos so: + edapath —_Adiciona um diretério ao caminho de busea do MATLAB. + path Exibe 0 caminho de busca do MATLAB. + path2re —Adiciona o diretdrio correate ao caminho de busca do MATLAB. «empath Remove um diretsrio do caminho de busca do MATLAB, 1.4 Utilizando o MATLAB como Prancheta de Rascunhos Em sua forma mais simples, o MATLAB pode ser usado como prancheta de rascunhos para efetuar cdlculos matemticos. Os célculos slo digitados diretamente na Janela de Comandos, usando os simbolos +, -,”, / e para soma, subtragao, multiplicagio, divisio Captus 1 necyzo zones | 17 CED 0) x! -Alenanges the oot nme esr naowen curios. | e ove Ton =n eoboematebons 1 aoboraabang 21 Ztobasmatebelt [So wares 2ctocratanenn |Somsrateizoototmatsbepectin [So marane1zoonoematanmann [So waraee1 mooboematsbstae [So mstate12eotosmatabaio |Somateoe12wopoemarcbovan [So watste12abotmatebetn |Enowstseetotboematatisparin 4 sme _| cow | newt | _ ovat ie Figura 4.10 A Ferramenta de Caminhos. € poténcia, respectivamente. Apés digitar uma expressio, o resultado ¢ automat ‘mente calculado e exibido. Por exemplo, suponha que queiramos calcular 0 volume de ‘um cilindro de raio r ealtura A drea do circulo na base do clindro é dada pela equacio A=nt ay 0 volume total do cilindro é al a2) Se 0 1aio do cilindro & de 0,1 m e a altura é de 0,5 m,o volume do cilindro pode ser obtido usando as declaragSes MATLAB (as entradas do usuario so apresentadas em negrito > A= pi * 0.12 0.0314 >VveaAt OS 0.0187 Observe que pi € predefinido com o valor 3,141592... Observe também que ¢ valor armazenado em A foi preservado pelo MATLAB e reutilizada no célculo de V. oe ‘ 18 | Pogamagde om M49" para Ergenteres Neste teste, faremos uma verificagdo répida da sua compreensio dos conceitos apre- sentados no Capitulo 1. Se vocé tiver dificuldades com o teste releia as segGes, consulte seu professor ou discuta 0 material com um colega. As respostas estao no Apéndice B. 1. Qual € a fungio da Janela de Comandos MATLAB? E a da Janela de Edi- Bo/Depuraglo? E a da Janela de Figuras? 2. Liste as diferentes maneiras de obter ajuda no MATLAB. 3. O que é um espaco de trabalho? Como voce pode determinar 0 que esté arma- zenado em um espaco de trabalho MATLAB? 4, Como vacé pode limpar 0 contetido de um espaso de trabalho? 5. A distancia percorrida por uma bola em queda livre 6 dada pela equagio. t+ at atates Use 0 MATLAB para calcular a posigio da bola no tempo !=5 8 se x)= 10m, v= 15 m/sea=-981 m/s? 6, Suponha que x= 3 ey = 4. Use o MATLAB para avaliar a seguinte expressio: 2p ow As questies abaixo devem auxilid-lo a familiarizar-se com as ferramentas MATLAB. (Ge tiver uma versio do MATLAB anterior 3 6.0, vocé pode sentir certa dificuldade ‘com algumas questies, pois algumas ferramentas sio diferentes em versées mais antigas do MATLAB.) 7. Execute os arquivos M calc_area.m ¢ sin_x.m na Janela de Comandos. Depois, utilize o Navegador do Espago de Trabalho para determinar quais va- ridveis estio definidas no espaco de trabalho corrente 8, Use 0 Editor de Matrizes para examinar ¢ modificar 0 contetido da variavel x ro espaco de trabalho. Entio, digite o comando plot (x.y) na Janela de Comandos. O que acontece com os dados exibidos na Janela de Figuras? Neste capitulo, estudamos os tipos basicos de janelas MATLAB, o espaco de trabalho e como obter ajuda online. A drea de trabalho MATLAB surge quando iniciamos 0 pro- grama. Ela integra muitas das ferramentas do MATLAB em um dinico local. Dentre fessas ferramentas, temos a Janela de Comandos, a Jancla de Histérico de Comandos, © Espago de Langamentos, 0 Navegador do Espaso de Trabalho, o Editor de Matrizes apts 1 ineoauto ao usrias | 19 ‘0 mostrador do Diretsrio Corrente. A Jancla de Comandos & a janela mais importante: nla, todos os comands sio digitados e os resultados sio apresentados. A Janela de Edigio/Depuragio é usada para criar ou modifcar arquivos M. Ela exbe 0 contetdo do arquivo M com uma codificagio de cores por fungio: eomentério, palavras-chave, cadeias de caracteres, e assim por diante. ‘AJanela de Figuras ¢ uilizada para exbir gréficos. Um usudrio MATLAB pode obter ajuda por meio do Navegador de Ajuda cu das fangbes de ajuda em linha de comando help e look for. O Navegador de Ajuda possibilita acesso total a documentagio MATLAB. A funcio de linha de comando help apresenta ajuda sobre fungSes especificas na Janela de Comandos. Infelizmente vvect precisa saber 0 nome da fungSo para obler ajuda sobre ela. A funcio Locke for procura uma cadeia de caracteres na primeira linha de comentirios de todas as fungbes MATLAB e exibe os casamentos Quando um usuario digita um comando na Janela de Comandos, 0 MATLAB pro- cura o comandlo nos diretérios especificados no caminho MATLAB. O MATLAB exccuta « primeire arquivo M no caminho que casa com o comando, e qualquer outro arquive M com 0 mesmo nome nunca é encontrado. A Ferramenta de Caminho pode ser usada para adicionar, remover ou modificar dretdrios no camino MATLAB, 1.5.1 Resumo do MATLAB O resumo abaixo lista todos os simbolos especiais MATLAB descritos neste capitulo, juntamente com uma breve descrigSo de cada um. Simbolos Espec + Soma = Subtragio + Maltiplicagao 1 Divisa 1.6 Exercicios 11. As seguintes declaragies MATLAB desenham a fungio y(x) = 2e-2 para o inter- valo 0x10, x = 0:0.1:10; y= 2 * exp( -0.2 * x); plot (x,y) Utilize a Jancla de Ediggo MATLAB para criar um novo arquivo M, digite essas declaragées no arquivo e grave o arquivo com o nome test} .m. Execute o programa digitando o nome test I na Janela de Comandos. Que resultado vocé obtémn? 1.2. Obtenha ajuda a respeito da funcio MATLAB exp usando: (a) 0 comando “help exp” digitado na Janela de Comandos e (b) 0 Navegador de Ajuda, 20 13 14 18 18 Ww 18 1 Pramopto em MANAB® pera Expres Utilize 0 comando Look or para determinar como obter o logaritmo base 10 de ‘um ntimero em MATLAB. Suponha que «= 1 v «3, Avalie as expresses a seguir usando 0 MATLAB: au * 30 2» b, wae 2 {= dae 3 Utilize o Navegador de Ajuda do MATLAB para encontrar o comando necessério para mostrar o diretério corrente MATLAB, Qual ¢ 0 diretério corrente quando ‘© MATLAB 6 iniciado? Utilize o Navegador de Ajuda do MATLAB para descobrir como criar um novo diretério de dentro do MATLAB. Crie um novo dizetério, denominado myniewdir, s0b o diretério corrente, Coloque esse nove diretério no topo do caminho MATLAB. Modifique o diretério corrente para my cione as seguintes linhas: wudiix. Abra uma Janela de Edigio e adi- % Create an input array from -2*pi bs -2epispi/10:2*pi; to 2¢pi 4 calculate Iein(t) | % = abs (sin(t}): % Plot result plot(t,x); Grave o arquivo com 0 nome test2..me execute-o digitando test? na Janela de ‘Comendos. O que acontece? Feche a Janela de Figuras e retorne ao diret6rio original do inicio do MATLAB. Digite “test2” na Janela de Comandos. O que acontece, e por qué? Capitulo 2 MATLAB Basico Neste capitulo, vamos apresentar alguns elementos bésicos da linguagem MATLAB. No final, vocé deve ser capaz de escrever programas MATLAB simples, porém funcionais. 2.1 Varidveis e Matrizes ‘A.unidade fundamental de dados, em qualquer programa MATLAB, 6a matriz. Matriz ‘uma colegio de valores de dados organizados em linhas ecolunas, conhecidos por um nome nico (ver Figura 21). Valores individuais de dados em uma matrz si acessados por meio do nome da matriz, seguido de indices entre parénteses que identificam 2 linha e a coluna do valor particular. Mesmo os escalares 630 tratados como matrizes NO MATLAB ~ cles sfo simplesmente matrizes com somente uma linha e uma colina, Matrizes podem ser classificadas como vetores ou matrizes propriamente ditas, © termo “vetor” geralmente descreve uma matriz.com somente uma dimenslo, enquanto © termo “matriz" costuma ser usado para descrever matrizes com duas ou mais di- rmensies. Neste texto, vamos usar 0 temo vetor na discussio de matrzes unidimen- slonais,€ 0 termo matriz na discussio de matrizes com duas ou mais dimensdes. Se "uma diseussio em particular se apicar aos dois tipos de matrzes,usaremos também 0 termo genérico “matriz" © tamanho de uma matriz é especificado pelo niimero de linhas e de colunas, sendo 0 niimero de linhas apresentado antes. O niimero total de elementos da matei2 sez4 0 produto do msimero de linhas e o mero de colunas. Por exemple, os tamanhos das matrizes a seguir si: INI: No original em ings temo genic ary, fend temo mai eservado para mateizes com das cu main dimensdes Nesta traducio, explcitaremos quand estvermosfalando de matnizes em eral ou de matizes com necestariamente dis o4 mais dimens. | 22 | Proganacio om MATAR? para Enenteros nha 1 —> nha 2—> Lita 3—> inna 4—$> | fiiid Colt Col.2 Col. Cold COL mmatiz are Figura 2.1 Uma matriz é uma colegio de valores de dados organizados em linhas ¢ colunas Amatri2 ar exibida aqui é composta por 20 elementos, organizados em quatro linhas cinco colunas. O elemento destacado nessa matrix seria identificado como arr (3,2) Mati. Tamanho - 12 = ]34] Esse éumamatrie 3 +2.que contin 6 elementos 56. b=[123 4] Esse Guma mate 14 conhecida comoum vetorlinks: contém & lementos 1 e-|2 Essa 6 uma matriz 31, conhecida come vetorcoluna contém 3 elementos. a Elementos individuais na matriz sio identificados pelo nome da matriz, seguido da linha e da coluna do elemento em particular. Se a matriz é um vetor linha ou co- luna, somente um indice é requerido. Por exemplo, nas matrizes acima, a (2,1) = 3 eci2) = 2 Uma varidvel MATLAB 6 uma rogi3o de memoria que contém uma matriz, conhecida por um nome especificado pelo ususro. O contetido de uma matriz pode ser utilizado ou modificado a qualquer momento pela inclusao de seu nome em um co mando MATLAB apropriado. apts 2 arias sisco | 28 (Os nomes das varidveis MATLAB precisam iniciar com uma letra, seguida de qualquer combinacio de letras, mimeros e o simbolo de sublinhado (_). Somente os primeizos 31 caracteres sio significativos; se mais do que 31 caracteres forem utilizados, fs caracteres restantes serio ignorados. Se duas varidveis forem declaradas com dife- renga somente no 32? caractere, o MATLAB as trataré como a mesma variavel. Certifique-se de que os nomes de variiveis sejam tnicos nos primeiros 31 caracteres, Caso contririo, o MATLAB nio poder diferenciar as varidveis. ‘Ao escrever tum programa, ¢ importante escolher nomes com significado para as variaveis. Nomes com significado tomam um programa muito mais ficil de ler e man- ter, Nomes como dia, mes e ano sio claros até mesmo para alguém que vé o programa pela primeira vez. Como os espacos ndo podem ser usados em nomes de varidveis, MATLAB, o caractere de sublinhado pode ser usado para criar nomes com significado. Por exemplo, taxa de cimbio pode ser representada como taxa_de_canbio, Basic ran Programagao: Sempre use nomes descritivos e féceis de lembrar para suas variaveis. Por exemplo, uma taxa de cimbio poderia ser chamada de taxa_de_cambio. Essa pritica tomard seu programa mais claro e fécil de entender. F tamlsém importante incluir um dicionério de dados no cabecalho de qualquer programa que vocé escrever. Um dicionario de dados lista a defini de cada varidvel Usada em um programa. A definigio deve incluir uma descrigio do conteido © as unidades de meclidas usadas, Um diciondrio de dados pode parecer desnecessério enquanto 0 programa esté sendo escrito, mas é de grande vlor quando vocé ou outra pessoa precisa voltar para 0 programa posteriormente, [lbs Pratica de Programagag: 2 rie um dicionatio de dados para cada programa, a fim de tomar mais fécil a ‘manutengio dos programas. Be 7 ‘Allinguagem MATLAB é sensivel & capitalizagao, o que significa que letras mais culas e minisculas nio so a mesma coisa. Assim, as Varldveis name, NAME e Nane S80 diferentes no MATLAB. Vocé precisa ser cuidadoso no uso de capitalizagio ao em- \ 24 | Powranagso om MATLAe® gre Eger: pregar uma varidvel. Embora nao seja requerido, éusual utilizar caixa baixa para nomes de variaveis ordindtias. Boa Prética de Programagao Verifique se vocé capitaliza uma variével exatameate da mesma forma cada vez que ela € usada. Uma boa pritica é usar sempre caixa baixa em nomes de varidveis. s tipos mais comuns de varisveis MATLAB so Gouble e char. Variéveis do tipo double sio escalares ou matrizes de 64 bits com ntimeros de dupla precisio e ponto flutuante, Elas podem representar valores reais, imaginérios ou complexos. O3 Componentes reais © imaginérios de cada varidvel podem ser nimeros positivos ou negativos, variando de 10° a 10%, com 15 a 16 digitos decimais de precisio. S40. tipo numérico principal de dados no MATLAB. Uma varidvel do tipo double € criada automaticamente quando um valor numérico ¢ associado a um nome de varidvel. Por exemplo, a declaracio a seguir cria uma variavel de nome var contendo um elemento tinico de tipo double, e armazena © valor complexo (1 + i) nela. var = 14 i; sie Nels tip cha sh compass por eae xmas com valores 16 its, cada uma representando um nico carsetere Maries dese tipo of usadas para Cadel de caracteres.Sio cradas automaticamente quando um Caractere nice ou uma cada de caacteres io assoiados a um nome de varvel. Por exemple, deca rao abaixo cia uma varavel do tipo char com come coment armazeng a cada topecticada ela, Uma ver executada a declarajio, coment serd uma mattis de caracteres de 1x26, comment = ‘Isso é uma cadeia de caracteres’; Em linguagens como C, o tipo e o nome de cada varidvel precisam ser declarados explicitamente em um programa antes de usar a varidvel. Essas linguagens sio chamadas de tipos fortes. Em contraste, MATLAB & uma linguagem tipos fracos, Varidveis podem ser criadas a qualquer momento simplesmente associando valores a elas, e 05 tipos de dados associados 8 varidvel determinam o tipo de variavel criada, 2.2 Iniciando Varidveis no MATLAB Variaveis MATLAB sio criadas automaticamente cuando iniciadas. Existem trés formas comuns de iniciar uma variével em MATLAB: 1, Associar dados 8 variavel em uma declarasio apropriada, 2. Fornecer dados a variavel pelo teclado, 3. Ler dados de um arquivo. opiate? KaAB isco | 25 ‘As duas primeiras maneiras serdo discutidas aqui; a terceira abordagem seré discutida na segio 27. 2.2.1 Iniciando Varidveis em Expressées de Atribuigao ‘Aforma mais simples de criar e iniciar uma varidvel & associar um ou mais valores em uma declaragio de atribuigio. Uma declaracao de atribuigao tem a forma geral var = expressao onde var 0 nome de uma varidvel e expressdo é uma constante escalar, uma matriz ‘ou a combinacio de constantes, outras variaveis e operagées matemsticas (+, ~ etc). valor da expressao é calculado por meio das regras normais da matematica, ¢ 0 resul- tado 6 armazenado na variavel. Exemplos simples de variaveis iniciadas com decla- ragies de atribuiggo sio: var = 40%i; var2 = var / 5; array = (123 4); x= diy =2 O primeito exemplo cria um escalar do tipo double e armazena o nimero imagindrio 49i nele. O segundo exemplo cria uma variavel escalar var? e armazena o resultado da expressio var /5 nela.O terceiro exemplo ria uma varivel array e armazena nela um vetor linha de quatro elementos. O tiltimo exemplo mostra que declaragbes muitiplas de atribuigfo podem ser colocadas em uma mesma linha, desde que elas sejam sepa- zadas por virgula ou ponto-e-virgula, Observe que, se alguma das varidveis jd existisse durante a execugio da declaragi0, os contetidos anteriores seriam perdidos. Conforme mostra 0 terceiro exemplo, variéveis podem também ser iniciadas com ratrizes de dados. Essas matrizes sio construidas com 0 uso de colchetes ((}¢ ponto- e-virgula. Todos os elementos de uma matriz sio listados por linha. Em outras palavras, 0s valores de cada linha sio listados da esquerda para a divita, com a linha de cima primeito ea linha de baixo por tltimo. Valores individuais em uma linha sio sepacados por brancos ou por virgulas, eas linhas séo separadas por ponto-e-virgula ou noxas i has. As expressGes a seguir so todas matrizes sintaticamente corretas que podem ser usadas para iniciar uma varidvel GB.) Essa expressio cria uma matriz 1 x 1 (um escalar) {que contém 0 valor 34. Os colchetes nio sio reces- Essa expressio cria uma matri2 1 3 que contém 0 vetorlinha [123] Essa expressio cria uma matriz 3 x 1 com 0 vetor wl] 28 | Pramas om MATLAB gre Egenies (8. 2, 35 4, 5, 6] Blan expresi a una mati 23 gue contin mate 23] ree aa fae eps ia una mati 23 que conn 63a rts [2 23] Ott ce pera tbe cnr 45 6 m Tin a primeira linha da matriz, a Essa expressio cria uma matriz vazia, que nio con- tém linhas nem colunas, (Observe que iss0 nao é a ‘mesma coisa que uma matriz com zeros.) Observe que o niimero de elementos em cada linha de uma matriz precisa ser 0 ‘mesmo. O niimero de elementos em cada coluna também precisa ser 0 mesmo. Uma expressio como (235; 451 ¢ legal, pois a linha 1 tem trés elementos ea linha 2 tem somente dois elementos. Sree tronanett (© mtimero de elementos em todas as linhas de uma matriz precisa ser o mesmo, ¢ 0 nti- mero de elementos em todas as colunas também. Tentar definir uma matriz com ruimeros diferentes de elementos nas linhas ou nas colunas produziré um erro quando a declaracio for executada, MATE RR As expresses utilizadas para iniciar matrizes podem incluir operagbes algébricas a totalidade ou partes de matrizes previamente definidas. Por exemplo, as declaragbes de atribuicio a= (0 167)7 b= (a(2) 7 aly definirdo uma matriz a = (0 8) eumamatrizb = [8 7 0 8] Nem todos 0s elementos de uma matriz precisam estar definidos quando el criada, Se um elemento especifico da matriz estiver definido e um ou mais elementos antes dele ndo, 03 elementos anteriores sero automaticamente criados e iniciados com ‘0 valor zero. Por exemplo, se c nao foi previamente definido, a declaragio (2, 3) 000 oo pela especificagio de um valor para um elemento adiante do tamanho definido, Por exemplo, suponha a matriz d = [1 2}. Entdo, a declarac3o ai = 4; produsirda matiiee = [ De maneira similar, uma matriz pode ser estendida produzirdamatrizad - [1 20 4]. apie? marutssisco | 27 © ponto-e-virgula no final de cada declaragio de atribuigio anterior tem uma fungio especial: ele suprime o eco autematica de valores que ocorre normalmente quando ‘uma expressio ¢ avaliada em uma declaracao de atribuigéo. Se uma declaragio de atribuigdo & digitada sem 0 ponto-e-virgula, os resultados da declaragao sio automati ‘camente exibidos na Janela de Comandos. Des (1, 2 3) 4 5, 6) 203 45 6 Se um ponto-c-virgula é colocado no final da declaragio, 0 eco desaparece. O eco éuma forma excelente para verificar rapidamente o seu trabalho, mas ele atrasa seriamente a execugdo de programas MATLAB. Por essa razo, normalmente suprimimos 0 eco 0 tempo todo. [Ecoar os resultados de célculos, entretanto, uma étima técnica pritica de depuragio, Se voce nao esta seguro a respeito dos resultados de uma declaracio de atribuigao espe- ‘ifca, simplesmente nao coloque o ponto-e-virgula na declaragao: os resultados sero exibidos na Janela de Comandos assim que a declaracao for executada. [Be Pratica de Propramagao Use um ponto-e-virgula no final de todas as declaragées de atribuigéo MATLAB para suprimir 0 eco de valores atribuidos na Janela de Comandos. Isso acelera muito a exe- custo dos programas. Be fia Pratica de Programagao Se for preciso examinar of resultados de uma declaragao durante a depuracio ée um. programa, voce pode remover o ponto-e-virgula daquela declaragéo para que seus resultados sejam ecoados na Janela de Comandos. B 2.2.2 Iniciando com Expresses de Atalho E simples ciar pequenas matrizeslistando explicitamente cada termo na matri, mas 0 {que torre se a maria contivercentenas ou mesmo milhares de elementos? Nao & pr co escrever separadamente cada elemento da matrz! {© MATLAB tem uma notagio especial de atalho para esas ccunstancias, i zando 0 operador dois-pontos. O operador dois-pontos especifica uma série de valores | | | A { j ui £8 | Programazdo em MATLAG® pare Engeabeiras pela especificagio do primeiro valor na série, o passo de incremento e o tiltimo valor na série. A forma geral de um operador dois-pontos é prim: incr:1timo onde prim ¢ 0 primeiro valor na sériv, incr ¢ o passo de ineremento e tiltimo & 0 GL timo valor na série. Se o incremento for um, ele pode ser omitido. Por exemplo, a expresso 1:2:10 € um atalho para um vetor-linha de 1 x 5 com os valores 1, 3, 5,79. > x = deaet0 1305 7 8 Com a notagao de dois pontos, uma matriz pode ser iniciada com 05 cem valores Ei, 2k, ow Reda seguinte maneita: ig” i ‘saint angles = (0,01:0,01:1) * pir Expresses de atalho podem ser combinadas com 0 operador de transposigio (’) Para iniciar vetores coluna e matrizes mais complexas, O operador de transposiga0, ‘roca linhas e colunas de qualquer matriz & qual ele seja aplicado. Assim, a expressao, f= [ieaye; .gera um vetor linha de quatro elementos {1 2 3 4], e depois transpée esse vetor no vetor 1 coluna de quatro elementos £ = De maneira similar, as expressdes, 3 4 get hs [g's produzem a matrizh = 2.2.3 Iniciando com Fungées Predefinidas Matrizes também podem ser iniciadas por meio de fungées predefinidas do MATLAB, Por exemplo, a fungao zeros pode ser usada paracriar uma matriz de zeros do tamanho desejado, Existem muitas formas de fungao zeros, Se a fungao tiver um tinico argu- mento escalar, ela produziré uma matriz quadrada wtilizando 0 argumento tinico como Ontimero de linhas e de colunas da matriz. Se a funcio tiver dois argumentos escalares, © primeiro argumento seré o namero de linhas eo segundo argumento sera o nimero de colunas. Como a fungao 91 2e retoma dois valores com onntimero de linhas e de colu- ‘nas na matriz, ela pode ser combinada com a fungio zeros para gerar uma matriz de Capito 2 NATLABBisico | 28 zeros com 0 mesmo tamanho de outra matriz, Alguns exemplos de uso da fungio zeros sio apresentados a seguir a = zeros(2); b = zeros (2,3); c= 2; 3 4); d= zeros (size(c)]; Tabela 2.1 Fungdes MATLAB Uteis para Iniciar Varidveis Fuga Propésito _ per03(n ‘Gera uma matin nde 20s, zeros(n,m) (Gera uma matin xm de 208 rerosisize! (Gera uma matiz de 2ers do mesmo tamanho que ar onesin} Gera uma matriz nn de ans one (Gera uma mati a m de uns ones (size(ers!) Gera uma matriz de uns do mesmo tamanho que sr. Gera uma matric identidade nx 0, Gera uma mitra identidade n= [Retoms o comprininto de um vetor ou a dimensfo malor de uma mati bid ‘mensional dengeniazr) size(are) Retoma dois valores, especificande o mimero de inhas ¢ ode colunas em ar Essas expresses geram as seguintes matrizes: eefool Lo es) “Gal so bal ‘De maneira similar a fungao ones pode ser usada para gerar matrizes que contém uns, e a fungi eye pode ser usada para gerar matrizes identidade, nas quais os ele- ‘mentos da diagonal principal sio uns e os outros elementos sio zeros. A Tabela 2.1 apre- senta uma lista de fungdes MATLAB comuns e tteis para iniiar variaveis 2.2.4 Iniciando Variéveis com Entrada pelo Teclado Também 6 possiveliniciar uma variavel com dados digitados diretamente pelo teclado. Essa opcio permite que um arquivo de script solicite ao usuério a entrada de valores durante a execusio. A funcio input exibe um marcador na Janela de Comandos ¢ espera o usudrio digitar uma resposta, Por exemplo, considere a seguinte expressio: my_val = input (‘Enter an input value:'); (ee 1 rrogramagao em MALLALS™ para tagenneiras: Quando essa expressdo € executada, o MATLAB escreve a cadeia “Enter an input value: e espera a resposta do usuario, Se o usuério fornece um tinico mimero, 0 nniimero pode ser digitado, Se o usurio fornece uma matriz, ela precisa ser cercada por colchetes. De qualquer maneira, o que for digitado serd armazenado na varidvel \ my_val quando a tecla Enter for pressionada, Se apenas a tecla Enter for pressionada, ‘uma matriz vazia serd criada e armazenada na varidvel. i Sea fungio input tiver @ caractee "3" como segundo argumento, os dados de \ entrada serio devolvidos para 0 usuéria coms uma cadeia de caracteres Assim a | cexpressio > inl = input (‘Enter data: )) Enter data: 1.23 armazena o valor 1.23 em ind ea expressio » 4nd = input (‘Enter data: ‘,/8/); Enter data: 1.23 armazena a cadeia de caracteres “1.23 em in2, Este teste apresenta uma verificagio répida do seu entendimento dos conceitos apre- sentados nas Sesdes 2.1 ¢ 2.2. Se vocé tiver problemas com o teste, releia as segdes, per- ‘gunte ao seu professor ou discuta 0 material com um colega. As respostas podem ser fencontradas no final do live. 1. Qual a diferenga entre uma matrz e um vetor2 2. Responda as questéesseguintes considerando a mattis abaixo 11-32 34 06 © =[06 11-06 31 1308 55 00 2, Qual o tamanho de c? b. Qual o valor de-o12,3)? . Apresente os indies de tados os elementos cujo valor sia 06 : 3. Determine o tamanho das seguintes matizes, Verfque suas respostasciando { as matrizesno MATLAB e usando ocomando whos ou Navepador do Bape de Trabalho. Observe que as vltimas matrizes podem depender das definigoes de. * ‘matrizes definidas anteriormente neste exercicio, Capitulo? MATLAB Bésico | 31 4, Qual o valor de w(2,11? 5. Qual o valor de x (2,1)? 6. Qual o valor de y (2,1)? 7. Qual o valor de v (3) apés a execugio da expressio (g)? Lina 1 —> : Linhia 1 —> ] Lintia 4—> 7 ‘una A$» fit Colt Gol2 Gol 3 Cold Cah. 5 a2 (Lin, icol} (0) Mate Bicimensional i1in) (@) Matrz Unigimensional Figura 2.2 Representagées de matrizes uni e bidimensionais. 2.3 Matrizes Multidimensionais Conforme vimos, as matrizes MATLAB podem ter uma ou mais dimensSes. Matrizes unidimensionais podem ser visualizadas como uma série de valores colocados em uma coluna, com um tinico indice para selecionar os elementos individuais da matriz (Figura 2.2a), Essas matrizes sio titeis para descrever dados que so fungSes de uma veridvel independente, como uma série de medidas de temperatura efetuadas em intervalos fixos de tempo. Alguns tipos de dados sao fungdes de mais do que uma variavel indepencente. or exemplo, podemos medir a temperatura em cinco localidades diferentes e quatro momentos diferentes. Nesse caso, nossas 20 medidas poderiam ser logicamente 32 Pramagdo am NATLAP oa Enpntirs agrupads em cinco colunas, cada uma contendo quatro medidas, sendo cada coluna reservada para uma localizagio (Figura 22b). Nesse caso, usamos dois indices para acessar Um dado elemento na matri2: 0 primeio indice para selecionar a linha e © segundo para selecionar a coluna. Essas matrizes sio denominadas matrizes bidimen- sionais. © ntimero de elementos em uma matriz bidimensional seré o produto dos _nimeros de linhas e de colunas na matriz. (© MATLAB permite a criagio de matrizes com tantas dimensdes quanto necessrio para um dado problema. Essas mavrizes tém um indice para cada di- mensio, ¢ um elemento individual é selecionado pela especificagio de um valor para cada indice. O mimero total de elementos namatriz sera o produto do valor maxi- mo de catia indice. Por exemplo, as duas expresses seguintes criam uma matriz ¢ de2x3*2: b> e(:,t/2)2(1 23; 45 61; p> b(s,t-2)507 8 9; 10 12 121; >> Whoa © Meme Size Bytes Class. ‘ 2x3x2 96 double array Essa mattiz. contém 12 elementos organizados (2 x 3 x 2), e seu contetido pode ser exibido como o de qualquer matriz. 8 2003 56 8 9 a2 2.3.1 Armazenando Matrizes Multidimensionais em Meméria Uma matriz multidimensional com m linhas e n cclunas conteré m x n elementos, e esses elementos ocupario m x n localizagbes sucessivas na meméria do computador. Como esses elementos sio organizados na meméria do computador? O MATLAB sempre aloca os elementos da matriz.em ordem de coluna ~ ou seja,aloca a primeira coluna na ‘meméria, depois a segunda, depois a terceira, e assim por diante, até que todas as colu ras tenham sido alocadas. Na Figura 23, temos esse esquema de alocagio de meméria [para uma Matriz 4 3 a. Como podemos Ver, o elemento a (2,2) &efetivamente o quinto elemento alocado na meméria. A ordem de alocacio desses elementos na meméria sera importante quando discutirmos enderegamento ce indice tinico, na proxima seco, ¢ as fungdes de E/S de baixo nivel, no Capitulo 8. (O mesmo esquema de alocacio se aplica a matrizes com mais de duas dimensdes, © primeira indice da matriz € incrementado mais répido, o segundo inclice, menos EE ~ Capita 2 maTLAB Bisco | 33 “épido, ¢ assim por diante; 0 ltimo indice ¢ o incrementado mais lentamente. Por esp, em una mati 2» 2* 2, elementos seam aleados na seguintecrdem (LAA), QA1), 2,1), 21, (1.2) (2A2, (1,22), (2.2.2). 2.3.2 Acessando Matrizes Multidimensionais com um Unico Subscript ‘Uma das peculiaridades do MATLAB 6 que ele permite que um usudrio ou pro- gramador trate uma matriz multidimensional como se ela fosse uma matriz Ghidimensional cujo comprimento é igual ao ndmero de elementos na matriz multi- Gimensional. Se uma matriz multidimensional for enderegada por meio de uma tinica dimensao, os elementos serdo acessados na ordem em que foram colecados Por exemplo, suponha a declaragdo de uma matriz de elementos 4 x 3 a ay an aaa ay) a02) (2,2) 13,2) 214.2) aia) (2,3) 203.3) re} ac43) @ © Figuea 2.9 (c) Valores de dados para a matiz 2. (b) Organizagio dos valores na meméra para a mate a 2 34 | Proparasio om MATLAB? pore Engenios seas (223; 45 6; 789; 1042 12) 12 3 4 5 5 7 8 8 10001 aa Ovalor de a (51, entio, sera 2, que € 0 valor do elemento a1, 2), pois a (1,2) foi alo- cado em quinto lugar na meméria Em circunstancias normais, vocé nunca deveria utilizar esse recurso do MATLAB. © enderecamento de matrizes multidimensionais com um indice tinico € uma receita para confusio. Boa Prética de Programagao Sempre utilize 0 niimero apropriado de dimensies ao enderecar uma matriz multi- dimensional. 2.4 Submatrizes E possivel selecionar e utilizar subconjuntos de matrizes MATLAB como se fossem matrizes separadas. Para selecionar uma parte de uma matrz, simplesmente inclua uuma lista de todos os elementos a serem selecionados entre parénteses apds 0 nome da matriz, Por exemplo, suponha que a matriz arri seja definida da seguinte arrt = (1.1 -2.2 3.3 -4.4 5.9); Entdo, arri (3) € simplesmente 33, are2( (1 arri(1:2:5) éamatriz (1.13.3 5.5] Para uma matriz bidimensional, dois-pontos podem ser usados como indice para selecionar todos os valores daquele indice. Por exemplo, suponha que 41) &a matriz (1.1 -4.4) & arr2 6 (12 123 Essa declaragio criaria uma matriz arr2 contende os valores | -2 -3 -4 345 Com essa definigéo, a submatriz arr? (1, :) seria (1 2 3],easubmatriz arr2 ( “i _-4+—- i | ape? ware Bisico | 35 2.4.4 AFungao ena © MATLAB tem uma fungéo especial denominada end, muifo til para criar indices de matrizes. Quando utilizada no indice de uma matriz, a fungdo end re torna o valor mais alto admitido para ele. Por exemplo, suponha que a matriz arr3 seja definida como arg = 112345678 Entéo, arr3(5:end) seriaamatriz (5 § 7 8],earr3 (end) seria valor 8. valor retornado por end é sempre o ualar mais alto de um dado indice. Se end aparece em diferentes indices, ele pode retomnar diferentes valores na mesma expressdo, Por exemplo, suponha que a matriz 3 4 ara seja definida como: area = (123 4; 567 8 9 10.11 121; 678 10 112, meiro end retornou o valor 3, enquanto o segundo end retornou o valor 4! Acxpressio arr4 (2: send) retomariaa mati Observe queo pi 2.4.2 Utilizando Submatrizes no Lado Esquerdo de uma Declaragao de Atribuigao E também possivel utilizar submatrizes no lado esquerdo de declaragdes de atribuigéo para atualizar somente alguns valores da matriz, desde que a forma (0 imero ce inhas ‘ede colunas) dos valores atribuidos case com a forma da sulbmatriz, Seas formas nio casarem, ocorrerd um erro, Por exemplo, suponha que a matriz 3 x 4 arr4 seja defi- rida como: oo arrd = (1.23 4; 5678; 9 10 12 12) arrd = 1 2 a 4 5 6 8 9 1 mB Entao, a seguinte declaracio de atribuicio ¢ legal, uma vez que as expresses nos dois, lados do sinal de igual tém a mesma forma (2 x 2) p> arrd(2:2,(1 4]) = (20 24; 22 23) 20002 3 22 6 7 23 9 10 a 2 30 | Progamapso em MATLAB psro Engenbcas Observe que os elementos (1,1), (14), (1) © 24) da matriz foram atualizados. Contrastando com iso, a express seguir € legal, pois os dois lados nfo tem a >> arr5(1:2,1:2) = [3 4) 22? Bm una stribuigdo A(matriz,matriz) nhas em B 0 mimero de elementos em A matriz precisam ser os mesmos. B, 0 mimero de 1i com linha de indice Erros de Programagao Para declaragdes de atribuigéo com submatrizes, as formas das submatrizes em ambos os lados do sinal de igual precisam casar. © MATLAB geraré tum erro se elas nao casarem, Existe uma diferenga importante, no MATLAB entre atribuir valores a uma submatriz e atribuir valores a uma matriz. Se valores sio atribuidos a uma submattiz, somente aqueles ‘ualores so atualizados e todos os outros valores na matris permanecem inalterades, Por outro lado, se valores sio atribuidos a uma matriz, todo 0 contetido da matrizé apagado e substtuido pels ‘novos valores, Por exemplo, suponha que a matriz 3x 4 arr4 seja definida como: p> arrd = [1.23 4; 5 67 8 9 10 11 12) 12 3 4 5 6 7 8 9 i ul 4 Entio, a seguinte declaragio de atribuigio substitui os elementos especificados de are >> arrd(1:2,{1 4]) = (20 21; 22 23] area 2 2 3 2 22 8 3 9 wm um BD Contrastando com isso, a seguinte declaracio de atribuigio substitui todo o conteido de axed por uma mattiz 2% 2: >> arré (20 21) 22 23] Boa Prética de Programagao Diferencie corretamente a atribuigio de valores a uma submatriz ea uma matriz. 0 MATLAB tem comportamentos diferentes nesses dois casos. fapinle2 wares isco | 37 ~2:4.3 Atribuindo um Escalar a uma Submatriz Um valor escalar no lado direito de uma declaragao de atribuigéo sempre casa com a forma especificada no lado esquerdo. O valor escalar ¢ copiado em todos os elementos cespecificados no lado esquerdo da declaragao. Por exemplo, assuma que a matriz 3x 4 ard seja definida como: arrd = (12345678; 9 10111 esse caso, a expresso abaixo atribui o valor um a quatro elementos da matriz: b> arra(1:2,1:2) = 2 ares = i i 3 4 i 1 1 8 59 1 ou 2.5 Valores Especiais (OMATLAB tem diversos valores especiais predefinidos, que podem ser usados 2 qual- «quer momento, sem terem sido iniciados antes. Uma lista dos valores predefinidos mais comuns é dada na Tabela 22. “ Esses valores predefinidos so armazenados em varidoeis ordindrias, portanto, podem ser sobrescritos ou modificados por um usudtio. Se um novo valor for atribuido a uma das variaveis predefinidas, ele substituird 0 valor fornecido em todos 0s cilculos poste- riores. Por exemplo, considere as seguintes declaracées que calculam a circunferéncia de um cfrculo com raio de 10 em: 2% pit 10 pi = 3. circ2 = 2 * pi * 10 Tabela 2.2 Valores Especiais Prodefinidos Fungio Pepto _ Pi Artazena x com 15 digo sigalfeatives CContim o valor (0), [Ese simbolo representa um infinite de méquina. E usualmente gerado como resultado de divisio por. Nan Esse simbolo signifies No Niimero. le € 0 resultado de uma operasio matemstics infin da, como a dvi de zero por 2670, Essa varisvel especial cntémn a data ea hors correntes na forma de um veto linha d 6 ele rmentos,cotendo ano, més, da, hora, minute esegund, ave Contéma data correnteem formato de cadcia de caracteres, como 24 fepe Ese nome do varivel abrevia epson. Fle representa 3 mente cferenga entre dois mimeros que pode ser representada no computador. tock ‘ane Uma varidvel espacial usada para armazena o resultado de uma expresso, caso ese revllado ‘io soja expictamenteatibuide a ovea vars 38 | Prparapse om MATA ar genes [Na primeira declaraclo, pi tem valor fornecido de3,14159... entdo ciel vale 62,8319, aque é a circunferéncia correta. A segunda declaragao redefine pi para 3, entio, na ter ceira declaragio, circ2 vale 60. Modificar um valor predefinido no programa criow ‘uma resposta incorreta e introduziu um erro sutile dificil de encontrar. Imagine tentar Iocalizar a origem de um erro oculto como esse em um programa de 10,000 linhas! Erros de Programagéo Nunca redefina o significado de uma varidvel predefinida no MATLAB. Essa é uma receita para o desasize, produzindo erros sutise dificeis de encontrar. Este teste apresenta uma verificagao répida do seu entendimento dos conceitos apre- sentados nas seges de 2.3 a 2.5. Se vac® tiver problemas com o teste, releia as secses, pergunte a0 seu professor ou discuta 0 material com um colega. As respostas podem ser encontradas no final do livro. 1. Assuma que a matriz c seja definida como abaixo e determine o contesido das seguintes submatrizes: 11-32 34 06 c=]06 11 -06 34 13°06 «55 00. a c(2,2) b. c(:,end) © c(1:2,2:ena) dd. c(6) fe e(dzena) f c(1:2,22 B ctl 4), he c((2 21,13 31) 2. Determine o contetido da matriz a apds aexecugio das seguintes declaragées: aa= (123; 456; 78 91; a((3 1,2) = all 31s boas (123; 45 6:78 9); (1 3)y2) = al (2 2.2): ea-023; 4567891; a((2 2).2) 3. Determine o contetido da matriz a apds a execugio das seguintes declaragées: aa = eyel3,3) b= (1231; (2.2) = B: | | Capita? MATAB Bisco | 39 ba » ea = eye(3,3): p- (789 (3,2) = b((3 1.2) da = eye(3,3) b= (7 8 3); a(3,t) = (13 2 2N5 ae ee Se 2.6 Exibindo Dados de Saida Bristem muitas maneiras de exibir dados de safda no MATLAB. A mais simples € uma jé vista ~simplesmente nao escreva o ponto--virgula no final da declaragao ¢ eles sero ecoados na Janela de Comandos. Iremos agora explorar algumas outras maneiras de exibir dados. 2.6.1 Alterando o Formato-Padrao Quando dados so ecoados na Janela de Comandos, valores inteiros sfo sempre ‘exibidos como inteiros, e outros valores so impressos com um formato-padrio. © for- ‘mato-padrao para 0 MATLAB exibe quatro digitos depois do ponto decimal, e pode ser exibido com notagao cientifica com um expoente se 0 mimero for muito grande ow ‘muito pequeno. Por exemplo, as declaragbes x = 100.11 y = 1001.1 2 = 0,00010011 produzem a saida 400.1200 ye 1.0011e+003, 1.0014e-004 Esse formato-padrao pode ser alterado com 0 uso do comando format, O comando format altera o formato-padrio de acordo com os valores dados na Tabela 23. 40 | ProgamassoomMATLAg pr egeacns Tabela 2.3 Formatos de Exibigdo de Saida Cote? warasaicico | 41 trolar a maneira como 0s valores slo exibidos. A forma geral dessa fungio, quando uti- lizada para exibir dados na Janela de Comandos, & fprinté (format, data) onde format & uma cadeia de caracteres descrevendo a maneira como os dados deve set exibidos e data & composto por um ou mais escalares ou matrizes para exibigao. A cadeia de caracteres format contém texto a ser apresentado, mais caracteres especiais descrevendo o formato das dados. Por exemplo, a fungio fprinté(‘o valor de pi = $f \h’,pi) Comando de Formato Resutads Example Torat shore 4 digos dedmais(ormato-padrio) 12.3457 format long 1 digits decimais 32.34567890122457 format short © digits mais expoente 2 ,2346e+001 format short ¢ Sigs nototal com ou sem expoente 12.346 format long © 15 digitor mais expoente 1,23456785012345764001 format long @ 1Scigtos no total, com ou sem expoente_12.3456789012346 format bani ats Format hex ———_exibigio hexadecimal de bits s028b0fca32€707a format xa ‘azio aproximada enteineios paquenos 1090/81 format suprime lnhesadicionais format reatabelece as lias adicionais ceibe somenteo sina! do nimero formato-padrio pode ser modificado para exibir mais digitos significativos, forgar a exibigdo em notagao cientifca, exibir dados com dois digitos decimais ow entio eliminar linhas adicionais para que mais dados sejam visiveis por vez na Janela de Comandos. Faga alguns experimentos com os comandos da Tabela 23, 2.6.2 AFunpéo disp (Outra maneira de exibir dados é a fungio disp. Elaaceita uma matriz como argumento «cexibe o valor da matriz na Janela de Comandos. Sea matriz for do tipo char, a cadeia de caracteres contida na matriz 6 exibida Essa fungio ¢ freqientemente combinada com as fungdes nun2str (que converte uum niimero em cadeia de caracteres) ¢ int 2st (que converte um inteiro em cadeia de caracteres) para criar mensagens exibidas na Janela de Comandos. Por exemplo, as de- claragBes MATLAB a seguir exibem “O valor de pi=3.1416" na Janela de Comandos. A | primeira declaraglo cria uma matriz de caracteres que contéin a mensagem, ea segunda declaragio exibe a mensagem. disp 1/0 valer de pi (str); © nunestr(pi) 2.6.3 Safda Estruturada Usando a Fungo fprinté I ‘Uma forma ainda mais flexivel de exibir dados € a fungao fprint £. Essa fungio exibe ‘um ou mais valores juntamente com texto relacionado e permite ao programador con- apresenta “O valor de pi = 3.141599°, seguido de uma mudanga de linha, Os caracers %fsio denominados earaceres de conversio;indicam que um valor na lista de dacios deveria ser apresentado em formato de ponto flutuante naquele local da cadcia de formatagio. Caracteres como o \n sio denominadoscaractres de escape. O caractere \n indica que uma mudanga de linha deve ser inclu, para que o texto seguinte inicie em uma nova la, Existem muitos tips de caracteres de conversio de escape que podem ser usados em uma fungéo fprint®. Alguns sfo apresentados na Tabela 24 € tuma lista completa pode serencontrada n0 Capitulo 8. também possivel especifiaralargura do campo de exibgio de um niimero ¢ 0 riimero de casas decimais a serem exibidas. Iso é feito especificando se alargura'e a precisio depois do sina ¢ e antes do f. Por exemplo, a fungio fprinté (0 valor de pi = 86.2£ \n’, pi) exibe “0 valor de pi = 3.14%, seguido de uma mudanca de linha. Os caracteres de converséo %6.2£ indicam que o primeiro item de dados na fungio deveria ser apre- sentado em formato de ponto flutuante e um campo com seis caracteres de largura, incluindo dois digitos depois do ponto decimal. A fungao fprinté tem uma limitaggo bastante significativa: ela somente exibe a pongo real de wm valor complexo. Essa limitagao pode levar a resultados enganosos quando 6s célculos produzem respostas complexas. Nesses casos, é melhor usar a funglo disp para exibir respostas. Tabela 2.4 Caracteres Especiais Comuns em Cadoias de Caracteres de Formatagdo parao fprint£ Caractres de Formatagdo Retulades x uibe valor como inti. te Exe valorem formato exponencia. se ibe valor em formato de ponte Mutat 3 Exibe valorem formato de pontoflutuante ou expanencial 0 que for maiscuto we Muda detiaha 42 | Propamagso om MATA” pare Emeoeios Por exemplo, as seguintes declaracées caleulam um valor complexo x ¢ exibem esse valor utilizando fprintt e disp: x=2* (1 = 28i)83; str = (‘disp: x = * numastr(x)); disp(str) : fprintf(*fprintf: x = #8.4£\n",x1; (s resultados impressos por essas declaragoes sio captta2 maragisico | 43 Por exemplo, suponha que a matriz x seja definida como (1.23 3.14 6.28; -5.1 7.00 07 Ocomando “save x.dat x -a |Z x.aat com os seguintes dados: 7 produziré um arquivo denominado $1 2s00000e+000 -5.100000064000 3.1400000e-000 7,0000000e+000 5.2800000e+000 0000000e+000 Esses dados estdo em um formato que pode ser lido por planithas ou programas escritos fem outras linguagens, o que facilita 0 compartilhamento de dados entre programas MATLAB e outras aplicagdes, disp: x 14k fprintf: x = -22.0000 Note que tangio tprine® 1gnorow a Parke imagindria da resposta: A fungio fprint£ exibe somente a parte real de um niimero complexo, que pode pro- duzir resultados enganosos quando se trabalha cem valores complexos ER RET 2.7 Arquivos de Dados Existem muitas maneiras de carregar e gravar arquivos de dados no MATLAB. A maio- ria delas sera vista no Capitulo 8. Por enquanto, vamos apenas considerar os comandos Loade save, os mais simples de usar © comando save grava dados do espago de trabalho MATLAB corrente em um. arquivo de disco. A forma mais comum desse comando é save filename varl var2 var} onde £3 1ename € o nome do arquivo no qual as variéveis sio gravadas, e varl, var2 etc,, sio as varidveis gravadas no arquivo. A extensio-padrio de nome de arquivo € “mat”, e esses arquivos de dados sio chamados arquivos MAT. Se nenhuma variével for especificada, todo o contetido do espaco de trabalho sera gravado, O MATLAB grava 0s arquivos MAT em um formato compacto especial, que reserva muitos detalhes, incluindo o nome e o tipo de cada variavel, o tamanho de ‘cada matriz.e todos os valores de dados. Um arquivo MAT criado em qualquer platafor- ‘ma (PC, Mac ou UNIX) pode ser lido em qualquer outra, por isso os arquivos MAT so tuma boa forma de trocar dados entre computadores se ambos utilizam o MATLAB. Infelizmente, o arquivo MAT tem um formato que nio pode ser lido por outros pro= gramas. Se os dados precisam ser compartilhadss com outros programas, a opcio “ascii precisa ser especificada, e 0s valores de dadas serio escritos no arquivo como cadeias de caracteres ASCII separadas por espages. Entretanto, informagdes especiais ‘como nomes e tipos de variaveis sao perdidas quando gravamos os dados em formato ASCII, ¢ 0 arquivo resultante de dados fica muito maior. oe | = Se dados precisam ser compartilhados entre o MATLAB e outros programas, grave 0s = dados MATLAB em formato ASCII Se os dados forem usados apenas pelo MATLAB, grave-os em formato de arquivo MAT. Le © MATLAB nao determina a extensio dos arquivos ASCII, mas é melhor para 0 usuério quando uma convengao de nomes consistente 6 utilizada. Uma extensio “dat” uma escotha comum para arquivos ASCH. Grave os arquivos de dados ASCII com uma extensio de arquivo “dat”, para dife- rencié-los dos arquivos MAT, que tém uma extensao de arquivo “nat” © comando 1oad € 0 oposto do comando save. Ele carrega dados de um arquivo de disco para o espago de trabalho corrente do MATLAB. A forma mais comum desse comando é lead Filenane onde Fi'Yenane € 6 nome do arquivo a ser carregado, Se o arquivo for um arquivo MAT, todas as varidveis no arquivo serio recuperadas, com os nomes e tipos idénticos aos anteriores. Se uma lista de varidveis for incluida no comando, somente essas varidveis sero recuperadas. (MATLAB pode carregar dados criados por outros programas em formato ASCII, ‘com dados separados por espagos em branco. Ele examinara cada arquivo para deter- minar se ele é um arquivo MAT ou um arquivo ASCII e tratar os dados de acordo. O MATLAB pode ser forgado a tratar um arquivo como ASCII quando especificamos a = = 44 | Praanagso om MATAR pr Ergetsies oppo ~ascii na dedlaragio Load. O contetido de um arquivo ASCH seré convertido em uma matriz MATLAB, com o mesmo nome do arquivo de onde foram carregados 05 dados. Por exemplo, suponha que um arquivo de dados ASCII com o nome x.dat con- tenha os seguintes dados: 1.23 5.1 3.14 6.28 7.00 0 Ocomando “load x.dat” criaré uma matriz 2x 3 denominada x no espago de tra- alho corrente, contendo 0s valores de dados. Captue2 wAaeisce | 45 de expression no local var iable_name. Por essa razdo, o sinal de igual é chamado de operador de atribuigdo. Uma declaragio como die iia; 1ndo faz 0 menor sentido em Algebra usual, mas faz sentido perfeitamente no MATLAB. Ela significa: pegue o valor corrente armazenado na variavel ii, some um a esse valor ‘earmazene o resultado de volta na variével ii. 2.8.1 Operagdes com Escalares Este teste apresenta uma verificacio répida do seu entendimento dos coneceitos apre- sentados nas Seqdes 2.6 e 2.7. Se voce tiver problemas com o teste, releia as segbes, per- Bunte ao seu professor ou discuta o material com um colega. As respostas podem ser encontradas no final do livro. 1. Como vocé faria 0 MATLAB exibir todos os valores reais em formato expo- nencial com 15 digitos significativos? 2. O que fazem os seguintes conjuntos de declaragdes? Qual a saida de cada um deles? a radius = input(‘Enter circle radius:\n"): area = pi * radius*2; str = ("The area is ‘ num2str(area)]; disp(ste}: b. value = int2stripi); disp({‘The value is’ value ‘1'1)7 3. O que faz 0 seguinte conjunto de declaragbes? Qual a safda dele? value = 123.4567e2: {printf (‘value = te\n’,value) ; fprintf (‘value - ¥£\n‘,value); fprint£(‘value = tg\a’/value) ; fprintf(‘value = ¢12,4f\n", value); 2.8 Operagdes com Escalares e Matrizes CAtelos so expeicados no MATLAB com uma dearasio de atibuigo, cj forma geral variable name = expression: A declaracio de atribuicio calcula o valor da expressio & direita do sinal de igual, ¢ atribui 0 valor & varidvel esquerda desse sinal. Observe que o sinal de igual néo significa igualdade no sentido usual da palavra. Em vez disso, significa: ermazene o valor de escalares, matrizes, parénteses e operadores aritméticos. As operagbes aritméticas- padrao entre dois escalares so dadas na Tabela 25. Parénteses podem ser usados para agrupar termos sempre que desejado. Quando so usados parénteses, as expressbes dentro deles so avaliadas antes das expresses que esto fora. Por exemplo, a expressio 2 * ((8+2) /5) €avaliada conforme mostrado a seguir a+ ((892)/5) = 2-8 (10/5) a2 2.8.2 Operagdes com Matrizes OMATLAB dé suporte a dois tipos de operagées entre matrizes, conhecidos como operagses intr pou here penis tsp ete mos oe Sint canes seen opone¢ eta od slant neon " Ta)ce. [a a]euoers [oe doesn tins Poreenplnses- |} 3) eb [-t S]ientoash = [2 3] Ctmerve gue pan que peri foren one inh edl de sis pss man, Cc onto MATLAD rs unanssgen es eles est ates patent een ath exc sopraio fren una mas em nay 9a Go xa sora eas{} 2] entioase-[5 6 Goatees onsenentn damatte Prownplee-[! 2} ones [2 §] Tabela 2.5. Operagbes Artméticas entre Dois Escalares Operagto Soma ae ase Subtragio ane Mutipliagto axe ate Divisio : are Expoente e arp 7 48 | Ponarassoem BATA pu Eereias = Em contrat, aperages maticiasseguem as regras normais da algebra linear | F por exemplo, multiplicagio de matrizes. Na dlgetra lineas,o produtoc = ax bé | Sefinido pela equageo i: ® = efi = Dali, kb A) Te a : orexemplo,sea =[1 2]e b «[-1 3],entioa x» = [-1 seve | |S voraremplosen = [J t]e» «[3 j]emion «> -[ ]-onene |Z que, para que a multiplicagao de matrizes funcione, 0 niimero de colunas na matriz a pre- isa ser igual ao numero de linkas na matriz (O MATLAB usa um apts? aTAB Bisco | 47 tiplicacio estrutural como matricial so aplicdveis para duas matrizes quadradas de ‘mesmo tamanho, mas as respostas s4o totalmente diferentes. Cuidado para especificar ‘exatamente o que voo® quer! ‘Cuidado para diferencar entre operagiesestraturase matics em seu cidigo MATLAB. E especialmente comum confurdir mulipicago estutural com muliplicagdo matricial operaiee muir, Nos cas em gu ope estas ¢ opus maccale |) << tém definigdes distintas, o MATLAB utiliza um onto antes do simbolo para indicar Exemplo 2.1 ‘uma operagio estrutural (por exemplo, .*). Uma lista de operagées estrututais e matri- x in Ciais € apresentada na Tabela 2.6, Assuma que a, b, © ed sio definidas como a segui a [i 9] »- [43] 21 o1 Operag6es Estruturais ¢ Matrciais Comuns e+] acs Forma MATLAB Comestrios 2 ‘Soma Estrutural arb ‘Soma de matvzes estrutural éidntica 8 matricial Qual € 0 resultado das seguintes expresses? Subtragio Estrutural a-b Subtracio de matrzes estrutural 6 déntica & matricial aarp ease Multplicagio Estatural a .* bb Multipicago elemento a elemento de ae b As duas ba.tb fasd ‘matrizes prodsam ter a mesma forma, cu usa delas cavb gala serum ecale date hata Multplicagio Matidal =a + Multiplicagio das mates a ¢ © msimero de cokunas ‘era preinser igual a0 de lnhas em Solugso Divisso a Dirsta Estutural 8 ./ b Divisioclmewoa-ementodeaeb: a(i3) / btir3) [AS duns mates preci ter 8 mesma frm ou un dels precise unex | Divisioelemevoaciementodeseb: b(i.3) / atts). | [As das mazes precsum tera mesma frm ou uma | dels precisa er um esas DiviséodEsquenda Estratural a. b Divisio Matical Dieta a / Divisio maeidal efinda por a * inv (b), onde inv (b) © 6 oinversodamatriz : Divisio Maria Eoquerda 9 \ Divisso maul definda por inva) * b, onde inv ta a €oinversodamatrr 2 Expoente Fstatul 24D Bipoenicclemnoaelementodeaeb: a(i,4) * bliyd Usudrios novatos freqiientemente confundem as operagdes estruturais com as ‘matriciais. Em alguns casos, a substituicio de uma pela outra produz uma operagao ile- gal, €o MATLAB apresenta uma mensagem de erro. Em outros casos, as duas operages sto legais, ¢ 0 MATLAB executa a operacio errada e produz um resultado etrado. O problema mais comum ocorre quando se trabalha com matrizes quadradas, Tanto mul- Bebiiietici ppm .. Multiplicagao estrutural elemento a elemento: a .* b Soma estrutural ou matrciatia « b « [2 2] tratural g2 ‘Multiplicagio matricial: 2 * b {2 2] ‘Multiplicagéo matricial: a * © = [3] ssa operagio€ legal, pois a eb tém mimers diferentes de colunas. Multiplicagéo estrutural: a .* ¢ = Li 4 | Multiplcagiomatiaba + a = [5 9], 4B | Proyamagio am NATLAB par Eaters ‘A diviso matricial & esquerda tem uma importincia especial que d ‘especial que deve ser enten- dida. Um conjunto 3 x 3 de equagées lineares simultaneas tem a forma Mh + Baka Mysty™ B, inde 2 NATAB Asico | 49 Tabela 2.7 Hierarquia de Operagées Artméticas Procedtacia ‘Operapto _ 1 (0 contevdo de todos os parnteses &evaiado, a parti dos partnteses mais internos ‘em diego aos mais exernes. 2 “Todos os xpoentes sh avaliados da enquerda para a dreita 3 “Todas as mulipicagdese dvises so avaliadas,tablhando da esquerda para & iret, ‘ “Todas as somasesubtagies si avaliadas,trablhando da esquerda para a drei ‘ara climinar a ambigiiidade da avaliagio das expresses, o MATLAB estabeleceu uma yk, + gk, + ary by 1 Bayh Maate + ty by que pode ser expressa como AceB @2) [fs a =| [i] = ~ ondea= [or ae ash aft fel =} My A Ass, 5, 33. A-equacio 2.2 pode ser resolvida para x usando élgebra xeAtB 23) Como 0 operador de divisio Como oopeador de dvisio exqueria XB dfiido como inv(n) 8,0 perador le divisio & esquerda resolve um sistema de equagdes simultineas com uma tinica declaragio! " comme ins 2.9 Hierarquia de Operagoes Fregiientemente, mi i operagbes aritméticas sdo combinadas em uma tinica expres- ‘io, Por exemplo, considere a equagio para a distincia percorrida por um objeto ini- calmente em repouso e sujeito a uma aceleragio censtante. distance = 0.5 * accel * time * 2 Existem duas multiplicagées e um expoente nessa expressio. Em uma expressdo como ssa, 6 importante saber a ordem de avaliagao dos operadores. Se o expoente for ava- liado antes da multiplicagio, essa expresso serd equivalente a m distance = 0.5 * accel * (time * 2) ‘Se a multiplicagio for avaliada antes do expoerte, essa expresso serd equivalente a distance = (0.5 * accel * time) * 2 Essas duas equagdes tém resultados distintes, e precisamos ser capazes. sas dus Pi spazes de distingui-las tested babaaloiel 4 ~ série de regras governando a hierarquia, ou a ordem em que as operagbes sio avaliadas fem uma expressdo. As regras em geral seguem as regras normais da algebra, A ordem de avaliacao das operagiesaritméticas € dada na Tabela 27. Sennen me Example 2.2, [As variveis a,b, ce foram iniciadas com os seguintes valores and be2 ‘vali as seguintes decaragdes de atribuigio MATLAB. a-3 a. saida = atbectd; b. saida = at (bec) *d; © saida = (a*b)+ (cd); d.saida = a*bed; fe, safda = a*(bsd: Solugto ‘a, Expressio a avaliar: saida - atbycta: Com 0s valores: safda = 3*245*3; Primeiro, avalie as multiplicagées e divisoes, da esquerda para a direta: saida = 6+5*3; saida - 6415; ‘Agora, avalie as somas: saida = 21; b. Expressio a avaliar eaida - at (bec) *d: Com 0s valores: paida = 3*(205)*3: rimeiro os paréntses —gataa = 3473; ‘Agora, avalie as multiplicagdes e divisdes, da fesquerda para a direita: saida = 21*3; saida = 63; c. Expresso a avaliar: saida = (a*b)+(e*a); Com 0s valores: saida = (3*2)+(5*3); Primeiro os parénteses: saida = 6415; Agora as somas: safda - 217 50 | Proanneso em MATAR” para Enea d. Expressio a avaliar: saida = a*bsd; Com 08 valores: saida = 3*283; Avalie os expoentes da esquerda para adireita: caida = 9*3; saida = 729; e. Expressio a avaliar: sada = a* (bea); Com 0s valores: Primeiro os parénteses: Agora 0 expoente: saida = 34(293); saida = 3°68 safda - — Como portent Ver FORA Ae EXECS 8s OPETAGTES TTT eit easel no resultado final de uma expressio algébrica. importante que qualquer expressio em um programa seja ti clara quanto pos sivel. Qualquer programa de valor deve ser nio 86 escrito, mas também mantido e smodificado quando necessrio, Vacé deve sempre perguntar a i mesmo: "Vou entender com faclidade essa expressfo quando voltar a ela daqui a seis meses? Outro progra- ‘mador poderia olhar 0 meu cédigo e entender com faciidade o que estou fazendo?” Se hhouver qualquer civida em sua mente, use parénteses adicionais na expresso para tomé-la.o mais claro possivel. rary Use parénteses quando necessétio para tornar suas equagies claras eféceis de entender, Parénteses usados em uma expressdo devem ser balaneados, ou seja, deve existr tum muimero igual de parénteses abertose fechados na expressio, E um emo ter mais parénteses de uim tipo que do outro. Erros desse ipo, geralmente tipogrdficos, sio apturados pelo interpretador MATLAB quando ocomando é executad, Por exemplo, a expressio @easra produz um erro quando é executada, ue Este teste apresenta uma verificagdo répida do seu entendimento dos conceitos apre- sentados nas SegSes 28 e 2.9. Se vocé tiver problemas com o teste, releia as segdes, per- gunte ao seu professor ou discuta o material com um colega. As respostas podem ser cencontradas no final do livro, fae seed jit abaieef el Ai apnps joa wee MuTussisico | 51 1. Assuma que a, b, ce d sio definidas conforme a seguir e calcule os resultados ddas seguintes operagbes se elas forem legais, Se uma operacio for ilegal, cvpliqae mesa [a] e-E) ¢ “a a result = a .* cr beresult = a * (c cli © result = a .* [e cl: dresult + a+b tc: e result = a+b .* ¢ 2. Resolva para x a equagio Ar= B, onde A = 2.10 Fungae finidas MATLAB Na matemética, uma fungio é uma expressio que aceita um ou mais valores de entrada e calcula um tinico resultado a partir deles. Calculos cientificos e téenicos em geral requerem fungSes mais complexas do que soma, subtracio, multiplicagio, divisio e expoente, conforme discutido até aqui. Algumas dessas fungSes so muito comuns e usadas em diferentes disciplinas téenicas. Outras so mais raras e especificas de um. problema ou pequeno niimero de problemas. Exemplos de fungdes muito comuns $30 as fungGes trigonomeétricas, logaritmicas e raizes quadradas. Exemplos de fungdes mais, raras s4o as fungSes hiperbdlicas, fungSes de Bessel, e assim por diante. Uma das grandes forcas do MATLAB é que ele ver com uma incrivel variedade de fungdes rontas para uso. 2.10.1. Resultados Opcionais Diferente das fungbes matemsticas, as fungdes MATLAB podem devolver mais de um resultado para o programa que as ativa. A fungio max é um exemplo de funcio desse tipo. Essa funcio normalmente retoma o valor maximo de um vetor de entrada, mas ela também pode retomar um segundo argumento contendo a localizagio no vetor de entrada onde o valor méximo foi encontrado. Por exemplo, a declaraa0 iz maxval = max ({1 ~5 6 ~3}) relorna 0 resultado maxval = 6. Entretanto, se duas varidveis forem forecidas para armazenar resultados, a funcio retornaré o valor maximo ¢ a localizagio desse valor. (maxval index) = max ({1 -5 6 -3]) produz os resultados maxval - 6 ¢ index ~ 3. 52 | Proramipioom MATLA® pare Experts 2.10.2 Utilizando Funges MATLAB com Matrizes como Entrada ‘Muitas fungées MATLAB sao definidas para uma ou mais entradas escalares e produ- zem uma saida escalar. Por exemplo, a declaragio y = sin (x) calcula o seno de xe ‘armazena o resultado em y. Se essas fungSes recebem uma matriz com valores de entrada, las caleulam uma matriz. com valores de safda calculados elemento a elemento. Por exemplo,sex = [0 pi/2 pi 3*pi/2 2*pi],adeclaragio y = sin(x) produzo resultado y = [0 1 0 -1 0] ak self ooh rani son FungOes MATLAB Comuns Dose bela 2, ? anger Mates 2.10.3 Fungdes MATLAB Comuns ‘Algumas das fungSes mais comuns e titeis do MATLAB sio apresentadas na Tabela 2.8. Elas serio usadas em muitos exemplos e exercicios. Se tiver de localizar uma fun¢ao especifica que nao esteja nessa lista, vocé pode pescuisar alfabeticamente ou por assunto usando 0 Navegador de Ajuda do MATLAB, Observe que, diferente de outras linguagers de computador, muitas fungies MATLAB operam corretamente com entradas tanto reais como complexas. As fun- es MATLAB calculam automaticamente a resposta correta, mesmo se o resultado for imagindrio ou complexo. Por exemplo, a fungéo sart (~2) produzird um erro em linguagens como C ou Fortran. No MATLAB, 0 céleulo correto seré efetuado, pro- duzindo a resposta imaginaria. > sqrt (-2) Cemerterrs 2.11 Introdugao a Diagramas (Os recursos amplos e independentes de dispositives do MATLAB sio uma de suas ca- racteristicas mais poderosas. Fles facilitam 0 desenho de quaisquer dados em qualquer ‘momento, Para desenhar um conjunto de dados, simplesmente erie dois vetores con- tendo 0s valores de x e de y a serem desenhados, ¢ use a fungio plot. Por exemplo, suponha que queiramos desenhar a fungio y = 2° ~10x +15 para va- lores de x entre 0 e 10. Sao suficientes trés declaragies para criar esse desenho. A. primeira declaracio cria um vetor de valores de x entre 0 e 10, por meio do operador dois-pontos. A segunda declaracio calcula os valores de y usando a equagao (note que estamos utilizando operadores estruturais, para que a equacio seja aplicada a cada valor de x, elemento a elemento). Finalmente, a terceira declaracao cria o desenho. x = 0:1 y= x.92 - 10.4% + 15; plot (x,y tai) Glas coon) Catia co's, com o ela em rains angiecx) Reta inguode fae do valor comps ratios asinoxd Cala si, om rela em rai acanxd Cala tas, com ead em ais scandyix) Coteus ta (2) are guazo unrated rl (eta em - rato ere =< costo Cala cor, om xem dings. exon) Caine reaix) Cate logan natura og Ivatue, index! = mete) Retomna 0 valor mikimo do vetor x, ¢opcionalment a locslzagio desse valor Lvatue, index} = min() Retoma o valor minimo do veto se opeonaimente a localizagio desse valor nodix.y) Fungo resto (oa fungio mélo. sinix) Clout sins com xem radians, sactx) CCaloula a riz quadrada dex tan per CCaleula tan , com xem radianos Rungées de Arredondamento cei ‘Aredonda x para 0 inteo mais proximo em dirego a male infnte: cellist) = feceil(-3) = 3 Econ) ‘Arredooda x para o intro mais prximo em dire 30 sero: £4(3.1) wdefixeday = 3 floor 1x) ‘Arredonda x para o inteiro mais prdximo em dieslo 4 menos infinite: floor(3.1)'= Se fleor{-3.21 = round) ‘Arredonda x para ointeiro mais primo, FungBes de Convers de Caracteres char) CConverte uma matrz de riimeros em uma cadeia de caracteres, Para ci socteres ASCH a matric deve moter merce < 127. ‘Converte uma cadela de caracteres em urna mati de rimer, doubietx! anezeee bo) ‘Convert x em uma cade de earacteres que representa mimero como umgete 60 ‘Convert em um cadeia de caracteres que representa o ero com um ponto decimal se ‘Convert uma cada de caracters#em mero ams) 54 | Progamacso em MAMAS pa Czeees Figura 2.4 Diagrama de y =3?-10r+ 15 de0 a 10, Quando a fungéo plot ¢ executada, 0 MATLAB abre uma Janela de Figuras e cexibe 0 deserho nessa janela. O desenho produzido por essas declaragses é apresentado 1a Figura 24, 2.11.1 Utilizando Diagramas xy Simples Conforme vimos acima, é muito fécil desenhar no MATLAB, Qualquer par de vetores pode ser desenhado um contra o outro, desde que os vetores tenham 0 mesmo comprimento, Entretanto, o resultado nao é um produto acabado, pois nao temos titulos, legendas para os eixos ou linhas de grade, ‘Titulos e legendas para os eixos podem ser adicionados ao desenho com as fungSes title, xlabel e ylabel. Cada fungio é acionada com uma cadeia de caracteres que conte o titulo ou a legenda corespondent. Linhas de grade podem ser adiconadas ou removidas do desenho com o comando grid: grid ‘on ativa as linhas de grade, © Grid off apaga as linhas de grade. Por exemplo, as declaragies a seguir geram um desenho da fungio y = x*-10x +15 com titulos, legendas e linhas de grade. © desenho resultante esté na Figura 25, x = 0:1220, Y= x92 = 10.8 6 15; plot (x,y): title ("Plot of y = x.*2 - 10.#x + 154); captele2 MUTLARBésico | 8B Pltoty annie 19 p -s| oe 0 Figura 2.5 Diagrama de y~= x? 10x + 15 com titulo, legendas ¢linhas de grade. 2.11.2. Imprimindo um Diagrama ‘Uma ver criado, um diagrama pode ser impresso por meio do comando print, clicando sobre o icone de impressio na Janela de Figuras ou selecionando a opgéo de menu “File/ Print” na Janela de Figuras. A forma do comando print & print Sem 0 nome do arquivo, ese comarvo envia uma cpa da figura corente para a immpresora. Com um nome de argu especiicadoo comando imprime uma copia da figura content no arquivo eopecticao, Pe Exstem muitas ope diferentes-que-copeticam o-formato-de-safda enviado para um arquivo ou porta impresora Un opsio mato importante é ati Eos opeto expectica que a sfda serd uma imagem no formato TIFF—do inglés Tagged image Fe Format, Como esse formato pode ser importado pra todos ox procetadores de texto importantes para PC, Mac ou UNIX, esa 6uma boa manera de incluir desenhos MATUAB em um documento, O seguintecomando cra uma imagem TIFF na figura Corrente ea armazena em um arquivo denominadony_inage tif print -dtifé my_image.tit 56 | Paparapt em MATA pra Embers ‘Também é possivel criar imagens TIFF selecionando “File/Export” na Janela de Figuras 2.11.3. Diagramas Miltiplos # possivel desenhar miitiplas fungBes sobre o mesmo grifico,simplesmente incuindo sais de um conjunto de valores (x1) na fango de desenho. Por exemplo, suponha que queiramos desenhar a fungao ) = sin 2x e sua derivada ino mesmo desenho, A dat vada des) sin 2x6 4 - Gp NDE eee ea Para desenhar as duas fungSes sobre os mesmos eixos, precisamos gerar um conjunto de valores x e os valores y correspondentes a cada fungio, Para desenhar as fungSes, podemos entio simplesmente listar os dois conjuntos de valores (x,y) na fungao de desenho, conforme mostrado a seguir, x = 0:pi/100:2pi yl = sin(2*x) ¥2 = 2c08 (24x) + Plot (x.yLex-¥2) 7 (O diagrama resultante 6 exibico na Figura 2.6. 2.11.4 Cores de Linhas, Estilos de Linhas, Estilos de Marcadores e Legendas MATLAB permite que um programador selecione a cor de uma linha a ser desenihada, estilo da linha e o tipo de marcador para pontos de dads na linha. Isso tudo pode ser selecionado pelo uso de uma cadeia de caracteres de atributo apés os vetores x e y na fungao plot. ‘A cadeia de caracteres de atributos pode ter até trés componentes. O primeiro es- pecifica a cor da linha, o segundo, o estilo do marcador, €o ultimo, o estilo da linha. Os ‘aracteres para as diferentes cores, marcadores ¢ esilos de linhas sao apresentados na Tabela 29. (Os caracteres de atributos podem ser misturados em qualquer combinagio, e mais, de uma cadeia de caracteres de atributos pode ser especificada se mais de um par de vetores (xy) for incluido em uma mesma chamada da fungao plot. Por exemplo, as seguintes declarages desenhardo a funcio y= x2 -10x + 15 com uma linha pontilhada vermetha e incluirao os pontos de dados como cireulos azuis: x = O:1:10; Y= X92 ~ 10.4% + 15; Plot (x.y, 'E==",x,y, “BO? ~ nh mnt ial a «4 ye ° t z z Figura 2.6 Magenta ‘Cieule © Gano x x r Vemeho + Mais 5 Verde : Asterisco > Amul Quadrado Bronce a Losango k Preto v “Tingulo (pontand para bite) - tragic tapontante pares) t < Tiinguloepontando para a enquenda) > Tringulo(apontando pars adits) P Pentégono » Hexdgono = Sem mareador Contale2 wuriazassco | 87 7 Diagrama de fi) = sin 2x efx) = 20s 2x sobre os mesmos elxos Sélido Pentithado Ponto trage ‘Traced Sem linha 5B | Poganagso em MATLAB po trgenare Legendas podem ser criadas por meio da fungdo Legend. A forma bisica dessa fungio € legend(‘stringl’, ‘string2’,..., pos) onde stringl, stzing? ete. sdo os rotulos assaciados is linhas desenhadas, pos é tum inteiro que especifica onde colocar a legenda. Os valores possiveis para pos sio ddados na Tabela 2.10.0 comando legend off move tuma legenda existente ‘Um exemplo de desenho completo é apresentado na Figura 2.7, e as declaragées Para produzir esse desenho sio apresentadas a seguir. Elas desenham a fungio fx) = sin 2: e sua derivada sobre os mesmos eixos, com uma itha pretasolida para fx) ¢ uma linha vermetha trcejada para sua derivada. O desenhoinelui um titulo, rotulos para os cos, ‘uma legenda e linhas de grade. | { Coote? MaTLAB ais | 89 x= Uspi/10070Bi yl = sin(2*x); ¥2 = 2*cos(2*x) ; plot (x, yh, “k-" ,¥2, 3 title (Plot of f(x) = sin(2x) and its derivative’); xlabel (/x"); ylabel(*y")5 legend (*£(x)",*d/ax £(x)') grid on; 2.11.5 Estalas Logaritmicas # possivel desenhar dados em escalas logartmicas e em escalas lincares.Existem quatro combinagoes possiveis de escalaslineaes elogarimicas nos eos x ey, e cada comb nago é produizda por uma funsio separada, 1. A fungio pot desenha os dados em xe y sobre cixos lineares 2. A fungdo semi Lox desenha dados em x de forma logartmica e em y de forma linear 3. A fungio semi logy desenha dados em x de forma linear e em y de forma loga- ritmica. 4. A fungio loglog desenha os dados em xe y sobre eixos logaritmicos. Tabela 2.10 Valores de pos no Comando Legend hea Escola automitica da “melhor” posigi ennimo confito com os dado) a Canto superior diet (fut) 2 Canto superior exquerdo Canto inferior eaquerdo Canto inferior drsito Adieita do desenho Figura2.7 Um desenho completo com titulo, rétulos nos eixos,legenda, grade e mltiplos estos de linha. ‘Todas essas fungées tém a mesma seqiiéncia de chamada a tinica diferenca € 0 tipo de ceixo utilizado para desenhar os dados. Exemplos de cada desenho sio exibidos na Figura 28. __ 2A2_Exemplas (Os exemplos a seguir ilustram a resolugio de problemas com o MATLAB. a a Exemplo 2.3 ~ Converséa de Temperatu ‘Construar tim” programa MATLAB que Teia uma temperatura de entrada em graus Fahrenheit, converta essa temperatura para um valor absoluto em Kelvins e escreva 0 resultado, Solugao ‘A relacdo entre temperatura em graus Fahrenheit (‘F) e temperatura em kelvins (K) pode ser obtida de livros de fisca. Ela € GO| Poranersoemuaria pars Engnteiae Conta 2 AUTADBiico | 61 > 101 we unser Sa script file? tenp_conversion ra % % Purpose: 20 % To convert an input temperature from degrees Fahrenheit to nos % an output temperature in kelvins. ® 0 & Record of revisions: . : Date Progranmer Description of change ‘Bes ° Se" 10 10 TEs 12/01/98 J. Chapman Original code . re Et petine variable: a 1 es ‘Temperature in degrees Fahrenheit = ak —fenperatan — Es scoapt the sor for the input temperature, 1! 1! ‘ 1 10° 02 46 @ 10 Figura2.8 Comparagio entre deserhos linear, semilog x, semilog ye loglog, Tin Kevns) = ($1 a '8)-220) + 27038 es) 0 lis de ice tami os do valores de exemple nas dua exces de tmpert fm, podamoe war para veicara oper de nase propa Do dees Ponto de ebuligio da dgua Ponto de sublimacio do gelo seco 212 °F -110 #F 373,15 K 194,26 K "Nosso programa precisa efetuar os seguintes passos: 1. Pedir para o usudrio digitar a temperatura de entrada em °F; 2. Lera temperatura de entrada; 3, Catcular a temperatura em kelvins usando a equagio (2.5); 4, Escrever o resultado e termina. Usaremos a fungao input para obter a temperatira em graus Fahrenheit e a fungSo Eprinté para escrever o resultado. O programa resultante é apresentado a seguir” * NT: Os comentiros ¢ as mensagens do programa foram mantidos como no original em ingle, para respeitar a aora de cdigo do autor. eet sr nse 4 lz t £ temp_f = input (‘Enter the temperature in degrees Fahrenheit: ‘ % Convert to kelvins. temp_k = (5/8) * (temp_f - 32) + 273 % write out the result. fprint£("%6.2f degrees Fahrenheit temp_£, temp_k) + 86.26 kelving.\n", Para testar o programa completo, vamos executé-lo com os valores de entra- dda conhecidos e dados acima. Observe que as entradas do usuario aparecem em negrito no texto a segui > temp_conversion Enter the temperature in degrees Fahrenheit: 212 212.00 degrees Fahrenheit = 373.15 kelvins. > ‘temp_conversion Enter the temperature in degrees Fahrenheit: -110 110.00 degrees Fahrenheit = 194.26 kelvins. (Os resultados do programa coincidem com os valores do livro de fisica, < eee Nesse programa, ecoamos os valores de entrada e escrevemos os valores de safda juntamente com as unidades. Os resultados desse programa s6 fazem sentido se as uunidades (graus Fahrenheit ¢ kelvins) forem incluidas com seus valores. Como regra geral, a8 unidades associadas a um dado de entrada devem ser sempre apresentadas, junto com a solicitaggo de valor, ¢ as unidades associadas a qualquer dado de saida ever ser apresentadas junto como valor. ‘Sempre inclua as unidades apropriadas junto com os valores que vocé ler ou escrever em um programa. 62 | Prana em MATAR para Eneoies © programa do exemplo anterior exibe muitas boas praticas de programagio que descrevemos neste capitulo. Ele tem um diciondrie de dados que define o significado de todas as varidveis no programa, e também usa nomes descritivos de varidveis, e lunidades apropriadas sao associadas a todos os valores apresentados, > Exemplo Elétrica:Transterdncia de Carga Méxima Na Figura 29, temos uma fonte de voltagem V = 120 V com resisténcia intema R, de 50.0, ssuprindo uma carga de resisténcia R,, Encontre o valor da resistencia de carga R, que resultard na poténcia maxima possivel fornecida pela fonte para a carge. Quants po- téncia serd fomecida nesse caso? Desenhe também a poténcia fornecida para a carga Capt 2 Marsico | 63 3. Calera pon omecida pra carga para cds valor dR { Desenhar potenciafomecs pur scp prs nda valor de ye dteminar O valor dani eran dpe ce poten eee © programa MATLAB fin ete Script file: cale_power.m . * & Purpose: & To calculate and plot the power supplied to a load as % a function of the load resistance. 8 con fangio de vesie ees Record ot Tevisionsy — : Date Programer Description of change Solugio : : Nesse programa, precisamos variar a resisténcia da carga R, e computar a poténcia ‘ 32/01/98 S. J. Chapman Original code fomecida pars a carga para cada valor de RA potéciafornetida pare a resistencia da Soe _ opr edue tases t Define variables: 8 pels equas ay amps Current flow to load (amps) PL= PR, (26) * pl Power supplied to load (watts) ‘ , Ben Resistance of the load (ohms onde cores fomecida para a carga. A conte frnecida pars a carga pode ser bors Internal resistance of the power source (ohms) ccaleulada pela lei de volts =~ Voltage of the power source (volts) voy + In "2a (27) % Set the values of source voltage and internal resistance Ror Re*R, } volts = 120; (© programa precisa executar os seguintes passos: re = 50; 1. Criar uma matiz de valores possves para a resstincia da carga R,.Amatiz |f % Create an array of oad resistances varia R, de até 100 em pasos de 12 Pon Tihoo, 2. Calcla a corente para cada valor de |} catcutate the current flow for each resistance $ ames volte ./ (ree tl by 4s calculate the pover supplied to the load TH pl = (amps 67 2) .* rly F & Plot the powor versus load resistance plot tri,pl): : Carga Fors de voragem Figura 2.9 Uma fontede voltagem com uma voltagem V e uma resistencia intema R, suprindo uma carga de resistindia R,. Kati isn title('Plot of power versus load resistance’); xlabel (‘Load resistance ) (chms)'); ylabel( "Power (watts)"1; grid on; Quando esse programa & executado, o desenho reaultante é o mostrado na Figura 2.10. Com esse desenho podemos verificar que a poténcia maxima é fornecida para a carga quando a resisténcia da carga é 500. A poténcia fornecida para a carga com essa resistencia é de 72 watts < —<—_—_ 84 | Popanapto em MATAR ar Exgntvies Powe (wats) aptle2 Marae Biico | 8B Decaimanta do carbona 16 a a a {ed resetanoe ft) Figura 2.10 Desenho da poténcia fornecida para a carga versus resistencia da carga Observe 0 uso dos operadores estruturais.*,e./ nesse exemplo, Esses opera- dores garantem o célculo das matrizes amps ¢ p1 elemento a elemento. » Exempio 2.5 tagdo de Carbono 14 Um isétopo radioativo de um elemento é uma forma do elemento que nio é estivel. Em ver disso, ela decai espontaneamente para outro elemento por um certo perfodo. O e1d_date Enter the percentage of carbon 14 remaining: 50 The age of the sample is $729.9097 years ORC Handbook of Chemistry and Physics estabelece que a meia-vida do carbono 14 de 5.730 anos. A saida do programa, portanto, esté de acordo com ele. < 13_Depurando Prog —__— Existe um antigo ditado que estabelece que as tinicas certezas so a morte e o Imposto de Renda. Podemos adicionar uma terceira certeza a essa lista: se vocé escrever um programa de tamanho significativo, ele nfo funcionaré na primeira vez que vocé tentar utilizé-lol Erros em programas recebem o nome de bugs, e 0 processo de localizar & climinar bugs € denominado depuragio. Quando escrevemos um programa e cle no funciona, como podemos depuré-lo? ‘Trés tipos de erros ocorrem em programas MATLAB. O primeiro tipo & 0 erro sin- titico. Erros sintaticos sio erros em uma declaragdo MATLAB, como erros tipogréficos ‘ude pontuagSo. Sia detectadas pelo compilador MATLAB na primeira vez que & exe- ccutado um arquivo M. Por exemplo, a declarasio xe ears ars contém um erro sintético, pois os parénteses nao est3o balanceados. Se essa declaragio estiver em um arquivo M denominado test.m, a seguinte mensagem aparecers quando test for executado: > teat (y +3042) Missing operator, comma, or semi-colon, Error in on line 2 4: \book\matlab\chap2\test.m ( segundo tipo de erro é 0 erro em tempo de execusio. Fle aparece quando uma ‘operacio matemsticailegal ocorre durante a execugdo do programa (por exemplo, tentar dividir por 0) Esses erros levam o programa a retornar Tn£ ou NaN, que s2o entdo uti= lizados em outros edleuloa. Os resultados de um programa contendo edlculos que usam In£ ou NaN sio em geral invalidos. ( terceiro tipo de erro 6 0 erro Iégico. Ocorre quando 0 programa compila e exe cuta com sucesso, mas produz a resposta errada. (Os erzos mais comuns efetuados durante a programacio sio os tipagrifies. Alguns cerros tipograficos criam declaragOes MATLAB invalidas. Eles produzem erros sintsticos que sio capturados pelo compilador. Outros errostipogréficos ocorrem em nomes de va- rlveis, Por exemplo, as letras em alguns nomes de varidveis poclem ser transpostas, ot 68 | Poxanacso om MATAR? para Enews tama letra incoreta pode ser digitada. O resliado ser uma nova varével eo MATLAB Simplesmente criard a nova varidvel quando ela for referenciada pela primeira vez. O MATLAB ndo pode detecar esse tipo de erro Eros ipograficos podem também prodizit eros gic. Por exemplo, se as vardveis volt e vel? forem usadas para velocidades no programa, uma delas poder ser nadvertidamenteusada em higar da outra em algum porto, Voce precisa verifiar esse ipo de erro inspecionando manualmente ocSdigo. “As vezes um programa inicia a execugdo, mas erros em tempo de execuséo ou eros ligicos ocorem durante ela, Nesse caso, exist algo errado com os dados de entrada, (ou com a estruturalogica do programa. primeiropaso para localiza esse tipo de bug, dleve ser verifier os dads de entrada do programa. Remova o ponto-evirgula das decla rages de entrada, ou adicione declaragbes de saida para verficar se os dados de entra da sio aqueles que voct espera ‘Se os nomes de varisveis -dadosde entrada estio-cor- retos, vce esta provavelmente diante de um erro lgico. Voce deve veriiar eada uma de suas decaragies de atribuigio 1. Se uma declaragio de atribuicio é muito longa, quebre essa declaragZo em decla- ragGes de atribuigio menores. DeclaragGes menores sao mais féceis de verificar 2. Verifique a colocagdo dos parénteses em suas declaragées de atribuigo. Um erro muito comum € ter as operagdes em uma declaragao de atribuigao avalia- das na ordem errada, Se vocé tem duivides quanto a ordem de avaliagio das variaveis, adicione conjuntos de parénteses para tornar claras as suas inten¢des. 3. Verifique se voc? iniciou todas as variéveis adequadamente. 4. Confira se todas as fungGes utilizadas esto com unidades corretas. Por exemplo, 2 entrada nas fungGes trigonomeétricas precisa ser em radianos, nao em graus. Se voc¢ ainda obtiver a resposta errada,adicione decaragSes de sada em varios pontos do programa para ver os resultados dos cdculos intermedidrios. Se puder loca Tizaro ponto com os cilculos errcos, voce stberd onde procurar problema, 0 qu seré 95% da batalha, Se ainda assim ndo conseguir encontrar o problema, explique a un clega ou a seu professor o que voce esta fazendo, e deixe que eles olhem seu cédigo. E muito comum {fur uma pessoa veja apenas o que ela espera ver quando verifics © proprio ebdigo Sutra pessoa pode frequentemente encontrar deprssa um erro que voc® no percebeu, Para reduzir 0 esforgo de depuragao, verifique se durante o projeto do seu programa 1. Iniciow as variéveis. 2. Utilizou parénteses para tornar claras as fungSes nas declaragées de atribuicko. Ma a (© MATLAB tem uma ferramenta especial de depuragio denominada depurador simbslico. Um depurador simbélico é uma ferramenta que permite acompanhar a exe: SS FRAT Captus 2 suas atsico | 69 cucio do seu programa declaragio a declaracio ¢ examinar 0 valor de cada varidvel a cada passo ao longo do caminho. Depuradores simbélicos possibilitam verificar todos os. resultados intermedirios sem a necessidade de inserir muitas declaragées de saida em seu cédigo. Aprenderemos a usar 0 depurador simbdlico do MATLAB no Capitulo 3 2.14 Resumo [Neste capitulo, introduzimos dois tipos de dados: double e char. Também introduzimos as declaragdes de atribuigio, os calculos aritméticos, as fungdes intrinsecas, as decla- ragGes de entrada/saida ¢ os arquivos de dados, =e orem de avatingao das expreSSOeS MATCAB segue uima hierarquia Ha, com i ‘operagées de nivel mais alto avaliadas antes das operagbes de nivel mais baixo. A hierarquia das operagies esté resumida na Tabela 211 A linguagem MATLAB inclui um miimero extremamente grande de fungies pre- definidas para awxliara resolver problemas. Ess lista de fungbes & muito mais rica do que a lista de fungSes encontrada em outras linguagens, como Fortran ou C, ¢ inclu recursos para desenhar que s80 independentes de dispositvos. Algumas das fungSes intrinsecas mais comuns estio apresentadas na Tabela 28, e muitas outras sero intro- dluzidas ao longo do livzo. Uma lista completa de todas as funges MATLAB pode ser acessada através do Navegador de Ajuda 2.14.1 Resumo de Boas Préticas de Programagao ‘Todo programa MATLAB deve ser projetado para que outra pessoa familiarizada com ‘© MATLAB possa entendé-lo com facilidade. Isso ¢ muito importante, pois um bom pro- ‘grama pode ser utilizado por muito tempo. Nesse periodo, as condligdes irao mudar, € ‘0 programa precisaré sofrer modificagSes para refletir essas mudangas. As modificagbes, poderio ser feitas por outra pessoa além do programador original. O programador que fizer as alteragSes precisaré entender programa original muito bem antes de tentar modificé-lo, Tabela 2.11 Hierarquia de Operagdes Precedtncla Operayto 1 (0 conteido de todos on partnteses€ avai, de dentro para fora 2 (Os expoentes sie avaindos, ds esquerda para a diet 3 ‘As multipicagiesedivisdes sf avaliads, da esquerda para a dita, 4 ‘As somas esubteages so avaladas, da esquerda para a drei muito mais dificil escrever programas claro e bons para entender e manter do aque simplesmente escrever programas. Pra isso, um programador deve desenvolver TO |. Praamapso en MATAR pre genes ) it 4. Qualotamanho eo valorde array (1 31,end)? input fla win marcadore 1é um valor do teclado. # +s 5 2 intzotr CConverte em uma cadeia de caracteres de interes 22 Os nomes de varvels MATLAB a seguir si legais ou ilegais? Por qu i va | Bo length(arr) evolve o comprimento de um vetor ou a maior dimensio de [E & Do_you_know_the_way_to_san_jose ‘uma matriz bdimensional - wel aoe load Carrega os dados de um arquivo. = © What’ sup Log (x) Calcula o logaritmo natural de x. = 2.3 Determine o tamanho ¢ o contetido das matrizes a seguir. Observe que as tiltimas. loglog ‘Gera unt desento log-log. = —"atetzas poder depenter das detigoes das malrizes anteriores dent deste Lookfor Procura um termo que case na descrigéo de fungdes de uma £ mesmo exercicio. linha do MATLAB. 4 aa = 1:2:5; imax (x) Retoma 0 valor méximo no vetorx¢,opcionaimente,alocai- = Eb La’ a" ragho dese valor : eek min (sx) Retorna o valor minimo no vetor x,¢, opcionalmente, alocalizae |= dds as Qi; ‘lo dese valor. ew = [zorosti.3) ones(3,1)" 3:5°1; pozia.m Engi ea, msl (Ebb aya Bi 412i; ian epresentacao de “néo-um-niimero”. | yuma que a matriz array seja definida conforme mostrado, e determine unzeer (x) Cenvera em na ends de orton, FE 24 Assuma que mati array! oj deine conforme mosrao,¢ dt ones (n,m) Gera uma matriz de uns. “contetido das sabmattizes a seguir ee Reeantc eines Fr Lt 0.0 24 -3.5 6.0 plot Gera um desenho ay linear i array1 =| 0-9 11 -6.6 2.8 3.4 print Inpeime uma Janela de Figur. § 2.2 Ge 0.3 ok 1.3 round (x) ‘Arredonda x para o inteiro mais préximo. = ate . * pave “Ammazena os dados do esporo de trabalho em um arquivo. Z a arrayl(3,:) semilogx Gera um desenho log-linear z Db. arrayl(:,3) semilogy Gera um desenho linear log Ee arrayiii2:3,0 3 41) sin(x) Calcula 0 seno de x, com x em radianos. rs @. arrayl({1 1).: size ‘Captura o ntimero de linhas e de colunas de uma matriz. “28 Assuma que o valor inicial de value seja 10x, Determine o que seré impresso Calla a riz quadrada de um numero. pels dedavagbes abaixo ” " " Converte uma cadeia de caracteres em um ntimero. fe isp ({'value = * nundstr(value)}) Calcul a tangente de x, com 2 em radianos, : pee (Uvaiue 7 mangoes tvareel)) ‘Adiciona um titulo a um desenho. \: foeueeethe a " Adicona wie a um iE fprint({‘value = te\n' value); [i fprint£({'value = tE\n',value) fprinté({ ‘value = &g\n’ value; i fprintf({‘value = $12.4f\n".valuel: - 2.6 Considere a,b, ced definidas conforme a seguir, ¢calcule os resultados das seguintes 2.15 Exercicios = ‘operagBes caso elas sejam legais. Se uma operagio for il lique o motivo. 2.41 Responds as seguintes perguntas a respeito da matriz abaixo. = erase eperato fe gal expla 110.0 2.1 -3.5 6.0 le a- [23] >= (2 4] arcayr . | 00 Ut -66 208 314 £ 1 2 02 21 0.1 0.3 -0.4 1.3 e+ [3] € = eye(2) 1a 5.1 0.0 1.1 0.0 2. m 29 2.40 an 1 Prgranagso em MATAB® para Engen a. result = b. result. ©. result. d. result. fe. result f result & result apna? marApsisico | 75 screva um programa para calcular a distancia entre quaisquer dois pontos (x1, y1) © (x2, y2) especificados pelo usuario, Utilize boas praticas de programacio em seu programa, Use-o para calcular a distancia entre os pontos (2, 3)¢ (8, ~5) oot Avalie cada uma das seguintes expresses: “ all /5+6 e127) bts 5) +6 cis 2 ~ — > — dse2e3 e3 8 (293) £342) 93 & round(-11/5) + 6 he ceil(-11/5) « 6 i, floor(-11/5) + 6 Use o MATLAB para avaliar estas expressies: a. GS-4 +63) b. cos (12) Resolva o seguinte sistema de equagbes simulkineas para x: 2.0 % + 5.0% + 1.0 X, 4 3.0 x + 4.0 Ky 2.0 X ~ 1.0 X, = 5.0 x, ~ 2.0 x) + 6.0 x “1.0% + 6.0 - 40x, -5.0x+3.0 K 4.0 X + 3.0% - 6.0 x, - 5.0 x, - 2.0% “3.0% + 6.0) + 4.0 x, + 2.0 x, - 6.0 x 2.0% + 40x + 4.0 x4 @O K+ 50 Posisio e Velocidade de uma Bola. Se uma bola estaciondria é langada da altura hh, acima da superticie da Terra, com velocidade vertical t, a posigio e a veloci- dade da bola como fungao do tempo serio dadas pelas equagées he 1 1 @10) w= st) en conde g & aceleragio da gravidade (-9,81 m/s), € a altura acima da superticie da Terra (assumindo auséncia de alrito do at) e » € o componente vertical da velocidade. Escreva um programa MATLAB que solicite ao usuario a altura ini da bola em metros ea velocidade da bola em metros por segundo, depois desenhe a altura e velocidade como fungio do tempo. Nao deixe de incluir a6 legendas apropriadas no seu desenho, A distancia entre dois pontos (x1, y1)e (x2, y2)em um plano de coordenadas carte- sianas 6 dada pela equagio sng hy d=V@l-xaP +l 12) Figura 2.12. Distincia entre dois pontos em um plano cartesian, 2.42 Decibéis. Os engenheiros freqtientemente medem a razio entre duas medidas de poténcia em decibés, ou dB. A equacSo para a razio entre duas medidas de potén- cia, em decibéis, é 0 I Le eB, di 13) conde P, é nivel de potencia medido eP, €um nivel de poténcia de referencia a Assuma que o nivel de potencia de refeéncaP,seja de um miliwate excreva tum programa que aceite como enrada uma poténcia Pea converta em dB com relafo ao nivel de referncla de 1 mW. (Os engenheto em uma unidade ee Peal para niveis de poténcia em dB com respetto& referencia de Im dBm) Urata rts de progam programa ve ®. Escreva um programa que cre um cesenho da potencia em watt ests potécia em dBm com reagio a medida de referencia de 1 mW. Cie desenios near em eye loglinesr 2.13 Co.Seno Hiperbli ‘A fungo de co-senahiperblico 6 definida pela equacio ae ei) z Escreva um programa qu calcul oco-sno hiperbsico de um valor x fornecido pelo usuirio, Uizeo programa para calcular 6 co-eno hiperolio de 30. Com parearesposta do seu programa com a respastaproduzida pela fangao cosh (¥) Guat €o menor valor admitide para esa fanedo? Qual 9 valor de correspon dente a esse valor? Iti nT a My ii i 76 | Perarario en MATAB para Erpntees 2.14 Energia Armazenada em uma Mola: A fora requerida para comprimir uma mola linear é dada pela equacio Fake a5) onde F € a forga em newtons ek ¢ a constante da mola em newtons por metro. A ‘nergia potencial armazenada na mola comprimida é dada pela equagao 1 padi e216) onde E é a energia em joules. A informacio a seguir diz respeito a quatro molas. Foe ®) (Constante da Mola (N/m) Determine a compressio de ada mola ¢ a energa potencal armazenada em cada ona dla. Qual ola tern tas energiapotercal armazenada? 2.18 Receptor de Rédio, Uma versio simplifcada da parte frontal de um receptor de tide AM €apresertada ra Figura 21a. Esse ecepor€ composto por um cielo fue conti tim restr Ry une capactor Ce um indtorL onactates em sie © Heuto €conecado a uma antena externa ealerrado conorme moot a igure 1 citcuto permite que ordi slecione uma elagdoespectice dente as aque trarentem ra fava AM, Na freqhtnc de ressondncia do ccaito, essere mente todo o sina! V, de antena val ato resistor que representa 0 resto do dio, Em outs pelaves,o tao tecebe Seu sinal els forte na equncia de ressonincia. A freqiénca de ressondncia do citeiteindutor-capacior@ dade pela equagio 1 he ear) ‘onde L é a indutancia em henrys (H) eC é a capacitancia em farads (F). Escreva um programa que calcule a freqiiéncia de ressondincia desse aparelho de rédio, dados valores especificos para L e C. Teste seu programa pelo eéleulo da frequiéncia do ridio quando L = 0,1 mH e C = 0,25 nF. 2.16 Receptor de Rédio. A voltagem através da carga resistiva, na Figura 2.13, varia como fungao da freqiiéncia, conforme a Equazio (218). y, a8) onde @ = 2nfe fé a freqiiéncia em hertz, Assuma que L= 0,1 mH, C=0,25 ak, R= 50G2e V,~ 10 mv. apie? waraDetsico | 77 Desenhe a voltagem na carga resistiva como funcio da freqiiéncia. Em qual fre- aiiéncia temos 0 pico de voltagem na carga resistiva? Qual a voltagem na carga com essa freqiigncia? Essa freqiiéncia também é chamada freqiiéncia de ressondncia fy do circuito. b, Sea freqiigncia mudar para 10% acima da freqiéncia de ressonancia, qual ser ‘a voltagem na carga? Quio seletivo sera o receptor de rédio? c._ Em quais freqiiéncias a voltagem na carga caira para a metade da voltagem na freqléncia de ressondncia? 2.17 Suponha que dois sinais sejam recebidos na antena do ridio descrita no problema anterior. Um sinal tem poténcia de 1 Va uma freqiiéncia de 1.000 kHz, eo outro sinal tem poténcia de 1 Va 950 kHz. Quanta poténcia serd fornecida pelo primeiro sinal para a carga resistiva R? E pelo segundo sinal? Expresse a razo, em decibéis, entre a potéricia fornecida pelo sinal um ea poténcia fornecida pelo sinal dois. Qual a melho- ria ou supressdo do segundo sinal, comparado com o primeiro? 2.18 Raio de Curva de Aeronaves. Um objeto movendo-se em uma trajet6ria circular, ‘com velocidade tangencial constante v,é apresentado na Figura 214. A aceleragio radial requerida para o objeto se mover na trajetéria circular & dada pela equacio 219) onde a éa aceleragio centrfpeta do objeto em m/s?, v6 velocidade tangencial do ‘objeto em m/s e r 0 raio da curva em metros. Supondo que o objeto seja uma aeronave, responda as seguintes questées sobre ela: a. Suponha queaacronave est ou seja 85% da velod- dade do som. Se a aceleragio centripeta for de 2g, qual ver 0 raio da curva da ‘eronave? (Nota: para ese problema, vocé pode assumir que Mach 1 = 340 m/s, 1g = 981 m/s*) 'b, Suponha que a velocidade da aeronave aumente para Mach 1,5. Qual 0 raio da «. Desenteo aio da curva como fungio da velociade da acronave para velo dads entre Mach 05 e Mach 20, assumindo que aaceleraglo permaneca em? g, TB | Prarangete em MATLAS® pare Expats 4. Suponha que a aceleragao maxima suportada pelo piloto seja de 7 g. Qual o ‘menor raio da curva da aeronave a Mach 15? e. Desenhe 0 raio da curva como fungio da aceleragao centripeta para aceleragSes entre 2g e 8 g, assumindo uma velocidade constante de Mach 0,5. Figura 2.14 Um objeto deslocando-se em movimento crcilar uniforme com aceleragio cen- tripeta a men i a th tows td [g |= FS aii inert 3 Capitulo Expressées de Ramificacao e Projeto de Programa No capitulo anterior, desenvolvemos diversos programas MATLAB completos e furt- Maior gue = Maior que ou igual « Menor que Menor que ou igual a Algumas operacdes relacionais ¢ seus resultados sio apresentados a seguir. Operagio Resultado 3 1 3 1 3 ° 3 ° 4 1 . 1 ‘A tltima operacio relacional produz 1 porque os caracteres sio avaliados em ordem alfabética, COperadores relacionais podem ser usados para comparar umm valor escalar com uma [3 G]e > =O.cnoa expressio a > b produricé oresutado [1 ©] Operadoresrlaconais podem também ser wados para compar ‘matriz. Por exemplo, se a doas matrizes desde que ambas tenham 0 meno tamasho. Por exemple, se a= [1o]en=[ 2S] enion expresios > 'b produziré o resultado [1 0] Seas mateizestverem tamanhos diferentes, um erro seré produzido. Lt Observe que, como cadeias de caracteres sio na realidade matrizes de caracteres, ‘operadores relacionais podem comparar duas cudeias de earacteres somente se elas tiverem 0 mesmo comprimento. Se elas tiverem comprimentos distintos, a operacio de comparacio produzird um erro. Vamos aprender uma forma mais geral de comparar cadeias de ca- racteres no Capitulo 6. © operador relacional de equivalincia ¢ escrito com dois sinais de igual, enquanto operador de atribuicéo ¢ escrito com um tinico sinal de igual. Esses operadores so ‘muito diferentes, e programadores novatos fregiientemente os confundem. © simbolo uma operacéo de comparagio que retorna um resultado I6gico, enquanto o sim- bolo = atribui o valor da expressao & direita do sinal de igual 8 variével A esquerda desse eae ionat aia a are Gone EES antaiea Sree ce Rarieasioe Proto de Frgama | 87 sinal. Um erro muito comum de programadores novatos é usar um sinal de igual tinico para tentar efetuar uma comparacio. Cuidado para nio confundir o operador de equivaléncia relacional (==) com a decla- ragio de atribuigao (=). Na hierarquia de operagées, operadoreé relacionais sio avaliados depois de todos tre yas OAS EXPTESBOES SOBUINTES SHO" equivalentes— (ambas sio verdadeiras e produzem um valor 1: Te3eaeu 432224 3.3.2 Nota de Atencio a Respeito dos Operadores © operador de equivaléncia (=) retorna 1 quando os dois valores comparados sio iguais, e 0 quando sio diferentes. De maneira similar, o operador de no equivaléncia (-=)retoma 0 quando 0s dois valores comparados sao iguais, e 1 quando sio diferentes, Esses operadores so, de maneira geral, bons para comparar cadeias de caracteres, mas podem as vezes produzir resultados surpreendentes quando dois valores numéricos sio comparados. Devido a erros de arredondamento durante céleulos computacionais, dois ntimeros teoricamente iguais podem ser ligeiramente diferentes, levando um teste de igualdade ou de desigualdade a falhar. Por exemplo, considere os dois seguintes riimeros, que deveriam ser ambos iguais, 200: a=; be (i Como esses ntimeros sao teoricamente 0 mesmo, a operagao relacional a produzir um 1. Na realidade, o resultado desse célculo no MATLAB é , deveria sas or » b= sin(pd); > aad ° © MATLAB reporta que a € b sdo diferentes em decorréncia de um ligeiro erro de arredondamento no calculo de sin (pi), que leva o resultado a ser 1,246 x 10-16 em vex de exatamente zero. Os dois valores teoricamente iguais diferem ligeiramente de- vido ao erro de arredondamento! Em vez de comparar dois nimeros para ver a igualdade exata, vocé deve ajustar seus testes para determinar se dois mimeros sio aproximadamente iguais, com uma fs} BB | Propane om MATAl® pare Enereiros Captain Bessie oo Riese Peto de Prone | 89 precisdo“qui Teve em conta os erfos de aredondamento esperados para os niimeros gute Tabela 3.3. Tabelas-Verdade para Operadores Logicos comparados. O teste Se ‘enadas . ow ou excuse a » abe (a= b) < 108-16 Di hah fi rah “4 1 oo 0 0 0 1 0 4 ¢ 1 1 1 produz a resposta comet, apesar dos eros de aredondamentono ciclo de a eb 2 ; : 1 a . 1a 1 1 0 ° Cuidado ao testar a igualdade de valores numéricos, pois erros de arredondamento oder fazer curas Variaveis que deveriam sor iguaisfalharem no teste de igualdade. Em vex disso, teste para ver se as varidveis sio gusse iguais dentro de un ero de mati Porexemplo se a =[1 ©] e > = 0, eno a exmssio ad apmsenad arredondamento esperado para o seu computador po, ayer e pressdo ath apres ST o resultado {° 3} Operadores légicos podem também ser usados para comparar duas matrizes, desde que as duas tenham 0 mesmo tamanho. Por exemplo, se 10 11) enta i resentaré o resultado [1 1 a=[} oS} en [3 dj entio a expressio ai apresent ntado [2 1] ‘Se as matrizes tiverem tamanhos diferentes, um erro seré produzido. Na hierarquia de operagbes, os operadores légicos slo avaliados depois de todas 4 operagdes aritméticas ¢ relaconais. A ordem de avaliagao dos operadores em uma expressio é dada a seguir, | eo ‘Oeics pox Ser weds pra Compara un Valor GaTar com am 3.3.3 Operadores Logicos Operadores légicos s30 operadores com um ou dois operandos I6gicos que produzem ‘um resultado légico. Existem és operadores légicos bindrios ~ E, OU e OU exclusiva € um operador unério ~ NAO. A forma geral de uma operacio légica bindria é I iararanita 1 op ty 8 forma geral de uma operacio liga undra & 7 1. ‘Todos 05 operadores aritméticos sao avaliados primeiro, na ordem descrita oph, anteriormente. onde I ¢ p sio expressies ou variéveis, e op é um dos operadores légicos mostrados na Tabela 3.2, Se a relagdo entre Ie fy expressa pelo operador for verdadeira, a operacio z retoma um valor 1; caso contrario, a operagao retorna um valor 0. Os resultados dos operadores esto nas tabelasverdade apresentadas na Tabela 33, i 3. Todos os operadores ~ s80 avaliados. que mostram o resultado de cada operagao para todas as combinagies possiveis de ely ‘Nas operagbes légicas, o MATLAB trata um operando como verdadeiro se ele for dife- rente de zero, e falso se for igual a zero. Assim, o resultado de ~5 €0, ¢ 0 resultado de -061, 2. Todos os operadores relacior da esquerda para a direita, >) 24) <, <=) SSoavaliados, 4. Todos os operadores & sio avaliados, da esquerda para a direita, 5. Todos os operadores | sio avaliados, da esquerda para a direita? 5 Assim como acontece com os operadores aritméticos, os parénteses podem ser usados para mudar a ordem-padrio de avaliacio, Exemplos de operadores ligicos & Tabela 3.2 Operadores Logicas FZ seus resultados sio-dados no Exemptss—— Oaneor ' . Eligico |= 7 Nota: Antes do MATLAB 6, os operadores & e | tinham precedéncia igual, e eram avaliados da es- ' OU Ligico z ‘querda para a deta em ordem de ocoertncs.A partir do MATLAB 6 os passow » sr avaliado antes OU excusvo igco [Zo Asm, uma expres como aibic sei ava dfn no MATLAB S31 ou anterior no 1AO igo MATLAB 60 ou posterior. Cuidado! Por garanta, sempre use pardnteses para indcar a ordem dese ja de avaliagd de uma expreeeio, 90 | Prgamacto on MATLAB pare Enperios > rescence areerman Exemplo 3.1 Considere que as seguintes variéveis so iniciadas com os valores mostrados, e calcule o resultado das expresses especificadas. value} = -10 Expressio Légica Ad nom oe Caple 3 Sgesses te Ranviapfoe Pate ae Pogara | 91 Bote teste apresenta uma verificagdo répida do seu entendimento dos conceitos apre- sentados na Segio 3.3. Se vocé tiver problemas com o teste, releia as segSes, pergunte a0 seu professor ou discuta 0 material com um colega. As respostas podem ser encontradas no final do livro, Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes expresses: b= -2; ~vainel valuel | value2 valuel & value? valuel & value2 valuel & (value? ~(valuel & value) eee aenararnneerneeenee sensi | values) 1 0 1 value 1 1 0 O operador - é avaliado antes dos outros operadores I6gicos. Portanto, os pa- rénteses na expressio (f) do exemplo anterior so necessarios. Sem esses parénteses, a cexpressio (f) teria sido avaliada na ordem (~valuel) & value}. 3.3.4 Fungdes Légicas © MATLAB tem diversas fungdes légicas que retomam 1 quando a condigao testada for verdadeira e 0 quando a condigao testada for falsa. Essas fungdes podem ser uusadas com operadores relacionais e légicos para controlar a operagio de ramifi- ceagdes ¢ lagos. Algumas das funsées légicas mais importantes sio dadas na Tabela 3.4 Tabela 3.4 Fungdes Légicas do MATLAB Fangio a Devolve Ise for uma mati de carateres, 0, ca contririo, Avempty a) Devolve 1 sea for uma matrz vazl, 60, caso contréio, sintia) Devolve 1 seo valor de for infinits (int), €0, caso contri, senan (a) Develve 1 se 0 valor de a for at (aio um mimeo) 0 caeo contri. ismumericta) __Devolve1 se a for uma matiz mumétia, e030 contri. aia aa a a a TT DRI Hreoriedfn aioe Assuma agora que a, b, ¢ ed sejam conforme dado. Explique a ordem de avaliagio de cada uma das seguintes expresses, especifique os resultados em cada caso: asa © = 10; bear a=0; 10. atbr2 > ate Md tbsa 2. (dt bl aa Assuma que a, b, c € d sejam conforme dado, e avalie as seguintes expressbes: a = 20; b= 2; c= 0; a= "Test"; 13. ising (a/b) 14. ising (a/c) 15. a > b & ischar(a) 16. isempty(c} a 92 |. Pagarapsoem MATLAB para Ergntvies 3.4 Ramificagbes ‘Ramificagdes so declaragdes MATLAB que nos permitem selecionar e executar segies especificas de cédigo (denominadas blocs) esaltaroutras secBes do céigo. Sto varia- Bes da construgio 1 f, da construgio switch e da construgio try/catch. 3.4.1 A Estrutura if Aconstrugio if tem a forma it_exprcontrotet1 —_____ Declaracao 1 Declaracao 2 | Bloco1 assis oxpe_coitrole.2 teclasacso oviaraeae | Boo 2 ase Declaracdo 1 Dociaracao | Bloco3 onde as expressées de controle controlam a operagio da construcio if. Se expr_con- erole_t é diferente de zero, o programa executa as declarages no Bloco I e salta para 2 primeira declaragdo executdvel depois de end. Caso contrério, o programa verifica estado de expr_controle_2. Se expr_controle_2 diferente de zero, o programa executa as declaragGes no Bloco 2 e salta para a prmeira declaragdo executével depois de end. Se todas as expressdes de controle sio zerc, 0 programa executa as declaracées no bloco associadas com a cldusula ¢1 se. Pode haver qualquer nimero de clausulas eee: £ (0 ou mais) em uma construcio if, mas pode haver no méximo uma cldusula ele. A expressao de controle em cada cldusula seré testada somente se as expresses de controle em todas as cléusulas acima dela forem avaliadas como zero. Quando uma das expressdes € diferente de zero € 0 bbloco correspondente ¢ executado, © programa salta para a primeira declaragio execu- tavel depois de end. Se todas as expresses de controle sio zer0, 0 programa executa as declaragGes no bloco associadas coma cldusula ee. Se ndo existir uma cldusula else, ‘ execusio continua depois de end sem executar qualquer parte da construgio Lf. Note que a palavra chave enc no MATLAB, nessa construgio, & completamente dife- rente da fungio end do MATLAB que usamos no Capitulo 2 para retornar o valor mais. alto de um indice dado. O MATLAB diferencia esses dois usos de end pelo contexto em ‘que aparece a palavra em um arquivo M. Na maioria das circunstincias, as expressies de controle sfo uma comibinago de operax ores relacionais ¢ Idgicos. Conforme aprendemos ro inicio do capitulo, 0s operadores relacionais e ldgicos produzem 1 quando a condigio correspondente é verdadeira e 0 at al mailman Ha Adaesdibe te Peso HP Caplule3 Grasses ae Ramiescie Peto de Prngame | 98 ‘quando a condigao correspondente éfalsa. Assim, quando um operador é verdadeiro, 0 resultado é diferente de zero e o bloco correspondente é executado, Como tum exemplo de construgio if, considere a solugio da equagio quadratica da forma attbrte=0 @1) Assolugéo dessa equagio é 4 Vee eo 2) SO termo b= ac 6 conhecide como discrininante da-equagio. Se bt ~dac> 0, hé-duas raises — reaisdistntas para a equagio quadritica. Seb? 4ac =O, hi uma dnicaraizrepetida para a equagio. Se b ~ 4ac < 0, hé duas raizes complexas para a equacio quadrética. Suponha que queiramos examinar 0 discriminante de uma equagio quadrética e dizer a um usuario se a equagio tem duasraizes complexas, duasraizes reas idénticas ou duas raizes distntas reais. Em pseudocédigo, essa constragio adotaria a forma if (bA2 - arate) < 0 Escreva que a equagao tem duas ra{zes complexas. elseif (b*2 - 4*atc) w= 0 Escreva que a equaggo tem duas raizes reais idénticas. else Escreva que a equacdo tom duas rafzes reais distintas. end ‘As declarages MATLAB para fazer isso $30 if (bt2 ~ dtatc) < 0 isp(“Essa equacao ten duas ra{zes complexas.); elseif (b*2 - dtate) == 0 disp(‘Essa equagio ten duas rafzes reais id@nticas. else disp(‘Essa equagio tem duas rafzes reais distintas.’); end Lembre-se de que 0s operadores relacionais retomam um valor diferente de zero (1) quando o teste é verdadeiro, por isso um teste verdadeiro provocard a execucio do loco de eédigo correspondente. Para facilitar a leitura, os blocos de cédigo com uma construgio if sio em geral tabulados em dois ow trés espagos; mas Isso nz Verdade no € estritamrente requerido, Sempre tabule o corpo de uma construgio if em dois ou mais espacos, para faclitar a legibilidade do cédigo. EEE ESET 94 | Praams;so em METAB pre Ege F possivel escrever uma construgio i completa em uma tnica linha, separando as partes da construglo por virgulas ou ponto-e-virgula. Assim, as duas construgies a seguir si0 idénticas Canine Saresses oe RamieapioeProstoae Popana | 95 discriminante. £ razosvel, portant, implementar esse algoritmo com uma cons- trusio if de tts ramificagées. O pseudoadigo resultante é Solicite eo usuério os coeficientes a, bec: Leia a, bec if xo discriminante © b'2- 44a tc ¥ = abs (x); if diseriminante > 0 end x1 © ( -b + sqrt(discriminante) } / (2 * a) e x2 © (-b ~ sqrt(discriminante) } / (2 * a) Escreva que a equacao tem duas rafzes reais distintas. x < 0; y = abs(x); end Escreva as duas raizes elseif discriminante =» 0 Entretanto, isso deve ser feito somente para pequenas construcies. Deby 2 al 3.4.2 Exemplos de Utilizagao de Estruturas if ‘Vamos agora analisar dois exemplos de uso das construgbes if. > SS Exemplo 3.2 ~ Equaydo Quadrética Projete e escreva um programa para resolver as raizes de uma equacio quadritica, inde- pendentemente do tipo. Solugio ‘Vamos seguir os pass0s de projeto apresentados anteriormente no capitulo, 1. Estabelega 0 problema ‘A apresentacao do problema para este exemplo é muito simples. Queremos es- crever um programa para resolver as raizes de uma equacio quadratic, indepen- dentemente de serem raizes reais distintas, reais repetidas ou raizes complexas. 2. Defina as entradas e safdas As entradas requeridas para esse programa sio os coeficientes a, b e ¢ da equagio quadritica axttbrtc=0 ep A saida do programa serao as raizes da equacéo quadratica, independente- mente de serem raizes reais distintas, reais sepetidas ou complexas, 3. Projete o algoritmo Essa tarefa pode ser quebrada em trés sees, cujas fungies sio entrada, proces- samento e saida, Leia cs dados de entrada Calcule as ratzes Escreva as rafzes ‘Agora, quebramos as segdes acima em partes menores e mais detalhadas. Existem trés possiveis maneiras de calcular as raizes, dependendo do valor do Escreva que a equagdo tem duas raizes reais idénticas Escreva a raiz repetida. “parte_real © -b / (2 * a) parte imag « sqrt (abs (discriminante) } / (2 * al Escreva que a equacio tem duas rafzes complexas. Escreva as duas raizes. end 4. Transforme o algoritmo em declaragies MATLAB (O eédigo final MATLAB € conforme a seguir. Script file: calc_roots.m Purpose ‘This program solves for the roots of a quadratic equation of the form atx"2 « bx + c= 0. Tt calculates the answers regardless of the type of roots that the equation possesses. Record of revisions: Date Programe: Description of change 12/04/98 S$. J. Chapman Original code Define variables: a == Coefficient of x2 term of equation > == Coefficient of x term of equation c Constant term of equation iscriminant of the equation imag part of equa’ real_part -~ Real part of equation (for complex roots) x1 -- First solution of equation (for real roots) x2 == Second solution of equation (for real roots) % Prompt the user for the coefficients of the equation disp (‘This progrean solves for the roots of a quadratic’); disp (‘equation of the form AYX*2 + BX 6 C= 0.) 96 | Proganacso em AUTLAB® pre genes = input (‘Enter the coefficient A: ‘I; b = input (‘Enter the coefficient B: '); € = input (‘Enter the coefficient ¢: "); ® calculate discriminant discriminant = b2- 4 * a * c & Solve for the roots, depending on the value of the discriminant if discriminant > 0 there are two real roots, so... xl + (-b + sart (discriminant) ) / (2 tan x2 = ( -b = sqrt (discriminant) ) / (2 * a); disp (This equation has two real roote:’); Eprincé (xl = 8f\n", x1); Eprintl (/x2 = 8f\n") x2); elseif discriminant == 0 % there is one repeated root, so xl=(-b) /(2* a); disp (‘This equation has two identical real roots;’1; fprinté ("x1 = x2 = ¥£\n’, x1); else & there are complex roots, so realpart = (-b) /(2* a); imag_part = sqrt ( abs ( discriminant ) ) / disp ("This equation has complex rocts:"}; fprintf (‘x1 = $f 41 ¥f\n’, real_part, imagpart ); fprintf ("x1 + $f -i 4f\n’, real_part, imagupart ); Catan end 5. Teste o programa A seguir, vamos testar o programa utilizando dados reais. Como existem trés possiveis caminhos pelo programa, precisamcs testar todos os rs caminhos antes de termos certeza de que o programa esté funcionando apropriadamente. A par- tir da Equacio (32), € possivel verificar as solugSes para as equagoes a seguir. x2+5246=0 tear + 4=0 +2 +590 xe2and x=-3 x=2 xe1s2 Se esse programa for executado tx@s vezes com os coeficientes acima, 05 re- sultados serao como os mostrados (0s dados fornecidos pelo usuério aparecem em negrito): » calc_roote This program solves for the roots of a quadratic equation of the form A‘K"2 + BPX + C= 0 Enter the coefficient A: 1 Enter the coefficient B: 5 Enter the coefficient C: 6 T ft tT 3 i I £ Cape 3 Eases ob Ramiicapiow Projet de Pogame | ST ‘This equation has two real roots: 2.000000 2 = ~3.000000 » calc_reots This program solves for the roots of a quadratic equation of the form A‘K2 + BYX + C= 0 Enter the coefficient a: 1 Enter the coefficient B: 4 Enter the coefficient C: 4 This equation has two identical real roots: x1 = x2 = -2,000000 ‘This program solves for the roots of a quadratic Enter the coefficient A: 1 Enter the coefficient B: 2 Enter the coefficient c: 5 This equation has complex roots x1 = -1,000000 +4 2.000000 x1 = -1,000000 -i 2.000000 (© programa dara as respostas corretas para nossos dados de testes em todos (0 trés casos possiveis. < » Exemplo 2.3 - Avaliar uma Fungo de Duas Varlavels Escreva um programa MATLAB para avaliar uma fungio f(r y) para quaisquer dois va- lores x € y especificados pelo usudrio. A fungio fixy) 6 definida assim: x+y x20andy20 a jety x20andy<0 JOM") ay x<0andy20 x+y x funxy Enter the Enter the ‘The value x coefficient: 2 y coefficient: -3 of the function is x coefficient: -2 y coefficient: 3 of the function is 7 x coefficient: -2 y coefficient: -3 of the function is 73 (programa dard as respostas corretas para nossos valores de teste em todos os quatro casos possiveis. < 3.4.3 Notas a Respeito do Uso de Estruturas i£ A construgio if é muito flexivel. Ela exige uma dedaracio if ¢ uma declaragio end No meio, pode ter qualquer niimero de cldusulas elsei, e pode também ter uma cldusula else. Com essa combinacio de caracteristcas, 6 possivel implementar qual- quer construgio desejada de ramificagdo, Adicionalment, construgies i podem ser aninhadas. Duas construgées if sio aninhadas se uma delas se posicionainteiramente dentro de um tinico bloco de cédigo da outra. As duas construgées if a seguir estio apropriadamente aninhadas. iE xo ity <0 end, end O interpretador MATLAB sempre associa uma dada declaragio end com a decla- ragdo if mais recente, assim, o primeiro ond fecha a declaracio if y < 0, enquanto © segundo end fecha a declaragao if x > 0. Isso funciona bem para um programa escrito apropriadamente, mas pode levar o interpretador a produzir mensagens de lerros confusas se o programador preparar um cédigo erréneo. Por exemple, suponha gue tenhamos um programa de grande porte com uma construcio deste tipo: if (test1) if (cest2) | = apie presses Raritasfoe Preto de Prana | 101 if (test) end end end Esse programa contém trés construgdes if aninhadas que podem se espalhar por centenas de linhas de cédigo. Agora, suponha que a primeira declaragio end seja = acidentalmente removida durante uma sessio de edigio. Quando isso ocorre, 0 interpretador. cia automaticamente 0 segundo end com a construcao if (test3) mais comaif (test2) do meio. Quando o int pretador atinge o fim do arquivo, le se dé conta de que a primeira construsio if (test) néo foi fechada e gera uma mensagem de erro dizendo que falta umn end. Infelizmente, ele nio pode dizer onde o problema ocorre, da a necessidade de voltar € procurar manualmente em todo o programa para localizaro ero, Eas vezes possivel implementar um algoritmo usando miltiplas clfusulas etseit ou declaragées if aninhadas, Nesse caso, uum programador pode escolher 0 estilo que melhor Ihe aprouver. Exemplo 3.4 ~Distribuigo de Notas Usando Suponha 0 desenvolvimento de tum programa para ler uma nota de aluno numérica € associar uma letra a ela, segundo a tabela a seguir: nota > 95 A 95 2 nota > 86 B 86 2 nota > 76 C 16 2 nota > 66 D 66 2 nota > OF Escreva uma construgdo if para distribuir as notas conforme deserito acima usando (a) miltiplas cléusulas e12ei£ eb) construgdes if aninhadas Solugio a. Uma possivel estrutura com o uso de cldusulas elseif é nota 5 9 disp(’A nota & elseif nota > 86 disp(‘A nota é eleeif nota > 76. disp("A nota é elseif nota > 66. disp("A nota é 102 | Propane am NUTLAe para pets disp(‘a nota é F.* end 'b. Uma possivel estrutura com 0 uso de construsées if aninhadas é if nota > 95.0 disp(/A nota 6 A. if nota > 86.0 disp(‘A nota 6 8. else if nota > 76.0 ”: disp(’A nota 6c.) else if notd > 66.0 disp(‘A nota é D. else disp(‘A nota 6 F."); end end end —— Deve ficar claro, pelo exemplo acima, que, se houver muitas opgSes mu- tuamente exclusivas, uma construgao if nica com muiltiplas cléusulas if sera mais simples do que uma construgéo if aninhada, Para ramificagBes com muitas opgées mutuamente exclusivas, utilize uma tinica construgSo if com miltiplas cldusulas ese, preferencialmente a construgées if aninhadas ed 3.4.4 AEstrutura switch A construgio switch € outa forma de construsio de ramifcagio, Ela permite que un Frogramaor setesone sm boc de igo em parla ser execatad, ct ase no ‘alor de um nico into, caractere ou expresso logica, A forma gerald uta cone, trugdo switch é: » “Bs ® } Bloco switch (expr_switch) case expr_case, Declaracao 1 Declaracao 2 1 | ao a lod Eeste oe Ramage rte Programa | 108 } Bloc? J son 3 Seo valor de exp switch for igual aexpr.case1, 0 primeiro bloco de ciigosers exceu- «doe o progr sataré para a primelra decarasao apés 0 final da consmugao svi teh De mancira similar, seo valor de expr switch for igual aexpr_cese_2, 0 segundo bloco de cédigo sera executado e o programa saltars para a primeira declaragto apo inal da constragio switch, A mesma ida se aplica os outros caos na construgi © bloco de c6igo otherwise € opcional. Se ele estiver presente, seréexecutado sempre que o valor de expr_owi tch estiver fora do coberto por todos os seletores de casos. Se ele ni estiver presente eo valor de expr_witch nto for coberto pelos seletores de casos, rnenhum dos blocos de oédigo serd executado. O pseudocddigo para o constrator de ‘casos é idéntico& sua implementagdo em MATLAB. Se muitos valores de expr_switch provocarem a execugio do mesmo cédigo, sserd possivel incluir todos esses valores em um tinico bloco por meio de chaves, con- forme ilustrado a seguir. Se a expresséo casa com alguma das expresses na lst, © bloco serd executado. case case_expr_2, Declaracko 1 Declaracao 2 otherwise, Declaraco 1 Declaracao 2 end switch (expz_switch) case (expr_case_l, expr_case_2, Declaracae 1 Bloco 1 } Blown A switch _expre cada uma das case_expr podem ser valores numéricos ou de cadeias, de caracteres. Note que no maximo um bloco de cédigo pode ser exeeutada. Aps.a execucio de tum bloco de cédigo, a execugio salta para a primeira declaragio executivel depois da declaragio end. Assim, se a expressio switch casar com mais de uma expressio case, somente a primeira serd executada. Vamos analisar um exemplo simples de construgdo switch. As declaragSes abaixo determinam se um inteiro entre um e dez é par ou impar e imprimem uma men- sagem apropriada. Com isso, ilustramos © uso de uma lista de valores como seletores de casos, e também 0 uso do bloco otherwise. expr_case_3), otherwise, Declaracao 1 Declaragao 2 end) 104 | Pagano em MATAG par Engetere switeh (valor) case (1, 3, 5, 7, 9), disp(‘0 valor & impar.*) case (2, 4, 6, 8, 10), disp(’0 valor & par.'); otherwise, disp(‘0 valor é invélido.’) end 3.4.5 A Estrutura try/catch A construgo try/catch € uma construgio de ramificagio especial para capturar erros. Normalmente, quando um programa MATLAB encontra um erro durante a execucio, © programa aborta. A construcdo try/catch modifica esse comporta- mento-padrao. Se ocorrer um erro em uma declaragao no bloco try dessa construcio, ‘em vez de abortar o programa executard 0 cédigo dentro do bloco cat.ch e continuardé ‘aexecugao. Com isso, um programador pode manipular erros dentro do programa sem rovocar a parada do programa. ‘A forma geral de uma construgio try /catch é Declaracdo 2 } Blo ty Decterecte 2 } Bloc cach end Quando uma construgio try/catch for alcangada, as declaragbes no bloco try sero executadas. Se nao ocorrerem err0s, as declaragBes no bloco catch serao ignoradas e a execugio continuaré a partir da primeira declaracio depois da cons- ‘trugio. Por outro lado, se um erro ocorrer no bloco ty, 0 programa interromperd execusio das declaragdes naquele bloco e executaré de imediato as declarag3es no bloco catch, Um programa de exemplo que contém uma construgio try/catch € apresen- tado a seguir. Ele cria uma matriz e solicita que o usuério especifique um elemento da ‘matriz para ser exibido. O usuério fornece um muimero de indice e o programa exibe 0 elemento correspondente da matriz. As declaragées no bloco try serio sempre execu- tadas nesse programa, enquanto o bloco catch seré executado somente se ocorrer um erro no bloce try. etme Ravin se Capinie3 Sesstes ob Ramicaetoe Peto ae Pregame | 108 & Inicia a matriz as (1-3 251; try % — Tenta exibir um elemento index = input (‘Fornega 0 indice do elemento a ser exibido: *); disp( ('a(’ int2str(index) ‘) = ' numastr(a(index))] ); catch % Se chegarmos aqui, ocorreu um erro Aisp( (‘fndice ilegal: * int2str(index}} } end Ao executar esse programa, os resultados slo: — » try_cateh Fornega o indice do elemento a ser exibido: 3 aQ) =2 » try_catch Forneca 0 indice do elemento a ser exibido: 8 indice ilegal: 8 ste teste apresenta uma verificagdo répida da sua compreensio dos conceitos apresen- tados na Seco 3.4. Se vocé tiver problemas com o teste, releia as segies, pergunte ao seu professor ou discuta o material com um colega. As respostas podem ser encontradas no final do livro. Esereva declaragdes MATLAB para as fungées descritas a seguir, 1. Se x é maior que ou igual a zero, escreva o valor da raiz quadrada de x na va- ridvel sqrt_xe imprima o resultado. Caso contrério, imprima uma mensagem de erro sobre o argumento da funcio de raiz quadrada e coloque 0 valor zero em sqrt_x. 2. Uma variavel denominada fun 6 calculada como nunerador /denominador. Seo valor absoluto de denominador for menor que 1.0E-300, escreva “Erro de divisao por zero”. Caso contrério, calcule e imprima o valor de fun, 3. O custo por milha de um veiculo alugado é § 0,50 para as primeiras 100 milhas, $.0,30 para as 200 milhas seguintes e $ 0.20 para todas as milhas além das 300 primeiras. Escreva declaragdes MATLAB para determinar o custo total eo custo ‘médio por milha para um dado numero de milhas (armazenado em uma va- ridvel distancia). Examine as declaragbes MATLAB abaixo. Flas estio corretas ou incorretas? Se cestiverem incorretas, onde esté 0 erro? 4, 4£ volts > 125 isp(/WARNING: High voltage on line.‘); if volts < 105 Gisp(*WARNING: Low voltage on line.’ else disp(*Line voltage is within tolerances.”); end color = ‘yellow’; switch ( color ) case ‘red’; disp(’Stop now!"); case ‘yellow’, disp(*Prepare to stop.’) case “green’, disp("Proced through intersection."); otherwise, disp('Tilegal color encounterea.’ end 6. if temperature > 37 disp(‘Hunan body tomperature exceeded.'); elseif temperature > 100 disp("Boiling point of water exceeded."); end —_— 3.5 Caracteristicas Adicionais Esta secio descreve os recursos adicionais para os diagramas simples bidimensionais apresentados no Capitulo 2. Esses recursos nos pematem controlar os intervalos dos Valores de x e y apresentados no diagrama, colocat diagramas multiplos um sobre 0 ‘outro, criar miltiplas figuras, criar muiltiplos diagramas em uma figura e proporcionar ‘maior controle sobre lithas € textos no diagrama. Aprenderemos tambéin como erat diagramas polars. 3.5.1 Controlando os Limites nos Diagramas dos Eixos xe y © padrio é exibir os diagramas com eixos x e y de dimensdes suficientes para mostrar todos os pontos de um conjunto de dados de entrada Entretanto, por vezes € util exibit somente um subconjunto de dados que seja de inteesse particular, Iso pode set feito pelo comando/fangio axis (veja a Nota sobre a relagio entre comandos e fungBes MATLAB). Algumas formas do comando/fungio asi sio apresentadas na Tabela 35, As \tontname (tome da~ tonto} = especfica o nome da fonte 2 ser utiizada — # \fontsize(tananho da. fonte) ~especifica 0 tamanho da fonte. (000) ~0s caracteres dentro das chaves so em subscrito. G00) — 0s caracteres dentro das chaves s80 em sobrescrito. Uma ver inserido um modificador de corrente em uma cadeia de texto, ele permanece ativo até o final da cadeia ou até ser cancelado, Se um modificador vier antes de chaves (|, somente o texto entre elas € afetado. ‘Simbolos mateméticas e letras gregas podem também fazer parte de cadeias de texto, Eles sio criados pela insercio de sequéncias especiais na cadeia de texto. Essas seqiiéncias sao um subconjunto das seqiiéncias especiais com suporte pela linguagem ‘TX. Uma amostra dos cédigos possivels esté na Tabela 36 a seguir. O conjunto com- pleto de possibilidades est incluido na dacumentacio on-line do MATLAB. Se um dos caracteres especiais \,{ |, _ou, * precisar ser apresentado, ele deve ser pprecedido por uma barra invertida. (Os exemplosa seguir lustram o uso de modificadores de corrente ecaracteres especiais. Cadeia de caracteres Resultado \tau_(ind} versus \omega_{(\itm} “gs ETSUS Oy \theta varia de D\circ até 90\circ 8 variade 0” até 90" \beiB}_ its) By 3.5.7 Diagramas Polares © MATLAB tem uma fungao especial chamada polar, que desenha dados usando coordenadas polares. A forma basica dessa funcio é polar(theta,r) onde theta é uma matriz de angulos em radianos e x € uma matriz.de distancias. Isso 6.til para desenhar dados que si0 fungies intrinseces de-urr-angute-— > Exemplo 3.5 ~ Microfone Cardiside ‘A maioria dos microfones para uso em palcos de teatro ¢ direcional. So construidos ‘especificamente para ampliar os sinais recebidos do cantor posicionado a frente do microfone e suprimir o ruido da audiéncia que esté atrés. A148 | Pragamapio em MATUEB pre genes Tabela 3.6 Alguns Simbolos Matematicos e Letras Gregas Seqitncia de ‘Seqiénca de Seqléncla de Garacteres_Simbolo Cancieres—_Simbolo Caraceres—_Simbolo \alpha a Vint J beta s \eong \gamma y \Gamme r {sion - data 5 \Deta a \intty - \ epsilon . \pm 2 eta 1 Veg < \theta . sea > Mamda a Vtamda a ne . \mu ” propio « Ane ¥ \aw + ei * vw 1 ere . phi . Metuightarrow ho e Vefarow sigma . Sigma z \rightarrow \eau : \wparow 7 ome ® omega a \downarow © ganho de um microfone desse tipo é fungio do Angulo segundo a equacio Gano = 2g(1 + cos 9) @3) em que g 6 uma constante diferente para cada microfone e 8 0 angulo entre 0 eixo do microfone e a fonte sonora. Assumindo que g seja 0,5 para um dado microfone, desenhe um diagrama polar do ganho do microfone como fungio da diregio da fonte sonora Solugio Precisamos calcular o ganho do microfone versus 0 angulo e desenhar esse ganho uti- lizando um diagrama polar. O cédigo MATLAB para isso é: Script file: microphone.m Purpose: This program plots the gain pattern of a cardioid : . . ‘ % microphone . Crptula3 Exresses te Famiasdo0 Preto 6 Popara | 118 % Record of revision: & Date Progranmer Description of change a % 12/10/98 Ss. J. Chapman Original code . & Define variables: aig <= Microphone gain constant ® gain -+ Gain as a function of angle % theta -- Angle from microphone axis (radians) % calculate gain versus angle 9 = 0.5; theta = O:pi/20:2*piz— oe gain = 2*g*(1rcos (theta) ); 8 Plot gain polar (theta, gain, 'r-"); title (/\bfcain versus angle \theta’); (© diagrama resultante esté na Figura 3.7. Note que esse tipo de microfone ¢ chamado de cardidide, pois seu ganho apresenta a forma de um coracio. a ) . Exemplo 3.6 ~ Engenharia Elétrca: Resposta de Froqiéncia Um filtzo de passagem baixa simples* é apresentado na Figura 38. Esse circuito é com- posto por um resistor e um capacitor ligados em série, ea razo entre a voltagem de saida V, e a voltagem de entrada V, é dada pela equagio 1 V, T+ pm jRC um Fitro de Passagem Balxa Vv, 4) ‘onde V, uma votagem de entrada em senside com freqiéncafRéa resisténciaem ohms, C€a capacitancia em farads ej 6V1 (os engenheios eletricitasutlizam jem vez de para pois a letra tradicionalmente reservada para a corrente em um circuto) ‘Assuma que a resistencia R~ 16 kOe a capacitincia C= 1 HF, e desenhe a ampli tude e a resposta de freqiéncia desse filtro ‘Solugdo ‘A resposta de anipliade de um ito €arazio entre amplitude da voltagem de s a amplitude da voltagem de entrada, e a esposta de fase do filtro €adiferenga entre 2 fase da Vollagem de sada ea fase da vollagem de entrada. A forma mas simples de Caleular a amplitude ea resposta de fase do filtro €avaliar a Equag (2.4) para diversas * NIT Ese tipo de filtro &comumentechamado de flo peeadize plas proisionas da Sea

Você também pode gostar