AF_matlab.ai
5/18/10
5:05:22 PM
PARA ENGENHEIRO ROS S
G
U
N
D
A
E
D
I
Ç
Ã
O
R ch Ri char a d L. Bur urde en e J. J Dou ugl glas Fai aire aire es Estr Es t ut tr utur ura ur a de de Dad dos e Alg lgor gor orit itmo it m s em m C++
Dest De sttin naa-se se e à dis isci cipl ci plin pl ina in na
res re esolu soluçã çã ão de pro robl blem emas
intr in trod tr oduç od ução ão à c com om mpu puta taçã ta ção çã o (o (ou u
Intr In ntr trod oduç oduç od çã ão o à Ciê ência nciia nc a da Co Comp put uta aç ção ão
topto p-do down w (do mai ais s ge gera rall pa ra para ra o
ciên ci ênci cia a da com com mpu puta taçã ção) o), no os
2 edi diç ção o atu tual aliz al i ad ada a
mais ma is esp spec ecíf í ico) o), re refo forç rçan ando do a
cursos d de e in inform rmát átic ica, a, com omo o
capa ca p ci cida dade do o MA MATL TLAB AB com mo
Sist Si stem st em emas mas a d de e Inform maç ação ã ,
uma liing um n ua uage gem m de pro rogr gram amaç ação ão
Ciiên ênci cia a da Com ompu p ta pu taçã ção e
té écn cnic ica qu que e pe perm rmit ite ao est stud udan nte
Enge En genh har aria ia da a Co Comp mp put utaç a ão aç ão,,
esc es crev cr ever er pro ogr gram am mas llim impo pos, s,
be em co como mo nos currso sos de
effic cie ient n es e b nt bem em doc o um men nta tado dos. s.
Fíísi s ca ca, Qu Quím ímic ica a e En Enge genh nhar aria ia,, s nd se do pa part rtic icul ular arme ment nte e út útil il para pa ra est stud udan ante tes s de est ste e úl ú ti t mo mo.
CM
funç fu funç nçõe çõ s para ra a dec compo p siçã ção
D st De stin i ain a-se, ai aind nda, a, a
MY
lógi ló gica ca de tta are efa fas em m
profission nai ais s em g ger eral al que ue
CY
sub subt su bttar aref e as as ain nda a men nores es e de
desejem utilizar ess s a
ferr fe rra amen am men enta t s MA ta MATL TLAB TL AB
ferram a en am nta da comput uttaç ação ão.
K
Tra Tra Tr ad duç ção ão da 8
ed diç ição ção o nor orte te-a ame meriica can na a
toda to da a obr obr bra, a, uma a, ma m met etod odol olog ogia ia de
O li livr v o enfa f tiza fa a o uso so de e
CMY
Anál nál áli lis ise Nu Numé Numé éri rica ca a
Ap pli lica ica caçõ çõ ões
M
Y
Ou utras s obr bras as s
O au auto t r ap to apre re ese s nt nta, a, a a, ao o lo long ngo o de
prépr réé-co cons nstr str truí uída uí das da s. Apr pres es sen enta ta, ta co com om ig gua uall ên ênfa fase fa se,, no se ota tas s so sobr bre br e boas bo oas sp prá rá áti tica ca c as de pro rogr grram amaç ação aç ão e er erro erro os de p pro r gram ro grram amaç ação aç ão.. ão
ISBN 13 978-85-221-0789-6 ISBN 10 85-221-0789-0
Para suas soluções de curso e aprendizado, visite www.cengage.com.br
9 788522 107896
P RO G R A M A Ç Ã O E M M ATL T L A B PA R A E N G E N H E I RO S
C
E
ST T E P H E N J. C H A P M A N
PROGRAMAÇÃO EM
Ad da am m Dro rozd ozd zdek ek k
Rica ard do Da ani niel niel el Fed ede elli, e i, E Enr nric ico o Giiullio io F an Fr anco co P Pol o lo ol oni ni e Fe err na nand ndo Ed ndo nd Edua Edua uard ard do Pe Pere es Inttrrrod In oduç od ção ão aos os Sis istema iste m sO ma Op per erac erac cio iona ona na ais is s Ida a M. Fly lynn n e An nn n McI cIve Ive ver Mc McHo cHo Hoes ess Mate Ma t m te má áti tica Dis scr cret eta: a uma m iint nttro odu duçã çã ão T ad Tr du uç ção ã da 2 ediiçã ção o no ort rte e-am eamer eric ican ana a Edwa w rd R. Sch wa hein iner erma man n
S
E
G
U
N
D
A
E
D
I
Ç
Ã
O
O ien Or ent n aç ação a Objeto co om Pr Prot otot ot o ipação R ca Ri card rdo do Da Dan niel ni n el F Fed edeli, Enr n ic co G Giiul u io Fran nco o Po ollo ol lo oni e Fer erna na and n o Ed Edua uard rd rdo do Pe Pere ress Prin Pr inc cíp ípio ios s de S Sistem mas sO Ope pe pera era aci cion o ai on as P ojjet Pr etos os e Apl plic ica caç çõe õ s B ian Br ian L. Stu tuar artt
STEPHEN J. CHAPMAN
Stephen J. Chapman BAE SYSTEMS Austrália
Fundamentos de Programação em Matlab Segunda edição
Tradução Técnica:
Flávio Soares Correa da Silva PhD em Inteligência Artificial pela University of Edinburgh, livre-docente e professor associado do Departamento de Ciência da Computação, Instituto de Matemática e Estatística da USP
Book_Matlab.indb 3
29/4/2010 09:47:16
Esse livro ĂŠ dedicado com amor Ă minha filha Rachel.
Book_Matlab.indb 5
v
29/4/2010 09:47:16
Sumário
Prefácio xv
1
Introdução ao MATLAB 1 1.1 Vantagens do MATLAB 2 1.2 Desvantagens do MATLAB 4 1.3 O Ambiente MATLAB 3 1.3.1 A Área de Trabalho MATLAB 4 1.3.2 A Janela de Comandos 5 1.3.3 A Janela de Histórico de Comandos 7 1.3.4 O Botão Iniciar 7 1.3.5 A Janela de Edição/Depuração 8 1.3.6 Janela de Figuras 10 1.3.7 Como Estacionar e Transportar Janelas 10 1.3.8 O Espaço de Trabalho MATLAB 11 1.3.9 O Navegador do Espaço de Trabalho 12 1.3.10 Obtendo Ajuda 13 1.3.11 Alguns Comandos Importantes 14 1.3.12 O Caminho de Busca MATLAB 15 1.4 Utilizando o MATLAB como Prancheta de Rascunhos 17 1.5 Resumo 18 1.5.1 Resumo do MATLAB 19 1.6 Exercícios 19
2
MATLAB Básico 21 2.1 Variáveis e Matrizes 21 2.2 Criando e Iniciando Variáveis no MATLAB 25
Book_Matlab.indb 7
vii
29/4/2010 09:47:16
viii |
Fundamentos de Programação em Matlab
2.3
2.4
2.5 2.6
2.7 2.8
2.9 2.10
2.11
2.12 2.13 2.14
2.15
3
Book_Matlab.indb 8
2.2.1 Iniciando Variáveis em Expressões de Atribuição 25 2.2.2 Iniciando com Expressões de Atalho 28 2.2.3 Iniciando com Funções Predefinidas 29 2.2.4 Iniciando Variáveis com Entrada pelo Teclado 29 Matrizes Multidimensionais 31 2.3.1 Armazenando Matrizes Multidimensionais em Memória 33 2.3.2 Acessando Matrizes Multidimensionais com uma Dimensão 33 Submatrizes 35 2.4.1 A Função end 35 2.4.2 Utilizando Submatrizes no Lado Esquerdo de uma Declaração de Atribuição 36 2.4.3 Atribuindo um Escalar a uma Submatriz 37 Valores Especiais 38 Exibindo Dados de Saída 40 2.6.1 Alterando o Formato-Padrão 40 2.6.2 A Função disp 42 2.6.3 Saída Estruturada Usando a Função fprintf 43 Arquivos de Dados 44 Operações com Escalares e Matrizes 47 2.8.1 Operações com Escalares 47 2.8.2 Operações com Matrizes 47 Hierarquia de Operações 51 Funções Predefinidas MATLAB 54 2.10.1 Resultados Opcionais 54 2.10.2 Utilizando Funções MATLAB com Matrizes como Entrada 54 2.10.3 Funções MATLAB Comuns 55 Introdução a Diagramas 56 2.11.1 Utilizando Diagramas xy Simples 57 2.11.2 Imprimindo um Diagrama 58 2.11.3 Exportação de um Diagrama como Imagem Gráfica 59 2.11.4 Diagramas Múltiplos 59 2.11.5 Cores de Linhas, Estilos de Linhas, Estilos de Marcadores e Legendas 61 2.11.6 Escalas Logarítmicas 64 Exemplos 64 Depurando Programas MATLAB 72 Resumo 74 2.14.1 Resumo de Boas Práticas de Programação 75 2.14.2 Resumo do MATLAB 76 Exercícios 79
Expressões de Ramificação e Projeto de Programa 87 3.1 Introdução a Técnicas de Projeto Top-Down 87 3.2 Uso de Pseudocódigo 93 3.3 O Tipo de Dados Logical 93 3.3.1 Operadores Relacionais 94
29/4/2010 09:47:16
Sumário
3.4
3.5
3.6 3.7 3.8
|
ix
3.3.2 Nota de Atenção a Respeito dos Operadores == e ~= 97 3.3.3 Operadores Lógicos 91 3.3.4 Funções Lógicas 103 Ramificações 104 3.4.1 A Construção if 105 3.4.2 Exemplos de Utilização de Construções if 107 3.4.3 Notas a Respeito do Uso de Construções if 113 3.4.4 A Construção switch 115 3.4.5 A Construção try/catch 117 Características Adicionais de Diagramas 119 3.5.1 Controlando os Limites nos Diagramas dos Eixos x e y 119 3.5.2 Desenhando Múltiplos Diagramas sobre os Mesmos Eixos 122 3.5.3 Criando Múltiplas Figuras 123 3.5.4 Subdiagramas 124 3.5.5 Controle Avançado de Linhas Desenhadas 125 3.5.6 Controle Avançado de Cadeias de Texto 126 3.5.7 Diagramas Polares 127 3.5.8 Anotando e Armazenando Diagramas 135 Notas Adicionais a Respeito da Depuração de Programas MATLAB 139 Resumo 142 3.7.1 Resumo de Boas Práticas de Programação 143 3.7.2 Resumo do MATLAB 144 Exercícios 145
4
Laços 149 4.1 O Laço while 149 4.2 O Laço for 155 4.2.1 Detalhes de Operação 163 4.2.2 O Compilador no-momento-exato (JIT) do Matlab 165 4.2.3 As Expressões break e continue 169 4.2.4 Laços Aninhados 171 4.3 Matrizes Lógicas e Vetorização 173 4.3.1 Criando o Equivalente a Construções if/else com Matrizes Lógicas 174 4.4 Os Perfis MATLAB 176 4.5 Exemplos Adicionais 179 4.6 Resumo 194 4.6.1 Resumo de Boas Práticas de Programação 194 4.6.2 Resumo do MATLAB 194 4.7 Exercícios 195
5
Funções Definidas pelo Usuário 203 5.1 Introdução a Funções MATLAB 205 5.2 Passagem de Variáveis em MATLAB: O Esquema de Passagem por Valor 211 5.3 Argumentos Opcionais 222 5.4 Compartilhando Dados pelo Uso de Memória Global 227 5.5 Preservando Dados entre Chamadas de uma Função 235 5.6 Funções de Funções 240
Book_Matlab.indb 9
29/4/2010 09:47:16
x
|
Programação em MATLAB® para Engenheiros
5.7 Subfunções e Funções Privadas 244 5.7.1 Subfunções 245 5.7.2 Funções Privadas 246 5.7.3 Ordem de Avaliação de Funções 247 5.8 Resumo 247 5.8.1 Resumo de Boas Práticas de Programação 248 5.8.2 Resumo do MATLAB 248 5.9 Exercícios 249
6
Tipos Adicionais de Dados e de Diagramas 261 6.1 Dados Complexos 261 6.1.1 Variáveis Complexas 263 6.1.2 Usando Números Complexos com Operadores Relacionais 264 6.1.3 Funções Complexas 265 6.1.4 Colocando Dados Complexos em Diagramas 269 6.2 Funções de Cadeias de Caracteres 272 6.2.1 Funções de Conversão de Cadeias de Caracteres 272 6.2.2 Criando Matrizes Bidimensionais de Caracteres 272 6.2.3 Concatenação de Cadeias de Caracteres 273 6.2.4 Comparação de Cadeias de Caracteres 274 6.2.4.1 Comparando Cadeias de Caracteres quanto à Igualdade 274 6.2.4.2 Comparando Cadeias Individuais quanto à Igualdade e Desigualdade 274 6.2.4.3 Categorizando Caracteres em uma Cadeia de Caracteres 275 6.2.5 Buscando ou Substituindo Caracteres Dentro de uma Cadeia 277 6.2.6 Conversão para Caixa Alta e Caixa Baixa 279 6.2.7 Eliminação de Espaços em Branco das Cadeias de Caracteres 279 6.2.8 Conversões de Número para Cadeia de Caracteres 280 6.2.9 Conversões de Cadeia de Caracteres para Número 282 6.2.10 Resumo 283 6.3 Matrizes Multidimensionais 289 6.4 Diagramas Bidimensionais Adicionais 291 6.4.1 Tipos Adicionais de Diagramas Bidimensionais 291 6.4.2 Funções para Diagramas 296 6.4.3 Histogramas 297 6.5 Diagramas Tridimensionais 298 6.5.1 Diagramas Tridimensionais de Linha 299 6.5.2 Diagramas Tridimensionais de Superfície, Malha e Curva de Nível 301 6.6 Resumo 304 6.6.1 Resumo de Boas Práticas de Programação 304 6.6.2 Resumo do MATLAB 304 6.7 Exercícios 306
7
Matrizes Celulares, e Estruturas Gráficos de Controle 311 7.1 Matrizes Celulares 311 7.1.1 Criando Matrizes Celulares 313 7.1.2 Utilizando Chaves {} como Construtores de Células 315
Book_Matlab.indb 10
29/4/2010 09:47:16
Sumário
|
xi
7.1.3 Visualizando o Conteúdo de Matrizes Celulares 315 7.1.4 Estendendo Matrizes Celulares 316 7.1.5 Apagando Células em Matrizes 318 7.1.6 Utilizando Dados em Matrizes Celulares 319 7.1.7 Matrizes Celulares de Cadeias de Caracteres 319 7.1.8 A Importância das Matrizes Celulares 320 7.1.9 Resumo das Funções da Matriz cell 324 7.2 Matrizes Estruturas 325 7.2.1 Criando Matrizes Estruturas 325 7.2.2 Adicionando Campos a Estruturas 328 7.2.3 Removendo Campos de Estruturas 329 7.2.4 Usando Dados em Matrizes Estruturas 329 7.2.5 As Funções getfield e setfield 331 7.2.6 Nomes Dinâmicos de Campos 331 7.2.7 Usando a Função size com Matrizes Estruturas 333 7.2.8 Aninhando Matrizes Estruturas 333 7.2.9 Resumo das Funções structure 334 7.3 Gráficos de Controle 336 7.3.1 O Sistema de Gráficos MATLAB 336 7.3.2 Controles de Objetos 337 7.3.3 Examinando e Modificando Propriedades de Objetos 338 7.3.4 Usando set para Listar Valores Possíveis de Propriedades 345 7.3.5 Localizando Objetos 346 7.3.6 Selecionando Objetos com o Mouse 348 7.4 Posição e Unidades 351 7.4.1 Posições de Objetos figure 351 7.4.2 Posições de Objetos axes 352 7.4.3 Posições de Objetos text 352 7.5 Posições de Impressão 355 7.6 Propriedades Iniciais e de Fábrica 356 7.7 Propriedades de Objetos Gráficos 358 7.8 Resumo 358 7.8.1 Resumo de Boas Práticas de Programação 359 7.8.2 Resumo do MATLAB 359 7.9 Exercícios 360 Apêndice A Conjunto de Caracteres ASCII 365 Apêndice B Funções de Entrada/Saída 367 Apêndice C Respostas para os Testes 389 Índice Remissivo 463
Book_Matlab.indb 11
29/4/2010 09:47:16
Book_Matlab.indb 12
29/4/2010 09:47:16
Prefácio
MATLAB® (que abrevia MATrix LABoratory – Laboratório de Matrizes) é um programa de computador de uso específico, otimizado para executar cálculos científicos e de engenharia. Ele nasceu como um programa para operações matemáticas sobre matrizes, mas ao longo dos anos transformou-se em um sistema computacional flexível capaz de resolver essencialmente qualquer problema técnico. O programa MATLAB implementa esta linguagem e oferece uma ampla biblioteca de funções predefinidas para que a programação técnica se torne mais fácil e eficiente. Essa variedade extremamente ampla de funções 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écnicos típicos. Esse livro não é um texto do tipo “como utilizar o MATLAB” (embora os estudantes aprendam a usá-lo para resolver problemas durante a utilização deste livro). O livro ensina o uso de MATLAB como uma linguagem técnica de programação, que pode ser usada no lugar de linguagens como Basic, Fortran ou C++. A maioria dos programas de curso de engenharia atualmente exige o aprendizado de MATLAB e usam esta linguagem como uma ferramenta essencial ao longo de todo o curso. A maioria dos programas de curso de engenharia também exige que os estudantes se familiarizem pelo menos com os fundamentos da programação de computadores. Este livro pretende satisfazer esses dois requisitos simultaneamente em uma única disciplina, liberando assim tempo precioso nos cursos de ensino de engenharia. Este livro não tem a pretensão de apresentar uma descrição completa das centenas de funções do MATLAB. Em vez disso, ensina ao estudante como utilizar MATLAB como uma linguagem para resolver problemas e como localizar qualquer função desejada utilizando os recursos de ajuda on- line do MATLAB.
Book_Matlab.indb 13
xiii
29/4/2010 09:47:16
xiv |
Fundamentos de Programação em MATLAB®
O livro Fundamentos de Programação em MATLAB, segunda edição, foi construído para ser utilizado como livro-texto em disciplinas de introdução à programação e à resolução de problemas para estudantes de primeiro ano de engenharia. Este material deve servir confortavelmente para disciplinas de nove semanas com três horas de aula por semana.
As Vantagens do MATLAB para Programação Técnica MATLAB apresenta muitas vantagens, em comparação com linguagens de computador convencionais, para resolução de problemas técnicos. Dentre elas, temos: 1. Facilidade de Uso MATLAB é uma linguagem interpretada, assim como muitas versões de Basic, e, como esta, é muito fácil de usar. O programa pode ser usado como prancheta de rascunhos para avaliar expressões digitadas em linha de comando, ou para executar programas grandes previamente escritos. Programas podem ser escritos e modificados com facilidade usando o ambiente de desenvolvimento integrado embutido, bem como depurados usando o depurador MATLAB. Por ser muito fácil de usar, a linguagem é ideal para uso educacional e para desenvolver rapidamente protótipos de novos programas. Muitas ferramentas de desenvolvimento de programas são fornecidas para tornar o programa fácil de usar. Dentre elas, temos um editor/depurador, um navegador de espaço de trabalho e muitos programas de demonstração. 2. Independência de Plataforma MATLAB tem suporte em muitos sistemas computacionais diferentes, proporcionando, em grande medida, uma independência de plataforma. No momento de preparação deste livro, a linguagem tinha suporte em Windows 2000/XP/ Vista, Linux, Unix e Macintosh. Programas escritos em uma plataforma funcionam em todas as outras, e arquivos de dados escritos em qualquer plataforma podem ser lidos transparentemente em todas as outras. Como resultado, programas escritos em MATLAB podem migrar para novas plataformas quando as necessidades do usuário se alteram. 3. Funções Predefinidas MATLAB vem completo, com uma grande biblioteca de funções predefinidas que proporcionam soluções testadas e empacotadas para muitas tarefas técnicas básicas. Por exemplo, suponha que você esteja escrevendo um programa que precise calcular a estatística associada com um conjunto de dados de entrada. Na maioria das linguagens, você precisaria escrever suas próprias sub-rotinas ou funções para implementar os cálculos, como média aritmética, desvio padrão, mediana etc. Essas e centenas de outras funções são construídas já na linguagem MATLAB, tornando seu trabalho muito mais fácil. Além da grande biblioteca de funções construída na linguagem básica MATLAB, existem muitas outras caixas de ferramentas especializadas dispo níveis para ajudar a resolver problemas complexos em áreas específicas. Por exemplo, um usuário pode comprar caixas de ferramentas-padrão para
Book_Matlab.indb 14
29/4/2010 09:47:16
Prefácio
|
xv
resolver problemas em processamentos de sinais, sistemas de controle, comunicações, processamentos de imagens e redes neurais, dentre muitas outras. 4. Diagramas Independentes de Dispositivos Diferente de outras linguagens de computador, MATLAB tem diversos comandos para imagens e desenhos integrais, que podem ser exibidos em qualquer dispositivo gráfico suportado pelo computador onde está funcionando o MATLAB. Este recurso torna o MATLAB uma ferramenta notável para visualizar dados técnicos. 5. Interface Gráfica de Usuário MATLAB inclui ferramentas que permitem que um programador construa interativamente uma interface gráfica de usuário (GUI, do inglês Graphical User Interface) para seu programa. Com este recurso, o programador é capaz de projetar programas sofisticados para análise de dados que podem ser operados por usuários relativamente inexperientes.
Características deste Livro Muitas características deste livro têm por objetivo enfatizar a maneira apropriada de escrever programas MATLAB. Essas características devem ser úteis para um estudante aprendendo a usar o MATLAB e para quem já trabalha com este programa. Dentre elas, temos: 1. Ênfase na metodologia de projetos top-down O livro apresenta uma metodologia de projetos top-down no Capítulo 3, e a utiliza de forma consistente no seu decorrer. Esta metodologia encoraja o estudante a pensar a respeito do projeto apropriado de um programa antes de iniciar a codificação. Ela enfatiza a importância de definir claramente o problema a ser resolvido e os dados de entrada e saída requeridos antes de iniciar qualquer outra atividade. Uma vez definido apropriadamente o problema, ensina o estudante a aplicar o refinamento passo a passo para subdividir a tarefa em subtarefas menores, e implementar as subtarefas como sub-rotinas ou funções separadas. Finalmente, a metodologia utilizada ensina a importância de efetuar testes em todos os estágios do processo, tanto unitários das rotinas componentes como testes exaustivos do produto final. O processo formal de projeto ensinado no livro pode ser assim resumido: 1 Estabeleça claramente o problema que você está tentando resolver. 2 Defina os dados de entrada requeridos pelo programa e os dados de saída produzidos por ele. 3 Descreva o algoritmo que você pretende implementar no programa. Este passo requer um projeto top-down e decomposição passo a passo, fazendo uso de pseudocódigo ou de diagramas de fluxo. 4 Transforme o algoritmo em sentenças MATLAB. 5 Teste o programa MATLAB. Neste passo estão incluídos os testes unitários de funções específicas e o exaustivo do programa final, com diferentes conjuntos de dados.
Book_Matlab.indb 15
29/4/2010 09:47:16
xvi |
Fundamentos de Programação em MATLAB®
2. Ênfase em funções O livro enfatiza o uso de funções para a decomposição lógica de tarefas em subtarefas menores. Ele ensina as vantagens das funções para ocultar dados. Enfatiza também a importância dos testes unitários das funções antes de combiná-las no programa final. O livro mostra ainda os erros comumente efetuados com funções e como evitá-los. 3. Ênfase em ferramentas MATLAB O livro ensina o uso apropriado das ferramentas pré-construídas MATLAB para facilitar a programação e depuração de programas. As ferramentas tratadas são o Espaço de Lançamento, o Editor/Depurador, o Navegador do Espaço de Trabalho, o Navegador de Ajuda e ferramentas de projeto de GUI. 4. Notas de boa prática de programação As notas enfatizam as boas práticas de programação à medida que são apresentadas, para a conveniência do estudante. Além disso, as boas práticas de programação apresentadas em um capítulo são resumidas no seu final. Apre sentamos a seguir uma nota de boa prática de programação.
Boa Prática de Programação Sempre destaque com tabulação o corpo de uma construção if, com dois ou mais espaços, para melhorar a legibilidade do código.
5. Notas de erros de programação Essas notas enfatizam erros comuns que podem ser evitados. Apresentamos a seguir uma nota de erros de programação.
Erros de Programação Sempre verifique se os nomes de variáveis não se repetem nos primeiros 63 caracteres. Se isto não ocorrer, o MATLAB não conseguirá diferenciar as variáveis.
Características Pedagógicas Este livro foi projetado especificamente para uso em cursos de Introdução à Programação e à Resolução de Problemas. Deve ser possível cobrir este material confortavelmente em um curso de nove semanas, com três horas semanais. Se o tempo for insuficiente em algum programa particular de engenharia, os capítulos 6 e 7 podem ser desconsiderados; os remanescentes ainda assim ensinarão os fundamentos de programação e uso do MATLAB para
Book_Matlab.indb 16
29/4/2010 09:47:16
Prefácio
| xvii
resolução de problemas. Esta característica deve ser atraente para os professores de engenharia pressionados para compactar cada vez mais material dentro de um currículo finito. Os capítulos seguintes tratam de material avançado que será útil para estudantes e engenheiros ao longo de suas carreiras. Este material inclui recursos avançados de entrada/saída e o projeto de interfaces gráficas de usuários para os programas. O livro inclui diversas características projetadas para dar suporte à compreensão do estudante. Estão incluídos 12 testes, distribuídos ao longo dos capítulos. As respostas a todas as perguntas estão apresentadas no Apêndice C. Os testes podem ser usados como autotestes de compreensão. Além disso, temos aproximadamente 130 exercícios de final de capítulo. As boas práticas de programação são apresentadas em todos os capítulos em quadros de Boa Prática de Programação, e os erros comuns são apresentados em notas de Erros de Programação. O material de final de capítulo é composto por Resumos de Boas Práticas de Programação e Resumos de Comandos e Funções MATLAB.
Quero agradecer aos seguintes revisores por seus comentários: Randy Freeman, Northwestern University Thomas N. Gambill, University of Illinois – Urbana Champaign Arlene A. Guest, Naval Postgraduate School Dieter S. Schmidt, University of Cincinnati. Manterei atualizada uma lista de errata e correções na página Web do livro, que se encontra em www.cengage.com/engineering
* NT: a errata e correções dizem respeito à edição original em inglês.
Book_Matlab.indb 17
29/4/2010 09:47:16
Book_Matlab.indb 18
29/4/2010 09:47:16
Agradecimentos
Quero agradecer a minha esposa, Rosa, e a nossos filhos Avi, David, Rachel, Aaron, Sarah, Naomi, Shira e Devorah, por serem pessoas tรฃo agradรกveis e inspirarem todos os meus esforรงos. Stephen J. Chapman
Book_Matlab.indb 19
xix
29/4/2010 09:47:16
Capítulo
1
Introdução ao MATLAB
MATLAB (que abrevia MATrix LABoratory – Laboratório de Matrizes) é um programa de computador especializado e otimizado para cálculos científicos e de engenharia. Inicialmente, foi projetado para cálculos com matrizes; ao longo dos anos, transformou-se em um sistema computacional flexível, capaz de resolver essencialmente qualquer problema técnico. O MATLAB implementa a linguagem de programação de mesmo nome, juntamente com uma grande biblioteca de funções predefinidas que tornam as tarefas de programação técnica mais fáceis e eficientes. Este livro apresenta a linguagem MATLAB versão 7.5, e mostra como utilizá-la para resolver problemas técnicos típicos. MATLAB é um programa muito grande, com uma rica variedade de funções. Até mesmo sua versão básica, sem ferramentas adicionais, é muito mais rica que outras linguagens de programação técnica. Existem mais de 1.000 funções no produto MATLAB, e as ferramentas adicionais ampliam esses recursos com muito mais funções em diferentes especialidades. Este livro não pretende ensinar todas as funções do MATLAB. Em vez disso, o usuário aprende os fundamentos de como escrever, depurar e otimizar bons programas MATLAB, juntamente com um subconjunto das funções mais importantes. Outro aspecto igualmente importante é que o programador aprende a utilizar as ferramentas do próprio MATLAB para localizar a função adequada a um propósito específico a partir da enorme gama de opções disponíveis.
Book_Matlab.indb 1
1
29/4/2010 09:47:17
2
|
Fundamento de Programação em MATLAB®
1.1 Vantagens do MATLAB MATLAB tem muitas vantagens, em comparação com linguagens computacionais convencionais, para resolver problemas técnicos. Dentre elas, temos: 1 Facilidade de Uso MATLAB é uma linguagem interpretada, assim como diversas versões de Basic. Como o Basic, ele é muito fácil de usar. O programa pode ser utilizado como prancheta de rascunhos para avaliar expressões digitadas em linha de comando, ou para executar programas grandes escritos previamente. Os programas podem ser facilmente escritos e modificados no ambiente integrado de desenvolvimento, e depois depurados por meio do depurador MATLAB. Como a linguagem é muito fácil de utilizar, ele é ideal para o desenvolvimento rápido de protótipos para novos programas. Diversas ferramentas para desenvolvimento de programas são fornecidas, o que facilita o uso do programa. Dentre elas, temos um editor/depurador integrado, documentação e manuais on-line, um navegador do espaço de trabalho e diversos programas de demonstração. 2 Independência de Plataforma MATLAB tem suporte em diferentes sistemas computacionais, o que proporciona independência de plataforma. No momento da preparação deste livro, a linguagem tem suporte em Windows XP/Vista, Linux, diversas versões de Unix e Macintosh. Programas escritos em qualquer plataforma são executados nas outras, e arquivos de dados escritos em qualquer plataforma podem assim também ser lidos transparentemente. Com isso, programas escritos em MATLAB podem migrar para novas plataformas caso o usuário precise da mudança. 3 Funções Predefinidas MATLAB vem completo, com uma grande biblioteca de funções predefinidas, que apresentam soluções testadas e empacotadas para diversas tarefas técnicas básicas. Por exemplo, suponha que você esteja escrevendo um programa para calcular as estatísticas relacionadas a um conjunto de dados de entrada. Na maioria das linguagens, você precisaria escrever suas próprias sub-rotinas ou funções para implementar os cálculos de média aritmética, desvio-padrão, mediana etc. Estas, e centenas de outras funções fazem parte da linguagem MATLAB, facilitando seu trabalho. Além da grande biblioteca de funções presentes na linguagem MATLAB básica, diversas ferramentas específicas estão disponíveis para ajudar a resolver problemas complexos em áreas específicas. Por exemplo, um usuário pode adquirir ferramentas-padrão para resolver problemas em Processamento de Sinais, Sistemas de Controle, Comunicações, Processamento de Imagens e Redes Neurais, além de outros. Existem também muitos programas MATLAB de uso livre, que são contribuições de usuários compartilhadas por meio do site MATLAB.
Book_Matlab.indb 2
29/4/2010 09:47:17
Capítulo 1 Introdução ao MATLAB
|
3
4 Desenhos Independentes de Dispositivos Diferente da maioria das linguagens de computador, MATLAB tem muitos comandos para desenhos e imagens, que podem ser apresentados em qualquer dispositivo de saída gráfica compatível com o computador que executa o MATLAB. Este recurso torna o MATLAB uma ferramenta excepcional para visualização de dados técnicos. 5 Interface Gráfica de Usuário MATLAB tem ferramentas que permitem a um usuário construir interativamente uma interface gráfica de usuário (GUI, do inglês Graphical User Interface) para seus programas. Com este recurso, o programador pode projetar pro gramas sofisticados de análise de dados, os quais podem ser operados por usuários relativamente inexperientes. 6 O Compilador MATLAB A flexibilidade e a independência de plataforma do MATLAB resultam da compilação de programas MATLAB em um código independente de dispositivo denominado pcode, e da interpretação em tempo de execução das instruções em pcode. Esta abordagem é similar à adotada pela linguagem Visual Basic da Microsoft. Infelizmente, os programas resultantes às vezes podem se tornar lentos, pois o código MATLAB é interpretado, em vez de compilado. Indicaremos os aspectos que tendem a tornar a execução de programas mais lenta quando os encontrarmos. Versões recentes do MATLAB resolveram parcialmente este problema com a inclusão da tecnologia de compilação no momento de uso (Just-in-time – JIT). O JIT compila partes do código MATLAB durante a execução dos programas, desta forma acelerando os programas de maneira geral. Existe um compilador MATLAB separado. Ele pode compilar um pro grama MATLAB como um programa efetivamente executável, que pode rodar sem a necessidade de uma licença MATLAB. Esta é uma boa forma de converter um programa protótipo MATLAB em um programa executável que pode ser vendido e distribuído a usuários.
1.2 Desvantagens do MATLAB MATLAB tem duas desvantagens principais. Primeiro, ele é uma linguagem interpre tada, por isso pode ser mais lento que linguagens compiladas. Este problema pode ser diminuído pela estruturação apropriada dos programas MATLAB para otimizar o desempenho do código vetorizado e pelo uso do compilador JIT. A segunda desvantagem é o custo: uma cópia completa do MATLAB é de cinco a dez vezes mais cara que um compilador convencional C ou Fortran. Esse custo relativamente alto é mais do que compensado pelo tempo reduzido requerido para um engenheiro ou cientista criar um programa, o que torna o MATLAB eficaz para empresas. Ele pode ser muito caro, entretanto, para a compra individual. Felizmente, existe uma versão de estudante mais barata, que é uma excelente ferramenta para aqueles que queiram aprender a linguagem. A versão estudante do MATLAB é essencialmente idêntica à versão completa.
Book_Matlab.indb 3
29/4/2010 09:47:17
4
|
Fundamento de Programação em MATLAB®
1.3 O Ambiente MATLAB A unidade fundamental de dados em qualquer programa MATLAB é a matriz, que é uma coleção de valores de dados organizados em linhas e colunas, determinada por um nome único. Valores individuais de dados em uma matriz podem ser acessados por meio do nome da matriz seguido de índices entre parênteses que identificam a linha e a coluna de um valor particular. Até mesmo escalares são tratados como matrizes em MATLAB – eles são simplesmente matrizes com apenas uma linha e uma coluna. Aprenderemos a criar e a manipular matrizes MATLAB na seção 1.4 (substitui “no Capítulo 2”). Na execução do MATLAB podem ser exibidas janelas de diferentes tipos, as quais aceitam comandos ou exibem informações. Os três tipos mais importantes são Janelas de Comandos, onde podem ser inseridos comandos; Janelas de Figuras, que exibem desenhos e gráficos; e Janelas de Edição, que permitem a um usuário criar e modificar programas MATLAB. Veremos exemplos desses três tipos de janelas na presente seção. Além disso, o MATLAB pode exibir outras janelas de auxílio, que possibilitam ao usuário examinar o valor de variáveis definidas em memória. Vamos conhecer aqui algumas dessas janelas adicionais, e examinar as outras quando discutirmos como depurar programas MATLAB.
1.3.1 A Área de Trabalho MATLAB Ao iniciar o MATLAB versão 7.5, aparece uma janela especial denominada área de trabalho MATLAB. Essa área de trabalho é uma janela dentro da qual há outras janelas, que exibem os dados do MATLAB, barras de ferramentas e um botão “Iniciar” similar aos utilizados no Windows XP ou Vista. A maior parte das ferramentas MATLAB aparece como “estacionada” na área de trabalho, em sua configuração inicial, dentro da janela de área de trabalho. Entretanto, o usuário pode “transportar” uma ou todas as ferramentas, para que elas apareçam em janelas separadas. A configuração inicial da área de trabalho MATLAB está apresentada na Figura 1.1. Ela integra muitas ferramentas para gerenciar arquivos, variáveis e aplicações do ambiente MATLAB. As principais ferramentas que podem ser acessadas na ou a partir da área de trabalho MATLAB são: • Janela de Comandos • Janela de Histórico de Comandos • Botão Iniciar • Janela de Documentos, que inclui o Editor/Depurador e o Editor de Matrizes • Janelas de Figuras • Navegador do Espaço de Trabalho • Navegador de Ajuda • Navegador de Caminhos • Navegador do Diretório Corrente Discutiremos as funções dessas ferramentas em seções subsequentes do presente capítulo.
Book_Matlab.indb 4
29/4/2010 09:47:17
Capítulo 1 Introdução ao MATLAB
Figura 1.1
|
5
Área de trabalho MATLAB. A aparência exata da janela pode diferir ligeiramente em diferentes tipos de computador.
1.3.2 A Janela de Comandos O lado direito da área de trabalho MATLAB contém a Janela de Comandos. Um usuá rio pode inserir comandos interativos pelo marcador de comandos (»), na Janela de Comandos, e eles serão executados de imediato. Um exemplo de cálculo interativo simples é o seguinte: suponha que você queira calcular a área de um círculo com raio de 2,5 m. Isso pode ser feito pela janela de comandos MATLAB, digitando:
»
area = pi * 2.5^2 area = 19,6350
O MATLAB calcula a resposta assim que a tecla Enter é pressionada, e armazena o resultado em uma variável (na realidade, em uma matriz 1 x 1) denominada area. O conteúdo dessa variável é exibido na Janela de Comandos, conforme mostrado na
Book_Matlab.indb 5
29/4/2010 09:47:17
6
|
Fundamento de Programação em MATLAB®
Figura 1.2
A Janela de Comandos fica mais à direita na área de trabalho. Os usuários podem inserir comandos e ver as respostas ali.
Figura 1.2, e a variável pode ser usada em outros cálculos. (Observe que π é predefinido no MATLAB, por isso podemos simplesmente usar pi sem antes termos de declarar seu valor como 3,141592...). Se uma declaração é muito extensa para ser digitada em uma única linha, ela pode ser complementada em linhas sucessivas digitando reticências (...) no final de cada linha, e então continuando na linha seguinte. Por exemplo, as duas expressões a seguir são idênticas: x1 = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 e x1 = 1 + 1/2 + 1/3 + 1/4... + 1/5 + 1/6 Em vez de digitar comandos diretamente na Janela de Comandos, uma série de comandos pode ser colocada em um arquivo, e o arquivo inteiro pode ser executado quando digitamos seu nome na Janela de Comandos. Esses arquivos são denominados arquivos de scripts (e funções de scripts, como veremos), também chamados arquivos M, por terem uma extensão de arquivo “.m”.
Book_Matlab.indb 6
29/4/2010 09:47:18
Figura 1.3
Capítulo 1 Introdução ao MATLAB
|
7
A Janela de Histórico de Comandos, mostrando dois comandos sendo apagados.
1.3.3 A Janela de Histórico de Comandos A Janela de Histórico de Comandos exibe uma lista dos comandos que um usuário inseriu na Janela de Comandos. A lista de comandos anteriores pode se estender a execuções anteriores do programa. Os comandos permanecem na lista até ser apagados. Para reexecutar qualquer comando, simplesmente clique duas vezes sobre ele com o botão esquerdo do mouse. Para apagar um ou mais comandos da Janela de Histórico de Comandos, selecione os comandos e clique sobre eles com o botão direito do mouse. Surgirá um menu que permitirá ao usuário apagar os itens (ver Figura 1.3).
1.3.4 O Botão Iniciar O Botão Iniciar (Figura 1.4) permite ao usuário acessar as ferramentas MATLAB e da área de trabalho, arquivos de ajuda, e assim por diante. Ele funciona exatamente como o botão Iniciar do Windows. Para iniciar o uso de uma ferramenta específica, basta clicar no Botão Iniciar e selecionar a ferramenta com base no submenu apropriado.
Book_Matlab.indb 7
29/4/2010 09:47:18
Visite a página deste livro na Cengage Learning Brasil e conheça também todo o nosso catálogo
AF_matlab.ai
5/18/10
5:05:22 PM
PARA ENGENHEIRO ROS S
G
U
N
D
A
E
D
I
Ç
Ã
O
R ch Ri char a d L. Bur urde en e J. J Dou ugl glas Fai aire aire es Estr Es t ut tr utur ura ur a de de Dad dos e Alg lgor gor orit itmo it m s em m C++
Dest De sttin naa-se se e à dis isci cipl ci plin pl ina in na
res re esolu soluçã çã ão de pro robl blem emas
intr in trod tr oduç od ução ão à c com om mpu puta taçã ta ção çã o (o (ou u
Intr In ntr trod oduç oduç od çã ão o à Ciê ência nciia nc a da Co Comp put uta aç ção ão
topto p-do down w (do mai ais s ge gera rall pa ra para ra o
ciên ci ênci cia a da com com mpu puta taçã ção) o), no os
2 edi diç ção o atu tual aliz al i ad ada a
mais ma is esp spec ecíf í ico) o), re refo forç rçan ando do a
cursos d de e in inform rmát átic ica, a, com omo o
capa ca p ci cida dade do o MA MATL TLAB AB com mo
Sist Si stem st em emas mas a d de e Inform maç ação ã ,
uma liing um n ua uage gem m de pro rogr gram amaç ação ão
Ciiên ênci cia a da Com ompu p ta pu taçã ção e
té écn cnic ica qu que e pe perm rmit ite ao est stud udan nte
Enge En genh har aria ia da a Co Comp mp put utaç a ão aç ão,,
esc es crev cr ever er pro ogr gram am mas llim impo pos, s,
be em co como mo nos currso sos de
effic cie ient n es e b nt bem em doc o um men nta tado dos. s.
Fíísi s ca ca, Qu Quím ímic ica a e En Enge genh nhar aria ia,, s nd se do pa part rtic icul ular arme ment nte e út útil il para pa ra est stud udan ante tes s de est ste e úl ú ti t mo mo.
CM
funç fu funç nçõe çõ s para ra a dec compo p siçã ção
D st De stin i ain a-se, ai aind nda, a, a
MY
lógi ló gica ca de tta are efa fas em m
profission nai ais s em g ger eral al que ue
CY
sub subt su bttar aref e as as ain nda a men nores es e de
desejem utilizar ess s a
ferr fe rra amen am men enta t s MA ta MATL TLAB TL AB
ferram a en am nta da comput uttaç ação ão.
K
Tra Tra Tr ad duç ção ão da 8
ed diç ição ção o nor orte te-a ame meriica can na a
toda to da a obr obr bra, a, uma a, ma m met etod odol olog ogia ia de
O li livr v o enfa f tiza fa a o uso so de e
CMY
Anál nál áli lis ise Nu Numé Numé éri rica ca a
Ap pli lica ica caçõ çõ ões
M
Y
Ou utras s obr bras as s
O au auto t r ap to apre re ese s nt nta, a, a a, ao o lo long ngo o de
prépr réé-co cons nstr str truí uída uí das da s. Apr pres es sen enta ta, ta co com om ig gua uall ên ênfa fase fa se,, no se ota tas s so sobr bre br e boas bo oas sp prá rá áti tica ca c as de pro rogr grram amaç ação aç ão e er erro erro os de p pro r gram ro grram amaç ação aç ão.. ão
ISBN 13 978-85-221-0789-6 ISBN 10 85-221-0789-0
Para suas soluções de curso e aprendizado, visite www.cengage.com.br
9 788522 107896
P RO G R A M A Ç Ã O E M M ATL T L A B PA R A E N G E N H E I RO S
C
E
ST T E P H E N J. C H A P M A N
PROGRAMAÇÃO EM
Ad da am m Dro rozd ozd zdek ek k
Rica ard do Da ani niel niel el Fed ede elli, e i, E Enr nric ico o Giiullio io F an Fr anco co P Pol o lo ol oni ni e Fe err na nand ndo Ed ndo nd Edua Edua uard ard do Pe Pere es Inttrrrod In oduç od ção ão aos os Sis istema iste m sO ma Op per erac erac cio iona ona na ais is s Ida a M. Fly lynn n e An nn n McI cIve Ive ver Mc McHo cHo Hoes ess Mate Ma t m te má áti tica Dis scr cret eta: a uma m iint nttro odu duçã çã ão T ad Tr du uç ção ã da 2 ediiçã ção o no ort rte e-am eamer eric ican ana a Edwa w rd R. Sch wa hein iner erma man n
S
E
G
U
N
D
A
E
D
I
Ç
Ã
O
O ien Or ent n aç ação a Objeto co om Pr Prot otot ot o ipação R ca Ri card rdo do Da Dan niel ni n el F Fed edeli, Enr n ic co G Giiul u io Fran nco o Po ollo ol lo oni e Fer erna na and n o Ed Edua uard rd rdo do Pe Pere ress Prin Pr inc cíp ípio ios s de S Sistem mas sO Ope pe pera era aci cion o ai on as P ojjet Pr etos os e Apl plic ica caç çõe õ s B ian Br ian L. Stu tuar artt
STEPHEN J. CHAPMAN