Você está na página 1de 574

Introdução ao

MATLAB ®

para engenheiros

3ª edição

William J. Palm III


O autor
William J. Palm III é professor de Engenharia Mecânica na University of Rhode Island. Em
1966, tornou-se bacharel em ciência pelo Loyola College, em Baltimore, e, em 1971, recebeu
seu título de Ph.D. em Engenharia Mecânica e Ciências Astronáuticas pela Northwestern Uni-
versity, em Evanston, Illinois.
Durante seus 38 anos como membro do corpo docente, ministrou 19 cursos. Um deles foi
um curso de MATLAB para alunos de primeiro ano, o qual ajudou a desenvolver. É autor de
oito livros que tratam de modelagem e simulação, dinâmica de sistemas, sistemas de controle
e MATLAB, entre eles o livro Dinâmica de Sistemas, Segunda Edição (McGraw-Hill, 2010).
Também escreveu um capítulo sobre sistemas de controle no Manual de Engenheiros Mecânicos
(M. Kutz, Ed., Wiley, 1999) e foi um contribuinte especial para as quintas edições de Estática e
Dinâmica, ambos de J. L. Meriam e L. G. Kraige (Wiley, 2002).
A pesquisa e a experiência industrial do professor Palm se concentram em sistemas de
controle, robótica, vibrações e modelagem de sistemas. Ele foi diretor do Robotics Research
Center na University of Rhode Island, de 1985 a 1993, e é o codetentor de uma patente para uma
mão robótica. Atuou como chefe de departamento de 2002 a 2003. Sua experiência industrial se
concentra em fabricação automatizada, modelagem e simulação de sistemas navais, incluindo
veículos subaquáticos e sistemas de rastreamento, e no projeto de sistemas de controle para ins-
talações de teste de motores de veículos subaquáticos.

P171i Palm, William J.


Introdução ao MATLAB para engenheiros [recurso
eletrônico] / William J. Palm III ; tradução: Tales Argolo
Jesus ; revisão técnica: Antonio Pertence Júnior. – 3. ed. –
Dados eletrônicos. – Porto Alegre : AMGH, 2013.

Editado também como livro impresso em 2013.


ISBN 978-85-8055-205-8

1. Engenharia – MATLAB. 2. Computação – Programa –


MATLAB. I. Título.

CDU 62:004.4MATLAB

Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052


University of Rhode Island

Tradução:
Tales Argolo Jesus
Mestre em Engenharia Elétrica pela UFMG

Consultoria, supervisão e revisão técnica desta edição:


Antonio Pertence Júnior, MSc
Mestre em Engenharia pela Universidade Federal de Minas Gerais
Engenheiro Eletrônico e de Telecomunicações pela Pontifícia Universidade Católica de Minas Gerais
Pós-graduado em Processamento de Sinais pela Ryerson University, Canadá
Professor da Universidade FUMEC
Membro da Sociedade Brasileira de Eletromagnetismo

Versão impressa
desta obra: 2013

2013
Obra originalmente publicada sob o título
Introduction to MATLAB for Engineers, 3rd Edition
ISBN 0073534870 / 9780073534879

©
Original edition copyright 2011, The McGraw-Hill Companies, Inc., New York, New York 10020.
All rights reserved.

Portuguese language translation copyright © 2013, AMGH Editora Ltda.


All rights reserved.

Gerente editorial: Arysinha Jacques Affonso

Colaboraram nesta edição:

Editora: Verônica de Abreu Amaral

Capa: Maurício Pamplona

Leitura final: Fernanda Vier

Editoração: Techbooks

Reservados todos os direitos de publicação, em língua portuguesa, à


AMGH EDITORA LTDA., uma parceria entre
GRUPO A EDUCAÇÃO S.A. e McGRAW-HILL EDUCATION
Av. Jerônimo de Ornelas, 670 – Santana
90040-340 – Porto Alegre – RS
Fone: (51) 3027-7000 Fax: (51) 3027-7070

É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer


formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na web
e outros), sem permissão expressa da Editora.

Unidade São Paulo


Av. Embaixador Macedo Soares, 10.735 – Pavilhão 5 – Cond. Espace Center
Vila Anastácio – 05095-035 – São Paulo – SP
Fone: (11) 3665-1100 Fax: (11) 3667-1333

SAC 0800 703-3444 – www.grupoa.com.br

IMPRESSO NO BRASIL
PRINTED IN BRAZIL
Para minhas irmãs, Linda e Chris, e para meus pais, Lillian e William
Esta página foi deixada em branco intencionalmente.
Prefácio

A
nteriormente utilizado por especialistas em processamento de sinais e análise
numérica em sua maioria, nos últimos anos o MATLAB®† alcançou aceita-
ção generalizada e entusiástica por parte de toda a comunidade de engenha-
ria. Muitas escolas de engenharia agora requerem, no início do currículo, um curso
baseado inteira ou parcialmente no MATLAB. O MATLAB é programável e apresen-
ta as mesmas estruturas lógicas, relacionais, condicionais e de laços (loops) de outras
linguagens de programação, como Fortran, C, Basic e Pascal. Portanto, ele pode ser
utilizado no ensino dos princípios de programação. Na maioria das escolas, um curso
de MATLAB substituiu o tradicional curso de Fortran, e o MATLAB passou a ser
a principal ferramenta computacional utilizada ao longo do currículo. Em algumas
especialidades técnicas, como processamento de sinais e sistemas de controle, ele é o
pacote de software padrão para análise e projeto.
A popularidade do MATLAB deve-se, em parte, à sua longa história e por ele
estar bem desenvolvido e testado. As pessoas acreditam em suas respostas. A sua
popularidade também se deve à sua interface com o usuário, que proporciona um
ambiente interativo de fácil utilização, o qual inclui extensiva computação numérica
e muitos recursos de visualização. O seu caráter compacto é uma grande vantagem.
Por exemplo, você pode resolver um conjunto de muitas equações algébricas lineares
com apenas três linhas de código, uma façanha que é impossível com linguagens de
programação tradicionais. O MATLAB também é extensível; atualmente, mais de 20
“toolboxes” (caixas de ferramentas) em várias áreas de aplicação podem ser utiliza-
das com o MATLAB para adicionar novos comandos e recursos.
O MATLAB está disponível para computadores pessoais MS Windows e
Macintosh e para outros sistemas operacionais. Ele é compatível com todas essas
plataformas, o que permite aos usuários compartilharem seus programas, insights e
ideias. Este livro é baseado no MATLAB versão 7.9 (R2009b). Parte do material no
Capítulo 9 é baseada no toolbox de Sistemas de Controle versão 8.4. O Capítulo 10
é baseado na versão 7.4 do Simulink®, e o Capítulo 11, na versão 5.3 do toolbox de
Matemática Simbólica.

Objetivos e pré-requisitos
Este livro tem a pretensão de ser uma introdução autônoma ao MATLAB. Ele pode ser
utilizado em um curso introdutório, como um texto para estudo individual ou como um
texto complementar. O material do texto é baseado na experiência do autor no ensino
de um curso semestral de dois créditos para estudantes do primeiro ano de engenharia.
Além disso, o texto pode servir como uma referência para uso posterior. As muitas
tabelas e o sistema de referenciação do texto foram projetados com esse propósito.
Um objetivo secundário é introduzir e reforçar a utilização de uma metodologia
para solução de problemas da maneira como ela é praticada em geral na profissão de

† MATLAB® e Simulink são marcas registradas da empresa The MathWorks, Inc.


viii Prefácio

engenheiro e da maneira como é aplicada à utilização de computadores para a solução


de problemas em particular. Essa metodologia é introduzida no Capítulo 1.
Pressupõe-se que o leitor possui algum conhecimento de álgebra e trigonome-
tria; não é necessário conhecimento de cálculo para os primeiros sete capítulos. Al-
guns conhecimentos de química e física do ensino médio, principalmente de circuitos
elétricos simples, e de estática e dinâmica básicas são necessários para o entendimen-
to de alguns exemplos.

Organização do texto
Este texto é uma atualização do livro anterior do autor.† Além de fornecer novo mate-
rial baseado no MATLAB 7, especialmente a inclusão do programa MuPAD, o texto
incorpora as muitas sugestões feitas por revisores e outros usuários.
O livro consiste em 11 capítulos. O Capítulo 1 traz uma visão geral das carac-
terísticas do MATLAB, incluindo suas janelas e estruturas de menu. Ele também
introduz a metodologia para solução de problemas. O Capítulo 2 introduz o conceito
de arranjo, que é o elemento de dados fundamental no MATLAB, e descreve como
utilizar arranjos numéricos, arranjos de células e arranjos de estruturas para opera-
ções matemáticas básicas.
O Capítulo 3 discute a utilização de funções a arquivos. O MATLAB apresenta
um vasto número de funções matemáticas embutidas, e os usuários podem definir
suas próprias funções e salvá-las em arquivos para reutilização.
O Capítulo 4 trata da programação com o MATLAB e aborda operadores rela-
cionais e lógicos, sentenças condicionais, laços for e while e a estrutura switch.
A principal aplicação do material do capítulo é direcionada à simulação, para a qual
é dedicada uma seção.
O Capítulo 5 trata de plotagens bidimensionais e tridimensionais. Primeira-
mente ele estabelece padrões para plotagens úteis e de aparência profissional. Na
experiência do autor, estudantes iniciantes não são cientes desses padrões, portanto,
eles devem ser enfatizados. O capítulo então aborda comandos do MATLAB para a
produção de diferentes tipos de plotagem e para o controle de sua aparência.
O Capítulo 6 aborda a estimação de funções, que utiliza plotagens de dados para
a obtenção de uma descrição matemática dos dados. Esta é uma aplicação comum das
plotagens, e uma seção à parte é dedicada a esse tópico. O capítulo também trata de re-
gressão polinomial e de regressão linear múltipla como parte da modelagem abordada.
O Capítulo 7 traz uma revisão de estatística e probabilidade básicas e mostra como
utilizar o MATLAB para gerar histogramas, realizar cálculos com a distribuição normal
e criar simulações de números aleatórios. O capítulo termina com interpolação por spli-
nes lineares e cúbicas. Os capítulos seguintes não dependem do material deste capítulo.
O Capítulo 8 aborda a solução de equações algébricas lineares, que surgem em
aplicações em todos os campos da engenharia. Essa abordagem estabelece a terminolo-
gia e alguns conceitos importantes requeridos para a utilização apropriada dos métodos
computacionais. O capítulo mostra, então, como utilizar o MATLAB para resolver siste-
mas de equações que possuem solução única. Sistemas indeterminados e sobredetermi-
nados também são abordados. Os capítulos restantes são independentes deste capítulo.

† Introduction to MATLAB 7 for Engineers, McGraw-Hill, New York, 2005.


Prefácio ix

O Capítulo 9 aborda métodos numéricos para cálculo e equações diferenciais.


Métodos de integração numérica e diferenciação numérica são tratados. Soluciona-
dores de equações diferenciais no núcleo do MATLAB são abordados, assim como
solucionadores de sistemas lineares no toolbox de Sistemas de Controle. Esse capítu-
lo serve de base para o Capítulo 10.
O Capítulo 10 introduz o Simulink, que é uma interface gráfica para construção
de simulações de sistemas dinâmicos. O Simulink tem crescido tanto em popularida-
de quanto em uso na indústria. Esse capítulo não precisa ser abordado antes da leitura
do Capítulo 11.
O Capítulo 11 aborda métodos simbólicos para a manipulação de expressões al-
gébricas e para a solução de problemas de equações algébricas, de equações transcen-
dentais, de cálculo, de equações diferenciais e de álgebra matricial. As aplicações em
cálculo incluem integração e diferenciação, otimização, séries de Taylor, avaliação
de séries e limites. Métodos de transformada de Laplace para a solução de equações
diferenciais também são introduzidos. Esse capítulo requer a utilização do toolbox
de Matemática Simbólica, o qual inclui o MuPAD, que é uma nova funcionalidade
do MATLAB. Ele apresenta uma interface semelhante a um caderno para entrada de
comandos e exibição de resultados, incluindo plotagens.
O Apêndice A contém um guia para os comandos e funções introduzidos ao
longo do texto. O Apêndice B é uma introdução à produção de sons e animações com
o MATLAB. Ainda que não sejam essenciais para o aprendizado de MATLAB, essas
funcionalidades são bastante úteis para gerar interesse nos estudantes. O Apêndice C
traz um resumo das funções para a criação de saídas formatadas. O Apêndice D é uma
lista de referências. O Apêndice E, que está disponível no website do texto, contém
algumas sugestões para projetos de curso e está baseado na experiência do autor no
ensino de um curso de MATLAB para alunos de primeiro ano. Respostas aos proble-
mas selecionados e um índice aparecem no final do texto.
Todas as figuras, tabelas, equações e exercícios foram numerados de acordo
com o seu capítulo e a sua seção. Por exemplo, a Figura 3.4-2 é a segunda figura no
Capítulo 3, na Seção 4. Esse sistema foi projetado para ajudar o leitor a localizar es-
ses itens. Os problemas de final de capítulo são exceção a esse sistema de numeração.
Eles estão numerados como 1, 2, 3, e assim por diante, para que se evite confusão
com os exercícios dentro dos capítulos.
Os primeiros quatro capítulos constituem um curso sobre os aspectos essen-
ciais do MATLAB. Os outros sete capítulos são independentes entre si e podem
ser abordados em qualquer ordem, ou podem ser omitidos, se necessário. Esses
capítulos fornecem informações adicionais e exemplos a respeito de plotagem e
construção de modelos, equações algébricas lineares, probabilidade e estatística,
cálculo e equações diferenciais, Simulink e processamento simbólico, respectiva-
mente.

Características especiais de referência


O texto possui as seguintes características especiais, que foram projetadas para torná-
-lo mais útil como uma referência:
■ Ao longo de cada um dos capítulos, várias tabelas resumem os comandos e as
funções conforme eles são introduzidos.
x Prefácio

■ O Apêndice A é um resumo completo de todos os comandos e funções descritos


no texto, agrupados por categoria, juntamente com o número da página em que
eles são introduzidos.
■ No final de cada capítulo há uma lista dos termos-chave ali introduzidos, com o
número da página referenciado.
■ Termos-chave foram situados na margem das seções em que são introduzidos.
■ O índice possui quatro seções: uma lista de símbolos, uma lista em ordem alfa-
bética dos comandos e das funções do MATLAB, uma lista de blocos do Simu-
link e uma lista em ordem alfabética dos assuntos.

Subsídios pedagógicos
Os seguintes subsídios pedagógicos foram incluídos:
■ Cada capítulo começa com uma visão geral.
■ Exercícios do tipo Teste seus conhecimentos aparecem ao longo dos capítulos,
próximos de partes relevantes do texto. Esses exercícios relativamente diretos
permitem ao leitor avaliar sua compreensão sobre o material assim que ele é
apresentado. Na maioria dos casos a resposta é dada juntamente com o exercí-
cio. Os estudantes devem fazer esses exercícios tão logo eles surjam.
■ Cada capítulo é encerrado com vários problemas, agrupados de acordo com a
seção a que dizem respeito.
■ Cada capítulo contém numerosos exemplos práticos. Os exemplos principais
são numerados.
■ Cada capítulo possui uma seção de resumo que revisa os objetivos do capítulo.
■ Respostas a muitos dos problemas de final de capítulo aparecem no final do
texto. Esses problemas são indicados por um asterisco próximo ao seu número
(por exemplo, 15*).
Duas características foram incluídas para motivar os estudantes com respeito ao
MATLAB e à profissão de engenharia:
■ A maioria dos exemplos e dos problemas lida com aplicações em engenharia. Eles
foram retirados de uma variedade de campos da engenharia e mostram aplicações
realistas do MATLAB. Um guia para esses exemplos aparece ao final do livro.
■ A folha de rosto de cada capítulo contém uma fotografia de uma conquista recente
da engenharia que ilustra as oportunidades desafiadoras e interessantes que aguar-
dam os engenheiros no século XXI. Uma descrição da referida conquista e das dis-
ciplinas de engenharia relacionadas com ela, bem como uma discussão de como o
MATLAB pode ser aplicado em tais disciplinas, acompanha cada fotografia.

Material de apoio
Um Manual do Professor em inglês está disponível online para os professores que ado-
tarem este livro. Esse manual contém a solução completa de todos os exercícios do
tipo Teste seus conhecimentos e de todos os problemas. O site da editora (http://www.
Prefácio xi

grupoa.com.br) também disponibiliza para download arquivos que contêm slides em Po-
werPoint relacionados com o texto e sugestões para projetos. Este material é exclusivo
para professores.

Informações sobre o MATLAB


Para informações sobre os produtos MATLAB® e Simulink®, entre em contato com:
The MathWorks, Inc.
3 Apple Hill Drive
Natick, MA, 01760-2098 USA
Tel: 508-647-7000
Fax: 508-647-7001
E-mail: info@mathworks.com
Web: www.mathworks.com

Agradecimentos
Muitas pessoas merecem os créditos por este livro. O fato de eu trabalhar com o
corpo docente da University of Rhode Island no desenvolvimento e no ensino de um
curso baseado em MATLAB para alunos de primeiro ano influenciou fortemente este
texto. Sugestões úteis de muitos usuários chegaram via e-mail. Agradeço imensamen-
te suas contribuições.
A empresa The MathWorks, Inc. tem apoiado publicações educacionais. Quero
agradecer especialmente a Naomi Fernandes, da empresa The MathWorks, Inc., pela
ajuda. Bill Stenquist, Joyce Watters e Lora Neyens, da McGraw-Hill, lidaram eficien-
temente com a revisão do manuscrito e guiaram o texto ao longo da produção.
Minhas irmãs, Linda e Chris, e minha mãe, Lillian, sempre estiveram ali, in-
centivando meus esforços. Meu pai sempre me apoiou antes de falecer. Finalmente,
gostaria de agradecer à minha esposa, Mary Louise, e a meus filhos, Aileene, Bill e
Andy, pela compreensão e pelo apoio a este projeto.
William J. Palm, III
Kingston, Rhode Island
Sumário
CAPÍTULO 1 CAPÍTULO 4
®
Visão geral do MATLAB 3 Programando com o MATLAB 147
1.1 Sessões interativas do MATLAB 4 4.1 Projeto e desenvolvimento de
1.2 Menus e barra de ferramentas 16 programas 147
1.3 Arranjos, arquivos e plotagens 18 4.2 Operadores relacionais e variáveis
1.4 Arquivos de script (script files) e o Editor/ lógicas 154
Debugador (Editor/Debugger) 27 4.3 Operadores lógicos e funções
1.5 O Sistema de Ajuda do MATLAB 32 lógicas 157
1.6 Metodologias para resolução de 4.4 Sentenças condicionais 164
problemas 38 4.5 Laços for 171
1.7 Resumo 46 4.6 Laços while 183
Problemas 47 4.7 A estrutura switch 188
4.8 Debugando programas no
CAPÍTULO 2 MATLAB 190
4.9 Aplicações em simulação 193
Arranjos numéricos, de células e de 4.10 Resumo 199
estruturas 53 Problemas 200
2.1 Arranjos numéricos unidimensionais
e bidimensionais 53
2.2 Arranjos numéricos
CAPÍTULO 5
multidimensionais 63 Plotagem avançada 219
2.3 Operações elemento a elemento 64 5.1 Funções de plotagem xy 219
2.4 Operações matriciais 73 5.2 Comandos adicionais e tipos de
2.5 Operações polinomiais utilizando plotagem 226
arranjos 85 5.3 Plotagem interativa no MATLAB 241
2.6 Arranjos de células 90 5.4 Plotagens tridimensionais 246
2.7 Arranjos de estruturas 92 5.5 Resumo 251
2.8 Resumo 96 Problemas 251
Problemas 97
CAPÍTULO 6
CAPÍTULO 3 Construção de modelos e
Funções e arquivos 113 regressão 263
3.1 Funções matemáticas elementares 113 6.1 Estimação de função 263
3.2 Funções definidas pelo usuário 119 6.2 Regressão 271
3.3 Tópicos adicionais sobre funções 130 6.3 A interface básica de ajuste de
3.4 Trabalhando com arquivos de dados 138 curvas 282
3.5 Resumo 140 6.4 Resumo 286
Problemas 141 Problemas 286
xiv Sumário

CAPÍTULO 7 10.4 Modelos lineares por partes 428


Estatística, probabilidade e 10.5 Modelos de função de transferência 435
interpolação 295 10.6 Modelos em variáveis de estado não
lineares 439
7.1 Estatísticas e histogramas 295
10.7 Subsistemas 441
7.2 A distribuição normal 300
10.8 Tempo morto em modelos 446
7.3 Geração de números aleatórios 307
10.9 Simulação de um modelo não linear de
7.4 Interporlação 313
suspensão de veículo 449
7.5 Resumo 322
10.10 Resumo 453
Problemas 323
Problemas 454

CAPÍTULO 8 CAPÍTULO 11
Equações algébricas lineares 329
MuPAD 463
8.1 Métodos matriciais para equações
11.1 Introdução ao MuPAD 464
lineares 330
11.2 Expressões simbólicas e álgebra 470
8.2 O método da divisão à esquerda 333
11.3 Equações algébricas e
8.3 Sistemas subdeterminados 339
transcendentais 477
8.4 Sistemas sobredeterminados 348
11.4 Álgebra linear 487
8.5 Um programa de solução geral 352
11.5 Cálculo 491
8.6 Resumo 354
11.6 Equações diferenciais ordinárias 499
Problemas 355
11.7 Transformadas de Laplace 504
11.8 Funções especiais 509
CAPÍTULO 9 11.9 Resumo 512
Métodos numéricos para cálculo e Problemas 513
equações diferenciais 367
9.1 Integração numérica 367 APÊNDICE A
9.2 Diferenciação numérica 375
Guia para comandos e funções 525
9.3 Equações diferenciais de primeira
ordem 380
9.4 Equações diferenciais de ordem APÊNDICE B
superior 387 Animação e som no MATLAB 536
9.5 Métodos especiais para equações
lineares 393
9.6 Resumo 406 APÊNDICE C
Problemas 408 Saída formatada no MATLAB 547

CAPÍTULO 10 APÊNDICE D
Simulink 417 Referências 551
10.1 Diagramas de simulação 417
Respostas dos problemas
10.2 Introdução ao Simulink 419
selecionados 553
10.3 Modelos lineares em variáveis
de estado 425 Índice 557
Foto: cortesia do Laboratório de Propulsão a Jato (Jet Propulsion
Laboratory) da NASA.

Engenharia no
Século XXI…
Exploração remota

A
inda se passarão muitos anos até que os humanos possam viajar para outros
planetas. Enquanto isso, sondas não tripuladas ampliaram rapidamente nosso
conhecimento do universo. Sua utilização será mais intensa no futuro quando
a nossa tecnologia se desenvolver a ponto de torná-las mais confiáveis e versáteis.
Espera-se o surgimento de melhores sensores para a coleta de imagens e de outros
dados. Dispositivos robóticos aprimorados tornarão essas sondas mais autônomas e
mais capazes de interagir com o ambiente, em vez de apenas observá-lo.
A sonda planetária Sojourner, da NASA, aterrissou em Marte no dia 4 de julho
de 1997 e impressionou as pessoas na Terra, que a assistiram explorar com sucesso a
superfície marciana para determinar interações roda-solo, analisar as rochas e o solo
e obter imagens da sonda para verificação de danos. Depois, no início de 2004, duas
sondas aprimoradas, Spirit e Opportunity, aterrissaram em lados opostos do planeta
e, em uma das mais importantes descobertas do século XXI, obtiveram fortes evidên-
cias de que já houve água em quantidades significativas em Marte.
Tendo aproximadamente o tamanho de um carrinho de golfe, as novas sondas
possuem seis rodas, cada uma com o seu próprio motor. Elas atingem uma velocidade
máxima de 5 centímetros por segundo em terra plana e dura e podem viajar até cerca
de 100 metros por dia. Necessitando de 100 watts para se mover, elas obtêm potência
a partir de painéis solares que geram 140 watts durante uma janela de 4 horas a cada
dia. O sofisticado sistema de controle de temperatura não apenas as protege das tem-
peraturas noturnas de -96°C, mas também impede o superaquecimento das sondas.
O braço robótico possui três juntas (ombro, cotovelo e pulso), impulsionadas
por cinco motores, e tem um alcance de 90 centímetros. O braço transporta qua-
tro ferramentas e instrumentos para estudos geológicos. Nove câmeras possibilitam
navegação e visões panorâmicas, além de evitar riscos. O computador embarcado
possui 128 MB de DRAM e coordena todos os subsistemas, incluindo comunicações.
Apesar de o planejamento original ser o de permanecerem por três meses, am-
bas as sondas ainda estavam explorando Marte no final de 2009.
Todas as disciplinas de engenharia foram envolvidas no projeto e no lançamento
das sondas. Os toolboxes de Redes Neurais, Processamento de Sinais, Processamento
de Imagens, PDE e muitos toolboxes de sistemas de controle se adequam muito bem
para auxiliar projetistas de sondas e de veículos autônomos semelhantes às sondas de
Marte. ■
1
Visão geral do MATLAB®1

Este é o capítulo mais importante do livro. Assim que você terminá-lo, será ca-
paz de utilizar o MATLAB para resolver muitos tipos de problemas. A Seção
1.1 apresenta uma introdução ao MATLAB como uma calculadora interativa.
A Seção 1.2 aborda os principais menus e a barra de ferramentas. A Seção 1.3
introduz arranjos, arquivos e plotagens. A Seção 1.4 discute como criar, editar
e salvar programas no MATLAB. A Seção 1.5 introduz o extensivo Sistema
de Ajuda do MATLAB e a Seção 1.6 introduz a metodologia de resolução de
problemas de engenharia.

Como utilizar este livro


A organização de capítulos do livro é flexível o suficiente para acomodar
uma diversidade de usuários. Entretanto, é importante que se abordem os
primeiros capítulos na ordem em que estão dispostos. O Capítulo 2 aborda
arranjos, que são os blocos de construção básicos no MATLAB. O Capítulo
3 aborda utilização de arquivos, funções internas do MATLAB e funções
definidas pelo usuário. O Capítulo 4 aborda programação utilizando opera-
dores relacionais e lógicos, sentenças condicionais e laços.
Os capítulos de 5 a 11 são independentes e podem ser abordados em
qualquer ordem. Eles contêm discussões aprofundadas sobre como utilizar o
MATLAB para solucionar diversos tipos comuns de problemas. O Capítulo
5 aborda plotagens bidimensionais e tridimensionais em mais detalhes. O
Capítulo 6 mostra como utilizar plotagens para construir modelos matemá-
ticos a partir de dados. O Capítulo 7 aborda aplicações de probabilidade,
estatística e interpolação. O Capítulo 8 trata de equações algébricas lineares
de maneira mais aprofundada por meio do desenvolvimento de métodos para
os casos indeterminado e sobredeterminado. O Capítulo 9 introduz métodos

1
MATLAB é uma marca registrada da empresa The MathWorks, Inc.
4 Introdução ao MATLAB para Engenheiros

numéricos para cálculo e equações diferenciais ordinárias. O Simulink®2, que é o


tópico do Capítulo 10, é uma interface gráfica do usuário para resolver modelos de
equações diferenciais. O Capítulo 11 aborda processamento simbólico com o Mu-
PAD®2, uma nova funcionalidade do toolbox de Matemática Simbólica do MAT-
LAB, com aplicações em álgebra, cálculo, equações diferenciais, transformadas e
funções especiais.

Subsídios de referência e aprendizado


Este livro foi idealizado para ser tanto uma referência quanto uma ferramenta de
aprendizado. As características especiais úteis para esses propósitos são apresentadas
a seguir.
■ Notas à margem identificam onde os novos termos foram introduzidos.
■ Ao longo de cada capítulo, aparecem pequenos exercícios do tipo Teste seus
conhecimentos. Quando apropriado, as respostas são apresentadas imediata-
mente após os exercícios, de modo que você possa mensurar o seu domínio
do assunto.
■ Exercícios de dever de casa são encontrados ao final de cada capítulo. Eles nor-
malmente requerem um esforço maior do que os exercícios do tipo Teste seus
conhecimentos.
■ Cada capítulo contém tabelas que resumem os comandos do MATLAB nele
introduzidos.
■ No final de cada capítulo encontra-se
■ Um resumo do que você deve ser capaz de fazer após terminar o capítulo.
■ Uma lista de termos-chave que você deve conhecer.
■ O Apêndice A contém tabelas dos comandos do MATLAB, agrupados por cate-
gorias, com as páginas de referência apropriadas.
■ O índice apresenta quatro partes: símbolos do MATLAB, comandos do MAT-
LAB, blocos do Simulink e tópicos.

1.1 Sessões interativas do MATLAB


Agora mostraremos como iniciar o MATLAB, como fazer alguns cálculos básicos e
como sair do MATLAB.

2
Simulink e MuPAD são marcas registradas da empresa The MathWorks, Inc.
Capítulo 1 ■ Visão geral do MATLAB® 5

FIGURA 1.1-1 A Área de Trabalho padrão do MATLAB.

Convenções†
Neste livro utilizamos fonte de máquina de escrever para representar
comandos do MATLAB, qualquer texto que você digitar no computador e qualquer
resposta do MATLAB que aparecer na tela, por exemplo, y = 6*x. Variáveis no tex-
to matemático normal aparecem em itálico, por exemplo, y = 6x. Utilizamos negrito
para três finalidades: representar vetores e matrizes em texto matemático normal (por
exemplo, Ax ⴝ b); representar uma tecla do teclado (por exemplo, Enter); e repre-
sentar o nome de um menu ou de um item que aparecer em tal menu (por exemplo,
File). Supomos que você sempre aperta Enter após digitar um comando. Não repre-
sentaremos essa ação com um símbolo separado.

Iniciando o MATLAB
Para iniciar o MATLAB em um sistema MS Windows, clique duas vezes no ícone
ÁREA DE do MATLAB. Você então verá a Área de Trabalho (Desktop) do MATLAB. A Área
TRABALHO de Trabalho gerencia a janela de Comandos (Command window), o Navegador de

† N. de R. T.: No Brasil, a separação de casas decimais é feita por vírgula. Entretanto, o padrão utilizado
no MATLAB é o inglês (ou seja, separação de casas decimais por ponto). Assim, quando ocorrerem casas
decimais, elas devem ser separadas por um ponto na digitação de números no MATLAB (seja na Com-
mand Window, seja no desenvolvimento de programas). Nas explicações ao longo do texto, será utilizada a
notação brasileira, ou seja, a separação de casas decimais por vírgulas. Obviamente, nos códigos apresenta-
dos ao longo do texto, os números estarão separados por ponto, concordando com a notação do MATLAB.
O aluno deve ficar atento a isso.
6 Introdução ao MATLAB para Engenheiros

Ajuda (Help Browser) e outras ferramentas. A aparência padrão da Área de Trabalho


é apresentada na Figura 1.1-1. Aparecem cinco janelas: a janela de Comandos ao
centro, a janela de Histórico de Comandos (Command History) à direita inferior, a
janela do Espaço de Trabalho (Workspace) à direita superior, a janela de Detalhes
(Details window) à esquerda inferior e a janela de Diretório Atual (Current Directory)
à esquerda superior. Na parte superior da Área de Trabalho há uma linha de nomes de
menu e uma linha de ícones chamada de barra de ferramentas (toolbar). À direita da
barra de ferramentas há uma caixa que mostra o diretório onde o MATLAB busca e
salva arquivos. Nós descreveremos os menus, a barra de ferramentas e os diretórios
mais adiante neste capítulo.
JANELA DE Você utiliza a janela de Comandos para se comunicar com o MATLAB digi-
COMANDOS tando diferentes tipos de instruções: comandos, funções e sentenças. Mais adiante,
discutiremos as diferenças entre eles, mas por enquanto, para simplificar a discussão,
de maneira genérica chamaremos as instruções de comandos. O MATLAB exibe o
prompt () para indicar que ele está pronto para receber instruções. Antes de dar
instruções ao MATLAB, certifique-se de que o cursor esteja localizado logo após o
prompt. Se não estiver, utilize o mouse para mover o cursor. O prompt na Edição de
Estudante (Student Edition) tem o seguinte aspecto: EDU . Utilizaremos o símbolo
normal do prompt () para ilustrar os comandos neste texto. A janela de Comandos
na Figura 1.1-1 mostra alguns comandos e os resultados dos cálculos. Nós abordare-
mos esses comandos mais adiante neste capítulo.
Quatro outras janelas aparecem na Área de Trabalho padrão. A janela de Diretó-
rio Atual se parece com uma janela de gerenciador de arquivos; você pode usá-la para
acessar arquivos. Ao clicar duas vezes no nome de um arquivo com a extensão .m,
aquele arquivo será aberto no Editor do MATLAB. O Editor será discutido na Seção
1.4. A Figura 1.1-1 mostra os arquivos no diretório do autor C:\MyMATLABFiles.
Abaixo da janela de Diretório Atual está a janela .... Ela exibe quaisquer
comentários existentes no arquivo. Note que dois tipos de arquivo são mostrados no
Diretório Atual. Eles possuem as extensões .m e .mdl. Abordaremos arquivos M neste
capítulo. O Capítulo 10 abordará o Simulink, que utiliza arquivos MDL. Você pode
ter outros tipos de arquivo no diretório.
A janela do Espaço de Trabalho aparece à direita superior e exibe as variáveis
criadas na janela de Comandos. Clique duas vezes no nome de uma variável para
abrir o Editor de Arranjos (Array Editor), que será discutido no Capítulo 2.
A quinta janela na Área de Trabalho padrão é janela de Histórico de Comandos.
Essa janela mostra todos os caracteres que você inseriu previamente na janela de Co-
mandos. Ela é útil para rastrear tudo o que você digitou. Você pode clicar em algum
comando que já digitou e arrastá-lo para a janela de Comandos ou do Editor para
evitar digitá-la novamente. O duplo clique em algo já digitado o faz ser executado na
janela de Comandos.
Você pode alterar a aparência da Área de Trabalho, se desejar. Por exemplo,
para eliminar uma janela, apenas clique no botão fecha janela (*) no canto direito su-
perior. Para desencaixar ou separar uma janela da Área de Trabalho, clique no botão
que contém uma seta curva. Uma janela desencaixada pode ser levada para qualquer
lugar na tela. Você pode manipular outras janelas do mesmo modo. Para restaurar a
configuração padrão, clique no menu Desktop, depois clique em Desktop Layout e
selecione Default.
Capítulo 1 ■ Visão geral do MATLAB® 7

Inserindo comandos e expressões


Para ver como é simples utilizar o MATLAB, tente inserir alguns comandos no seu
computador. Se você cometer algum erro de digitação, apenas pressione Enter até apa-
recer o prompt e redigite a linha. Ou, uma vez que o MATLAB retém seus toques de
tecla anteriores em um arquivo de comandos, você pode usar a tecla direcional superior
(↑) para rever os comandos já inseridos. Aperte a tecla uma vez para ver a última in-
serção, duas para ver a penúltima inserção, e assim por diante. Utilize a tecla direcio-
nal inferior (↓) para caminhar para frente ao longo da lista de comandos já inseridos.
Quando você encontrar a linha desejada, você pode editá-la utilizando as teclas dire-
cionais esquerda e direita (← e →) e as teclas Backspace e Delete. Pressione Enter
para executar o comando. Essa técnica permite corrigir rapidamente erros de digitação.
Note que você pode visualizar seus toques de tecla anteriores exibidos na janela
de Histórico de Comandos. Você pode copiar uma linha dessa janela para a janela de
Comandos selecionando a linha com o mouse, mantendo o botão esquerdo do mouse
pressionado e arrastando a linha para a janela de Comandos.
Certifique-se de que o cursor esteja no prompt da janela de Comandos. Para di-
vidir 8 por 10, digite 8/10 e pressione Enter (o símbolo / é o símbolo do MATLAB
para divisão). Sua inserção e a resposta do MATLAB aparecerão da seguinte maneira
na tela (chamamos essa interação entre você e o MATLAB de sessão interativa, ou
SESSÃO simplesmente de sessão). Lembre-se de que o símbolo >> aparece automaticamente
na tela; você não o digita.

O MATLAB indenta o resultado numérico. Ele utiliza uma precisão alta para os
seus cálculos, mas por padrão ele normalmente exibe quatro casas decimais, exceto
quando o resultado é um inteiro.
O MATLAB atribui a resposta mais recente a uma variável chamada ans, que é
VARIÁVEL uma abreviação de answer (resposta). Uma variável no MATLAB é um símbolo uti-
lizado para conter um valor. Você pode utilizar a variável ans para cálculos posterio-
res; por exemplo, utilizando o símbolo do MATLAB para multiplicação (*), obtemos

Note que a variável ans agora possui o valor 4.


Você pode utilizar variáveis para escrever expressões matemáticas. Em vez de
utilizar a variável padrão ans, você pode atribuir o resultado a uma variável de sua
própria escolha, por exemplo, a variável r, como apresentado a seguir:

Espaços na linha melhoram a legibilidade; por exemplo, você pode colocar um espa-
ço antes e depois do sinal =, se você quiser. O MATLAB ignora esses espaços quando
realiza os seus cálculos. Ele também ignora espaços em torno dos sinais + e -.
8 Introdução ao MATLAB para Engenheiros

Se você agora digitar r no prompt e pressionar Enter, você verá

e verificará, portanto, que a variável r contém o valor 0,8. Você pode utilizar essa
variável em cálculos posteriores. Por exemplo,

Um erro comum é esquecer o símbolo de multiplicação * e digitar a expressão


como se faria em álgebra, como s = 20r. Se você fizer isso no MATLAB, ele retornará
uma mensagem de erro.
O MATLAB possui centenas de funções disponíveis. Uma delas é a função
raiz quadrada, sqrt. Um par de parênteses é utilizado após o nome da função para
ARGUMENTO envolver o valor (chamado de argumento da função) que é processado pela função.
Por exemplo, para calcular a raiz quadrada de 9 e atribuir o seu valor a uma variável
r, você digita r = sqrt(9). Note que o valor anterior de r foi substituído por 3.

Ordem de precedência
ESCALAR Um escalar é um número único. Uma variável escalar é uma variável que contém
um número único. O MATLAB utiliza os símbolos + - * / ^ para adição, subtração,
multiplicação, divisão e exponenciação (potência) de escalares. Eles estão listados na
Tabela 1.1-1. Por exemplo, se você digitar x = 8 + 3*5, retornará a resposta x =
23. Se você digitar 2^3-10, retornará a resposta ans = –2. A barra (/) representa
a divisão à direita, que é o operador de divisão normal com o qual você é familiariza-
do. Se você digitar 15/3, é retornado o resultado ans = 5.
O MATLAB possui outro operador de divisão, chamado de divisão à esquerda,
que é indicado pela barra invertida (\). O operador de divisão à esquerda é útil para
resolver conjuntos de equações algébricas lineares, como veremos. Uma boa maneira
de lembrar a diferença entre os operadores de divisão à direita e à esquerda consiste em
notar que a barra se inclina em direção ao denominador. Por exemplo, 7/2 = 2\7 = 3,5.

TABELA 1.1-1 Operações aritméticas escalares


Símbolo Operação Forma no MATLAB
^ exponenciação: ab a^b
* multiplicação: ab a*b
/ divisão à direita: a/b = a/b
\ divisão à esquerda: a\b = a\b
+ adição: a + b a+b
- subtração: a - b a–b
Capítulo 1 ■ Visão geral do MATLAB® 9

TABELA 1.1-2 Ordem de precedência


Precedência Operação
Primeiro Parênteses, a começar pelo par mais interno.
Segundo Exponenciação, da esquerda para a direita.
Terceiro Multiplicação e divisão com igual precedência, da esquerda para a
direita.
Quarto Adição e subtração com igual precedência, da esquerda para a
direita.

As operações matemáticas representadas pelos símbolos + - * / \ e ^ obedecem


PRECEDÊNCIA a um conjunto de regras chamado de precedência. As expressões matemáticas são
avaliadas a partir da esquerda, com a operação de exponenciação tendo a maior or-
dem de precedência, seguida pela multiplicação e pela divisão com igual precedência,
seguidas, por sua vez, pela adição e pela subtração com igual precedência. Os parên-
teses podem ser utilizados para alterar essa ordem. A avaliação começa com o par de
parênteses mais interno. A Tabela 1.1-2 resume essas regras. Por exemplo, observe o
efeito da precedência na seguinte sessão.
10 Introdução ao MATLAB para Engenheiros

Para evitar erros, sinta-se livre para inserir parênteses sempre que estiver inseguro
acerca do efeito que a precedência terá sobre o cálculo. Utilize os parênteses também
para melhorar a legibilidade das suas expressões no MATLAB. Por exemplo, os pa-
rênteses não são necessários na expressão 8 + (3*5), mas eles deixam clara a sua
intenção de multiplicar 3 por 5 antes de adicionar 8 ao resultado.

Teste seus conhecimentos


T1.1-1 Utilize o MATLAB para calcular as seguintes expressões

a.

b. 6(351/4) + 140,35
(Respostas: a. 410,1297 b. 17,1123)

O operador de atribuição
O sinal = no MATLAB é chamado de operador de atribuição ou de substituição. Ele
trabalha de maneira diferente do sinal de igualdade que você conhece da matemática.
Quando você digita x = 3, você está dizendo ao MATLAB para atribuir 3 à variável
x. Isto não é diferente da que acontece na matemática. Entretanto, no MATLAB tam-
bém podemos digitar algo como: x = x + 2. Isso diz ao MATLAB para adicionar
2 ao valor atual de x e substituir o valor atual de x com esse novo valor. Se x original-
mente tivesse o valor 3, o seu novo valor seria 5. Esse uso do operador = é diferente
do uso na matemática. Por exemplo, a equação matemática x = x + 2 é inválida porque
implica que 0 = 2.
No MATLAB a variável do lado esquerdo do operador = é substituída pelo va-
lor gerado pela conta do lado direito. Portanto, uma variável, e apenas uma variável,
deve estar do lado esquerdo do operador =. Dessa forma, no MATLAB você não pode
digitar 6 = x. Outra consequência dessa restrição é que você não pode escrever no
MATLAB expressões como a seguinte:
>>x+2=20
A equação correspondente x + 2 = 20 é aceitável em álgebra e tem como solução x =
18, mas o MATLAB não pode resolver tal equação sem comandos adicionais (esses
comandos estão disponíveis no toolbox de Matemática Simbólica, o qual será descri-
to no Capítulo 11).
Outra restrição é que o lado direito do operador = deve ter um valor calculável.
Por exemplo, se a variável y não tiver um valor a ela atribuído, então o comando se-
guinte gerará uma mensagem de erro no MATLAB.
>>x = 5 + y
Além de associar valores conhecidos a variáveis, o operador de atribuição é
muito útil para atribuir valores que não são conhecidos com antecedência, ou para
mudar o valor de uma variável utilizando um procedimento prescrito. O exemplo
seguinte mostra como isso é feito.
Capítulo 1 ■ Visão geral do MATLAB® 11

EXEMPLO 1.1-1 Volume de um cilindro circular

O volume de um cilindro circular de altura h e raio r é dado por V = r2h. Um dado tanque
cilíndrico possui altura de 15 m e um raio de 8 m. Queremos construir outro tanque cilín-
drico com um volume 20% maior, mas com a mesma altura. Qual deve ser o valor do raio?
■ Solução
Primeiro resolvemos a equação do cilindro para o raio r. Isso resulta em

A sessão é mostrada abaixo. Primeiro atribuímos valores para as variáveis r e h que repre-
sentam o raio e a altura. Depois, calculamos o volume do cilindro original e o aumenta-
mos em 20%. Finalmente, resolvemos para o valor de raio requerido. Para este problema,
podemos utilizar a constante interna do MATLAB pi.
>>r = 8;
>>h = 15;
>>V = pi*r^2*h;
>>V = V + 0.2*V;
>>r = sqrt(V/(pi*h))
r =
8.7636
Assim, o novo cilindro deve ter um raio de 8,7636 m. Note que os valores originais das
variáveis r e V são substituídos por dois valores novos. Isso é aceitável, uma vez que não
desejamos utilizar os valores originais novamente. Note como a precedência se aplica à
linha V = pi*r^2*h;. Ela é equivalente a V = pi*(r^2)*h;.

Nomes de variáveis
ESPAÇO DE O termo espaço de trabalho (workspace) se refere aos nomes e valores de qualquer
TRABALHO variável em uso na sessão atual de trabalho. Os nomes de variáveis devem começar
com uma letra; o restante do nome pode conter letras, dígitos e traços inferiores (un-
derscore). O MATLAB é sensível a maiúsculas e minúsculas (case sensitive). Por-
tanto, os seguintes nomes representam cinco variáveis diferentes: speed, Speed,
SPEED, Speed_1 e Speed_2. No MATLAB 7, os nomes de variáveis não podem
ter mais do que 63 caracteres.

Gerenciando a sessão de trabalho


A Tabela 1.1-3 resume alguns comandos e símbolos especiais para gerenciar a ses-
são de trabalho. Um sinal de ponto e vírgula no final da linha suprime a impressão
dos resultados na tela. Se um sinal de ponto e vírgula não for inserido no final de
uma linha, o MATLAB exibe os resultados da linha na tela. Mesmo que você su-
prima a exibição com o ponto e vírgula, o MATLAB continua armazenando o valor
da variável.
12 Introdução ao MATLAB para Engenheiros

TABELA 1.1-3 Comandos para gerenciar a sessão de trabalho


Comando Descrição
clc Limpa a janela de comandos.
clear Remove todas as variáveis da memória.
clear var1 var2 Remove as variáveis var1 e var2 da memória.
exist(’name’) Determina se existe um arquivo ou variável com o nome ‘name’.
quit Fecha o MATLAB.
who Lista todas as variáveis na memória.
whos Lista todas as variáveis e tamanhos e indica se elas possuem parte
imaginária.
: Dois pontos; gera um arranjo com elementos igualmente espaçados.
, Vírgula; separa elementos de um arranjo.
; Ponto e vírgula; suprime impressão na tela; também indica uma nova linha
em um arranjo.
... Reticências; continua uma linha.

Você pode inserir vários comandos na mesma linha separando-os com uma vír-
gula se quiser ver o resultado do comando anterior, ou com um ponto e vírgula se
quiser suprimir a exibição. Por exemplo,

Note que o primeiro valor de x não foi exibido. Note também que o valor de x mudou
de 2 para 15.
Se você precisa digitar uma linha longa, você pode utilizar o sinal de reticên-
cias, digitando três pontos, para atrasar a execução. Por exemplo,

Utilize as teclas direcionais Tab e Ctrl para recuperar, editar e reutilizar fun-
ções e variáveis que você digitou anteriormente. Por exemplo, suponhamos que você
insira a linha
>>volume = 1 + sqr(5)
O MATLAB responde com uma mensagem de erro porque você não digitou o t de
sqrt. Em vez de redigitar toda a linha, pressione a tecla direcional superior (↑) uma
vez para exibir a última linha digitada. Aperte a tecla direcional esquerda (←) algumas
vezes para mover o cursor e adicionar o t que está faltando, e então pressione Enter.
O uso repetido da tecla direcional superior recupera linhas digitadas anteriormente.
Capítulo 1 ■ Visão geral do MATLAB® 13

Teclas Tab e direcionais


Você pode utilizar a funcionalidade de recuperação inteligente para recuperar uma
função ou variável digitada anteriormente cujos primeiros caracteres você especi-
fique. Por exemplo, após ter inserido a linha que começa com volume, ao digitar
vol e pressionar a tecla direcional superior (↑) uma vez, você recupera a última linha
digitada que começa com a função ou variável cujo nome se inicia com vol. Essa
funcionalidade é sensível a maiúsculas e minúsculas.
Você pode utilizar a funcionalidade tab completion para reduzir a quantidade de
digitação. O MATLAB automaticamente completa o nome de uma função, variável ou
arquivo se você digitar as primeiras letras do nome e pressionar a tecla Tab. Se o nome
for único, ele é completado automaticamente. Por exemplo, na sessão listada anterior-
mente, se você digitar Fruit e pressionar Tab, o MATLAB completará o nome e exibi-
rá FruitPurchased. Pressione Enter para exibir o valor da variável, ou continue edi-
tando para criar uma nova linha executável que utiliza a variável FruitPurchased.
Se houver mais do que um nome que começa com as letras que você digitou, o
MATLAB exibirá esses nomes quando você pressionar a tecla Tab. Utilize o mouse
para selecionar o nome desejado na lista.
As teclas direcionais esquerda (←) e direita (→) movem o cursor para a esquer-
da e para a direita um caractere por vez ao longo de uma linha. Para mover o cursor
uma palavra por vez, pressione Ctrl e → ao mesmo tempo para movê-lo para a direi-
ta; e Ctrl e ← ao mesmo tempo para movê-lo para a esquerda. Pressione Home para
mover o cursor para o começo de uma linha; pressione End para mover o cursor para
o final de uma linha.

Deletando e removendo
Pressione Del para deletar o caractere no cursor; pressione Backspace para deletar o
caractere antes do cursor. Pressione Esc para apagar toda a linha; pressione Ctrl e k
simultaneamente para deletar (kill) os caracteres desde o cursor até o final da linha.
O MATLAB armazena o último valor de uma variável até que você feche o
MATLAB ou apague esse valor. Negligenciar esse fato comumente causa erros. Por
exemplo, você pode preferir utilizar a variável x em vários cálculos diferentes. Se
você se esquecer de atribuir a x o valor correto, o MATLAB utilizará o último valor, e
você obterá um resultado incorreto. Você pode utilizar a função clear para remover
os valores de todas as variáveis da memória, ou pode utilizar a forma clear var1
var2 para remover as variáveis var1 e var2. O resultado do comando clc é di-
ferente; ele remove tudo que está exibido na janela de Comandos, mas os valores das
variáveis são mantidos.
Você pode digitar o nome de uma variável e pressionar Enter para ver o seu
valor atual. Se a variável não tiver um valor (isto é, se ela não existir), você verá uma
mensagem de erro. Você também pode utilizar a função exist. Digite exist(’x’)
para ver se a variável x está em uso. Se retornar o valor 1, a variável existe; um 0 indi-
ca que ela não existe. A função who lista os nomes de todas as variáveis na memória,
mas não mostra os seus valores. A forma who var1 var2 restringe a exibição aos
valores especificados. O caractere curinga * pode ser utilizado para exibir variáveis que
atendem a um padrão. Por exemplo, who A* encontra todas as variáveis no espaço de
trabalho atual que comecem com A. A função whos lista os nomes das variáveis e os
seus tamanhos, e indica se elas possuem parte imaginária não nula.
14 Introdução ao MATLAB para Engenheiros

A diferença entre uma função, um comando e uma sentença é que a função tem
os seus argumentos evolvidos por parênteses. Comandos, como clear, não preci-
sam ter argumentos; mas se tiverem, eles não são envolvidos por parênteses, como em
clear x, por exemplo. Sentenças não podem ter argumentos; por exemplo, clc e
quit são sentenças.
Pressione Ctrl-C para cancelar uma computação longa sem terminar a sessão.
Você pode sair do MATLAB digitando quit. Você também pode clicar no menu File
e então clicar em Exit MATLAB.

Constantes predefinidas
O MATLAB possui várias constantes especiais predefinidas, tais como a constante
interna pi que utilizamos no Exemplo 1.1-1. O símbolo Inf representa q, o que, na
prática, significa um número tão grande que o MATLAB não consegue representá-lo.
Por exemplo, ao digitar 5/0, obtemos a resposta Inf. O símbolo NaN† representa
“não é um número”. Ele indica um resultado numérico indefinido tal como o obtido
ao digitarmos 0/0. O símbolo eps é o menor número que, quando somado a 1 pelo
computador, resulta em um número maior do que 1. Nós o utilizamos como um indi-
cador da precisão dos cálculos.
Os símbolos i e j indicam a unidade imaginária, em que . Nós
os utilizamos para criar e representar números complexos, tais como x = 5 + 8i.
Tente não utilizar os nomes de constantes especiais como nomes de variáveis.
Apesar de o MATLAB permitir que você atribua um valor diferente a essas constan-
tes, não é uma boa prática fazer isso.

Operações com números complexos


O MATLAB manipula álgebra de números complexos automaticamente. Por exem-
plo, o número c1 = 1 – 2i é inserido da seguinte maneira: c1 = 1 – 2i. Você também
pode digitar c1 = Complex(1, -2).
Atenção: Note que não é necessário um asterisco entre i ou j e um nú-
mero, apesar de ele ser necessário com uma variável, tal como c2 = 5 –
i*c1. Essa convenção pode causar erros se você não for cuidadoso. Por
exemplo, as expressões y = 7/2*i e x = 7/2i geram dois resultados
diferentes: y = (7/2)i = 3,5i e x = 7/(2i) = -3,5i.

TABELA 1.1-4 Variáveis e constantes especiais


Comando Descrição
ans Variável temporária que contém a resposta mais recente.
eps Especifica a acurácia da precisão de ponto flutuante.
i,j A unidade imaginária
Inf Infinito.
NaN Indica um resultado numérico indefinido.
pi O número .

† N. de T.: NaN é a sigla de not a number.


Capítulo 1 ■ Visão geral do MATLAB® 15

A adição, a subtração, a multiplicação e a divisão de números complexos são


realizadas facilmente. Por exemplo,

Teste seus conhecimentos


T1.1-2 Dados x = -5 + 9i e y = 6 - 2i, utilize o MATLAB para mostrar que x + y =
1 + 7i, xy = -12 + 64i e x/y = -1,2 + 1,1i.

Comandos de formatação
O comando format controla como os números aparecem na tela. A Tabela 1.1-5
apresenta as variantes desse comando. O MATLAB utiliza muitos algarismos signi-
ficativos em seus cálculos, mas raramente precisamos ver todos eles. O formato de
exibição padrão do MATLAB é o formato short, que utiliza quatro dígitos deci-
mais. Você pode exibir mais digitando format long, o que resulta na exibição de
16 dígitos. Para retornar ao modo padrão, digite format short.
Você pode forçar para que a saída esteja em notação científica digitando for-
mat short e, ou format long e, em que e representa o número 10. Assim,
a saída 6.3792e+03 representa o número 6,3792 * 103. A saída 6.3792e-03
representa o número 6,3792 * 10-3. Note que nesse contexto e não representa o nú-
mero e, que é a base do logaritmo natural. Aqui, e representa “expoente”. Essa é uma

TABELA 1.1-5 Formatos de exibição numérica


Comando Descrição e exemplo
format short Quatro dígitos decimais (o padrão); 13.6745.
format long 16 dígitos; 17.27484029463547.
format short e Cinco dígitos (quatro decimais) mais o expoente;
6.3792e+03.
format long e 16 dígitos (15 decimais) mais o expoente;
6.379243784781294e-04.
format bank Dois dígitos decimais; 126.73.
format + Positivo, negativo ou zero; +.
format rat Aproximação racional; 43/7.
format compact Suprime algumas linha em branco.
format loose Restabelece o modo de exibição menos compacto.
16 Introdução ao MATLAB para Engenheiros

FIGURA 1.2-1 A parte superior da Área de Trabalho do MATLAB.

escolha pobre de notação, mas o MATLAB segue os padrões convencionais de pro-


gramação de computadores que foram estabelecidos há muitos anos.
Utilize format bank apenas para operações monetárias; esse modo não re-
conhece parte imaginária.

1.2 Menus e barra de ferramentas


A Área de Trabalho gerencia a janela de Comandos e outras ferramentas do MAT-
LAB. A aparência padrão da Área de Trabalho é apresentada na Figura 1.1-1. Ao
longo da parte superior da Área de Trabalho estão uma linha de nomes de menu e uma
linha de ícones chamada de barra de ferramentas. À direita da barra de ferramentas
DIRETÓRIO está uma caixa que mostra o diretório atual, onde o MATLAB busca por arquivos.
ATUAL Veja a Figura 1.2-1.
Outras janelas aparecem em uma sessão do MATLAB, a depender do que você
fizer. Por exemplo, uma janela gráfica contendo uma plotagem aparece quando você
utiliza as funções de plotagem; uma janela do Editor/Debugador aparece para ser uti-
lizada na criação de arquivos de programa. Cada janela possui a sua própria barra de
menus, com um ou mais menus, na parte superior. Assim, a barra de menus mudará
quando você mudar de janela. Para ativar ou selecionar um menu, clique nele. Cada
menu possui alguns itens. Clique em um item para selecioná-lo. Mantenha em mente
que os menus são sensíveis a contexto. Assim, seus conteúdos mudam, dependendo de
quais funcionalidades você estiver utilizando.

Os menus da área de trabalho


A maior parte da sua interação se dará na janela de Comandos. Quando a janela de
Comandos está ativa, a Área de Trabalho padrão do MATLAB 7 (mostrada na Figura
1.1-1) apresenta seis menus: File, Edit, Debug, Desktop, Window e Help. Note que
esses menus mudam dependendo da janela que estiver ativa. Cada item em um menu
pode ser selecionado com o menu aberto tanto clicando no item quanto digitando sua
letra sublinhada. Alguns itens podem ser selecionados, sem o menu estar aberto, por
meio da tecla de atalho listada à direita do item. Aqueles itens seguidos por três pon-
tos (...) abrem um submenu ou outra janela contendo uma caixa de diálogo.
Os três menus mais úteis são os menus File, Edit e Help. O menu Help está
descrito na Seção 1.5. O menu File no MATLAB 7 contém os seguintes itens, que
realizam as ações indicadas quando você os seleciona.

O Menu File no MATLAB 7


New Abre uma caixa de diálogo que permite criar um novo arquivo de progra-
ma, chamado de arquivo M (M-file), utilizando um editor de texto chama-
do de Editor/Debugador, uma nova Figura, uma variável na janela do Es-
Capítulo 1 ■ Visão geral do MATLAB® 17

paço de Trabalho, um arquivo do tipo Model (utilizado pelo Simulink) ou


uma nova GUI (Interface Gráfica do Usuário)†.
Open... Abre uma caixa de diálogo que permite selecionar um arquivo para
edição.
Close Command Window (ou Current Folder) Fecha a janela de Comandos
ou o arquivo atual, se algum estiver aberto.
Import Data... Inicia o Import Wizard, que permite importar dados facilmente.
Save Workspace As... Abre uma caixa de diálogo que permite salvar um ar-
quivo.
Set Path... Abre uma caixa de diálogo que permite definir o caminho de busca
do MATLAB.
Preferences... Abre uma caixa de diálogo que permite definir as preferências
para itens como fonte, cor, espaçamento da tecla Tab, e assim por diante.
Page Setup... Abre uma caixa de diálogo que permite formatar a saída impressa.
Print... Abre uma caixa de diálogo que permite imprimir toda a janela de Co-
mandos.
Print Selection... Abre uma caixa de diálogo que permite imprimir partes sele-
cionadas da janela de Comandos.
File List Contém uma lista dos arquivos utilizados anteriormente, em ordem de
utilização mais recente.
Exit MATLAB Fecha o MATLAB.
A opção New no menu File permite selecionar o tipo de arquivo M a ser criado:
um arquivo M em branco, um arquivo M do tipo função ou um arquivo M do tipo
classe. Selecione arquivo M em branco para criar um arquivo M do tipo discutido na
Seção 1.4. Arquivos M do tipo função são discutidos no Capítulo 3, mas arquivos M
do tipo classe estão além do escopo deste texto.
O menu Edit contém os seguintes itens.

O Menu Edit no MATLAB 7


Undo Reverte a operação de edição anterior.
Redo Reverte a operação Undo anterior.
Cut Remove o texto selecionado e o armazena para colagem posterior.
Copy Copia o texto selecionado para colagem posterior, sem removê-lo.
Paste Insere qualquer texto do clipboard na localização atual do cursor.
Paste to Workspace... Insere os conteúdos do clipboard no espaço de trabalho
(workspace) como uma ou mais variáveis.
Select All Seleciona todo o texto na janela de Comandos.
Delete Apaga a variável selecionada no Navegador do Espaço de Trabalho
(Browser Workspace).

† N. de T.: GUI é a sigla de Graphical User Interface.


18 Introdução ao MATLAB para Engenheiros

Find... Encontra e substitui frases.


Find Files... Encontra arquivos.
Clear Command Window Remove todo o texto da janela de Comandos.
Clear Command History Remove todo o texto da janela de Histórico de
Comandos.
Clear Workspace Remove os valores de todas as variáveis do Espaço de
Trabalho.
Você pode utilizar Copy e Paste para copiar e colar comandos que aparecem na ja-
nela de Comandos. Entretanto, uma maneira mais fácil é utilizar a tecla direcional
superior para percorrer a lista de comandos anteriores e pressionar Enter quando
você vir o comando que deseja recuperar.
Utilize o menu Debug para acessar o Debugador, que é discutido no Capítulo
4. Utilize o menu Desktop para controlar a configuração da Área de Trabalho e para
exibir barras de ferramentas. O menu Window apresenta um ou mais itens, depen-
dendo do que você tiver feito até então na sua sessão. Clique no nome de uma janela
que aparece no menu para abri-la. Por exemplo, se você tiver plotado uma figura e
não tiver fechado a sua janela, a janela da plotagem aparecerá nesse menu como Fi-
gure 1. Entretanto, há outras maneiras de ir de uma janela para outra (tal como pres-
sionando as teclas Alt e Tab simultaneamente se as janelas não estiverem ancoradas).
O menu View aparecerá à direita do menu Edit se você tiver selecionado um
arquivo em uma pasta na janela de Diretório Atual. Esse menu fornece informação
sobre o arquivo selecionado.
A barra de ferramentas, que está abaixo da barra de menus, fornece botões
como atalhos para algumas das funcionalidades nos menus. Clicar no botão é equiva-
lente a clicar no menu e em seguida clicar no item do menu; assim, o botão elimina
um clique do mouse. Os primeiros sete botões correspondem a New, M-File, Open
File, Cut, Copy, Paste, Undo e Redo. O oitavo botão ativa o Simulink. O nono botão
ativa o GUIDE Quick Start, que é utilizado para criar e editar interfaces gráficas do
usuário (GUIs). O décimo botão ativa o Profiler, que pode ser utilizado para otimizar
o desempenho do programa. O décimo primeiro botão (com um ponto de interroga-
ção) acessa o Sistema de Ajuda (Help System).
Abaixo da barra de ferramentas está um botão que acessa a ajuda para adicionar
atalhos à barra de ferramentas e um botão que acessa uma lista das funcionalidades
adicionadas desde o lançamento (release) anterior.

1.3 Arranjos, arquivos e plotagens


Esta sessão introduz arranjos, que são os blocos de construção básicos no MATLAB,
e mostra como manipular arquivos e gerar plotagens.

Arranjos
Ao longo do texto, discutiremos centenas de funções no MATLAB. Por exemplo,
para calcular sen x, em que x tem o seu valor em radianos, você deve digitar sin(x).
Para calcular cos x, digite cos(x). A função exponencial ex é calculada a partir
de exp(x). O logaritmo natural, ln x, é calculado digitando-se log(x) (note a
Capítulo 1 ■ Visão geral do MATLAB® 19

diferença entre o texto matemático, ln, e a sintaxe do MATLAB, log). Você calcula
o logaritmo na base 10 digitando log10(x). O inverso do seno, ou o arco seno, é
obtido ao se digitar asin(x). A resposta é retornada em radianos, não em graus. A
função asind(x) retorna o valor em graus.
Um dos pontos fortes do MATLAB é a sua habilidade em manipular coleções
ARRANJO de números, chamadas arranjos, como se elas fossem uma única variável. Um arranjo
numérico é uma coleção ordenada de números (um conjunto de números arranjados
em uma ordem específica). Um exemplo é uma variável do tipo arranjo que contém
os números 0, 4, 3 e 6, nesta ordem. Nós utilizamos colchetes para definir a variável x
que contém essa coleção digitando x = [0, 4, 3, 6]. Os elementos do arranjo
também podem ser separados por espaços, mas vírgulas são preferidas para melhorar
a legibilidade e evitar erros. Note que a variável y definida como y = [6, 3, 4,
0] não é igual a x, porque a ordem dos números é diferente. A razão para se utilizar
colchetes é a seguinte: se você digitasse x = 0, 4, 3, 6, o MATLAB iria tratar
as quatro entradas separadamente e atribuiria o valor 0 a x. Pode-se considerar que
arranjo [0, 4, 3, 6] possui uma linha e quatro colunas, e é um subcaso de uma matriz,
que possui múltiplas linhas e colunas. Como veremos mais adiante, as matrizes tam-
bém são indicadas por colchetes.
Podemos somar os dois arranjos x e y para produzir outro arranjo z digitando a
linha z = x + y. Para calcular z, o MATLAB soma todos os números correspon-
dentes em x e y. O arranjo resultante z contém os números 6, 7, 7, 6.
Você não precisa digitar todos os números em um arranjo se eles forem igual-
mente espaçados. Em vez disso, você digita o primeiro número e o último número,
com o espaçamento no meio, separados por dois pontos. Por exemplo, os números 0,
0,1, 0,2,..., 10 podem ser atribuídos a u digitando-se u = 0:0.1:10. Nesta aplica-
ção do operador dois pontos, os colchetes não precisam ser utilizados.
Para calcular w = 5 sen u para u = 0, 0,1, 0,2,..., 10, a sessão é
>>u = 0:0.1:10;
>>w = 5*sin(u);
A linha w = 5*sin(u) calculou a fórmula w = 5 sin u 101 vezes, uma vez para
cada valor no arranjo u, para produzir um arranjo w que possui 101 valores.
Você pode ver todos os valores de u digitando u depois do prompt; ou, por
exemplo, você pode ver o sétimo valor digitando u(7). O número 7 é chamado de
ÍNDICE DE um índice de arranjo, porque ele aponta para um elemento em particular no arranjo.
ARRANJO

Você pode utilizar a função length para determinar quantos valores há em um


arranjo. Por exemplo, continue a sessão anterior da seguinte maneira:
20 Introdução ao MATLAB para Engenheiros

Arranjos exibidos na tela como uma única linha de números com mais de uma
coluna são chamados de arranjos linha. Você pode criar arranjos coluna, que pos-
suem mais de uma linha, utilizando ponto e vírgula para separar as linhas.

Raízes de polinômios
Podemos descrever um polinômio no MATLAB com um arranjo cujos elementos
são os coeficientes do polinômio, começando com o coeficiente da maior potência
de x. Por exemplo, o polinômio 4x3 - 8x2 + 7x - 5 seria representado pelo arranjo
[4,-8,7,-5]. As raízes do polinômio f(x) são os valores de x de tal modo que
f(x) = 0. As raízes de um polinômio podem ser calculadas com a função roots(a),
em que a é o arranjo de coeficientes do polinômio. O resultado é um arranjo coluna
que contém as raízes do polinômio. Por exemplo, para encontrar as raízes de x3 - 7x2
+ 40x - 34 = 0, a sessão é

As raízes são x = 1 e x = 3 ; 5i. Os dois comandos poderiam ter sido combinados no


comando único roots([1,-7,40,-34]).

Teste seus conhecimentos


T1.3-1 Utilize o MATLAB para determinar quantos elementos há no arranjo
cos(0):0.02:log10(100). Utilize o MATLAB para determinar o
vigésimo quinto elemento. (Resposta: 51 elementos e 1,48)
T1.3-2 Utilize o MATLAB para encontrar as raízes do polinômio 290 - 11x + 6x2
+ x3. (Resposta: x = -10, 2 ; 5i)

Funções internas
Vimos algumas funções internas do MATLAB, tais como as funções sqrt e sin. A
Tabela 1.3-1 lista algumas das funções internas do MATLAB comumente utilizadas.
O Capítulo 3 traz uma extensa abordagem sobre as funções internas. Os usuários do
MATLAB podem criar suas próprias funções para suas necessidades especiais. A
criação de funções definidas pelo usuário é abordada no Capítulo 3.

Trabalhando com arquivos


O MATLAB utiliza alguns tipos de arquivos que permitem salvar programas, dados
e resultados de sessões. Como veremos na Seção 1.4, arquivos de funções do MAT-
LAB e arquivos de programas são salvos com a extensão .m, e portanto são chamados
ARQUIVOS de arquivos M. Arquivos MAT possuem a extensão .mat e são utilizados para salvar
MAT os nomes e os valores das variáveis criadas durante uma sessão do MATLAB.
Capítulo 1 ■ Visão geral do MATLAB® 21

TABELA 1.3-1 Algumas funções matemáticas comumente utilizadas


Função Sintaxe do MATLAB†
ex exp(x)
sqrt(x)
ln x log(x)
log10 x log10(x)
cos x cos(x)
sen x sin(x)
tan x tan(x)
cos-1 x acos(x)
sen-1 x asin(x)
tan-1 x atan(x)
†As funções trigonométricas do MATLAB listadas aqui utilizam medidas em radianos. As funções trigonométricas que
terminam em d, tais como sind(x) e cosd(x), consideram o argumento x em graus. As funções inversas, como
atand(x), retornam valores em graus.

ARQUIVOS Como eles são arquivos ASCII†, os arquivos M podem ser criados utilizando-se
ASCII apenas um processador de textos. Os arquivos MAT são arquivos binários que geral-
mente podem ser lidos apenas pelo software que os criou. Eles contêm uma assinatu-
ra de máquina que permite que sejam transferidos entre tipos diferentes de máquina,
tais como MS Windows e Macintosh.
O terceiro tipo de arquivo que utilizaremos é um arquivo de dados, especifica-
ARQUIVO mente um arquivo de dados ASCII, isto é, criado de acordo com o formato ASCII.
DE DADOS Você pode precisar utilizar o MATLAB para analisar dados armazenados em um ar-
quivo gerado por um programa de planilhas, um processador de textos, um sistema
de aquisição de dados de um laboratório ou de um arquivo que você compartilha com
alguém.

Salvando e recuperando suas variáveis do espaço de trabalho (workspace)


Se você quiser continuar uma sessão do MATLAB posteriormente, você pode uti-
lizar os comandos save e load. Quando você digita save, o MATLAB salva as
variáveis do espaço de trabalho, isto é, os nomes das variáveis, seus tamanhos e seus
valores, em um arquivo binário chamado matlab.mat, o qual o MATLAB é capaz
de ler. Para recuperar suas variáveis do espaço de trabalho, digite load. Você pode
então continuar sua sessão como antes. Para salvar as variáveis do espaço de tra-
balho em outro arquivo chamado filename.mat, digite save filename. Para
carregar as variáveis do espaço de trabalho, digite load filename. Se o arquivo
MAT filename que foi salvo contiver as variáveis A, B, e C, então ao carregá-lo as
variáveis serão inseridas de volta no espaço de trabalho e sobrescreverão quaisquer
variáveis existentes que tenham os mesmos nomes.
Para salvar apenas algumas das suas variáveis, por exemplo, var1 e var2, no ar-
quivo filename.mat, digite save filename.mat var1 var2. Você não pre-
cisa digitar os nomes das variáveis para recuperá-las; apenas digite load filename.

† N. de T.: ASCII é um acrônimo para American Standard Code for Information Interchange, que em por-
tuguês significa “Código Padrão Americano para o Intercâmbio de Informação”.
22 Introdução ao MATLAB para Engenheiros

Diretórios e caminho É importante saber a localização dos arquivos que você


utiliza no MATLAB. Isso frequentemente causa problemas para os iniciantes. Su-
ponha que você utilize o MATLAB no seu computador em casa e salve um arquivo
em um disco removível, como será discutido mais adiante nesta seção. Se você levar
esse disco para utilizar com o MATLAB em outro computador, como, por exem-
plo, no laboratório de computadores da sua escola, você deve se certificar de que
o MATLAB sabe como encontrar os seus arquivos. Os arquivos são armazenados
em diretórios, também chamados de pastas. Os diretórios podem ter subdiretórios
abaixo deles. Por exemplo, suponha que o MATLAB foi instalado no drive c:, no
diretório c:\matlab. Então o diretório toolbox é um subdiretório abaixo do
diretório c:\matlab, e symbolic é um subdiretório abaixo do diretório tool-
CAMINHO box. O caminho informa ao MATLAB como encontrar um arquivo em particular.
Trabalhando com discos removíveis Na Seção 1.4 você aprenderá como criar e
salvar arquivos M. Suponha que você tenha salvado o arquivo problema1.m no
diretório \homework em um disco, o qual você insere no drive f:. O caminho
para esse arquivo é f:\homework. Como o MATLAB está normalmente instalado,
quando você digita problema1,
1. O MATLAB primeiro checa para ver se problema1 é uma variável e, se for,
exibe o seu valor.
2. Se não, o MATLAB então checa para ver se problema1 é um dos seus pró-
prios comandos; em caso afirmativo, ele o executa.
3. Se não, o MATLAB então procura no diretório atual por um arquivo com nome
problem1.m e executa problem1, se ele o encontra.
4. Se não, o MATLAB então busca por problem1.m em ordem nos diretórios
CAMINHO em seu caminho de busca e, caso o encontre, ele o executa.
DE BUSCA
Você pode exibir o caminho de busca do MATLAB digitando path. Se pro-
blem1 estiver apenas no disco e se o diretório f: não estiver no caminho de busca, o
MATLAB não encontrará o arquivo e gerará uma mensagem de erro, a não ser que
você diga a ele onde procurar. Você pode fazer isso digitando cd f:\homework,
que representa “mude o diretório para f:\homework”. Isso mudará o diretório atual
para f:\homework e forçará o MATLAB a procurar seu arquivo nesse diretório. A
sintaxe geral desse comando é cd dirname, em que dirname é o caminho com-
pleto até o diretório.
Uma alternativa a esse procedimento é copiar o seu arquivo para um diretório
no disco rígido que está no caminho de busca. Entretanto, há algumas armadilhas
com essa abordagem: (1) se você alterar o arquivo durante sua sessão, pode se esque-
cer de copiar o arquivo revisado de volta para o seu disco; (2) o disco rígido fica de-
sorganizado (esse é um problema em laboratórios de computadores públicos, e talvez
você não seja autorizado a salvar seu arquivo em um disco rígido); (3) o arquivo pode
ser apagado ou sobrescrito se o MATLAB for reinstalado; e (4) outra pessoa pode ter
acesso ao seu trabalho!
Você pode determinar o diretório atual (aquele em que o MATLAB procura por
seu arquivo) digitando pwd. Para ver uma lista de todos os arquivos no diretório atual,
digite dir. Para ver os arquivos no diretório dirname, digite dir dirname.
Capítulo 1 ■ Visão geral do MATLAB® 23

TABELA 1.3-2 Comandos de sistema, diretórios e arquivos


Command Descrição
addpath dirname Adiciona o diretório dirname ao caminho de busca.
cd dirname Muda o diretório atual para dirname.
dir Lista todos os arquivos no diretório atual.
dir dirname Lista todos os arquivos no diretório dirname.
path Exibe o caminho de busca do MATLAB.
pathtool Inicializa a ferramenta Set Path.
pwd Exibe o diretório atual.
rmpath dirname Remove o diretório dirname do caminho de busca.
what Lista os arquivos específicos do MATLAB encontrados no diretório de
trabalho atual. A maioria dos arquivos de dados e outros arquivos que não
são específicos do MATLAB não são listados. Utilize dir para obter uma
lista de todos os arquivos.
what dirname Lista os arquivos específicos do MATLAB no diretório dirname.
which item Exibe o nome do caminho de item se item for uma função ou arquivo.
Se item for uma variável, o comando o identifica como tal.

O comando what exibe uma lista dos arquivos específicos do MATLAB no di-
retório atual. O comando what dirname faz o mesmo para o diretório dirname.
Digite which item para exibir o nome do caminho completo da função item ou do
arquivo item (inclua a extensão do arquivo). Se item for uma variável, o MATLAB
o identifica como tal.
Você pode adicionar um diretório ao caminho de busca utilizando o comando
addpath. Para remover um diretório do caminho de busca, utilize o comando rm-
path. A ferramenta Set Path é uma interface gráfica para trabalhar com arquivos e
diretórios. Digite pathtool para iniciar o navegador. Para salvar as configurações
de caminho, clique em Save na ferramenta. Para restaurar o caminho de busca padrão,
clique em Default no navegador.
Esses comandos estão resumidos na Tabela 1.3-2.

Plotando com o MATLAB


O MATLAB possui muitas funções poderosas e fáceis de serem utilizadas para a
criação de plotagens de vários tipos diferentes, tais como plotagens retilíneas, logarít-
micas, de superfícies e de contornos. Como um exemplo simples, plotemos a função
y = 5 sen x para 0 … x … 7. Utilizaremos um incremento de 0,01 para gerar um número
grande de valores de x a fim de produzir uma curva suave. A função plot(x,y)
gera um gráfico com os valores de x no eixo horizontal (as abscissas) e com os valo-
res de y no eixo vertical (as ordenadas). A sessão é
>>x = 0:0.01:7;
>>y = 3*cos(2*x);
>>plot(x,y),xlabel(’x’),ylabel(’y’)

JANELA A plotagem aparece na tela em uma janela gráfica, com o nome Figure 1, como pode
GRÁFICA ser visto na Figura 1.3-1. A função xlabel insere o texto entre aspas simples como
um rótulo no eixo horizontal. A função ylabel faz o mesmo para o eixo vertical.
24 Introdução ao MATLAB para Engenheiros

FIGURA 1.3-1 Uma janela gráfica mostrando uma plotagem.

Quando o comando plot é executado com sucesso, uma janela gráfica aparece au-
tomaticamente. Se for desejada uma cópia da plotagem no disco rígido, ela pode ser
obtida clicando-se em Print no menu File na janela gráfica. A janela pode ser fechada
clicando-se em Close no menu File da janela gráfica; depois disso, o cursor retornará
ao prompt na janela de Comandos.
Outras funções de plotagens úteis são title e gtext, que inserem texto em
uma plotagem. Ambas aceitam texto entre parênteses e aspas simples, assim como a
função xlabel. A função title insere o texto na parte superior da plotagem; a
função gtext insere o texto no ponto da plotagem em que o cursor estiver localizado
quando você clicar com o botão esquerdo do mouse.
PLOTAGENS Você pode criar plotagens múltiplas, chamadas de plotagens sobrepostas, in-
SOBREPOSTAS cluindo outro conjunto ou outros conjuntos de valores na função plot. Por exemplo,
para plotar as funções e z = 4 sen 3x para 0 … x … 5 com o mesmo comando
plot, a sessão é
>>x = 0:0.01:5;
>>y = 2*sqrt(x);
>>z = 4*sin(3*x);
>>plot(x,y,x,z),xlabel(’x’),gtext(’y’),gtext(’z’)
Depois que a plotagem aparece na tela, o programa espera para que você posicione
o cursor e clique com o botão do mouse, uma vez para cada comando gtext utilizado.
Utilize a função gtext para inserir os rótulos y e z próximos às curvas apropriadas.
Você também pode distinguir as curvas umas das outras utilizando diferen-
tes tipos de linha para cada curva. Por exemplo, para plotar a curva z utilizando
Capítulo 1 ■ Visão geral do MATLAB® 25

uma linha tracejada, substitua a função plot(x,y,x,z) na sessão anterior por


plot(x,y,x,z, ’– –’). Outros tipos de linha podem ser utilizados, os quais
são discutidos no Capítulo 5.
Algumas vezes é útil ou necessário obter as coordenadas de um ponto em uma
curva plotada. A função ginput pode ser utilizada para esse fim. Insira essa função
ao final de todas as plotagens e de suas sentenças de formatação, de modo que a plo-
tagem já esteja em seu formato final. O comando [x,y] = ginput(n) captura n
pontos e retorna as coordenadas x e y nos vetores x e y, ambos com tamanho n. Posi-
cione o cursor e clique com o mouse. As coordenadas retornadas e as coordenadas da
plotagem se encontram na mesma escala.
Nos casos em que você estiver plotando dados, ao invés de funções, você de-
MARCADORES veria utilizar marcadores de dados para plotar cada ponto (a não ser que haja muitos
DE DADOS pontos). Para marcar cada ponto com o sinal de soma +, a sintaxe necessária para a
função plot é plot(x,y,’+’). Você pode conectar os pontos dos dados com
linhas, se desejar. Nesse caso, você deve plotar os dados duas vezes, uma vez com os
marcadores de dados e outra sem os marcadores.
Por exemplo, suponha que a variável independente dos dados seja x =
[15:2:23] e que os valores da variável dependente sejam y = [20, 50, 60,
90, 70]. Para plotar os dados com sinais de soma, utilize a seguinte sessão:
>>x = 15:2:23;
>>y = [20, 50, 60, 90, 70];
>>plot(x,y,’+’,x,y),xlabel(’x’),ylabel(’y’), grid
O comando grid insere linhas de grid na plotagem. Outros marcadores de dados
estão disponíveis, os quais são discutidos no Capítulo 5.
A Tabela 1.3-3 resume esses comandos de plotagem. Discutiremos outras fun-
ções de plotagem e o Editor de Plotagens (Plot Editor) no Capítulo 5.

TABELA 1.3-3 Alguns comandos de plotagem do MATLAB


Comando Descrição
[x,y] = ginput(n) Habilita o mouse a capturar n pontos de um plotagem, e retorna as
coordenadas x e y nos vetores x e y, ambos com tamanho n.
grid Insere linhas de grid na plotagem.
gtext(’text’) Habilita a inserção e o posicionamento de texto com o mouse.
plot(x,y) Gera uma plotagem do arranjo y versus o arranjo x em eixos lineares.
title(’text’) Insere texto de título na parte superior da plotagem.
xlabel(’text’) Adiciona um rótulo ao eixo horizontal (as abscissas).
ylabel(’text’) Adiciona um rótulo ao eixo vertical (as ordenadas).

Teste seus conhecimentos


T1.3-3 Utilize o MATLAB para plotar a função ao
longo do intervalo 0 … t … 5. Insira um título na plotagem e rotule adequa-
damente os eixos. A variável s representa a velocidade em pés por segundo;
a variável t representa o tempo em segundos.
26 Introdução ao MATLAB para Engenheiros

T1.3-4 Utilize o MATLAB para plotar as funções e z = 5e0,3x - 2x


ao longo do intervalo 0 … x … 1,5. Rotule adequadamente a plotagem e cada
curva. As variáveis y e z representam forças em newtons; a variável x repre-
senta a distância em metros.

Equações algébricas lineares


Você pode utilizar o operador divisão à esquerda (\) no MATLAB para solucionar
conjuntos de equações algébricas lineares. Por exemplo, considere o conjunto

Para solucionar tais conjuntos no MATLAB, você deve criar dois arranjos; nós os
denominaremos A e B. O número de linhas de A é igual ao número de equações e o
número de colunas é igual ao número de variáveis. As linhas de A devem conter os
coeficientes de x, y e z, nesta ordem. Nesse exemplo, a primeira linha de A deve ser 6,
12, 4; a segunda linha deve ser 7, -2, 3; e a terceira linha deve ser 2, 8, -9. O arranjo
B contém as constantes que estão no lado direito da equação; ele tem uma única co-
luna e tantas linhas quantas forem as equações. Nesse exemplo, a primeira linha de B
é 70, a segunda é 5 e a terceira é 64. A solução é obtida digitando-se A\B. A sessão é

A solução é x = 3, y = 5 e z = -2.
Esse método funciona bem quando o conjunto de equações possui uma única
solução. Para aprender a lidar com problemas que tenham mais de uma solução (ou
talvez nenhuma solução!), veja o Capítulo 8.

Teste seus conhecimentos


T1.3-5 Utilize o MATLAB para resolver o seguinte conjunto de equações:

(Resposta: x = 2, y = -5, z = 10)


Capítulo 1 ■ Visão geral do MATLAB® 27

1.4 Arquivos de script (script files) e o Editor/Debugador


(Editor/Debugger)
Você pode realizar operações no MATLAB de duas maneiras:
1. No modo interativo, em que todos os comandos são inseridos diretamente na
janela de Comandos.
2. Rodando um programa no MATLAB armazenado em um arquivo de script
(script file). Esse tipo de arquivo contém comandos do MATLAB, portanto,
rodá-lo é equivalente a digitar todos esses comandos, um por vez, no prompt
da janela de Comandos. Você pode rodar o arquivo digitando o seu nome no
prompt da janela de Comandos.
Quando o problema a ser solucionado necessita de muitos comandos, de um conjunto
repetido de comandos ou envolve arranjos com muitos elementos, o modo interativo é
inconveniente. Felizmente, o MATLAB permite a você escrever os seus próprios pro-
gramas para evitar essa dificuldade. Você escreve e salva programas no MATLAB em
arquivos M (M-files), os quais possuem a extensão .m; por exemplo, program1.m.
ARQUIVO O MATLAB utiliza dois tipos de arquivos M: arquivos de script e arquivos de
DE SCRIPT funções. Você pode utilizar o Editor/Debugador (Editor/Debugger) interno do MAT-
LAB para criar arquivos M. Uma vez que eles contêm comandos, os arquivos de
script são algumas vezes chamados de arquivos de comandos. Arquivos de funções
são discutidos no Capítulo 3.

Criando e utilizando um arquivo de script


COMENTÁRIO O símbolo % designa um comentário, que não é executado pelo MATLAB. Comen-
tários são utilizados principalmente em arquivos de script com o propósito de docu-
mentar o arquivo. O símbolo de comentário pode ser inserido em qualquer lugar da
linha. O MATLAB ignora tudo que estiver escrito à direita do símbolo %. Por exem-
plo, considere a seguinte sessão.

Note que a parte da linha antes do sinal % é executada para calcular x.


Aqui está um exemplo simples que ilustra como criar, salvar e rodar um arquivo
de script, utilizando o Editor/Debugador interno do MATLAB. Entretanto, você pode
utilizar outro editor de textos para criar o arquivo. O arquivo de amostra é apresen-
tado a seguir. Ele calcula o cosseno da raiz quadrada de alguns números e exibe o
resultado na tela.
28 Introdução ao MATLAB para Engenheiros

FIGURA 1.4-1 A janela de comandos do MATLAB com o Editor/Debugador aberto.

Para criar esse novo arquivo M na janela de Comandos, selecione New no menu
File e clique em Blank M-File. Você verá então uma nova janela de edição. Essa é a
janela do Editor/Debugador, mostrada na Figura 1.4-1. Digite no arquivo conforme
está na figura. Você pode utilizar o teclado e o menu Edit no Editor/Debugador como
o faria na maioria dos processadores de texto para criar e editar um arquivo. Quan-
do tiver terminado, selecione Save no menu File do Editor/Debugador. Na caixa de
diálogo que aparece, substitua o nome padrão dado (normalmente Untitled) pelo
nome Example_1 e clique em Save. O Editor/Debugador automaticamente incluirá
a extensão .m e salvará o arquivo no diretório atual do MATLAB, que, por enquanto,
consideraremos que está no disco rígido.
Uma vez que o arquivo foi salvo, digite na janela de Comandos do MATLAB
o nome do arquivo de script Example_1 para executar o programa. Você verá o
resultado exibido na janela de Comandos. A Figura 1.4-1 mostra uma tela contendo
a exibição resultante da janela de Comandos e o Editor/Debugador aberto para exibir
o arquivo de script.

Utilização eficaz de arquivos de script


Crie arquivos de script para evitar a necessidade de redigitar procedimentos longos e
comumente utilizados. Aqui estão alguns outros pontos que você deve ter em mente
quando utilizar arquivos de script:
1. O nome de um arquivo de script deve seguir a convenção do MATLAB para
nomeação de variáveis.
Capítulo 1 ■ Visão geral do MATLAB® 29

2. Lembre-se de que, quando você digitar o nome de uma variável no prompt da


janela de Comandos, o MATLAB exibirá o valor daquela variável. Assim, não
dê a um arquivo de script o mesmo nome de uma variável que ele calcula, por-
que o MATLAB não será capaz de executar o arquivo de script mais de uma
vez, a não ser que você apague a variável.
3. Não dê a um arquivo de script o mesmo nome de um comando ou fun-
ção do MATLAB. Você pode checar se o comando, função ou nome do ar-
quivo já existe utilizando o comando exist. Por exemplo, para ver se uma
variável example1 já existe, digite exist(’example1’); será re-
tornado 0 se a variável não existir, ou 1 se existir. Para ver se um arquivo M
example1.m já existe, digite exist(’example.m’,’file’) antes
de criar o arquivo; será retornado 0 se o arquivo não existir, ou 2 se ele exis-
tir. Finalmente, para ver se uma função interna example1 já existe, digite
exist(’example1’,’builtin’) antes de criar o arquivo; será retorna-
do 0 se a função interna não existir, ou 5 se ela existir.
Note que nem todas as funções fornecidas pelo MATLAB são funções in-
ternas. Por exemplo, a função mean.m é fornecida mas não é uma função inter-
na. O comando exist(’mean.m’,’file’) retornará 2, mas o comando
exist(’mean’,’builtin’) retornará 0. Você pode pensar nas funções inter-
nas como primitivas que formam a base para outras funções do MATLAB. Você não
pode visualizar o arquivo inteiro de uma função interna em um editor de textos, ape-
nas os comentários.

Debugando arquivos de script


DEBUGANDO Debugar um programa é o processo de encontrar e remover os “bugs”, ou erros. Tais
erros normalmente estão em uma das seguintes categorias.
1. Erros de sintaxe, como a omissão de parênteses ou vírgulas ou a digitação in-
correta do nome de um comando. O MATLAB normalmente detecta os erros
mais óbvios e exibe uma mensagem descrevendo o erro e a sua localização.
2. Erros devido a um procedimento matemático incorreto, chamados de erros em
tempo de execução. Eles não ocorrem necessariamente toda vez que o programa
é executado; sua ocorrência em geral depende dos dados de entrada. Um exem-
plo comum é a divisão por zero.
Para localizar um erro, tente o seguinte:
1. Sempre teste seu programa com uma versão simples do problema, cuja resposta
pode ser checada por cálculos à mão.
2. Exiba alguns cálculos intermediários removendo o sinal de ponto e vírgula no
final de sentenças.
3. Utilize as funcionalidades próprias para debugar do Editor/Debugador, que se-
rão introduzidas no Capítulo 4. Entretanto, uma vantagem do MATLAB é que
ele requer programas relativamente simples para realizar muitos tipos de tare-
fas. Deste modo, você provavelmente não precisará utilizar o Debugador para
os problemas encontrados neste texto.
30 Introdução ao MATLAB para Engenheiros

Estilo de programação
Comentários podem ser inseridos em qualquer lugar no arquivo de script. Entretanto,
uma vez que a primeira linha de comentário antes de qualquer sentença executável
é a linha procurada pelo comando lookfor, que será discutido mais adiante neste
capítulo, insira palavras-chave que descrevem o arquivo de script nessa primeira linha
(chamada de linha H1). Uma estrutura sugerida para um arquivo de script é a seguinte.
1. Seção de comentários Nesta seção, insira sentenças de comentário que contenham
a. O nome do programa e algumas palavras-chave na primeira linha.
b. A data de criação e o nome do criador na segunda linha.
c. As definições dos nomes de variável para cada entrada e saída. Divida esta
seção em pelo menos duas subseções, uma para dados de entrada e outra para
dados de saída. Uma terceira seção opcional pode incluir definições de va-
riáveis utilizadas nos cálculos. Lembre-se de incluir as unidades de medida
para todas as variáveis de entrada e de saída!
d. O nome de toda função definida pelo usuário chamada pelo programa.
2. Seção de entrada Nesta seção, insira os dados de entrada e/ou as funções de
entrada que possibilitem a inserção de dados. Inclua comentários onde for apro-
priado para documentação.
3. Seção de cálculos Insira os cálculos nesta seção. Inclua comentários onde for
apropriado para documentação.
4. Seção de saída Nesta seção, insira as funções necessárias para apresentar as saí-
das na forma desejada. Por exemplo, esta seção pode conter funções para exibir
a saída na tela. Inclua comentários onde for apropriado para documentação.
Os programas neste texto frequentemente omitem alguns desses elementos para
economizar espaço. Aqui, a discussão do texto associada com os programas fornece
a documentação necessária.

Controlando entradas e saídas


O MATLAB fornece alguns comandos úteis para a obtenção de entradas do usuário
e para a formatação da saída (os resultados obtidos pela execução dos comandos do
MATLAB). A Tabela 1.4-1 resume esses comandos.
A função disp (abreviação de “display”) pode ser utilizada para exibir o valor
de uma variável, mas não o seu nome. A sua sintaxe é disp(A), em que A representa
o nome de uma variável no MATLAB. A função disp também pode exibir texto,
como uma mensagem para o usuário. Você deve escrever o texto entre aspas simples.
Por exemplo, o comando disp(’A velocidade prevista é:’) faz com
que essa mensagem apareça na tela. Este comando pode ser utilizado com a primeira
forma da função disp em um arquivo de script da seguinte maneira (considerando
que o valor de Velocidade é 63):
disp(’A velocidade prevista é:’)
disp(velocidade)
Quando o arquivo é rodado, essas linhas produzem o seguinte na tela:
Capítulo 1 ■ Visão geral do MATLAB® 31

TABELA 1.4-1 Comandos de entrada/saída


Comando Descrição
disp(A) Exibe o conteúdo, mas não o nome, do arranjo A.
disp(’text’) Exibe o texto entre aspas simples.
format Controla o formato de exibição da saída na tela (ver Tabela 1.1-5).
x = input(’text’) Exibe o texto entre aspas simples na tela, espera pela entrada do
usuário a partir do teclado, e armazena o valor em x.
x = input(’text’,’s’) Exibe o texto entre aspas simples na tela, espera pela entrada
do usuário a partir do teclado, e armazena a entrada como uma
string em x.
k=menu(’title’,’option1’, Exibe um menu cujo título é a variável string ’title’ e cujas
’option2’,...) opções são ’option1’, ’option2’, e assim por diante.

A função input exibe o texto na tela, espera que o usuário entre com algo a
partir do teclado e então armazena a entrada na variável especificada. Por exemplo, o
comando x = input(’Por favor, entre com o valor de x:’) faz
com que a mensagem apareça na tela. Se você digitar 5 e pressionar Enter, à variável
x será atribuído o valor 5.
VARIÁVEL Uma variável string é composta de texto (caracteres alfanuméricos). Se
STRING você quiser armazenar um texto de entrada como uma variável string, utilize a
outra forma do comando de entrada. Por exemplo, o comando Calendário =
input(’Entre com o dia da semana:’,’s’) induz a entrar com o dia
da semana. Se você digitar Quarta-feira, esse texto será armazenado na variável
string Calendario.
Utilize a função menu para gerar um menu de opções para a entrada do usuário.
Sua sintaxe é
k = menu(’title’,’option1’,’option2’,...)
A função exibe o menu cujo título é a variável string ’title’ e cujas opções são
as variáveis string ’option1’, ’option2’, e assim por diante. O valor retornado
de k é 1, 2,..., dependendo se você clicar no botão para ’option1’, ’option2’,
e assim por diante. Por exemplo, o seguinte script utiliza um menu para selecionar
um marcador de dados para um gráfico, presumindo que os arranjos x e y já existam.

Teste seus conhecimentos


T1.4-1 A área de superfície A de uma esfera depende do seu raio r da seguinte ma-
neira: A = 4r2. Escreva um arquivo de script que induza o usuário a entrar
com um valor de raio, calcule a área de superfície A e exiba o resultado.
32 Introdução ao MATLAB para Engenheiros

Exemplo de um arquivo de script


A seguir, apresentamos um exemplo simples de um arquivo de script que mostra o
estilo de programação apresentado nesta seção. A velocidade v de um objeto em que-
da livre (velocidade inicial nula, portanto) é dada como uma função do tempo t por ␷
= gt, em que g é a aceleração devido à gravidade. Nas unidades do SI, g = 9,81 m/s2.
Nós queremos calcular e plotar v como uma função de t para 0 … t … tfinal, em que tfinal
é o tempo final definido pelo usuário. O arquivo de script é o seguinte:

% Programa Velocidade_de_Queda.m: plota a velocidade de queda


% de um objeto.
% Criado em 01/03/2009, por W. Palm III
%
% Variável de entrada:
% tfinal = tempo final (em segundos)
%
% Variáveis de saída:
% t = arranjo de instantes de tempo em que a velocidade é
% calculada (segundos)
% v = arranjo de velocidades (metros/segundo)
%
% Valor de parâmetro:
g = 9.81; % Aceleração em unidades do SI
%
% Seção de entrada:
tfinal = input(’Entre com o tempo final em segundos:’);
%
% Seção de cálculo:
dt = tfinal/500;
t = 0:dt:tfinal; % Cria um arranjo com 501 valores de tempo.
v = g*t;
%
% Seção de saída:
plot(t,v) xlabel(’Tempo(segundos)’), ylabel(’Velocidade (metros/...
segundo)’)

Após criar esse arquivo, salve-o com o nome Velocidade_de_Queda.m.


Para rodá-lo, digite Velocidade_de_Queda (sem o .m) no prompt da janela de
Comandos. Você será então solicitado a entrar com um valor para tfinal. Depois de
entrar com o valor e pressionar Enter, você verá a plotagem na tela.

1.5 O Sistema de Ajuda do MATLAB


Para explorar as funcionalidades mais avançadas do MATLAB não abordadas neste
livro, você precisará saber como utilizar de modo eficaz o Sistema de Ajuda (Help
System) do MATLAB. O MATLAB apresenta as seguintes opções de obtenção de
ajuda para utilizar os produtos MathWorks:
Capítulo 1 ■ Visão geral do MATLAB® 33

1. Navegador de Funções (Function Browser) Fornece rápido acesso à documen-


tação das funções do MATLAB.
2. Navegador de Ajuda (Help Browser) Essa interface gráfica do usuário ajuda
você a encontrar informação e a visualizar a documentação online dos seus
produtos MathWorks.
3. Funções de Ajuda As funções help, lookfor e doc podem ser utilizadas
para exibir informações de sintaxe de uma função específica.
4. Outros recursos Para ajuda adicional, você pode rodar demos, entrar em contato
com o suporte técnico, procurar a documentação de outros produtos MathWorks,
ver uma lista de outros livros e participar de um grupo de discussão.

O Navegador de Funções (Function Browser)


Para ativar o Navegador de Funções, selecione-o no menu Help ou selecione o ícone
fx à esquerda do prompt. A Figura 1.5-1 mostra o menu que aparece após a categoria
Graphics ser selecionada. A subjanela mostrada é aberta quando a função plot é se-
lecionada. Desça a barra de rolagem para ver a documentação inteira da função plot.

O Navegador de Ajuda (Help Browser)


Para abrir o Navegador de Ajuda, selecione Product Help no menu Help, ou clique
no ponto de interrogação na barra de ferramentas. O Navegador de Ajuda contém
dois painéis: o painel do Navegador de Ajuda propriamente dito (Help Navigator) à
esquerda e o painel de Exibição à direita (ver Figura 1.5-2). O painel do Navegador
de Ajuda contém duas abas:
■ Contents: uma aba de listagem de conteúdos
■ Search Results: uma aba de busca que tem as funcionalidades de busca de fun-
ções e de busca de texto

FIGURA 1.5-1 O Navegador de Funções após a seleção de plot.


34 Introdução ao MATLAB para Engenheiros

FIGURA 1.5-2 O Navegador de Ajuda (Help Browser) do MATLAB.

Utilize as abas no painel do Navegador de Ajuda para encontrar a documentação. Você


visualiza a documentação no painel de Exibição. Para abrir o painel do Navegador de
Ajuda a partir do painel de Exibição, clique em Help Navigator no menu View.

Encontrando a documentação
A Figura 1.5-3 mostra o resultado de se clicar no sinal + próximo à palavra MATLAB
no painel do Navegador de Ajuda (Help Navigator). Um submenu aparece mostran-
do os vários tópicos de Ajuda para o MATLAB.

Visualizando a documentação
Após encontrar a documentação utilizando o painel do Navegador de Ajuda, visualize-
-a no painel de Exibição. Enquanto visualiza a página de documentação, você pode:
■ Mover a barra de rolagem para ver os conteúdos que não estão visíveis na ja-
nela.
■ Visualizar a página anterior ou posterior no documento clicando na seta para a
esquerda ou na seta para a direita na parte superior da página.
■ Visualizar o item anterior ou posterior no índice clicando na seta para a esquer-
da ou na seta para a direita na parte inferior da página.
■ Encontrar uma frase ou um termo específico ao digitar o termo na caixa Search
abaixo da barra de ferramentas do Navegador de Ajuda (Help Browser) e pres-
sionar a tecla Enter. O painel à esquerda exibirá então todas as páginas de Aju-
da e toda a documentação das funções que contém o termo específico.
Capítulo 1 ■ Visão geral do MATLAB® 35

FIGURA 1.5-3 O painel do Navegador de Ajuda (Help Navigator) mostrando os submenus


abaixo da categoria MATLAB.

Utilizando a aba de conteúdos


Clique na aba Contents no painel do Navegador de Ajuda para listar os títulos e o
índice para toda a documentação do produto. Para expandir a listagem de um item,
clique no sinal + à esquerda do item. Para suprimir a listagem de um item, clique no
sinal – à esquerda do item, ou clique duas vezes no item. Clique em um item para
selecioná-lo. A primeira página daquele documento aparecerá no painel de Exibição.
Um duplo clique em um item na listagem de conteúdos expande a listagem para aque-
le item e mostra a primeira página do documento no painel de Exibição.
Há um sincronismo entre o painel de Conteúdos (Contents) e o painel de Exi-
bição. Por padrão, o item selecionado no painel de Conteúdos sempre corresponde à
documentação que aparece no painel de Exibição. Portanto, a árvore de conteúdos é
sincronizada com o documento exibido.

Utilizando a aba de resultados de busca


Clique na aba Search Results no painel do Navegador de Ajuda para encontrar todos
os documentos do MATLAB que contêm uma frase específica. Digite a frase na caixa
“Search” e pressione Enter. A lista de documentos e a posição em que a frase é encon-
trada nesse documento aparecerão no painel do Navegador de Ajuda. Selecione uma
entrada na lista de resultados para visualizar esse documento no painel de Exibição.
A Figura 1.5-4 mostra os resultados obtidos após digitar-se plot na caixa
“Search”. O painel de Exibição mostra a documentação para a função plot (desça a
barra de rolagem para ver todo o conteúdo), e o painel do Navegador de Ajuda (Help
36 Introdução ao MATLAB para Engenheiros

Navigator) mostra os resultados de Busca de Documentação (Documentation Search


results) e os resultados de Busca de Demonstração (Demo Search results).

Funções de ajuda
Três funções do MATLAB podem ser utilizadas para acessar informação imediata
sobre funções do MATLAB.
A função help Esta é a maneira mais básica de se determinar a sintaxe e o com-
portamento de uma função específica. Por exemplo, ao digitar-se help log10 na
janela de Comandos, a seguinte exibição será produzida:

Note que a exibição descreve o que a função faz, alerta sobre resultados inespe-
rados se valores de argumento fora do padrão forem utilizados e direciona o usuário
a outras funções relacionadas.
Todas as funções do MATLAB estão organizadas em grupos lógicos, sobre os
quais a estrutura de diretórios do MATLAB está baseada. Por exemplo, todas as fun-
ções matemáticas elementares, tais como log10, residem no diretório elfun, e as
funções polinomiais residem no diretório polyfun. Para listar os nomes de todas as
funções nesse último diretório, com uma breve descrição de cada uma, digite help
polyfun. Se você não tem certeza de qual diretório buscar, digite help para obter
uma lista de todos os diretórios, com uma descrição da categoria de funções que cada
um representa.

FIGURA 1.5-4 Os resultados obtidos após digitar-se plot na caixa “Search”.


Capítulo 1 ■ Visão geral do MATLAB® 37

Digite helpwin topic para exibir o texto de Ajuda para topic dentro da
janela do Navegador de Ajuda (Help Browser). na Área de Trabalho. Links são cria-
dos para funções referenciadas na linha “See Also” do texto de Ajuda. Você também
pode acessar a janela de Ajuda selecionando a opção Help no menu Help, ou clican-
do no botão com ponto de interrogação na barra de ferramentas.
A função lookfor Esta função permite procurar funções com base em uma pa-
lavra-chave. Ela procura na primeira linha do texto de Ajuda, conhecida como linha
H1, de cada função do MATLAB, e retorna todas as linhas H1 que contêm a palavra-
-chave especificada. Por exemplo, o MATLAB não possui uma função denominada
sine, portanto, a resposta para o comando help sine será
sine.m not found
Entretanto, o comando lookfor sine produzirá mais de uma dúzia de correspon-
dências dependendo de quais toolboxes você tiver instalado. Por exemplo, você verá,
entre outros,

A partir dessa lista você pode encontrar o nome correto para a função seno. Note que
todas as palavras que contêm sine são retornadas, tais como cosine. Adicione –all
ao comando lookfor para que a função procure em todo o texto de Ajuda, e não
apenas na linha H1.
A função doc Se você digitar doc function, será exibida a documentação para
a função function do MATLAB. Se você digitar doc toolbox/function,
será exibida a documentação para a função no toolbox especificado. Digitando doc
toolbox, será exibida a página do mapa de rota da documentação para o toolbox
especificado.

A página da MathWorks
Se o seu computador estiver conectado à Internet, você pode acessar The MathWorks,
Inc., a criadora do MATLAB. Você pode utilizar o correio eletrônico para fazer per-
guntas, dar sugestões e reportar possíveis bugs. Você também pode utilizar um me-
canismo de busca de soluções para consultar uma base de dados atualizada com in-
formações de suporte técnico. O endereço da página é http://www.mathworks.com.
O sistema de Ajuda é muito poderoso e detalhado, por isso, nós apenas descre-
vemos o seu funcionamento básico. Você pode, e deve, explorar o sistema de Ajuda
para aprender a como utilizar suas funcionalidades com maiores detalhes.
A Tabela 1.5-1 resume as funções de Ajuda do MATLAB.
38 Introdução ao MATLAB para Engenheiros

TABELA 1.5-1 Funções de Ajuda do MATLAB


Função Utilização
doc Exibe a página inicial de documentação no Navegador de
Ajuda.
doc function Exibe a documentação para a função function do
MATLAB.
doc toolbox/function Exibe a documentação para a função no toolbox especificado.
doc toolbox Exibe a página do mapa de rota da documentação para o
toolbox especificado.
help Exibe uma lista com todos os diretórios de funções, com uma
descrição da categoria de funções que cada um representa.
help function Exibe na janela de Comandos uma descrição da função
function especificada.
helpwin topic Exibe o texto de Ajuda para topic dentro da janela do
Navegador de Ajuda.
lookfor topic Exibe na janela de Comandos uma breve descrição para todas
as funções cuja descrição inclui a palavra-chave topic
especificada.
type filename Exibe o nome do arquivo M filename sem abri-lo com um
editor de textos.

1.6 Metodologias para resolução de problemas


O projeto de novos dispositivos e sistemas de engenharia exige uma multiplicidade
de habilidades para a resolução de problemas (essa multiplicidade é o que evita que a
engenharia se torne chata!). Quando você está resolvendo um problema, é importante
planejar suas ações com antecedência. Você pode gastar muitas horas se mergulhar
no problema sem um plano de ataque. Aqui, apresentaremos um plano de ataque, ou
metodologia, para a resolução de problemas de engenharia em geral. Uma vez que a
resolução de problemas de engenharia muitas vezes exige uma solução computacio-
nal, e uma vez que os exemplos neste texto exigem que você desenvolva uma solução
computacional (utilizando o MATLAB), também discutiremos uma metodologia para
a resolução de problemas computacionais em particular.

Passos na resolução de problemas de engenharia


A Tabela 1.6-1 resume a metodologia que tem sido experimentada e testada pelos
profissionais de engenharia por muitos anos. Esses passos descrevem um procedi-
mento geral para a resolução de problemas. O ato de simplificar suficientemente o
MODELO problema e aplicar os princípios fundamentais apropriados é chamado de modela-
gem, e a descrição matemática resultante é chamada de modelo matemático, ou sim-
plesmente de modelo. Quando a modelagem estiver finalizada, precisamos resolver
o modelo matemático para obter a resposta necessária. Se o modelo for altamente
detalhado, talvez seja preciso resolvê-lo com um programa de computador. A maior
parte dos exemplos e exercícios neste texto exige que você desenvolva uma solução
computacional (utilizando o MATLAB) dos problemas para os quais o modelo já
tenha sido desenvolvido. Desse modo, não precisaremos utilizar sempre todos os pas-
Capítulo 1 ■ Visão geral do MATLAB® 39

TABELA 1.6-1 Passos na resolução de problemas de engenharia


1. Entenda o objetivo do problema.
2. Reúna as informações conhecidas. É possível que você descubra posteriormente que algumas delas
são desnecessárias.
3. Determine quais informações você precisa encontrar.
4. Simplifique o problema apenas o suficiente para obter a informação necessária. Tome nota de todas
as hipóteses que você fizer.
5. Desenhe um esboço e nomeie todas as variáveis necessárias.
6. Determine quais princípios fundamentais são aplicáveis.
7. Pense de maneira geral sobre a abordagem de resolução proposta e considere outras abordagens
antes de prosseguir com os detalhes.
8. Dê um nome a cada passo no processo de resolução.
9. Se você resolver o problema com um programa, verifique à mão os resultados utilizando uma
versão simples do problema. A verificação das dimensões a das unidades e a impressão dos
resultados dos passos intermediários na sequência de cálculos podem lhe auxiliar na descoberta
de erros.
10. Submeta sua resposta a uma “verificação de veracidade”. Ela faz sentido? Estime a faixa dos
resultados esperados e compare-a com a sua resposta. Não exprima a resposta com uma precisão
maior do que a que seria justificada por qualquer dos seguintes:
(a) A precisão da informação dada.
(b) As hipóteses simplificadoras.
(c) As exigências do problema.
Interprete os cálculos matemáticos. Se eles produzirem múltiplas respostas, não descarte nenhuma
delas sem considerar o que elas significam. Os cálculos podem estar tentando dizer a você alguma
coisa, e você pode perder uma oportunidade de descobrir algo mais sobre o problema.

sos mostrados na Tabela 1.6-1. Mais discussões sobre a resolução de problemas de


engenharia podem ser encontrados em [Eide, 2008].3

Exemplo de resolução de problema


Considere o seguinte exemplo simples dos passos envolvidos na resolução de pro-
blemas. Suponha que você trabalhe para uma companhia que produz embalagens.
Informam a você que um novo material de embalagens pode proteger um pacote
quando ele cai, dado que o pacote se choca com o chão com uma velocidade me-
nor do que 25 ft/s. O peso total do pacote é de 20 lb, e ele tem formato retangular
com dimensões de 12 por 12 por 8 in (polegadas). Você deve determinar se o ma-
terial da embalagem oferece proteção suficiente quando o pacote é transportado
por entregadores.
Os passos na resolução são os seguintes:
1. Entenda o objetivo do problema. A implicação aqui é que a embalagem se des-
tina a proteger o pacote contra quedas enquanto o responsável pela entrega a
estiver carregando. Ela não se destina a proteger o pacote caso ele caia de um

3
As referências aparecem no Apêndice D.
40 Introdução ao MATLAB para Engenheiros

caminhão de entregas em movimento. Na prática, você deve se certificar de que


a pessoa que deu a você essa atribuição está fazendo essa mesma suposição.
Falta de clareza na comunicação é a causa de muitos erros!
2. Reúna as informações conhecidas. As informações conhecidas são o peso e as
dimensões do pacote, e a máxima velocidade de impacto permitida.
3. Determine quais informações você precisa encontrar. Apesar de isso não ter
sido declarado explicitamente, você precisa determinar a altura máxima a partir
da qual o pacote pode cair sem ser danificado. Você precisa encontrar uma rela-
ção entre a velocidade de impacto e a altura a partir da qual o pacote cai.
4. Simplifique o problema apenas o suficiente para obter a informação neces-
sária. Tome nota de todas as hipóteses que você fizer. As seguintes hipóteses
simplificarão o problema e são consistentes com a definição do problema como
nós o entendemos:
a. O pacote cai a partir do repouso sem velocidade vertical ou horizontal.
b. O pacote não cai rolando pelo chão (como poderia acontecer se caísse de um
caminho em movimento). As dimensões dadas indicam que o pacote não é
fino e, portanto, não “flutuará” enquanto cai.
c. O efeito da resistência do ar é desprezível.
d. A maior altura a partir da qual o entregador pode deixar o pacote cair é de 6
ft (e assim ignoramos a existência de um entregador com altura de 8 ft!).
e. A aceleração g devido à gravidade é constante (porque a altura de queda é de
apenas 6 ft).
5. Desenhe um esboço e nomeie todas as variáveis necessárias. A Figura 1.6-1 é
um esboço da situação, mostrando a altura h do pacote, sua massa m, sua velo-
cidade v e a aceleração g devido à gravidade.
6. Determine quais princípios fundamentais são aplicáveis. Uma vez que esse pro-
blema envolve uma massa em movimento, podemos aplicar as leis de Newton.
Da física nós sabemos que as seguintes relações resultam das leis de Newton e
definem a cinemática básica de um objeto que cai de uma altura pequena sob a
influência da gravidade, sem resistência do ar ou velocidade inicial:
a. Altura versus tempo de impacto ti:
b. Velocidade de impacto vi versus tempo de impacto: ␷i = gti
c. Conservação da energia mecânica:
7. Pense de maneira geral sobre a abordagem de resolução proposta e considere
outras abordagens antes de prosseguir com os detalhes. Poderíamos resolver a
segunda equação para ti e substituir o resultado na primeira equação para obter
a relação entre h e vi. Essa abordagem também nos permitiria encontrar o tempo
de queda ti. Entretanto, este método envolve mais trabalho do que o necessário
porque não precisamos encontrar o valor de ti. A abordagem mais eficiente é
resolver a terceira relação para h.

(1.6-1)
Capítulo 1 ■ Visão geral do MATLAB® 41

Pacote

h
g

Chão
FIGURA 1.6-1 Esboço do problema da queda do pacote.

Note que a massa m é cancelada na equação. A matemática simplesmente nos


disse algo! Ela nos disse que a massa não afeta a relação entre a velocidade de
impacto e a altura da queda. Deste modo, não precisamos do peso do pacote
para resolver o problema.
8. Dê um nome a cada passo no processo de resolução. Este problema é tão sim-
ples que há apenas alguns passos a serem nomeados:
a. Princípio básico: conservação da energia mecânica

b. Determine o valor da constante g: g = 32,2 ft/s2


c. Utilize a informação dada para realizar o cálculo e arredondar o resultado de
maneira consistente com a precisão da informação dada:

Uma vez que este texto é sobre MATLAB, podemos utilizá-lo para fazer
esse cálculo simples. A sessão é:

9. Verifique as dimensões e unidades. Essa verificação é feita da seguinte maneira,


utilizando a Equação (1.6-1):

Portanto, as dimensões e unidades estão corretas.


42 Introdução ao MATLAB para Engenheiros

10. Submeta sua resposta a uma verificação de veracidade e de precisão. Se a al-


tura calculada for negativa, saberíamos que fizemos algo errado. Se ela fosse
muito grande, poderíamos desconfiar. Entretanto, a altura calculada de 9,7 ft
parece razoável.
Se tivéssemos utilizado um valor mais preciso para g, digamos g = 32,17,
então seria justificável arredondar o resultado para h = 9,71. Entretanto, devido
à necessidade de sermos conservadores aqui, nós provavelmente deveríamos ar-
redondar a resposta para baixo. Então provavelmente deveríamos reportar que o
pacote não será danificado se ele cair de uma altura menor do que 9 ft.
Os cálculos revelaram que a massa do pacote não afeta a resposta. Eles
não produziram múltiplas respostas aqui. Entretanto, muitos problemas envol-
vem a resolução de polinômios com mais de uma raiz; em tais casos, devemos
examinar cuidadosamente o significado de cada uma.

Passos para a obtenção de uma solução computacional


Se você utilizar um programa como o MATLAB para resolver um problema, siga
os passos mostrados na Tabela 1.6-2. Mais discussões sobre modelagem e soluções
computacionais podem ser encontradas em [Starfield, 1990] e [Jayaraman, 1991].
O MATLAB é útil para fazer muitos cálculos complicados e, então, gerar au-
tomaticamente um gráfico de resultados. O seguinte exemplo ilustra o procedimento
para desenvolver e testar um programa desse tipo.

TABELA 1.6-2 Passos para o desenvolvimento de uma solução computacional


1. Defina o problema de maneira concisa.
2. Especifique os dados a serem utilizados pelo programa. Isso é a entrada.
3. Especifique a informação a ser gerada pelo programa. Isso é a saída.
4. Trabalhe à mão ou com uma calculadora ao longo dos passos da solução; utilize um conjunto mais
simples de dados se necessário.
5. Escreva e rode o programa.
6. Compare a saída do programa com sua solução à mão.
7. Rode o programa com seus dados de entrada e submeta a saída a uma “verificação de veracidade”.
Ela faz sentido? Estime a faixa de valores esperados e compare-a com sua resposta.
8. Se você for utilizar o programa como uma ferramenta geral no futuro, faça testes rodando-o com
uma faixa de valores de dados razoáveis; submeta os resultados a uma verificação de veracidade.

EXEMPLO 1.6-1 Movimento de um pistão

A Figura 1.6.2a mostra um pistão, uma biela e uma manivela de um motor de combustão
interna. Quando ocorre a combustão, ela empurra o pistão para baixo. Esse movimento faz
com que a biela gire a manivela, o que faz com que a cambota rode. Queremos desenvolver
um programa em MATLAB para calcular e plotar a distância d percorrida pelo pistão como
uma função do ângulo A, para dados valores de comprimento L1 e L2. Tal plotagem ajudaria
os engenheiros projetistas do motor a selecionar valores apropriados de L1 e L2.
Capítulo 1 ■ Visão geral do MATLAB® 43

Foi dito a nós que valores típicos para esses comprimentos são L1 = 1 ft e L2 = 0,5
ft. Uma vez que o movimento do mecanismo é simétrico em torno de A = 0, precisamos
considerar apenas ângulos na faixa 0 … A … 180°. A Figura 1.6-2b mostra a geometria do
movimento. A partir dessa figura podemos utilizar trigonometria para escrever as seguin-
tes expressões para d:
d = L1 cos B + L2 cos A (1.6-2)
Desse modo, para determinar d, dados os comprimentos L1 e L2 e o ângulo A, precisamos
determinar primeiro o ângulo B. Podemos fazer isso utilizando a lei dos senos, da seguinte
maneira:

Resolva esta equação para B:

(1.6-3)

As Equações (1.6-2) e (1.6-3) constituem a base dos nossos cálculos. Desenvolva e teste
um programa em MATLAB para plotar d versus A.

Pistão

L1
L1
Biela B B
d

A A

Manivela L2
L2
Cambota

(a) (b)
FIGURA 1.6-2 Um pistão, uma biela e uma manivela de um motor de combustão interna.
44 Introdução ao MATLAB para Engenheiros

■ Solução
Aqui estão os passos da solução, seguindo aqueles listados na Tabela 1.6-2.
1. Defina o problema de maneira concisa. Utilize as Equações (1.6-2) e (1.6-3) para
calcular d; utilize valores suficientes de A na faixa 0 … A … 180° para gerar uma
plotagem adequada (suave).
2. Especifique a entrada a ser utilizada pelo programa. Os comprimentos L1 e L2 e o
ângulo A são dados.
3. Especifique a saída a ser gerada pelo programa. Uma plotagem de d versus A é a
saída desejada.
4. Trabalhe à mão ou com uma calculadora ao longo dos passos da solução. Você pode
ter cometido algum erro ao derivar as fórmulas trigonométricas, então você deveria
verificá-las para alguns casos. Você pode verificar esses erros utilizando uma régua
e um transferidor para fazer um desenho em escala do triângulo para alguns valores
do ângulo A; meça o comprimento d e compare-o com os valores calculados. Então
você pode utilizar esses resultados para verificar a saída do programa.
Quais valores de A você deveria utilizar para as verificações? Uma vez que
o triângulo “colapsa” quando A = 0° e A = 180°, você deveria verificar esse casos.
Os resultados são d = L1 - L2 para A = 0° e d = L1 + L2 para A = 180°. O caso A =
90° também é facilmente verificável à mão, utilizando o teorema de Pitágoras; para
esse caso d = . Você também deveria verificar um ângulo no quadrante
0° 6 A 6 90° e outro ângulo no quadrante 90° 6 A 6 180°. A tabela a seguir mostra
os resultados desses cálculos utilizando os valores típicos dados: L1 = 1, L2 = 0,5 ft.

A (graus) d (ft )
0 1,5
60 1,15
90 0,87
120 0,65
180 0,5

5. Escreva e rode o programa. A seguinte sessão do MATLAB utiliza os valores L1 = 1,


L2 = 0,5 ft:

Note a utilização do sinal traço inferior ( _ ) nos nomes de variáveis para tornar esses
nomes mais significativos. A variável A_d representa o ângulo A em graus. A linha 4
cria um arranjo de números 0, 0,5, 1, 1,5,..., 180. A linha 5 converte esses valores de
graus para radianos e atribui os valores à variável A_r. Essa conversão é necessária
porque as funções trigonométricas do MATLAB utilizam radianos, não graus (um
Capítulo 1 ■ Visão geral do MATLAB® 45

1,5

1,4

1,3

1,2

1,1
d (pés)

0,9

0,8

0,7

0,6

0,5
0 20 40 60 80 100 120 140 160 180
A (graus)
FIGURA 1.6-3 Plotagem do movimento do pistão versus o ângulo da manivela.

lapso comum é a utilização de valores em graus). O MATLAB fornece a constante


interna pi a ser usada para . A linha 6 utiliza a função inversa do seno asin.
O comando plot exige que os comandos de rótulo e de grid estejam na mes-
ma linha, separados por vírgulas. O operador de continuação de linha, chamado de
reticências, consiste em três pontos. Esse operador permite a você continuar digi-
tando a linha após pressionar Enter. De outra maneira, se você continuasse a digitar
sem utilizar as reticências, você não veria a linha inteira na tela. Note que o prompt
não fica visível quando você pressiona Enter após as reticências.
O comando grid insere linhas de grid na plotagem de modo que você possa ler
mais facilmente os valores no gráfico. A plotagem resultante aparece na Figura 1.6-3.
6. Compare a saída do programa com sua solução à mão. Leia os valores da plotagem
correspondentes aos valores de A dados na tabela precedente. Você pode utilizar a
função ginput para ler os valores a partir da plotagem. Os valores deveriam con-
cordar uns com os outros, e isso de fato acontece.
7. Rode o programa e realize uma verificação de veracidade na saída. Você poderia
suspeitar de um erro se a plotagem mostrasse mudanças abruptas ou descontinuida-
des. Entretanto, a plotagem é suave e mostra que a variável d se comporta conforme
o esperado. Ela decresce suavemente desde o seu máximo em A = 0° até o seu míni-
mo em A = 180°.
8. Teste o programa para uma faixa de valores de entrada razoáveis. Teste o programa
utilizando vários valores para L1 e L2 e examine as plotagens resultantes para ver se
elas são razoáveis. Algo que você deveria testar por conta própria é ver o que acon-
tece se L1 … L2. O mecanismo deveria trabalhar da mesma maneira como ele faz
quando L1 7 L2? O que sua intuição diz que você deve esperar do comportamento
do mecanismo? O que o programa prevê?
46 Introdução ao MATLAB para Engenheiros

1.7 Resumo
Agora você deve estar familiarizado com as operações básicas no MATLAB. Isso inclui:
■ Iniciar e sair do MATLAB
■ Calcular expressões matemáticas simples
■ Gerenciar variáveis
Você também deve estar familiarizado com o sistema de menus e de barra de ferra-
mentas do MATLAB.
Esse capítulo oferece uma visão geral dos vários tipos de problema que o MAT-
LAB é capaz de resolver. Isso inclui:
■ Utilização de arranjos e polinômios
■ Criação de plotagens
■ Criação de arquivos de script
A Tabela 1.7-1 é um guia para as tabelas deste capítulo. Os capítulos seguintes apre-
sentarão mais detalhes acerca desses tópicos.

TABELA 1.7-1 Guia para os comandos e recursos introduzidos neste capítulo


Operações aritméticas escalares Tabela 1.1-1
Ordem de precedência Tabela 1.1-2
Comandos para gerenciar a sessão de trabalho Tabela 1.1-3
Variáveis e constantes especiais Tabela 1.1-4
Formatos de exibição numérica Tabela 1.1-5
Algumas funções matemáticas comumente utilizadas Tabela 1.3-1
Comandos de sistema, diretórios e arquivos Tabela 1.3-2
Alguns comandos de plotagem do MATLAB Tabela 1.3-3
Comandos de entrada/saída Tabela 1.4-1
Funções de ajuda do MATLAB Tabela 1.5-1

Termos-chave
Área de Trabalho, 5 Escalar, 8
Argumento, 8 Espaço de trabalho, 11
Arquivo de dados, 21 Índice de arranjo, 19
Arquivo de script, 27 Janela de Comandos, 6
Arquivos ASCII, 21 Janela gráfica, 23
Arquivos MAT, 20 Marcadores de dados, 25
Arranjo, 19 Modelo, 39
Caminho de busca, 22 Plotagem sobreposta, 24
Caminho, 22 Precedência, 9
Comentário, 27 Sessão, 7
Debugando, 29 Variável string, 31
Diretório atual, 16 Variável, 7
Capítulo 1 ■ Visão geral do MATLAB® 47

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do texto.

Seção 1.1
1. Certifique-se de que você sabe como iniciar e finalizar uma sessão do MAT-
LAB. Utilize o MATLAB para realizar os cálculos a seguir, utilizando os valo-
res x = 10, y = 3. Verifique os resultados utilizando uma calculadora.
a. u = x + y b. v = xy c. w = x / y
d. z = sen x e. r = 8 sen y f. s = 5 sen (2y)
2.* Suponha que x = 2 e y = 5. Utilize o MATLAB para calcular o seguinte:

a. b. c. d.

3. Suponha que x = 3 e y = 4. Utilize o MATLAB para calcular o seguinte, e veri-


fique os resultados com uma calculadora:

a. b. 3x2 c. d.

4. Avalie as seguintes expressões no MATLAB para o valor de x dado. Verifique


suas respostas à mão.
a. b.

c. d.

e. y = 7(x1/3) + 4x0,58, x = 30
5. Considerando que as variáveis a, b, c, d e f são escalares, escreva sentenças no
MATLAB para calcular e exibir o resultado das expressões a seguir. Teste suas
sentenças para os valores a = 1,12, b = 2,34, c = 0,72, d = 0,81 e f = 19,83.

6. Utilize o MATLAB para calcular:

a. b.

c.

Verifique suas respostas com uma calculadora.


7. O volume de uma esfera é dado por V = 4r3/3, em que r é o raio. Utilize o
MATLAB para calcular o raio de uma esfera que tenha o volume 40% maior
do que o volume de uma esfera de raio igual a 4 ft.
48 Introdução ao MATLAB para Engenheiros

8.* Suponha que x = -7 - 5i e y = 4 + 3i. Utilize o MATLAB para calcular:


a. x + y b. xy c. x / y
9. Utilize o MATLAB para calcular o seguinte, e verifique suas respostas à mão:
a. (3 + 6i)(-7 - 9i) b.

c. d.

10. Avalie as expressões a seguir no MATLAB, para os valores x = 5 + 8i,


y = -6 + 7i. Verifique suas repostas à mão.
a. u = x + y b. v = xy c. w = x / y
d. z = ex e. f. s = xy2
11. A lei dos gases ideais fornece uma maneira de se estimar a pressão exercida
por um gás em um recipiente. A lei é

Estimativas mais precisas podem ser feitas com a equação de Van der Waals,

em que o termo nb é a correção para o volume das moléculas e o termo an2/V2 é


a correção para as atrações moleculares. Os valores de a e b dependem do tipo
de gás. A constante universal dos gases é R, a temperatura absoluta é T, o volu-
me do gás é V e o número de moléculas do gás é indicado por n. Se n = 1 mol
de um gás ideal fosse confinado a um volume de 22,41 L à temperatura de 0 °C
(273,2 K), ele exerceria uma pressão de 1 atm. Nessas unidades, R = 0,08206.
Para o gás cloro (Cl2), a = 6,49 e b = 0,0562. Compare a estimativa de
pressão dada pela lei dos gases ideais e pela equação de Van der Waals para
1 mol de Cl2 em 22,41 L à temperatura de 273,2 K. Qual é a principal causa
da diferença entre as duas estimativas de pressão, o volume molecular ou as
atrações moleculares?
12. A lei dos gases ideais relaciona a pressão P, o volume V, a temperatura absolu-
ta T e a quantidade de gás n. A lei é

em que R é a constante universal dos gases.


Um engenheiro deve projetar um grande tanque armazenador de gás na-
tural que seja expansível a fim de manter a pressão constante em 2,2 atm. Em
dezembro, quando a temperatura é de 4°F (-15°C), o volume de gás no tanque
é de 28500 ft3. Qual será o volume da mesma quantidade de gás em julho
quando a temperatura for de 88°F (31°C)? (Dica: Utilize o fato de que n, R e P
são constantes nesse problema. Note também que K = °C + 273,2.)
Capítulo 1 ■ Visão geral do MATLAB® 49

Seção 1.3
13. Suponha que x assuma os valores x = 1, 1,2, 1,4,..., 5. Utilize o MATLAB para
calcular o arranjo y que resulta da função y = 7 sen(4x). Utilize o MATLAB
para determinar quantos elementos há no arranjo y e o valor do terceiro ele-
mento no arranjo y.
14. Utilize o MATLAB para determinar quantos elementos há no arranjo
sin(-pi/2):0.05:cos(0). Utilize o MATLAB para determinar o déci-
mo elemento.
15. Utilize o MATLAB para calcular:
a. b.

c. d.

Verifique suas respostas com uma calculadora.


16. Utilize o MATLAB para calcular:
a. 6 tan-1(12,5) + 4 b. 5 tan [3 sen-1(13/5)]
c. 5 ln(7) d. 5 log(7)
Verifique suas respostas com uma calculadora.
17. A escala Richter é uma medida da intensidade de um terremoto. A energia E
(em joules) liberada pelo terremoto está relacionada com a magnitude M da
escala Richter da seguinte maneira:
E = 104,4101,5M
Quanta energia é liberada a mais em um terremoto de magnitude 7,6 do que em
um terremoto de magnitude 5,6?
18.* Utilize o MATLAB para encontrar as raízes de 13x3 + 182x2 - 184x + 2503 = 0.
19. Utilize o MATLAB para encontrar as raízes do polinômio 70x3 + 24x2 - 10x +
20.
20. Determine qual caminho de busca o MATLAB utiliza em seu computador. Se
você utiliza tanto um computador de laboratório quanto um computador em
casa, compare os dois caminhos de busca. Onde o MATLAB procurará por um
arquivo M criado pelo usuário em cada computador?
21. Utilize o MATLAB para plotar a função T = 6 ln t - 7e0,2t ao longo do interva-
lo 1 … t … 3. Insira um título na plotagem a rotule adequadamente os eixos. A
variável T representa a temperatura em graus Celsius; a variável t representa o
tempo em minutos.
22. Utilize o MATLAB para plotar as funções u = log10(60x + 1) e v = 3 cos(6x)
ao longo do intervalo 0 … x … 2. Rotule adequadamente a plotagem e cada uma
das curvas. As variáveis u e v representam velocidades em milhas por hora; a
variável x representa distância em milhas.
23. A série de Fourier é uma representação em série de funções periódicas em ter-
mos de senos e cossenos. A representação em série de Fourier da função
50 Introdução ao MATLAB para Engenheiros

Plote em um mesmo gráfico a função f(x) e sua representação em série, utili-


zando os quatro termos explicitados.
24. Uma cicloide é a curva descrita por um ponto P na circunferência de uma roda
circular de raio r rolando ao longo do eixo x. A curva é descrita em forma para-
métrica pelas equações

Utilize essas equações para plotar a cicloide de raio r = 10 in, com 0 …  … 4.

Seção 1.4
25. Uma cerca em torno de um campo tem a forma apresentada na Figura P25. Ela
consiste em um retângulo de comprimento L e largura W e um triângulo retân-
gulo que é simétrico em relação ao eixo horizontal do retângulo. Suponha que
a largura W é conhecida (em metros) e que a área fechada A também é conhe-
cida (em metros quadrados). Escreva um arquivo de script em MATLAB em
termos das variáveis dadas W e A para determinar o comprimento L necessário
para que a área fechada seja A. Determine também o comprimento total da cer-
ca. Teste o seu arquivo de script para os valores W = 6 m e A = 80 m2.

D
W

FIGURA P25

26. A figura de quatro lados mostrada na Figura P26 consiste em dois triângulos que
tem em comum o lado a. A lei dos cossenos para o triângulo superior afirma que

e uma equação similar pode ser escrita para o triângulo inferior. Desenvolva
um procedimento para calcular o comprimento do lado c2 se forem dados os
comprimentos dos lados b1, b2 e c1, e os ângulos A1 e A2 em graus. Escreva um
arquivo de script para implementar esse procedimento. Teste seu arquivo de
script utilizando os seguintes valores: b1 = 180 m, b2 = 165 m, c1 = 115 m, A1
= 120° e A2 = 100°.
Capítulo 1 ■ Visão geral do MATLAB® 51

b1
A1
C1 c1

C2 a
B1
b2 B2
A2

c2

FIGURA P26

Seção 1.5
27. Utilize o Sistema de Ajuda do MATLAB para encontrar informações sobre os
seguintes tópicos e símbolos: plot, label, cos, cosine, : e *.
28. Utilize o Sistema de Ajuda do MATLAB para determinar o que acontece se
você utilizar a função sqrt com um argumento negativo.
29. Utilize o Sistema de Ajuda do MATLAB para determinar o que acontece se
você utilizar a função exp com um argumento imaginário.

Seção 1.6
30. a. Com que velocidade inicial você deve arremessar uma bola verticalmente a
fim de que ela alcance uma altura de 20 ft? A bola pesa 1 lb. O que mudaria
na sua resposta se a bola pesasse 2 lb?
b. Suponha que você queira arremessar uma barra de aço verticalmente até
uma altura de 20 ft. A barra pesa 2 lb. Qual deve ser a velocidade inicial da
barra para que ela alcance essa altura? Discuta como o comprimento da bar-
ra interfere na sua resposta.
31. Considere o movimento do pistão discutido no Exemplo 1.6-1. A faixa de
excursão (stroke) do pistão é a distância total percorrida pelo pistão quando o
ângulo da manivela varia de 0° a 180°.
a. De que maneira o faixa de excursão do pistão depende de L1 e L2?
b. Suponha que L2 = 0,5 ft. Utilize o MATLAB para plotar o movimento do
pistão versus o ângulo da manivela para dois casos: L1 = 0,6 ft e L1 = 1,4 ft.
Compare cada uma dessas plotagens com a plotagem mostrada na Figura
1.6-3. Discuta como a forma da plotagem depende do valor de L1.
Foto: cortesia da Stratosphere Corporation.

Engenharia no Século XXI…


Construção Inovadora

T
emos a tendência de nos lembrar das grandes civilizações do passado, em par-
te, por seus trabalhos públicos, como as pirâmides do Egito e as catedrais
medievais da Europa, cujas criações foram tecnicamente desafiadoras. Tal-
vez esteja em nossa natureza “empurrar os limites”, e nós admiramos outros que
o fazem. O desafio da construção inovadora continua hoje. Conforme o espaço em
nossas cidades se torna mais escasso, muitos planejadores urbanos preferem construir
verticalmente ao invés de construir horizontalmente. Os prédios altos mais recentes
empurram os limites das nossas habilidades, não apenas em projeto estrutural, mas
também em áreas sobre as quais muitas vezes nem pensamos, como o projeto e a ope-
ração de elevadores, a aerodinâmica e as técnicas de construção. A foto acima mostra
a Stratosphere Tower, em Las Vegas, com 350 m de altura, a mais alta torre de obser-
vação dos Estados Unidos. Ela exigiu muitas técnicas inovadoras em sua construção.
A altura do guindaste de construção mostrado é de 120 m.
Projetistas de prédios, pontes e outras estruturas utilizarão novas tecnologias e
novos materiais, alguns baseados em projetos da natureza. Quilo por quilo, a seda da
aranha é mais forte do que o aço, e os engenheiros estruturais esperam utilizar cabos
de fibra de seda de aranha sintética para construir pontes suspensas resistentes a ter-
remotos. Estruturas inteligentes, que podem detectar falhas iminentes de rachadura
e fadiga, agora estão próximas da realidade, tanto quanto as estruturas ativas que
incorporam dispositivos poderosos para neutralizar a força dos ventos, assim como
outras forças. O toolbox Financial do MATLAB é útil para as avaliações financeiras
de grandes projetos de construção, e o toolbox Partial Differential Equation (toolbox
de Equações Diferenciais Parciais) pode ser utilizado para projeto estrutural. ■
2
Arranjos numéricos, de
células e de estruturas

Um dos pontos fortes do MATLAB é a sua capacidade de manipular coleções de


itens, chamadas de arranjos, como se elas fossem uma entidade única. A funciona-
lidade de manipulação de arranjos significa que os programas em MATLAB podem
ser muito pequenos.
O arranjo é o bloco de construção básico no MATLAB. As seguintes classes de
arranjos estão disponíveis no MATLAB 7:
Arranjo
numérico caractere lógico célula estrutura function handle Java

Até agora, utilizamos apenas arranjos numéricos, que são arranjos que contêm
apenas valores numéricos. Dentro da classe numérica estão as subclasses single
(precisão simples), double (precisão dupla), int8, int16 e int32 (números inteiros
com sinal constituídos de 8 bits, 16 bits e 32 bits), e uint8, uint16 e uint32 (números
inteiros sem sinal constituídos de 8 bits, 16 bits e 32 bits). Um arranjo de caracteres
é um arranjo que contêm strings. Os elementos de arranjos lógicos são “verdadei-
ros” ou “falsos”, os quais, apesar de serem representados pelos símbolos 1 e 0,
não são quantidades numéricas. Estudaremos os arranjos lógicos no Capítulo 4.
Os arranjos de células e de estruturas são abordados nas Seções 2.6 e 2.7. Function
handles são tratados no Capítulo 3. A classe Java não é abordada neste texto.
As primeiras quatro seções deste capítulo tratam de conceitos essenciais para
o entendimento do MATLAB, portanto, devem ser abordados. A Seção 2.5 trata de
aplicações a polinômios. As Seções 2.6 e 2.7 introduzem dois tipos de arranjos que
são úteis para algumas aplicações específicas.

2.1 Arranjos numéricos unidimensionais e bidimensionais


Podemos representar a localização de um ponto em um espaço tridimensional por
meio das três coordenadas Cartesianas x, y e z. Essas três coordenadas especificam
54 Introdução ao MATLAB para Engenheiros

um vetor p (em texto matemático nós frequentemente utilizamos letras em negrito


para representar vetores). O conjunto de vetores unitários i, j, k, cujos comprimentos
são iguais a 1 e cujas direções coincidem com os eixos x, y e z, respectivamente, po-
dem ser utilizados para expressar matematicamente um vetor da seguinte maneira: p
= xi + yj + zk. Os vetores unitários nos permitem associar as componentes x, y, z do
vetor com os eixos coordenados apropriados; portanto, quando escrevemos p = 5i +
7j + 2k, sabemos que as coordenadas x, y e z do vetor são 5, 7 e 2, respectivamente.
Também podemos escrever as componentes em uma ordem específica, separando-as
com um espaço, e identificado o grupo com colchetes, como visto a seguir: [5 7 2].
Desde que concordemos que as componentes do vetor serão escritas na ordem x, y,
z, podemos utilizar essa notação ao invés da notação com vetores unitários. De fato,
o MATLAB utiliza esse tipo de notação vetorial. O MATLAB nos permite separar as
componentes com vírgulas para melhorar a legibilidade, de modo que uma maneira
VETOR LINHA equivalente de escrever o vetor precedente é [5, 7, 2]. Esta expressão é um vetor li-
nha, que é uma disposição horizontal dos elementos.
VETOR Também podemos expressar o vetor como um vetor coluna, isto é, em uma dis-
COLUNA posição vertical. Um vetor pode ter apenas uma coluna, ou apenas uma linha. Assim,
o vetor é um arranjo unidimensional. Em geral, arranjos podem ter mais do que uma
coluna e mais do que uma linha.

Criando vetores no MATLAB


O conceito de um vetor pode ser generalizado para qualquer número de componen-
tes. No MATLAB um vetor é simplesmente uma lista de escalares, cuja ordem de
aparecimento na lista pode ser significativa, assim como é quando especificamos as
coordenadas xyz. Como outro exemplo, suponha que meçamos a temperatura de um
objeto uma vez por hora. Podemos representar as medições como um vetor, e o déci-
mo elemento na lista é a temperatura medida na décima hora.
Para criar um vetor linha no MATLAB, você simplesmente digita os elemen-
tos dentro de um par de colchetes, separando os elementos com um espaço ou uma
vírgula. Os colchetes são necessários para arranjos exceto nos casos em que você
utiliza o operador dois pontos para criar o arranjo. Nesse caso, você não deve utilizar
colchetes, mas pode utilizar parênteses opcionalmente. A escolha entre espaço ou
vírgula é uma questão de preferência pessoal, embora a chance de erro seja menor se
você utilizar vírgula (você também pode utilizar uma vírgula seguida de um espaço
para maximizar a legibilidade).
Para criar um vetor coluna, você pode separar os elementos utilizando ponto e
vírgula; alternativamente, você pode criar um vetor linha e então utilizar a notação de
TRANSPOSIÇÃO transposição (’), que converte um vetor linha em um vetor coluna, ou vice-versa. Por
exemplo:
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 55

A terceira maneira de criar um vetor coluna consiste em digitar colchete esquerdo


([) e o primeiro elemento, pressionar Enter, digitar o segundo elemento, pressionar
Enter, e assim por diante, até você digitar o último elemento seguido de um colchete
direito (]) e pressionar Enter. Na tela essa sequência se parecerá com

Note que o MATLAB exibe vetores linha horizontalmente e vetores coluna vertical-
mente.
Você pode criar vetores “anexando” um vetor ao outro. Por exemplo, para criar
o vetor linha u cujas primeiras três colunas contêm os valores de r = [2,4,20] e
cujas quarta, quinta e sexta colunas contêm os valores de w = [9,-6,3], digite u
= [r,w]. O resultado é o vetor u = [2,4,20,9,-6,3].
O operador dois pontos (:) facilmente gera um vetor grande de elementos regu-
larmente espaçados. Ao digitar
>>x = m:q:n
um vetor x de valores com espaçamento q é criado. O primeiro valor é m. O último
valor é n se m - n for um múltiplo inteiro de q. Se não, o último valor é menor do
que n. Por exemplo, ao se digitar x = 0:2:8, o vetor x = [0,2,4,6,8] é
criado, ao passo que ao se digitar x = 0:2:7, o vetor x = [0,2,4,6] é criado.
Para criar um vetor linha z que consiste nos valores de 5 a 8 em passos de 0,1, digite
z = 5:0.1:8. Se o incremento q for omitido, presume-se que ele é 1. Assim, y =
-3:2 produz o vetor y = [-3,-2,1,0,1,2].
O incremento q pode ser negativo. Nesse caso, m deve ser maior do que n. Por
exemplo, u = 10:-2:4 produz o vetor u = [10,8,6,4].
O comando linspace também cria um vetor linha com espaçamento linear,
mas em vez de especificar o incremento, você especifica o número de valores. A sin-
taxe é linspace(x1,x2,n), em que x1 e x2 são os limites inferior e superior
e n é o número de pontos. Por exemplo, linspace(5,8,31) é equivalente a
5:0.1:8. Se n for omitido, o espaçamento é igual a 1.
O comando logspace cria um arranjo de elementos espaçados logaritmica-
mente. Sua sintaxe é logspace(a,b,n), em que n é o número de pontos entre 10ª
e 10b. Por exemplo, x = logspace(-1,1,4) produz o vetor x = [0.1000,
0.4642, 2.1544, 10.000]. Se n for omitido, o número de pontos padrão é 50.
56 Introdução ao MATLAB para Engenheiros

Arranjos bidimensionais
Um arranjo que tenha linhas e colunas é um arranjo bidimensional, que é algumas
MATRIZ vezes chamado de matriz. Em texto matemático, se possível, vetores são indicados
por letras minúsculas em negrito e matrizes por letras maiúsculas em negrito. Um
exemplo de uma matriz que possui três linhas e duas colunas é:

TAMANHO Referimo-nos ao tamanho de um arranjo como sendo o número de linhas e o


DE ARRANJO número de colunas. Por exemplo, um arranjo com 3 linhas e 2 colunas é chamado de
arranjo 3 * 2. O número de linhas sempre aparece primeiro! Algumas vezes, repre-
sentamos uma matriz A como [aij] para indicar os seus elementos aij. Os subscritos
i e j, chamados de índices, indicam a linha e a coluna em que o elemento aij está
localizado. O número da linha deve sempre vir primeiro! Por exemplo, o elemento
a32 está na linha 3, coluna 2. Duas matrizes A e B são iguais se elas tiverem o mesmo
tamanho e se todos os seus elementos correspondentes forem iguais, isto é, aij = bij
para todo valor de i e j.

Criando matrizes
A maneira mais direta de criar uma matriz é digitando-a linha por linha, separando
os elementos em uma dada linha com espaços ou vírgulas e separando as linhas com
sinais de ponto e vírgula. Colchetes são necessários. Por exemplo, ao digitar
>>A = [2,4,10;16,3,7];
a seguinte matriz é criada:

Se a matriz tiver muitos elementos, você pode pressionar Enter e continuar di-
gitando na linha seguinte. O MATLAB saberá que você finalizou a entrada de valores
na matriz quando você digitar o colchete de fechamento (]).
Você pode anexar um vetor linha a outro vetor linha para criar tanto um terceiro
vetor linha quanto uma matriz (se ambos os vetores tiverem o mesmo número de co-
lunas). Note a diferença entre os resultados dados por [a,b] e [a;b] na seguinte
sessão:
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 57

Matrizes e a operação de transposição


A operação de transposição troca as linhas e as colunas. Em texto matemático, indica-
mos essa operação por meio do T sobrescrito. Para uma matriz A m * n com m linhas
e n colunas, AT (leia-se “A transposta”) é uma matriz n * m.

Se AT = A, a matriz A é simétrica. Note que a operação de transposição converte um


vetor linha em um vetor coluna, e vice-versa.
Se o arranjo contiver elementos complexos, o operador de transposição (’)
produzirá a transposta complexa conjugada; isto é, os elementos resultantes serão
os complexos conjugados dos elementos do arranjo original antes da transposição.
Como alternativa, você pode utilizar o operador de transposição com ponto (.’)
para transpor o arranjo sem produzir elementos complexos conjugados, por exem-
plo, A.’. Se todos os elementos forem reais, os operadores ’ e.’ produzem o mes-
mo resultado.

Endereçamento de arranjos
Os índices de um arranjo são os números da linha e da coluna de um elemento em
um arranjo, e são utilizados para localizar os seus elementos. Por exemplo, a notação
v(5) refere-se ao quinto elemento no vetor v, e A(2,3) refere-se ao elemento na
linha 2 e na coluna 3 da matriz A. O número da linha é sempre listado primeiro! Essa
notação permite corrigir entradas em um arranjo sem a necessidade de redigitar o
arranjo inteiro. Por exemplo, para mudar o elemento na linha 1 e na coluna 3 de uma
matriz D para 6, você pode digitar D(1,3) = 6.
O operador dois pontos seleciona elementos individuais, linhas, colunas ou “su-
barranjos” de arranjos. Aqui estão alguns exemplos:
■ v(:) representa todos os elementos da linha ou da coluna do vetor v.
■ v(2:5) representa os elementos de 2 a 5; isto é, v(2), v(3), v(4), v(5).
■ A(:,3) indica todos os elementos na terceira coluna da matriz A.
■ A(3,:) indica todos os elementos na terceira linha de A.
■ A(:,2:5) indica todos os elementos da segunda até a quinta coluna de A.
■ A(2:3,1:3) indica todos os elementos na segunda e na terceira linha que
também estão na primeira, na segunda e na terceira coluna.
■ v = A(:) cria um vetor v que consiste em todas as colunas de A empilhadas
da primeira até a última.
■ A(end,:) indica a última linha em A, e A(:,end) indica a última coluna.
Você pode utilizar índices de arranjo para extrair um arranjo menor a partir de outro
arranjo. Por exemplo, se você criar o arranjo B

(2.1-1)
58 Introdução ao MATLAB para Engenheiros

digitando
>>B = [2,4,10,13;16,3,7,18;8,4,9,25;3,12,15,17];
e digitar em seguida
>>C = B(2:3,1:3);
você pode produzir o seguinte arranjo:

ARRANJO O arranjo vazio não contém nenhum elemento e é expresso como []. Linhas
VAZIO e colunas podem ser deletadas igualando-se a linha ou a coluna selecionada ao ar-
ranjo vazio. Esse passo faz com que a matriz original seja colapsada em uma matriz
menor. Por exemplo, A(3,:) = [] deleta a terceira coluna em A, enquanto que
A(:,2:4) = [] deleta a segunda, a terceira e a quarta coluna em A. Finalmente,
A([1 4],:) = [] deleta a primeira e a quarta linha de A.
Suponhamos que seja digitado A = [6,9,4;1,5,7] para definir a seguinte
matriz:

Digitar A(1,5) = 3 transforma a matriz em

Uma vez que A não possui 5 colunas, o seu tamanho é expandido automaticamente
para aceitar o novo elemento na coluna 5. O MATLAB adiciona zeros para preencher
os elementos restantes.
O MATLAB não aceita índices negativos ou iguais a zero, mas você pode uti-
lizar incrementos negativos com o operador dois pontos. Por exemplo, a linha de
comando B = A(:,5:-1:1) inverte a ordenação das colunas de A e produz

Suponha que C = [-4,12,3,5,8]. Assim, a atribuição B(2,:) = C substitui


a segunda linha de B por C. Dessa forma, B se torna

Suponha que D = [3,8,5;4,-6,9]. Então, a atribuição E = D([2,2,2],:)


repete a segunda linha de D três vezes, produzindo
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 59

Utilizando clear para evitar erros


Você pode utilizar o comando clear para evitar reutilizar acidentalmente um arran-
jo que tenha a dimensão errada. Mesmo que você atribua novos valores para um ar-
ranjo, alguns valores anteriores podem ainda permanecer. Por exemplo, suponha que
você tenha criado anteriormente o arranjo 2 * 2 A = [2, 5; 6, 9] e em seguida
crie os arranjos 5 * 1 x = (1:5)’ e y = (2:6)’. Note que os parênteses são ne-
cessários aqui para a utilização do operador de transposição. Suponha que agora você
redefina A de modo que suas colunas sejam x e y. Então, se você digitar A(:,1) =
x para criar a primeira coluna, o MATLAB exibirá uma mensagem de erro dizendo
a você que o número de linhas em A e x deve ser o mesmo. O MATLAB pensa que A
deveria ser uma matriz 2 * 2 porque A foi definida anteriormente para ter apenas duas
colunas, e seus valores permanecem na memória. O comando clear apaga A e todas
as outras variáveis da memória e evita esse erro. Para apagar apenas A, digite clear
A antes de digitar A(:,1) = x.

Algumas funções de arranjos úteis


O MATLAB possuiu muitas funções para se trabalhar com arranjos (ver Tabela 2.1-1).
Aqui está um resumo de algumas das funções mais comumente utilizadas.
A função max(A) retorna o maior elemento em A se A for um vetor de ele-
mentos reais. Ela retorna um vetor linha contendo os maiores elementos em cada co-
luna se A for uma matriz de elementos reais. Se algum elemento de A for complexo,
max(A) retorna o elemento de maior magnitude. A sintaxe [x,k] = max(A)

TABELA 2.1-1 Sintaxe básica de funções de arranjo†


Comando Descrição
find(x) Cria um arranjo que contém os índices dos elementos não nulos do arranjo x.
[u,v,w] = find(A) Cria os arranjos u e v, que contêm os índices das linhas e das colunas dos elementos
não nulos da matriz A, e o arranjo w, que contém os valores dos elementos não
nulos. O arranjo w pode ser omitido.
length(A) Calcula o número de elementos de A se A for um vetor, ou o maior valor de m ou n
se A for uma matriz m * n.
linspace(a,b,n) Cria um vetor linha com n elementos regularmente espaçados entre a e b.
logspace(a,b,n) Cria um vetor linha com n elementos logaritmicamente espaçados entre a e b.
max(A) Retorna o maior valor em A se A for um vetor. Retorna um vetor linha contendo
os maiores elementos em cada coluna se A for uma matriz. Se algum elemento for
complexo, max(A) retorna os elementos de maior magnitude.
[x,k] = max(A) Similar a max(A), mas armazena os valores máximos no vetor linha x e seus índices
no vetor linha k.
min(A) O mesmo que max(A), mas retorna valores mínimos.
[x,k] = min(A) O mesmo que [x,k] = max(A), mas retorna valores mínimos.
norm(x) Calcula o comprimento geométrico do vetor
size(A) Retorna o vetor linha [m n] que contém as dimensões do arranjo A m * n.
sort(A) Rearranja em ordem crescente cada coluna do arranjo A e retorna um arranjo com as
mesmas dimensões de A.
sum(A) Soma os elementos em cada coluna do arranjo A e retorna um vetor linha que contém
as somas.
† Muitas dessas funções possuem sintaxe estendida. Veja o texto e o sistema de ajuda do MATLAB para mais discussões.
60 Introdução ao MATLAB para Engenheiros

é similar a max(A), mas ela armazena os valores máximos no vetor linha x e seus
índices no vetor linha k.
Se A e B tiverem o mesmo tamanho, C = max(A,B) cria um arranjo do mes-
mo tamanho que contém o máximo valor de cada localização correspondente em A e
B. Por exemplo, as seguintes matrizes A e B produzem a matriz C mostrada.

As funções min(A) e [x,k] = min(A) fazem o mesmo que as funções


max(A) e [x,k] = max(A), exceto pelo fato de retornarem valores mínimos.
A função size(A) retorna um vetor linha [m n] que contém as dimensões
do arranjo A m * n. A função length(A) calcula tanto o número de elementos
de A, se A for um vetor, quanto o maior valor entre m ou n, se A for uma matriz
m * n.
Por exemplo, se

então max(A) retorna o vetor [6,2]; min(A) retorna o vetor [-10,-5];


size(A) retorna [3,2]; e length(A) retorna 3.
A função sum(A) soma os elementos em cada coluna do arranjo A e retorna
um vetor linha que contêm as somas. A função sort(A) rearranja cada coluna do
arranjo A em ordem crescente e retorna um arranjo com as mesmas dimensões de A.
Se A tiver um ou mais elementos complexos, as funções max, min e sort
atuarão levando em consideração os valores absolutos dos elementos.
Por exemplo, se

então max(A) retorna o vetor [-10,-5] e min(A) retorna o vetor [3+4i,0] (a


magnitude de 3 + 4i é 5).
O rearranjo será feito em ordem decrescente se a forma sort(A,’descend’)
for utilizada. As funções min, max e sort podem ser utilizadas para atuar nas linhas
ao invés de atuar nas colunas via transposição do arranjo.
A sintaxe completa da função sort é sort(A, dim, mode), em que dim
seleciona a dimensão ao longo da qual o rearranjo deverá ser feito, e mode seleciona
a direção do rearranjo, ’ascend’ para ordem crescente e ’descend’ para ordem
decrescente. Então, por exemplo, sort(A,2,’descend’) rearranjaria os
elementos em cada linha de A em ordem decrescente.
O comando find(x) cria um arranjo que contém os índices dos elementos
não nulos do vetor x. A sintaxe [u,v,w] = find(A) cria os arranjos u e v, que
contêm os índices das linhas e das colunas dos elementos não nulos da matriz A, e o
arranjo w, que contém os elementos não nulos. O arranjo w pode ser omitido.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 61

Por exemplo, se

então a sessão
>>A = [6, 0, 3; 0, 4, 0; 2, 7, 0];
>>[u, v, w] = find(A)
retorna os vetores

Os vetores u e v contêm os índices (linha, coluna) dos valores não nulos que es-
tão listados em w. Por exemplo, a segunda posição em u e v contêm os índices (3, 1),
os quais especificam o elemento na linha 3 e na coluna 1 de A, cujo valor é 2.
Essas funções estão resumidas na Tabela 2.1-1.

Magnitude, comprimento e valor absoluto de um vetor


Os termos magnitude, comprimento e valor absoluto são utilizados muitas vezes
sem rigor na linguagem cotidiana, mas você deve ter em mente o significado preci-
so deles quando estiver utilizando o MATLAB. O comando length (comprimen-
to) do MATLAB retorna o número de elementos em um vetor. A magnitude de um
vetor x cujos elementos são os números reais x1, x2, . . . , xn é um escalar, dado
por , e é equivalente ao comprimento geométrico do vetor.
O valor absoluto de um vetor x é um vetor cujos elementos são os valores absolu-
tos dos elementos de x. Por exemplo, se x = [2,-4,5], seu comprimento é 3;
sua magnitude é e seu valor absoluto é [2,4,5]. O
comprimento, a magnitude e o valor absoluto de x são calculados por length(x),
norm(x) e abs(x), respectivamente.

Teste seus conhecimentos


T2.1-1 Para a matriz B, encontre o arranjo que resulta da operação [B;B’]. Uti-
lize o MATLAB para determinar qual número está na linha 5 e na coluna 3
do resultado.
62 Introdução ao MATLAB para Engenheiros

T2.1-2 Para a mesma matriz B, utilize o MATLAB para (a) encontrar o maior e o
menor elemento em B, juntamente com seus índices, e (b) ordenar cada co-
luna em B para criar uma nova matriz C.

O editor de variáveis (Variable Editor)


O Navegador do Espaço de Trabalho (Workspace Browser) do MATLAB fornece uma
interface gráfica para gerenciamento do espaço de trabalho (workspace). Você pode
utilizá-la para visualizar, salvar e apagar as variáveis do espaço de trabalho. Ela inclui
o Editor de Variáveis, uma interface gráfica para se trabalhar com variáveis, inclusive
com arranjos. Para abrir o Navegador do Espaço de Trabalho, digite workspace no
prompt da janela de Comandos. O navegador aparece como mostrado na Figura 2.1-1.
Tenha em mente que os menus da Área de Trabalho do MATLAB são sensíveis
a contexto. Assim, seus conteúdos se modificarão dependendo de quais funcionali-
dades do navegador e do Editor de Variáveis você estiver utilizando. O Navegador do
Espaço de Trabalho mostra o nome de cada variável, seu valor, o tamanho do arranjo
e a classe. O ícone de cada variável ilustra a classe a que ela pertence.
A partir do Navegador do Espaço de Trabalho você pode abrir o Editor de Va-
riáveis para visualizar e editar uma representação visual dos arranjos numéricos bi-
dimensionais, com as linhas e colunas numeradas. Para abrir o Editor de Variáveis a
partir do Navegador do Espaço de Trabalho, clique duas vezes na variável que você
deseja abrir. O Editor de Variáveis será aberto, exibindo os valores da variável sele-
cionada. O Editor de Variáveis aparece como mostrado na Figura 2.1-2.
Para abrir uma variável, você também pode clicar nela com o botão direito do
mouse e utilizar o menu Context. Repita os passos para abrir variáveis adicionais.
No Editor de Variáveis, acesse cada variável por meio de sua aba na parte inferior
da janela, ou utilize o menu Window. Você também pode abrir o Editor de Variáveis
diretamente a partir da janela de Comandos digitando open(’var’), em que var
é o nome da variável a ser editada. Uma vez que um arranjo esteja sendo exibido no
Editor de Variáveis, você pode modificar um de seus valores clicando no seu local,
digitando um novo valor e pressionando Enter.
Ao clicar com o botão direito em uma variável, aparecerá o menu Context, que
pode ser utilizado para editar, salvar ou apagar a variável selecionada, ou para plotar as
linhas da variável versus suas colunas (esse tipo de plotagem é discutido no Capítulo 5).

FIGURA 2.1-1 O Navegador do Espaço de Trabalho.


Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 63

FIGURA 2.1-2 O Editor de Variáveis.

Você também pode apagar uma variável a partir do Navegador do Espaço de


Trabalho: primeiro selecione-a no Navegador e depois clique em Delete no menu Edit.

2.2 Arranjos numéricos multidimensionais


O MATLAB suporta arranjos multidimensionais. Para mais informações, digite
help datatypes.
Um arranjo tridimensional tem dimensão m * n * q. Um arranjo quadridimen-
sional tem dimensão m * n * q * r, e assim por diante. As primeiras duas dimensões
são as linhas e as colunas, assim como em uma matriz. As dimensões mais altas são
chamadas de páginas. Você pode pensar em um arranjo tridimensional como camadas
de matrizes. A primeira camada é a página 1; a segunda camada é a página 2, e assim
por diante. Se A for um arranjo 3 * 3 * 2, você pode acessar o elemento na linha 3 e
na coluna 2 da página 2 digitando A(3,2,2). Para acessar toda a página 1, digite
A(:,:,1). Para acessar toda a página 2, digite A(:,:,2). O comando ndims
retorna o número de dimensões. Por exemplo, para o arranjo A descrito, ndims(A)
retorna o valor 3.
Você pode criar um arranjo multidimensional primeiramente criando um arran-
jo bidimensional e, em seguida, estendendo-o. Por exemplo, suponha que você queira
criar um arranjo tridimensional cujas primeiras páginas são:

Para tanto, primeiro crie a página 1 como uma matriz 3 * 3 e adicione a página 2 em
seguida, da seguinte maneira:
>>A = [4,6,1;5,8,0;3,9,2];
>>A(:,:,2) = [6,2,9;0,3,1;4,7,5];
64 Introdução ao MATLAB para Engenheiros

Outra maneira de produzir tal arranjo é utilizando o comando cat. Ao digitar


cat(n,A,B,C,...), um novo arranjo é criado por meio da concatenação dos ar-
ranjos A, B, C, e assim por diante, ao longo da dimensão n. Note que cat(1,A,B)
é o mesmo que [A;B], e cat(2,A,B) é o mesmo que [A,B]. Por exemplo, supo-
nha que tenhamos dois arranjos A e B, ambos 2 * 2:

Então, C = cat(3,A,B) produz um arranjo tridimensional composto de duas ca-


madas; a primeira camada é a matriz A, e a segunda camada é a matriz B. O elemento
C(m,n,p) está localizado na linha m, na coluna n, e na camada p. Assim, o elemen-
to C(2,1,1) é 9, e o elemento C(2,2,2) é 3.
Arranjos multidimensionais são úteis em problemas que envolvem muitos pa-
râmetros. Por exemplo, se tivermos dados sobre a distribuição de temperatura em um
objeto retangular, podemos representar as temperaturas como um arranjo T com três
dimensões.

2.3 Operações elemento a elemento


Para aumentar a magnitude de um vetor, multiplique-o por um escalar. Por exemplo,
para dobrar a magnitude do vetor r = [3,5,2], multiplique cada componente por
2 para obter [6,10,4]. No MATLAB, basta digitar v = 2*r.
A multiplicação de uma matriz A por um escalar w produz uma matriz cujos
elementos são os elementos de A multiplicados por w. Por exemplo:

Essa multiplicação é realizada no MATLAB da seguinte maneira:


>>A = [2,9;5,-7];
>>3*A
Assim, a multiplicação de um arranjo por um escalar é facilmente definida e
realizada. Entretanto, a multiplicação de dois arranjos não é tão direta. Na verdade,
o MATLAB utiliza dois tipos de multiplicação: (1) multiplicação de arranjos e (2)
multiplicação matricial. A divisão e a exponenciação também devem ser definidas cui-
dadosamente quando você lida com operações entre dois arranjos. O MATLAB possui
duas formas de operações aritméticas com arranjos. Nesta seção, introduziremos uma
OPERAÇÕES DE forma: as operações de arranjos, que também são chamadas de operações elemento a
ARRANJOS elemento. Na próxima sessão, introduziremos operações matriciais. Cada forma tem
suas próprias aplicações, as quais ilustraremos por meio de exemplos.

Adição e subtração de arranjos


A adição de arranjos pode ser realizada pela adição das componentes corresponden-
tes. Para somar os arranjos r = [3,5,2] e v = [2,-3,1], criando assim um
arranjo w, você deve digitar w = r + v. O resultado é w = [5,2,3].
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 65

Quando dois arranjos são de tamanhos idênticos, a sua soma ou diferença tam-
bém é do mesmo tamanho e é obtida por meio da adição ou da subtração de seus ele-
mentos correspondentes. Assim, C = A + B implica cij = aij + bij se os arranjos forem
matrizes. O arranjo C tem o mesmo tamanho de A e B. Por exemplo,

(2.3-1)

A subtração de arranjos é realizada de maneira similar.


A soma mostrada na Equação (2.3-1) é realizada no MATLAB da seguinte
maneira:

A adição e a subtração de arranjos são associativas e comutativas. Para a adição,


essas propriedades significam que
(A + B) + C = A + (B + C) (2.3-2)
A+B+C=B+C+A=A+C+B (2.3-3)
A soma e a subtração de arranjos exigem que ambos os arranjos sejam do mesmo
tamanho. A única exceção a essa regra no MATLAB ocorre quando adicionamos um
escalar ao arranjo ou quando subtraímos um escalar do arranjo. Nesse caso, o escalar
é adicionado a ou subtraído de cada elemento do arranjo. A Tabela 2.3-1 apresenta
exemplos.

TABELA 2.3-1 Operações elemento a elemento


Símbolo Operação Forma Exemplo
+ Adição escalar-arranjo A + b [6,3]+2=[8,5]
- Subtração escalar-arranjo A - b [8,3]-5=[3,-2]
+ Adição de arranjos A + B [6,5]+[4,8]=[10,13]
- Subtração de arranjos A - B [6,5]-[4,8]=[2,-3]
.* Multiplicação de arranjos A.*B [3,5].*[4,8]=[12,40]
./ Divisão de arranjos à direita A./B [2,5]./[4,8]=[2/4,5/8]
.\ Divisão de arranjos à esquerda A.\B [2,5].\[4,8]=[2\4,5\8]
.^ Exponenciação de arranjos A.^B [3,5].^2=[3^2,5^2]
2.^[3,5]=[2^3,2^5]
[3,5].^[2,4]=[3^2,5^4]
66 Introdução ao MATLAB para Engenheiros

Multiplicação elemento a elemento


O MATLAB define a multiplicação elemento a elemento apenas para arranjos do mesmo
tamanho. A definição do produto x.*y, em que x e y possuem n elementos cada um, é
x.*y = [x(1)y(1), x(2)y(2)..., x(n)y(n)]
se x e y forem vetores linha. Por exemplo, se
x = [2, 4, -5] y = [-7, 3, -8] (2.3-4)
então z = x.*y produz
z = [2(-7), 4(3), -5(-8)] = [-14, 12, 40]
Esse tipo de multiplicação é algumas vezes chamado de multiplicação de arranjos.
Se u e v forem vetores coluna, o resultado de u.*v será um vetor coluna.
Note que x’ é um vetor coluna de tamanho 3 * 1 e, portanto, não possui o mes-
mo tamanho que y, que é um vetor linha de tamanho 1 * 3. Assim, para os vetores x
e y as operações x’.*y e y.*x’ não estão definidas no MATLAB e gerarão uma
mensagem de erro. Com a multiplicação elemento a elemento, é importante lembrar
que o ponto (.) e o asterisco (*) formam um símbolo (.*). Poderia ter sido melhor
ter definido um único símbolo para essa operação, mas os desenvolvedores do MAT-
LAB foram limitados pela escolha de símbolos no teclado.
A generalização da multiplicação de arranjos para arranjos com mais do que uma
linha ou uma coluna é direta. Ambos os arranjos devem ser do mesmo tamanho. As ope-
rações de arranjos são realizadas entre elementos em locais correspondentes nos arran-
jos. Por exemplo, a operação de multiplicação de arranjos A.*B resulta em uma matriz
C que é do mesmo tamanho que A e B e possui os elementos cij = aijbij. Por exemplo, se

Então C = A.*B produz o resultado:

EXEMPLO 2.3-1 Vetores e deslocamento

Suponha que dois mergulhadores se encontrem inicialmente na superfície e estabele-


ça o seguinte sistema de coordenadas: x aponta para o oeste, y aponta para o norte, e
z aponta para baixo. O mergulhador 1 nada 55 ft para o oeste, nada 36 ft para o norte,
e em seguida mergulha 25 ft. O mergulhador 2 desce 15 ft, nada 20 ft para o leste e
em seguida nada 59 ft para o norte. (a) Encontre a distância entre o navegador 1 e o
ponto de partida. (b) Que distância o mergulhador 1 deve nadar em cada direção para
alcançar o mergulhador 2? Que distância o mergulhador 1 deve nadar em linha reta
para alcançar o mergulhador 2?
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 67

■ Solução
(a) Utilizando as coordenadas xyz selecionadas, a posição do mergulhador 1 é r = 55i +
36j + 25k, e a posição do mergulhador 2 é r = -20i + 59j + 15k (note que o mergulhador
2 nadou para o leste, que está na direção negativa de x). A distância da origem a um ponto
xyz é dada por , isto é, pela magnitude do vetor que aponta da origem para
o ponto xyz. A distância é calculada na seguinte sessão:

A distância é de aproximadamente 70 ft. A distância poderia ser calculada utilizando-se o


comando norm(r).
(b) A localização do mergulhador 2 em relação ao mergulhador 1 é dada pelo ve-
tor v que aponta do mergulhador 1 para o mergulhador 2. Podemos encontrar esse vetor
utilizando a subtração de vetores: v = w - r. Continue a sessão do MATLAB anterior da
seguinte maneira:

Assim, para alcançar o mergulhador 2 nadando ao longo das direções do sistema de coor-
denadas, o mergulhador 1 deve nadar 75 ft para o leste, 23 ft para o norte e 10 ft para cima.
A distância em linha reta entre eles é de aproximadamente 79 ft.

Funções vetorizadas
As funções internas do MATLAB, como sqrt(x) e exp(x), operam automa-
ticamente em argumentos que são arranjos, produzindo um arranjo resultante do
mesmo tamanho que o argumento x. Assim, essas funções são chamadas de funções
vetorizadas.
Dessa forma, quando você multiplica ou divide essas funções, ou quando as
eleva a uma potência, você deve utilizar as operações elemento a elemento se os ar-
gumentos forem arranjos. Por exemplo, para calcular z = (ey sin x) cos2 x, você deve
digitar z = exp(y).*sin(x).*(cos(x)).^2. Obviamente, você obterá uma
mensagem de erro se os tamanhos de x e y forem diferentes. O resultado z terá o
mesmo tamanho que x e y.

EXEMPLO 2.3-2 Modelo de pressão aórtica

A seguinte equação é um caso específico de um modelo utilizado para descrever a pressão


sanguínea na aorta durante uma sístole (o período seguinte ao fechamento da válvula aór-
68 Introdução ao MATLAB para Engenheiros

tica do coração). A variável t representa o tempo em segundos, e as dimensões da variável


y representam a diferença de pressão ao longo da válvula aórtica, normalizada por uma
pressão de referência constante.

Plote essa função para t Ú 0.


■ Solução
Note que se t for um vetor, as funções do MATLAB exp(–8*t) e sen(9,7*t+pi/2)
também serão vetores do mesmo tamanho que t. Assim, devemos utilizar a multiplicação
elemento a elemento para calcular y(t).
Precisamos decidir sobre o espaçamento adequado a ser utilizado para o vetor t e
sobre o seu limite superior. A função sen(9,7t + ␲/2) oscila com uma frequência de 9,7
rad/s, que equivale a 9,7/(2␲) = 1,5 Hz. Desse modo, o seu período é de 1/1,5 = 2/3 s. O
espaçamento de t deve ser uma fração pequena do período a fim de se gerar pontos sufi-
cientes para plotar a curva. Assim, escolhemos um espaçamento de 0,003 s para termos
aproximadamente 200 pontos por período.

1,2

1
Diferença de pressão normalizada y(t)

0,8

0,6

0,4

0,2

⫺0,2
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5
t (s)
FIGURA 2.3-1 Resposta da pressão aórtica para o Exemplo 2.3-2.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 69

A amplitude da onda senoidal decai com o tempo porque o seno está multiplicado
pelo decaimento exponencial e-8t. O valor inicial da exponencial é e0 = 1, e ele será 2%
do seu valor inicial no tempo t = 0,5 s (porque e-8(0,5) = 0,02). Portanto, escolhemos 0,5 s
para ser o limite superior de t. A sessão é:

A plotagem é mostrada na Figura 2.3-1. Note que não vemos muito da oscilação, apesar
da presença da onda senoidal. Isso acontece porque o período da onda senoidal é maior do
que o tempo decorrido até que a exponencial e-8t se torne essencialmente zero.

Divisão elemento a elemento


A definição de divisão elemento a elemento, também chamada de divisão de arranjos,
é similar à definição de multiplicação de arranjos, exceto, é claro, pelo fato de que os
elementos de um arranjo são divididos pelos elementos do outro arranjo. Ambos os
arranjos devem ser do mesmo tamanho. O símbolo para divisão à direita de arranjos
é ./. Por exemplo, se
x = [8, 12, 15] y = [-2, 6, 5]
então z = x./y resulta em
z = [8/(-2), 12/6, 15/5] = [-4, 2, 3]
Além disso, se

então C = A./B resulta em

O operador de divisão à esquerda (.\) é definido para realizar a divisão à esquerda


elemento a elemento. Consulte a Tabela 2.3-1 para ver exemplos. Note que A.\B não
é equivalente a A./B.

EXEMPLO 2.3-3 Análise de rota de transporte

A tabela a seguir fornece alguns dados de distância percorrida ao longo de cinco trajetos
de caminhão e os intervalos de tempo correspondentes à realização de cada um deles.
Utilize os dados para calcular a velocidade média em cada trajeto. Encontre o trajeto de
maior velocidade média.
70 Introdução ao MATLAB para Engenheiros

1 2 3 4 5
Distância (mi) 560 440 490 530 370
Tempo (hr) 10,3 8,2 9,1 10,1 7,5

■ Solução
Por exemplo, a velocidade média na primeira rota é 560/10,3 = 54,4 mi/hr. Primeiramente,
definimos os vetores linha d e t a partir dos dados de distância e de tempo. Em seguida,
para encontrar a velocidade média em cada trajeto utilizando o MATLAB, utilizamos a
divisão de arranjos. A sessão é:

Os resultados estão em milhas por hora. Note que o MATLAB exibe mais algarismos
significativos do que é justificado pela precisão de três dígitos significativos dos dados
fornecidos, de modo que devemos arredondar os resultados para três dígitos significativos
antes de utilizá-los.
Para encontrar a maior velocidade média e o trajeto correspondente, continue a ses-
são da seguinte maneira:

O primeiro trajeto é o de maior velocidade.


Se não precisássemos das velocidades de cada trajeto, poderíamos ter resolvido este
problema combinando duas linhas de comando da seguinte maneira: [highest_spe-
ed, route] = max(d./t).

Exponenciação elemento a elemento


O MATLAB nos permite não apenas elevar arranjos a expoentes, mas também a ele-
var escalares e arranjos a expoentes que são arranjos. Para realizar a exponenciação
elemento a elemento, devemos utilizar o símbolo .^. Por exemplo, se x = [3,5,8],
então x.^3 produz o arranjo [33, 53, 83] = [27, 125, 512]. Se x = 0:2:6, então
x.^2 retorna o arranjo [02, 22, 42, 62] = [0, 4, 16, 36]. Se

então B = A.^3 gera o resultado:


Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 71

Podemos elevar um escalar a um expoente que é um arranjo. Por exemplo, se p =


[2,4,5], então 3.^p produz o arranjo [32, 34, 35]=[9, 81, 243]. Este exemplo ilustra
uma situação comum em que é bom lembrar que .^ é um símbolo único; o ponto em
3.^p não é um ponto decimal associado ao número 3. As operações seguintes, com o
valor de p dado aqui, são equivalentes e geram a resposta correta:
3.^p
3.0.^p
3..^p
(3).^p
3.^[2,4,5]
Com a exponenciação de arranjos, o expoente pode ser um arranjo se a base for
um escalar ou se as dimensões do expoente e as dimensões da base forem iguais. Por
exemplo, se x = [1,2,3] e y = [2,3,4], então y.^x gera a resposta 2964. Se
A = [1,2;3,4], então 2.^A gera o arranjo [2,4; 8,16].

Teste seus conhecimentos


T2.3-1 Dadas as matrizes

encontre (a) seu produto elemento a elemento, (b) sua divisão à direita ele-
mento a elemento (A dividido por B), e (c) B elevado à terceira potência
elemento a elemento.
(Respostas: (a) [-147, -81; -162, 32], (b) [-3, -9; -2, 2], e
(c) [-343, -27; 729, 64].)

EXEMPLO 2.3-4 Dissipação de potência e corrente em resistores

A corrente i que passa por um resistor elétrico submetido à tensão v é dada pela lei de Ohm,
i = y/R, em que R é a resistência. A potência dissipada no resistor é dada por y2/R. A seguin-
te tabela fornece dados de resistência e tensão para cinco resistores. Utilize os dados para
calcular (a) a corrente em cada resistor e (b) a potência dissipada em cada resistor.

1 2 3 4 5
R (æ) 104 2 * 104 3,5 * 104 105 2 * 105
y (V) 120 80 110 200 350
72 Introdução ao MATLAB para Engenheiros

■ Solução
(a) Primeiro, definimos dois vetores linha, um contendo os valores de resistência e outro
contendo os valores de tensão. Para encontrar a corrente i = v/R com o MATLAB, utiliza-
mos a divisão de arranjos. A sessão é:

Os resultados estão em amperes e devem ser arredondados para três algarismos significa-
tivos porque os dados de tensão contêm apenas três algarismos significativos.
(b) Para encontrar a potência P = v2/R, utilizamos a exponenciação de arranjos e a
divisão de arranjos. A sessão continua da seguinte maneira:

Esses números são a potência dissipada em cada resistor em watts. Note que a sentença
v.^2./R é equivalente a (v.^2)./R. Embora as regras de precedência sejam claras
aqui, podemos sempre inserir parênteses em torno de quantidades se não tivermos certeza
de como o MATLAB interpretará nossos comandos.

EXEMPLO 2.3-5 Um processo de destilação em batelada

Considere um sistema de aquecimento de uma solução líquida de benzeno/tolueno para


destilar um vapor de benzeno puro. Uma unidade particular de destilação em batelada
é carregada inicialmente com 100 mols de uma mistura de 60% molar de benzeno/40%
molar de tolueno. Seja L (mol) a quantidade de líquido remanescente no aparelho de des-
tilação, e seja x (mol B/mol) a fração molar de benzeno no líquido remanescente. A con-
servação da massa do benzeno e do tolueno pode ser aplicada para se derivar a seguinte
relação [Felder, 1986]:

Determine que fração molar do benzeno permanece quando L = 70. Note que é difícil
resolver esta equação diretamente para x. Utilize uma plotagem x versus L para resolver
o problema.
■ Solução
Essa equação envolve tanto multiplicação de arranjos quanto exponenciação de ar-
ranjos. Note que o MATLAB nos permite utilizar expoentes decimais para avaliar L.
É claro que L deve estar na faixa 0 … L … 100; entretanto, não sabemos a faixa de x,
exceto que x Ú 0. Portanto, devemos fazer alguns palpites acerca da faixa de x, utili-
zando uma sessão como a que segue. Descobrimos que L 7 100 se x 7 0,6, portanto
escolhemos x = 0:0.001:0.6. Utilizamos a função ginput para encontrar o
valor de x correspondente a L = 70.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 73

0,7

0,6

0,5
x (mol B/mol)

0,4

0,3

0,2

0,1

0
0 10 20 30 40 50 60 70 80 90 100
L (mol)
FIGURA 2.3-2 Plotagem para o Exemplo 2.3-5.

A plotagem é mostrada na Figura 2.3-2. A resposta é x = 0,52 para L = 70. A plotagem


mostra que o líquido remanescente apresenta menor concentração de benzeno quando a
quantidade de líquido se torna menor. Pouco antes do aparelho de destilação ficar vazio
(L = 0), o líquido é tolueno puro.

2.4 Operações matriciais


A adição e a subtração matriciais são idênticas à adição e à subtração elemento a
elemento. Os elementos correspondentes das matrizes são somados ou subtraídos.
Entretanto, a multiplicação e a divisão matriciais não são iguais à multiplicação e à
divisão elemento a elemento.

Multiplicação de vetores
Lembre-se de que vetores são simplesmente matrizes com uma linha ou uma co-
luna. Desse modo, os procedimentos de multiplicação e divisão matriciais também
se aplicam a vetores, e nós introduziremos a multiplicação matricial considerando
primeiramente o caso vetorial.
74 Introdução ao MATLAB para Engenheiros

O produto escalar u · w dos vetores u e w é um escalar e pode ser interpretado


como a projeção perpendicular de u sobre w. Ele pode ser calculado a partir de |u||w|
cos ␪, em que ␪ é o ângulo entre os dois vetores, e |u| e |w| são as magnitudes dos
vetores. Dessa forma, se os vetores forem paralelos e estiverem na mesma direção, ␪
= 0 e u · w = |u||w|. Se os vetores forem perpendiculares, ␪ = 90° e u · w = 0. Uma vez
que os vetores i, j e k têm comprimento unitário,
iⴢiⴝjⴢjⴝkⴢkⴝ1 (2.4-1)
Uma vez que os vetores unitários são perpendiculares entre si,
iⴢjⴝiⴢkⴝjⴢkⴝ0 (2.4-2)
Assim, o produto escalar de vetores pode ser expresso em termos dos vetores unitá-
rios como
u ⴢ w = (u1i + u2 j + u3k) ⴢ (w1i + w2 j + w3k)
Realizando a multiplicação e utilizando as propriedades dadas por (2.4-1) e (2.4-2),
obtemos:
u ⴢ w = u1w1 + u2w2 + u3w3
O produto matricial de um vetor linha u por um vetor coluna w é definido da
mesma forma que o produto escalar; o resultado é um escalar que é a soma dos ele-
mentos dos vetores correspondentes; isto é,

se cada vetor tiver três elementos. Assim, o resultado de se multiplicar um vetor 1 * 3


por um vetor 3 * 1 é um arranjo 1 * 1, isto é, um escalar. Essa definição de aplica a
vetores que tenham qualquer número de elementos, desde que ambos os vetores te-
nham o mesmo número de elementos.
Assim, o resultado de se multiplicar um vetor 1 * n por um vetor n * 1 é um
arranjo 1 * 1, isto é, um escalar.

EXEMPLO 2.4-1 Milhas viajadas

A Tabela 2.4-1 apresenta a velocidade de uma aeronave em cada trecho de uma certa
viagem e o tempo gasto em cada trecho. Calcule as milhas viajadas em cada trecho e o
número total de milhas viajadas.
■ Solução
Podemos definir um vetor linha s que contém as velocidades e um vetor linha t que con-
tém os tempos para cada trecho. Assim, s = [200, 250, 400, 300] e t = [2,
5, 3, 4].
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 75

TABELA 2.4-1 Velocidades e tempos da aeronave por trecho


Trecho
1 2 3 4
Velocidade (mi/hr) 200 250 400 300
Tempo (hr) 2 5 3 4

Para encontrar as milhas viajadas em cada trecho, multiplicamos a velocidade pelo tempo.
Para tanto, utilizamos o símbolo do MATLAB .*, que especifica a multiplicação s.*t
para produzir o vetor linha cujos elementos são os produtos dos elementos corresponden-
tes em s e t:
s.*t = [200(2), 250(5), 400(3), 300(4)] = [400, 1250, 1200, 1200]
Esse vetor contém as milhas viajadas pela aeronave em cada trecho da viagem.
Para encontrar o total de milhas viajadas, utilizamos o produto matricial, indicado por
s*t’. Nessa definição, o produto é a soma dos produtos dos elementos individuais; isto é,
s*t’ = [200(2) + 250(5) + 400(3) + 300(4)] = 4050
Esses dois exemplos ilustram a diferença entre a multiplicação de arranjos s.*t e
a multiplicação matricial s*t’.

Multiplicação vetor-matriz
Nem todos os produtos matriciais são escalares. Para generalizar a multiplicação an-
terior para um vetor coluna multiplicado por uma matriz, pense em uma matriz como
sendo composta por vetores linha. O resultado escalar de cada multiplicação linha-
-coluna forma um elemento no resultado, que é um vetor coluna. Por exemplo:

(2.4-3)

Assim, o resultado de se multiplicar uma matriz 2 * 2 por um vetor 2 * 1 é um arran-


jo 2 * 1, isto é, um vetor coluna. Note que a definição de multiplicação exige que o
número de colunas na matriz seja igual ao número de linhas no vetor. Em geral, o pro-
duto Ax, em que A tem p colunas, é definido apenas se x tiver p linhas. Se A tiver m
linhas e x for um vetor coluna, o resultado de Ax será um vetor coluna com m linhas.

Multiplicação matriz-matriz
Podemos expandir essa definição de multiplicação para incluir o produto de duas
matrizes AB. O número de colunas em A deve ser igual ao número de linhas em B. As
multiplicações linha-coluna formam vetores coluna, e esses vetores coluna formam
a matriz resultante. O produto AB tem o mesmo número de linhas que A e o mesmo
número de colunas que B. Por exemplo,
76 Introdução ao MATLAB para Engenheiros

(2.4-4)

Utilize o operador * para realizar a multiplicação de matricial no MATLAB. A


seguinte sessão do MATLAB realiza a multiplicação matricial mostrada em (2.4-4):
>>A = [6,-2;10,3;4,7];
>>B = [9,8;-5,12];
>>A*B
A multiplicação elemento a elemento está definida para o seguinte produto:
[3 1 7][4 6 5] = [12 6 35]
Entretanto, esse produto não está definido para a multiplicação matricial, porque a
primeira matriz tem três colunas, mas a segunda matriz não tem três linhas. Assim,
se nós digitarmos [3, 1, 7]*[4, 6, 5] no MATLAB, receberemos uma men-
sagem de erro.
O seguinte produto está definido na multiplicação matricial e produz o resulta-
do mostrado:

O seguinte produto também está definido:

Avaliando funções multivariáveis


Para avaliar uma função de duas variáveis, digamos z = f(x, y), para os valores x = x1,
x2, . . . , xm e y = y1, y2, . . . , yn, defina as matrizes m * n:

Quando a função z = f(x, y) é avaliada no MATLAB utilizando operações de arranjos,


a matriz z m * n resultante terá os elementos zij = f(xi, yj). Podemos estender essa
técnica a funções de mais de duas variáveis utilizando arranjos multidimensionais.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 77

EXEMPLO 2.4-2 Altura versus velocidade

A altura máxima h alcançada por um objeto arremessado com uma velocidade v e em um


ângulo ␪ em relação à horizontal, desconsiderando a resistência do ar, é:

Crie uma tabela que mostra a altura máxima para os seguintes valores de v e ␪:
y = 10, 12, 14, 16, 18, 20 m/s ␪ = 50°, 60°, 70°, 80°
As linhas na tabela devem corresponder aos valores de velocidade, e as colunas devem
corresponder aos ângulos.
■ Solução
O programa é mostrado abaixo.
g = 9.8; v = 10:2:20;
theta = 50:10:80;
h = (v’.ˆ2)*(sind(theta).ˆ2)/(2*g);
tabela = [0, theta; v’, h]
Os arranjos v e theta contêm as velocidades e os ângulos dados. O arranjo v é
1 * 6 e o arranjo theta é 1 * 4. Assim, o termo v’.^2 é um arranjo 6 * 1, e o termo
sind(theta).^2 é um arranjo 1 * 4. O produto desses dois arranjos, h, é uma matriz
produto de dimensões (6 * 1)(1 * 4) = (6 * 4).
O arranjo [0, theta] é 1 * 5 e o arranjo [v’, h] é 6 * 5, portanto, a matriz
table é 7 * 5. A tabela seguinte mostra a matriz tabela com seus valores arredonda-
dos a uma casa decimal. A partir dessa tabela, podemos ver que a altura máxima é 8,8 m
se v = 14 m/s e ␪ = 70°.

0 50 60 70 80
10 3,0 3,8 4,5 4,9
12 4,3 5,5 6,5 7,1
14 5,9 7,5 8,8 9,7
16 7,7 9,8 11,5 12,7
18 9,7 12,4 14,6 16,0
20 12,0 15,3 18,0 19,8

Teste seus conhecimentos


T2.4-1 Utilize o MATLAB para calcular o produto escalar dos seguintes vetores:
u = 6i - 8j + 3k
w = 5i + 3j - 4k
Verifique sua resposta à mão. (Resposta: -6)
78 Introdução ao MATLAB para Engenheiros

T2.4-2 Utilize o MATLAB para mostrar que

EXEMPLO 2.4-3 Análise de custo de manufatura

A Tabela 2.4-2 mostra o custo horário de quatro tipos de processos de manufatura. Ela
também mostra o número de horas necessárias em cada processo para produzir três pro-
dutos diferentes. Utilize matrizes e o MATLAB para resolver o seguinte. (a) Determine o
custo de cada processo para produzir 1 unidade do produto 1. (b) Determine o custo para
produzir uma unidade de cada produto. (c) Suponha que nós produzimos 10 unidades do
produto 1, 5 unidades do produto 2 e 7 unidades do produto 3. Calcule o custo total.
■ Solução
(a) O princípio básico que podemos utilizar aqui é o de que o custo é igual ao custo ho-
rário multiplicado pelo número de horas necessárias. Por exemplo, o custo de se utilizar
o torno mecânico para o produto 1 é ($10/hr)(6 hr), e assim por diante para os outros
três processos. Se nós definirmos o vetor linha de custos horários como sendo hour-
ly_costs e definirmos o vetor linha de horas necessárias para o produto 1 como sendo
hours_1, então nós podemos calcular os custos de cada processo para o produto 1 utili-
zando a multiplicação elemento a elemento. No MATLAB, a sessão é

Esses são os custos de cada um dos quatro processos para produzir uma unidade do pro-
duto 1.
(b) Para calcular o custo total de uma unidade do produto 1, podemos utilizar os
vetores hourly_costs e hours_1 e aplicar a multiplicação matricial em vez da mul-
tiplicação elemento a elemento, porque a multiplicação matricial soma os produtos indivi-
duais. A multiplicação matricial produz:

TABELA 2.4-2 Dados de custo e de tempo para processos de manufatura


Horas necessárias para produzir uma unidade
Processo Custo horário Produto 1 Produto 2 Produto 3
Torneamento 10 6 5 4
Retificação 12 2 3 1
Fresagem 14 3 2 5
Soldagem 9 4 0 3
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 79

Podemos realizar uma multiplicação similar para os produtos 2 e 3 utilizando os dados na


tabela. Para o produto 2:

Para o produto 3:

Essas três operações poderiam ter sido realizadas em uma única operação definin-
do-se uma matriz cujas colunas são formadas pelos dados nas três últimas colunas da
tabela:

No MATLAB, a sessão continua da seguinte maneira. Lembre-se de que devemos utilizar


a operação de transposição para converter os vetores linha em vetores colunas.

Dessa forma, os custos para produzir uma unidade de cada um dos produtos 1, 2 e 3 são
$162, $114 e $149, respectivamente.
(c) Para encontrar o custo total de produzir 10, 5 e 7 unidades, respectivamente,
podemos utilizar a multiplicação matricial:
80 Introdução ao MATLAB para Engenheiros

No MATLAB a sessão continua da maneira a seguir. Note o uso do operador de transpo-


sição no vetor unit_cost.

O custo total é de $3233.

O caso geral da multiplicação matricial


Podemos enunciar o resultado geral para a multiplicação matricial da seguinte manei-
ra: suponha que A tenha dimensão m * p e que B tenha dimensão p * q. Se C for o
produto AB, então C tem dimensão m * q e seus elementos são dados por

(2.4-5)
para todo i = 1, 2,..., m e j = 1, 2,..., q. Para o produto ser definido, as matrizes A e B
devem ser compatíveis; isto é, o número de linhas em B deve ser igual ao número de
colunas em A. O produto tem o mesmo número de linhas que A e o mesmo número
de colunas que B.
A multiplicação matricial não satisfaz a propriedade comutativa; isto é, em ge-
ral, AB Z BA. Inverter a ordem da multiplicação matricial é um erro comum e fácil
de ser cometido.
As propriedades associativa e distributiva valem para a multiplicação matricial.
A propriedade associativa estabelece que
A(B + C) ⴝ AB + AC (2.4-6)
A propriedade distributiva estabelece que
(AB)C ⴝ A(BC) (2.4-7)

Aplicações a análise de custo


Dados de custo de projeto armazenados em tabelas frequentemente devem ser ana-
lisados de diversas maneiras. Os elementos nas matrizes do MATLAB são similares
às células em uma planilha, e o MATLAB pode realizar muitos cálculos típicos de
planilha para a análise de tais tabelas.

EXEMPLO 2.4-4 Análise de custo de produto

A Tabela 2.4-3 mostra os custos associados a um determinado produto, e a Tabela 2.4-4


mostra o volume de produção para os quatro trimestres do ano comercial. Utilize o MAT-
LAB para encontrar os custos trimestrais com materiais, trabalho e transporte; os custos
totais anuais com materiais, trabalho e transporte; e os custos totais trimestrais.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 81

TABELA 2.4-3 Custos dos produtos


Custos por unidade ($ * 103)
Produto Materiais Trabalho Transporte
1 6 2 1
2 2 5 4
3 4 3 2
4 9 7 3

TABELA 2.4-4 Volume de produção trimestral


Produto Trimestre 1 Trimestre 2 Trimestre 3 Trimestre 4
1 10 12 13 15
2 8 7 6 4
3 12 10 13 9
4 6 4 11 5

■ Solução
Os custos são o resultado da multiplicação do custo unitário pelo volume de produção.
Dessa forma, definimos duas matrizes: U contém os custos por unidade da Tabela 2.4-3
em milhares de dólares, e P contém os dados de produção trimestral da Tabela 2.4-4.
>>U = [6, 2, 1;2, 5, 4;4, 3, 2;9, 7, 3];
>>P = [10, 12, 13, 15;8, 7, 6, 4;12, 10, 13, 9;6, 4, 11, 5];
Note que se multiplicarmos a primeira coluna em U pela primeira coluna em P,
obteremos o custo total com materiais no primeiro trimestre. Similarmente, multiplicando
a primeira coluna em U pela segunda coluna em P, obteremos o custo total com materiais
no segundo trimestre. Além disso, se multiplicarmos a segunda coluna em U pela primeira
coluna em P, obteremos o custo total com trabalho no primeiro trimestre, e assim por
diante. Estendendo esse padrão, podemos ver que devemos multiplicar a transposta de U
por P. Essa multiplicação produz a matriz de custo C.
>>C = U’*P
O resultado é

Cada coluna em C representa um trimestre. O custo total no primeiro trimestre é a soma


dos elementos na primeira coluna, o custo no segundo semestre é a soma da segunda co-
luna, e assim por diante. Dessa forma, uma vez que o comando sum soma as colunas de
uma matriz, os custos trimestrais são obtidos ao digitarmos
>>Quarterly_Costs = sum(C)
O vetor resultante, contendo os custos trimestrais em milhares de dólares, é [400 351 509
355]. Assim, os custos totais em cada trimestre são de $400.000; $351.000; $509.000; e
$355.000.
82 Introdução ao MATLAB para Engenheiros

Os elementos na primeira linha de C são os custos materiais para cada trimestre; os


elementos na segunda linha são os custos com trabalho, e aqueles na terceira linha são os
custos com transporte. Assim, para encontrar o custo total com materiais, devemos somar
ao longo da primeira linha de C. Similarmente, os custos totais de trabalho e de transporte
são as somas ao longo da segunda e da terceira linhas de C. Uma vez que o comando sum
soma as colunas, devemos utilizar a transposta de C. Assim, digitamos o seguinte:
>>Category_Costs = sum(C’)
O vetor resultante, contendo os custos de categoria em milhares de dólares, é [760 539
316]. Assim, o custo total anual com materiais é de $760.000; o custo com trabalho é de
$539.000; e o custo com transporte é de $316.000.
Exibimos a matriz C apenas para interpretar sua estrutura. Se não precisarmos exi-
bir C, toda a análise consistiria em apenas quatro linhas de comando.

Esse exemplo ilustra a compacidade dos comandos do MATLAB.

Matrizes especiais
MATRIZ NULA Duas exceções à propriedade não comutativa são a matriz nula, indicada por 0, e a ma-
triz identidade, ou matriz unidade, indicada por I. A matriz nula contém zero em todos
MATRIZ
IDENTIDADE os seus elementos e é diferente da matriz vazia [], a qual não possui elementos. A ma-
triz identidade é uma matriz quadrada cujos elementos da diagonal são todos iguais a 1,
com os elementos remanescentes iguais a 0. Por exemplo, a matriz identidade 2 * 2 é

Essas matrizes satisfazem as seguintes propriedades:


0A ⴝ A0 ⴝ 0
IA ⴝ AI ⴝ A
No MATLAB há comandos específicos para a criação de algumas matrizes es-
peciais. Digite help specmat para ver a lista de comandos de matrizes especiais;
verifique também a Tabela 2.4-5. A matriz identidade I pode ser criada com o coman-
do eye(n), em que n é a dimensão desejada da matriz. Para criar uma matriz identi-
dade 2 * 2, digite eye(2). Se você digitar eye(size(A)), uma matriz identidade
com a mesma dimensão de A será criada.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 83

TABELA 2.4-5 Matrizes especiais


Comando Descrição
eye(n) Cria uma matriz identidade n * n.
eye(size(A)) Cria uma matriz identidade com o mesmo tamanho que a matriz A.
ones(n) Cria uma matriz de 1s n * n.
ones(m,n) Cria uma matriz de 1s m * n.
ones(size(A)) Cria uma matriz de 1s com o mesmo tamanho que a matriz A.
zeros(n) Cria uma matriz de 0s n * n.
zeros(m,n) Cria uma matriz de 0s m * n.
zeros(size(A)) Cria uma matriz de 0s com o mesmo tamanho que a matriz A.

Algumas vezes, desejamos inicializar uma matriz com todos os elementos


iguais a zero. O comando zeros cria uma matriz de zeros. Digite zeros(n) para
criar uma matriz de zeros n * n, ao passo que ao digitar zeros(m,n) você cria-
rá uma matriz de zeros m * n, assim como se você digitar A(m,n) = 0. Digite
zeros(size(A)) para criar uma matriz de zeros que tenha a mesma dimensão
que a matriz A. Esse tipo de matriz pode ser útil para aplicações em que não co-
nhecemos a dimensão necessária antecipadamente. A sintaxe do comando ones é a
mesma, com a diferença de que ele cria arranjos preenchidos com 1s.
Por exemplo, para criar e plotar a função

o arquivo de script é:
x1 = 0:0.01:2;
f1 = 10*ones(size(x1));
x2 = 2.01:0.01:4.99;
f2 = zeros(size(x2));
x3 = 5:0.01:7;
f3 = -3*ones(size(x3));
f = [f1, f2, f3];
x = [x1, x2, x3];
plot(x,f),xlabel(’x’),ylabel(’y’)
(Considere que aspecto teria a plotagem se o comando plot(x,f) fosse substi-
tuído pelo comando plot(x1,f1,x2,f2,x3,f3).)

Divisão matricial e equações algébricas lineares


A divisão matricial utiliza tanto o operador de divisão à direita quanto o operador de
divisão à esquerda, / e \, para várias aplicações, sendo uma das principais a solução
de conjuntos de equações algébricas lineares. O Capítulo 8 aborda um tópico relacio-
nado, a matriz inversa.
84 Introdução ao MATLAB para Engenheiros

Você pode utilizar o operador de divisão à esquerda (\) no MATLAB para re-
solver conjuntos de equações algébricas lineares. Por exemplo, considere o conjunto

Para resolver tais conjuntos no MATLAB você deve criar dois arranjos; nós os cha-
maremos de A e B. O número de linha em A é igual ao número de equações e o
número de colunas é igual ao número de variáveis. As linhas de A devem conter os
coeficientes de x, y e z, nesta ordem. Neste exemplo, a primeira linha de A deve ser
6, 12, 4; a segunda linha deve ser 7, -2, 3; e a terceira linha dever 2, 8, -9. O arranjo
B contém as constantes no lado direito da equação; ele é um vetor coluna e o seu nú-
mero de linhas é igual ao número de equações. Neste exemplo, a primeira linha de B
é 70, a segunda é 5 e a terceira é 64. A solução é obtida digitando-se A\B. A sessão é

A solução é x = 3, y = 5 e z = -2.
MÉTODO DA O método da divisão à esquerda funciona bem quando o conjunto de equações
DIVISÃO À tem uma solução única. Para aprender a como lidar com problemas que tenham solu-
ESQUERDA
ção não única (ou talvez nenhuma solução!), veja o Capítulo 8.

Teste seus conhecimentos


T2.4-3 Utilize o MATLAB para resolver o seguinte conjunto de equações:

(Resposta: x = 2, y = -5, z = 10)

Exponencial matricial
Elevar uma matriz a uma potência é equivalente a multiplicá-la repetidamente por si
mesma, por exemplo, A2 = AA. Esse processo exige que o número de linhas e o núme-
ro de colunas da matriz sejam iguais; isto é, ela deve ser uma matriz quadrada. O MAT-
LAB utiliza o símbolo ^ para exponencial matricial. Para encontrar A2, digite A^2.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 85

Podemos elevar um escalar n a um expoente matricial A, se A for uma matriz


quadrada, digitando n^A, mas as aplicações para tal procedimento são encontradas
em cursos avançados. Entretanto, elevar uma matriz a um expoente matricial – isto é,
AB – não é uma operação definida, ainda que A e B sejam matrizes quadradas.

Produtos especiais
Muitas aplicações em física e engenharia utilizam o produto vetorial e o produto
escalar; por exemplo, cálculos de componentes de força e momento utilizam esses
produtos especiais. Se A e B forem vetores com três elementos, o comando de produ-
to vetorial cross(A,B) calcula o vetor de três elementos que é o produto vetorial
A * B. Se A e B forem matrizes 3 * n, cross(A,B) retorna um arranjo 3 * n cujas
colunas são os produtos vetoriais das colunas correspondentes nos arranjos A e B 3 *
n. Por exemplo, o momento M em relação a um ponto de referência O devido à força
F é dado por M = r * F, em que r é o vetor posição do ponto O ao ponto em que a
força F é aplicada. Para encontrar o momento no MATLAB, você deve digitar M =
cross(r,F).
O comando de produto escalar dot(A,B) calcula um vetor linha de compri-
mento n cujos elementos são os produtos escalares das colunas correspondentes dos
arranjos A e B m * n. Para calcular a componente da força F ao longo da direção dada
pelo vetor r, você deve digitar dot(F,r).

2.5 Operações polinomiais utilizando arranjos


No MATLAB há algumas ferramentas práticas para se trabalhar com polinômios.
Digite help polyfun para mais informações sobre essa categoria de comandos.
Nós utilizaremos a seguinte notação para descrever um polinômio:
f (x) = a1xn + a2xn-1 + a3xn-2 + Á + an-1x2 + anx + an+1
Podemos descrever um polinômio no MATLAB com um vetor linha cujos elementos
são os coeficientes do polinômio, começando pelo coeficiente de maior expoente em
x. Esse vetor é [a1, a2, a3, ..., an-1, an, an+1]. Por exemplo, o vetor [4,-8,7,-5]
representa o polinômio 4x3 - 8x2 + 7x - 5.
As raízes de um polinômio podem ser encontradas com a função roots(a),
em que a é o arranjo que contém os coeficientes do polinômio. Por exemplo, para ob-
ter as raízes de x3 + 12x2 + 45x + 50 = 0, você deve digitar y = roots([1, 12,
45, 50]). A resposta (y) é um arranjo coluna que contém os valores -2, -5, -5.
A função poly(r) calcula os coeficientes do polinômio cujas raízes são especi-
ficadas pelo arranjo r. O resultado é um vetor linha que contém os coeficientes do poli-
nômio. Por exemplo, para encontrar o polinômio cujas raízes são 1 e 3 ± 5i, a sessão é:

Assim, o polinômio é x3 - 7x2 + 40x - 34.


86 Introdução ao MATLAB para Engenheiros

Adição e subtração de polinômios


Para adicionar dois polinômios, adicione os arranjos que descrevem seus coeficientes.
Se os polinômios forem de graus diferentes, insira zeros no arranjo de coeficientes do
polinômio de menor grau. Por exemplo, considere
f (x) = 9x3 - 5x2 + 3x + 7
cujo arranjo de coeficientes é f = [9,-5,3,7] e
g(x) = 6x2 - x + 2
cujo arranjo de coeficientes é g = [6,-1,2]. O grau de g(x) é menor do que o
grau de f(x) em uma unidade. Portanto, para somar f(x) e g(x), inserimos um zero em
g para “enganar” o MATLAB, fazendo-o pensar que g(x) é um polinômio de terceiro
grau. Isto é, digitamos g = [0 g] para obter [0,6,-1,2]. Esse vetor representa
g(x) = 0x3 + 6x2 - x + 2. Para somar os polinômios, digite h = f+g. O resultado é h
= [9,1,2,9], que corresponde a h(x) = 9x3 + x2 + 2x + 9. A subtração é realizada
de maneira similar.

Multiplicação e divisão polinomiais


Para multiplicar um polinômio por um escalar, simplesmente multiplique o arranjo de
coeficientes pelo escalar. Por exemplo, 5h(x) é representado por [45,5,10,45].
A multiplicação e a divisão polinomiais são facilmente realizadas no MATLAB.
Utilize a função conv (que representa “convoluir”) para multiplicar polinômios, e
a função deconv (que representa “deconvoluir”) para realizar a divisão sintética.
A Tabela 2.5-1 resume essas funções, assim como as funções poly, polyval e
roots.

TABELA 2.5-1 Funções polinomiais


Comando Descrição
conv(a,b) Calcula o produto de dois polinômios descritos pelos arranjos de coeficientes
a e b. Os dois polinômios não precisam ser do mesmo grau. O resultado é o
arranjo de coeficientes do polinômio produto.
[q,r] = Calcula o resultado da divisão entre um polinômio numerador, cujo arranjo
deconv(num,den) de coeficientes é num, por um polinômio denominador representado pelo
arranjo de coeficientes den. O polinômio quociente é dado pelo arranjo de
coeficientes q, e o polinômio resto é dado pelo arranjo de coeficientes r.
poly(r) Calcula os coeficientes do polinômio cujas raízes são especificadas pelo vetor
r. O resultado é um vetor linha que contém os coeficientes do polinômio
arranjados em ordem decrescente de expoente.
polyval(a,x) Avalia o polinômio em valores específicos de sua variável independente x,
que pode ser uma matriz ou um vetor. Os coeficientes do polinômio em ordem
decrescente de expoente estão armazenados no arranjo a. O resultado é do
mesmo tamanho que x.
roots(a) Calcula as raízes de um polinômio especificado pelo arranjo de coeficientes a.
O resultado é um vetor coluna que contém as raízes do polinômio.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 87

O produto do polinômio f(x) pelo polinômio g(x) é:

A divisão sintética de f(x) por g(x) produz o quociente

com resto -0, 5833x + 8,1667. Aqui está a sessão do MATLAB para realizar essas
operações:

As funções conv e deconv não exigem que os polinômios sejam do mesmo grau,
então não é preciso enganar o MATLAB como fizemos quando inserimos zeros nos
polinômios.

Plotando polinômios
A função polyval(a,x) avalia um polinômio em valores específicos de sua variá-
vel independente x, que pode ser uma matriz ou um vetor. O arranjo de coeficientes
do polinômio é a. O resultado é do mesmo tamanho que x. Por exemplo, para avaliar
o polinômio f(x) = 9x3 - 5x2 + 3x + 7 nos pontos x = 0, 2, 4,..., 10, digite:
>>f = polyval([9,-5,3,7],[0:2:10]);
O vetor resultante f contém seis valores correspondentes a f(0), f(2), f(4),..., f(10).
A função polyval é muito útil para plotar polinômios. Para tanto, você deve
definir um arranjo que contenha uma quantidade suficiente de valores da variável
independente x a fim de obter uma plotagem suave. Por exemplo, para plotar o poli-
nômio f(x) = 9x3 - 5x2 + 3x + 7 para -2 … x … 5, você deve digitar:
>>x = -2:0.01:5;
>>polyval([9,-5,3,7], x);
>>plot (x,f),xlabel(⬘x⬘),ylabel(⬘f(x)⬘),grid
Derivadas e integrais de polinômios são abordadas no Capítulo 9.
88 Introdução ao MATLAB para Engenheiros

Teste seus conhecimentos


T2.5-1 Utilize o MATLAB para obter as raízes de
x3 + 13x2 + 52x + 6 = 0
Utilize a função poly para confirmar sua resposta.
T2.5-2 Utilize o MATLAB para confirmar que

T2.5-3 Utilize o MATLAB para confirmar que

com resto 59x - 41.


T2.5-4 Utilize o MATLAB para confirmar que

quando x = 2.
T2.5-5 Plote o polinômio
y = x3 + 13x2 + 52x + 6
ao longo da faixa -7 … x … 1.

EXEMPLO 2.5-1 Projeto de prédio resistente a terremotos

Prédios projetados para resistir a terremotos devem ter frequências naturais de vibração
que não são próximas da frequência de oscilação do movimento do solo. As frequências
naturais de um prédio são determinadas primeiramente pelas massas dos seus pisos e pela
rigidez lateral de suas colunas de suporte (que atuam como molas horizontais). Podemos
encontrar essas frequências calculando as raízes de um polinômio chamado de polinômio
característico da estrutura (polinômios característicos são discutidos no Capítulo 9). A
Figura 2.5-1 mostra o movimento exagerado de um prédio de três pisos. Para tal prédio, se
cada piso tiver massa m e as colunas tiverem rigidez k, o polinômio é
(␣ - f 2)[(2␣ - f 2)2 - ␣2] + ␣2f 2 - 2␣3
em que ␣ = k/4m␲2 (modelos como esse são discutidos com mais detalhes em [Palm,
2010]). As frequências naturais do prédio em ciclos por segundo são as raízes positi-
vas dessa equação. Encontre as frequências naturais do prédio em ciclos por segundo
para o caso em que m = 1000 kg e k = 5 * 106 N/m.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 89

Piso

Colunas Piso

Piso

Movimento do solo
FIGURA 2.5-1 Modelo de vibração simples de um prédio sujeito a movimento do solo.

■ Solução
O polinômio característico consiste em somas e produtos de polinômios de menor grau.
Podemos utilizar esse fato para que o MATLAB faça a álgebra para nós. O polinômio
característico tem a forma

em que
p1 = ␣ - f 2 p2 = 2␣ - f 2 p3 = ␣2f 2 - 2␣3
O arquivo de script do MATLAB é

As raízes positivas resultantes e, portanto, as frequências, arredondadas para o inteiro


mais próximo, são 20, 14 e 5 Hz.
90 Introdução ao MATLAB para Engenheiros

2.6 Arranjos de células


O arranjo de células é um arranjo em que cada elemento é uma caixa, ou célula, que
pode conter um arranjo. Você pode armazenar diferentes classes de arranjos em um
arranjo de células, e pode agrupar conjuntos de dados que são relacionados entre si,
mas têm dimensões diferentes. Você acessa arranjos de células utilizando as mesmas
operações de indexação utilizadas com arranjos comuns.
Esta é a única seção no texto que utiliza arranjos de células. Portanto, a aborda-
gem dessa seção é opcional. Algumas aplicações mais avançadas do MATLAB, tais
como as encontradas em alguns dos toolboxes, utilizam arranjos de células.

Criando arranjos de células


INDEXAÇÃO Você pode criar um arranjo de células utilizando sentenças de atribuição ou utilizando
DE CÉLULAS
a função cell. Você pode atribuir dados às células utilizando tanto indexação de
INDEXAÇÃO células quanto indexação de conteúdo. Para utilizar a indexação de células, envolva
DE CONTEÚDO com parênteses os índices da célula no lado esquerdo da sentença de atribuição e
utilize a notação de arranjo padrão. Envolva o conteúdo da célula no lado direito da
sentença de atribuição com chaves {}.

EXEMPLO 2.6-1 Um base de dados ambientais

Suponha que você queira criar um arranjo de células A 2 * 2, cujas células contenham a
localização, a data, a temperatura do ar (medida às 8 horas da manhã, ao meio-dia e às 5
horas da tarde) e a temperatura da água medida ao mesmo tempo em três diferentes pontos
em um lago. O arranjo de células se parece com o seguinte:

Lago Walden 13 de junho de 1997

■ Solução
Você pode criar esse arranjo digitando o seguinte tanto no modo interativo quanto em um
arquivo de script:
A(1,1) = {’Walden Pond’};
A(1,2) = {’June 13, 1997’};
A(2,1) = {[60,72,65]};
A(2,2) = {[55,57,56;54,56,55;52,55,53]};
Se você ainda não tem os conteúdos de uma célula em particular, pode digitar um
par de chaves vazio {} para indicar uma célula vazia, assim como um par de colchetes
vazio [] indica um arranjo numérico vazio. Essa notação cria a célula, mas não armazena
nenhum conteúdo nela.
Para utilizar a indexação de conteúdo, envolva com chaves os subscritos da célula
no lado esquerdo, utilizando a notação de arranjo padrão. Em seguida, especifique o con-
teúdo da célula no lado direito do operador de atribuição. Por exemplo:
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 91

A{1,1} = ’Walden Pond’;


A{1,2} = ’June 13, 1997’;
A{2,1} = [60,72,65];
A{2,2} = [55,57,56;54,56,55;52,55,53];
Digite A na linha de comando. Você verá

Você pode utilizar a função celldisp para exibir o conteúdo completo. Por exemplo, ao
digitar celldisp(A) será exibido o seguinte:

A função cellplot produz uma exibição gráfica dos conteúdos do arranjo de


células na forma de um grid. Digite cellplot(A) para ver esse exibição da célula
A. Utilize vírgulas ou espaços com chaves para indicar as colunas das células e utilize
sinais de ponto e vírgula para indicar as linhas das células (assim como nos arranjos
numéricos). Por exemplo, se você digitar
B = {[2,4], [6,-9;3,5]; [7;2], 10};
o seguinte arranjo de células 2 * 2 será criado:

Você pode pré-alocar arranjos vazios de um tamanho específico utilizando a função


cell. Por exemplo, digite C = cell(3,5) para criar o arranjo de células C 3 * 5
e preenchê-lo com matrizes vazias. Uma vez que o arranjo tenha sido definido dessa
forma, você pode utilizar sentenças de atribuição para inserir os conteúdos nas célu-
las. Por exemplo, digite C(2,4) = {[6,-3,7]} para inserir um arranjo 1 * 3 na
célula (2,4) e digite C(1,5) = {1:10} para inserir números de um a 10 na célula
(1,5). Digite C(3,4) = {’30 mph’} para inserir a string na célula (3,4).

Acessando arranjos de células


Você pode acessar os conteúdos de um arranjo de células utilizando tanto indexação
de célula quanto indexação de conteúdo. Para utilizar a indexação de célula a fim de
92 Introdução ao MATLAB para Engenheiros

inserir o conteúdo da célula (3,4) do arranjo C em uma nova variável Speed, digite
Speed = C(3,4). Para inserir os conteúdos das células nas linhas 1 a 3 e nas co-
lunas 2 a 5 no novo arranjo de células D, digite D = C(1:3,2:5). O novo arranjo
de células D terá três linhas, quatro colunas e 12 arranjos. Para utilizar a indexação de
conteúdo a fim de acessar alguns ou todos os conteúdos em uma única célula, envol-
va a expressão do índice da célula com chaves para indicar que você está atribuindo
os conteúdos, e não as células em si, a uma nova variável. Por exemplo, ao digitar
Speed = C{3,4}, o conteúdo ’30 mph’ na célula (3,4) será atribuído à variável
Speed. Você não pode utilizar a indexação de conteúdo para recuperar os conteúdos
de mais de uma célula ao mesmo tempo. Por exemplo, as sentenças G = C{1,:} e
C{1,:} = var, em que var é alguma variável, são ambas inválidas.
Você pode acessar subconjuntos dos conteúdos de uma célula. Por exemplo,
para obter o segundo elemento do vetor linha 1 * 3 na célula (2,4) do arranjo C e atri-
buí-lo à variável r, você deve digitar r = C{2,4}(1,2). O resultado é r = -3.

2.7 Arranjos de estruturas


Arranjos de estruturas são compostos de estruturas. Essa classe de arranjos permite
armazenar arranjos diferentes juntos. Os elementos nas estruturas são acessados utili-
CAMPO zando-se campos nomeados. Essa característica os distingue dos arranjos de células,
que são acessados utilizando operações padrão de indexação de arranjos.
Arranjos de estruturas são utilizados neste texto apenas nesta seção. Alguns
toolboxes do MATLAB utilizam arranjos de estruturas.
Um exemplo específico é a melhor maneira de introduzir a terminologia de es-
truturas. Suponha que você queira criar uma base de dados de estudantes em um
curso, e que queira incluir o nome do estudante, o Número de Segurança Social
(SSN)*, o e-mail e os resultados dos testes. A Figura 2.7-1 mostra um diagrama dessa
estrutura de dados. Cada tipo de dados (nome, Número de Segurança Social, e assim
por diante) é um campo, e o seu nome é o nome do campo. Assim, nossa base de da-
dos possui quatro campos. Os primeiros três campos contêm uma string de texto,

Arranjo de estruturas “student”

Estudante(1) Estudante(2)

Nome: John Smith Nome: Mary Jones

SSN: 392-77-1786 SSN: 431-56-9832

Email: smithj@myschool.edu Email: jonesm@myschool.edu

Testes: 67, 75, 84 Testes: 84, 78, 93


FIGURA 2.7-1 Disposição dos dados no arranjo de estruturas student.

* N. de T. Do inglês Social Security Number.


Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 93

enquanto que o último campo (os resultados dos testes) contém um vetor com ele-
mentos numéricos. Uma estrutura consiste em toda essa informação para um único
estudante. Um arranjo de estruturas é um arranjo de tais estruturas para estudantes
diferentes. O arranjo mostrado na Figura 2.7-1 possui duas estruturas arranjadas em
uma linha e duas colunas.

Criando estruturas
Você pode criar arranjos de estruturas utilizando sentenças de atribuição ou utilizando
a função struct. O exemplo seguinte utiliza sentenças de atribuição para construir
uma estrutura. Arranjos de estruturas utilizam a notação de ponto (.) para especificar
e acessar os campos. Você pode digitar os comandos tanto em modo interativo quanto
em um arquivo de script.

EXEMPLO 2.7-1 Uma base de dados de estudantes

Crie uma estrutura que contenha os seguintes tipos de dados de estudantes:


■ Nome do estudante.
■ Número de Segurança Social (SSN).
■ E-mail.
■ Resultados dos testes.

Insira na base de dados as informações mostradas na Figura 2.7-1.


■ Solução
Você pode criar o arranjo de estruturas digitando o que segue tanto em modo interativo
quanto em um arquivo de script. Comece com os dados do primeiro estudante.
student.name = ’John Smith’;
student.SSN = ’392-77-1786’;
student.email = ’smithj@myschool.edu’;
student.tests = [67,75,84];
Então, se você digitar
>>student
na linha de comando, você verá a seguinte resposta:
name: ’John Smith’
SSN: = ’392-77-1786’
email: = ’smithj@myschool.edu’
tests: = [67 75 84]
Para determinar o tamanho do arranjo, digite size(student). O resultado será ans =
1 1, o que indica que ele é um arranjo de estruturas 1 * 1.
Para adicionar um segundo estudante à base de dados, utilize um índice 2 entre parên-
teses após o nome do arranjo de estruturas e insira as novas informações. Por exemplo, digite:
student(2).name = ’Mary Jones’;
student(2).SSN = ’431-56-9832’;
94 Introdução ao MATLAB para Engenheiros

student(2).email = ’jonesm@myschool.edu’;
student(2).tests = [84,78,93];
Esse processo “expande” o arranjo. Antes de inserirmos os dados para o segundo estudan-
te, a dimensão do arranjo de estruturas era 1 * 1 (tratava-se de uma única estrutura). Agora
ele é um arranjo 1 * 2 que consiste em duas estruturas, dispostas em uma linha e duas
colunas. Você pode confirmar essa informação digitando size(student), que retorna
ans = 1 2. Se você digitar agora length(student), obterá o resultado ans = 2,
que indica que o arranjo possui dois elementos (duas estruturas). Quando um arranjo de
estruturas tiver mais de uma estrutura, o MATLAB não exibirá os conteúdos dos campos
individuais quando você digitar o nome do arranjo de estruturas. Por exemplo, se você
agora digitar student, o MATLAB exibirá:

Você também pode obter informação sobre os campos utilizando a função fieldnames
(ver Tabela 2.7-1). Por exemplo:

Quando você insere mais informações sobre os estudantes, o MATLAB atribui o mesmo
número de campos e os mesmos nomes de campos a cada elemento. Se você não inserir
alguma informação – por exemplo, suponha que você não saiba o email de alguém – o
MATLAB atribuirá uma matriz vazia àquele campo para aquele estudante.

TABELA 2.7-1 Funções de estruturas


Função Descrição
names = fieldnames(S) Retorna os nomes dos campos associados à
estrutura S em names, que é um arranjo de
células de strings.
isfield(S,’field’) Retorna 1 se ’field’ for o nome de um
campo na estrutura S, ou 0 caso contrário.
isstruct(S) Retorna 1 se o arranjo S for um arranjo de
estruturas, ou 0 caso contrário.
S = rmfield(S,’field’) Remove o campo ’field’ da estrutura S.
S = struct(’f1’,’v1’,’f2’,’v2’,...) Cria um arranjo de estruturas com os campos
’f1’, ’f2’,... que contêm os valores
’v1’, ’v2’,....
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 95

Os campos podem ter diferentes tamanhos. Por exemplo, cada nome de campo pode
conter um número diferente de caracteres, e os arranjos que contêm os resultados dos
testes podem ser de diferentes tamanhos, com seria o caso se algum estudante não tivesse
feito o segundo teste.

Além da sentença de atribuição, você pode construir estruturas utilizando a fun-


ção struct, que permite “pré-alocar” um arranjo de estruturas. Para construir um
arranjo de estruturas com o nome sa_1, a sintaxe é
sa_1 = struct(’field1’,’values1’,’field2’,’values2’, ...)
em que os argumentos são os nomes dos campos e seus valores. Os arranjos de valo-
res values1, values2,... devem todos ser do mesmo tamanho, células escalares
ou valores únicos. Os elementos dos arranjos de valores são inseridos nos elementos
correspondentes dos arranjos de estruturas. O arranjo de estruturas resultante tem o
mesmo tamanho que os arranjos de valores, ou é 1 * 1 se nenhum dos arranjos de
valores for uma célula. Por exemplo, para pré-alocar um arranjo de estruturas 1 * 1
para a base de dados de estudantes, você deve digitar
student = struct(’name’,’John Smith’, ’SSN’, ...
’392-77-1786’,’email’,’smithj@myschool.edu’, ...
’tests’,[67,75,84])

Acessando arranjos de estruturas


Para acessar os conteúdos de um campo em particular, digite um ponto após o nome
do arranjo de estruturas, seguido pelo nome do campo. Por exemplo, se você digitar
student(2).name, o valor ’Mary Jones’ será exibido. Naturalmente, nós
podemos atribuir o resultado a uma variável da maneira usual. Por exemplo, se você
digitar name2 = student(2).name, o valor ’Mary Jones’ será atribuído à
variável name2. Para acessar elementos dentro de um campo, por exemplo, o segun-
do resultado de teste de John Smith, digite student(1).tests(2). Esse coman-
do retornará o valor 75. Em geral, se um campo contiver um arranjo, você pode utili-
zar os subscritos do arranjo para acessar os seus elementos. Neste exemplo a sentença
student(1).tests(2) é equivalente a student(1,1).tests(2) porque
student é composto por uma única linha.
Para armazenar toda a informação de uma estrutura em particular – digamos,
toda a informação sobre Mary Jones – em outro arranjo de estruturas M, você deve
digitar M = student(2). Você também pode atribuir ou mudar valores dos ele-
mentos dos campos. Por exemplo, se você digitar students(2).tests(2) =
81, o resultado do segundo teste de Mary Jones mudará de 78 para 81.

Modificando estruturas
Suponha que você queira adicionar números de telefone à base de dados. Você pode
fazer isso digitando o primeiro número de telefone da seguinte maneira:
student(1).phone = ’555-1653’
96 Introdução ao MATLAB para Engenheiros

Todas as outras estruturas no arranjo terão agora um campo phone, mas esses cam-
pos conterão um arranjo vazio até que você atribua valores a eles.
Para apagar um campo de todas as estruturas no arranjo, utilize a função
rmfield. Sua sintaxe básica é
new_struc = rmfield(array,’field’);
em que array é o arranjo de estruturas a ser modificado, ’field’ é o campo a ser
removido, e new_struct é o nome do novo arranjo de estruturas criado pela remo-
ção do campo. Por exemplo, para remover o campo de Número de Segurança Social e
nomear o novo arranjo de estruturas como new_student, digite:
new_student = rmfield(student,’SSN’);

Utilizando operadores e funções com estruturas


Você pode aplicar os operadores do MATLAB a estruturas da maneira usual. Por
exemplo, para encontrar o resultado máximo de teste do segundo estudante, digite
max(student(2).tests). A resposta é 93.
A função isfield determina se um arranjo de estruturas contém um campo
em particular. Sua sintaxe é isfield(S, ’field’). Ela retorna 1 (que significa
“verdadeiro”) se ’field’ for o nome de um campo no arranjo de estruturas S. Por
exemplo, se você digitar isfield(student, ’name’), será retornado o resul-
tado ans = 1.
A função isstruct determina se um arranjo é um arranjo de estruturas. Sua
sintaxe é isstruct(S). Ela retorna 1, se S for um arranjo de estruturas, ou 0, caso
contrário. Por exemplo, se você digitar isstruct(student), será retornado o
resultado ans = 1, que é equivalente a “verdadeiro”.

Teste seus conhecimentos


T2.7-1 Crie o arranjo de estruturas student mostrado na Figura 2.7-1 e adicione
a seguinte informação sobre um terceiro estudante: nome: Alfred E. New-
man; SSN: 555-12-3456; email: newmana@myschool.edu; tests: 55, 45, 58.
T2.7-2 Edite seu arranjo de estruturas para mudar o resultado do segundo teste de
Newman de 45 para 53.
T2.7-3 Edite seu arranjo de estruturas para remover o campo SSN.

2.8 Resumo
Você agora deve ser capaz de resolver operações básicas e utilizar arranjos no MAT-
LAB. Por exemplo, você deve ser capaz de:
■ Criar, endereçar e editar arranjos.
■ Efetuar operações de arranjos, incluindo adição, subtração, multiplicação, divi-
são e exponenciação.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 97

TABELA 2.8-1 Guia dos comandos introduzidos no Capítulo 2


Caracteres especiais Utilização
’ Transpõe uma matriz, criando elementos complexos conjugados.
.’ Transpõe uma matriz sem criar elementos complexos conjugados.
; Suprime a impressão na tela; também indica uma nova linha em um arranjo.
: Representa uma linha inteira ou uma coluna inteira de um arranjo.
Tabelas
Funções de arranjos Tabela 2.1-1
Operações elemento a elemento Tabela 2.3-1
Matrizes especiais Tabela 2.4-5
Funções polinomiais Tabela 2.5-1
Funções de estruturas Tabela 2.7-1

■ Efetuar operações matriciais, incluindo adição, subtração, multiplicação, divi-


são e exponenciação.
■ Efetuar álgebra polinomial.
■ Criar bases de dados utilizando arranjos de células e arranjos de estruturas.
A Tabela 2.8-1 é um guia de referência para todos os comandos do MATLAB
introduzidos neste capítulo.

Termos-chave
Arranjo de células, 90 Matriz nula, 82
Arranjo vazio, 58 Matriz, 56
Arranjos de estruturas, 92 Método da divisão à esquerda, 84
Campo, 92 Operações de arranjos, 65
Comprimento, 61 Operações matriciais, 73
Endereçamento de arranjos, 57 Tamanho de arranjo, 56
Indexação de células, 90 Transposição, 55
Indexação de conteúdo, 90 Valor absoluto, 61
Magnitude, 61 Vetor coluna, 54
Matriz identidade, 82 Vetor linha, 54

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do livro.

Seção 2.1
1. a. Utilize dois métodos para criar o vetor x que tenha 100 valores regularmente
espaçados, começando em 5 e terminando em 28.
b. Utilize dois métodos para criar um vetor x que tenha um espaçamento regu-
lar de 0,2, começando em 2 e terminando em 14.
c. Utilize dois métodos para criar um vetor x que tenha 50 elementos regular-
mente espaçados, começando em -2 e terminando em 5.
98 Introdução ao MATLAB para Engenheiros

2. a. Crie um vetor x que tenha 50 valores logaritmicamente espaçados, come-


çando em 10 e terminando em 1000.
b. Crie um vetor x que tenha 20 valores logaritmicamente espaçados, come-
çando em 10 e terminando em 1000.
3.* Utilize o MATLAB para criar um vetor x que tenha seis valores entre 0 e 10
(incluindo os extremos 0 e 10). Crie um arranjo A cuja primeira linha contenha
os valores 3x e cuja segunda linha contenha os valores 5x - 20.
4. Repita o Problema 3, mas faça a primeira coluna de A conter os valores 3x e a
segunda coluna conter os valores 5x - 20.
5. Digite essa matriz no MATLAB e utilize-o para realizar as instruções a seguir:

a. Crie um vetor v formado pelos elementos da segunda coluna de A.


b. Crie um vetor w formado pelos elementos da segunda linha de A.
6. Digite essa matriz no MATLAB e utilize-o para realizar as instruções a seguir:

a. Crie um arranjo B 4 * 3 formado pelos elementos da segunda até a quarta


coluna de A.
b. Crie um arranjo C 3 * 4 formado pelos elementos da segunda até a quarta
linha de A.
c. Crie um arranjo D 2 * 3 formado pelos elementos das primeiras duas linhas
e das três últimas colunas de A.
7.* Calcule o comprimento e o valor absoluto dos seguintes vetores:
a. x = [2, 4, 7]
b. y = [ 2, -4, 7]
c. z = [5 + 3i, -3 + 4i, 2 - 7i]
8. Dada a matriz

a. Encontre os valores máximo e mínimo em cada coluna.


b. Encontre os valores máximo e mínimo em cada linha.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 99

9. Dada a matriz

a. Ordene cada coluna e armazene o resultado em um arranjo B.


b. Ordene cada linha e armazene o resultado em um arranjo C.
c. Some cada coluna e armazene o resultado em um arranjo D.
d. Some cada linha e armazene o resultado em um arranjo E.
10. Considere os seguintes arranjos:

Escreva expressões no MATLAB para fazer o seguinte:


a. Selecionar apenas a segunda linha de B.
b. Avaliar a soma da segunda linha de B.
c. Multiplicar a segunda coluna de B pela primeira coluna de A elemento a
elemento.
d. Avaliar o valor máximo no vetor resultante da multiplicação elemento a ele-
mento da segunda coluna de B pela primeira coluna de A.
e. Utilizar a divisão elemento a elemento para dividir a primeira linha de A
pelos primeiros três elementos da terceira coluna de B, e avaliar a soma dos
elementos do vetor resultante.

Seção 2.2
11.* a. Crie um arranjo D tridimensional cujas três “camadas” sejam essas matrizes:

b. Utilize o MATLAB para encontrar o maior elemento em cada camada de D


e o maior elemento em D.
100 Introdução ao MATLAB para Engenheiros

Seção 2.3
12.* Dadas as matrizes:

Utilize o MATLAB para


a. Encontrar A + B + C.
b. Encontrar A - B + C.
c. Verificar a lei associativa
(A + B) + C ⴝ A + (B + C)
d. Verificar a lei comutativa
A+B+CⴝB+C+AⴝA+C+B
13.* Dadas as matrizes:

Utilize o MATLAB para


a. Encontrar o resultado da multiplicação de A por B utilizando o produto de
arranjos.
b. Encontrar o resultado da divisão de A por B utilizando a divisão de arranjos
à direita.
c. Encontrar B elevado à terceira potência elemento a elemento.
14.* O trabalho mecânico W realizado quando uma força F empurra um bloco ao
longo de uma distância D é W = FD. A tabela a seguir apresenta dados da
intensidade da força utilizada para empurrar o bloco ao longo de uma dada
distância em cinco segmentos de um determinado percurso. A força varia por
causa das diferentes propriedades de atrito da superfície.

Segmento do percurso
1 2 3 4 5
Força (N) 400 550 700 500 600
Distância (m) 3 0,5 0,75 1,5 5

Utilize o MATLAB para encontrar (a) o trabalho realizado em cada segmento


do percurso e (b) o trabalho total realizado ao longo de todo o percurso.
15. O avião A aponta para sudoeste com uma velocidade de 300 mi/hr, enquanto
que o avião B aponta para o oeste com uma velocidade de 150 mi/hr. Qual é a
velocidade do avião A em relação ao avião B?
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 101

16. A tabela a seguir mostra o salário por hora, as horas de trabalho e a produção
(número de dispositivos produzidos) em uma semana para cinco fabricantes de
dispositivos.

Trabalhador
1 2 3 4 5
Salário por hora ($) 5 5,50 6,50 6 6,25
Horas de trabalho 40 43 37 50 45
Produção (dispositivos) 1000 1100 1000 1200 1100

Utilize o MATLAB para responder essas questões:


a.Quanto cada trabalhador lucrou na semana?
b.Qual foi o salário total pago?
c.Quantos dispositivos foram fabricados?
d.Qual é o custo médio para se produzir um dispositivo?
e.Quantas horas são necessárias, em média, para se produzir um dispositivo?
f.Assumindo que a produção de cada trabalhador tenha a mesma qualidade,
qual trabalhador é o mais eficiente? Qual é o menos eficiente?
17. Dois mergulhadores partem da superfície e estabelecem o seguinte sistema de
coordenadas: x aponta para o oeste, y para o norte e z para baixo. O mergulha-
dor 1 nada 60 ft para o leste, 25 ft para o sul, e mergulha 30 ft. Ao mesmo tem-
po, o mergulhador 2 mergulha 20 ft, nada 30 ft para o leste e 55 ft para o sul.
a. Calcule a distância entre o mergulhador 1 e o ponto de partida.
b. Quanto o mergulhador 1 deve nadar em cada direção para alcançar o mergu-
lhador 2?
c. Quanto o mergulhador 1 deve nadar em linha reta para alcançar o mergulha-
dor 2?
18. A energia potencial armazenada em uma mola é kx2/2, em que k é a constante
da mola e x é a compressão na mola. A força necessária para comprimir a mola
é kx. A seguinte tabela fornece os dados para cinco molas:

Mola
1 2 3 4 5
Força (N) 11 7 8 10 9
Constante da mola k (N/m) 1000 600 900 1300 700

Utilize o MATLAB para encontrar (a) a compressão x em cada mola e (b) a


energia potencial armazenada em cada mola.
102 Introdução ao MATLAB para Engenheiros

19. Uma companhia deve comprar cinco tipos de material. A tabela a seguir for-
nece o preço que a companhia paga por tonelada de cada material, juntamente
com o número de toneladas compradas nos meses de maio, junho e julho:

Quantidade comprada (toneladas)


Material Preço ($/tonelada) Maio Junho Julho
1 300 5 4 6
2 550 3 2 4
3 400 6 5 3
4 250 3 5 4
5 500 2 4 3

Utilize o MATLAB para responder essas questões:


a. Crie uma matriz 5 * 3 que contenha as quantidades gastas com cada item
em cada mês.
b. Qual foi o gasto total em maio? E em junho? E em julho?
c. Qual foi o gasto total com cada material no período de três meses?
d. Qual foi o gasto total com todos os materiais no período de três meses?
20. Uma área cercada consiste em um retângulo de comprimento L e largura 2R, e
um semicírculo de raio R, como mostrado na Figura P20. A área cercada deve
ter uma área A de 1600 ft2. O custo da cerca é de $40/ft para a porção curva
e de $30/ft para os lados em linha reta. Utilize a função min para determinar
com uma resolução de 0,01 ft os valores de R e L necessários para minimizar o
custo total da cerca. Calcule também o custo mínimo.

2R R

FIGURA P20

21. Um tanque de água consiste em uma parte cilíndrica de raio r e altura h, e


uma parte superior hemisférica. O tanque deve ser construído para armazenar
500 m3 de fluido quando preenchido. A área da superfície da parte cilíndrica é
2␲rh, e o seu volume é ␲r2h. A área da superfície da parte superior hemisférica
é dada por 2␲r2, e o seu volume é dado por 2␲r3/3. O custo para construir a
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 103

parte cilíndrica do tanque é $300/m2 da área da superfície; a parte hemisférica


custa $400/m2. Plote o custo versus r para 2 … r … 10 m, e determine o raio que
resulta no menor custo. Calcule a altura h correspondente.
22. Escreva uma sentença de atribuição no MATLAB para cada uma das seguintes
funções, considerando que w, x, y e z são vetores linha de mesmo comprimento
e que c e d são escalares:

23. a. Após uma dose, a concentração de uma medicação no sangue decresce em


virtude de processos metabólicos. A meia-vida de uma medicação é o tempo
necessário após a dosagem inicial para que a concentração seja reduzida à
metade. Um modelo comum para esse processo é

C(t) = C(0)e-kt
em que C(0) é a concentração inicial, t é o tempo (em horas) e k é a taxa de
eliminação constante, que varia entre indivíduos. Para um broncodilatador
específico, k foi estimado na faixa 0,047 … k … 0,107 por hora. Encontre
uma expressão para a meia-vida em termos de k, e obtenha uma plotagem da
meia-vida versus k para a faixa indicada.
b. Se a concentração for inicialmente nula e uma taxa de dosagem constante
for iniciada e mantida, a concentração como uma função do tempo será des-
crita por

em que a é uma constante que depende da taxa de dosagem. Plote a concentra-


ção após 1 hora, C(1), versus k para o caso em que a = 1 e k está na faixa 0,047
… k … 0,107 por hora.
24. Um cabo de comprimento Lc suporta uma viga de comprimento Lb, de modo
que ela esteja na posição horizontal quando um peso W é adicionado à extremi-
dade da viga. Os princípios da estática podem ser utilizados para mostrar que a
força de tensão T no cabo é dada por

em que D é a distância entre o ponto de encontro do cabo com a viga e a articu-


lação da viga. Ver Figura P24.
104 Introdução ao MATLAB para Engenheiros

Lc

D W

Lb

FIGURA P24

a. Para o caso em que W = 400 N, Lb = 3 m e Lc = 5 m, utilize operações ele-


mento a elemento e a função min para calcular o valor de D que minimiza a
tensão T. Calcule o valor de tensão mínimo.
b. Verifique a sensibilidade da solução plotando T versus D. Quanto D pode
variar a partir do seu valor ótimo antes de a tensão T aumentar 10% acima
de seu valor mínimo?

Seção 2.4
25.* Utilize o MATLAB para encontrar os produtos AB e BA para as seguintes ma-
trizes:

26. Dadas as matrizes:

Utilize o MATLAB para


a. Verificar a propriedade associativa
A(B + C) ⴝ AB + AC
b. Verificar a propriedade distributiva
(AB)C ⴝ A(BC)
27. As tabelas a seguir mostram o custo associado a um determinado produto e
o volume de produção para os quatro trimestres do ano comercial. Utilize o
MATLAB para encontrar (a) os custos trimestrais com material, trabalho e
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 105

transporte; (b) o custo total no ano com material, trabalho e transporte; e (c) os
custos trimestrais totais.

Custos por unidade de produto ($ * 103)


Produto Material Trabalho Transporte
1 7 3 2
2 3 1 3
3 9 4 5
4 2 5 4
5 6 2 1

Volume de produção trimestral


Produto Trimestre 1 Trimestre 2 Trimestre 3 Trimestre 4
1 16 14 10 12
2 12 15 11 13
3 8 9 7 11
4 14 13 15 17
5 13 16 12 18

28*. Ligas de alumínio são fabricadas adicionando-se outros elementos ao alumínio


para melhorar suas propriedades, tais como rigidez e resistência à tração. A
tabela a seguir mostra a composição de cinco ligas comumente utilizadas, que
são conhecidas pelos seus números de liga (2024, 6061, e assim por diante)
[Kutz, 1999]. Obtenha um algoritmo matricial para calcular as quantidades de
matérias-primas necessárias para a produção de uma dada quantidade de cada
liga. Utilize o MATLAB para determinar a quantidade de matéria-prima de
cada tipo necessária para a produção de 1000 toneladas de cada liga.

Composição de ligas de alumínio


Liga %Cu %Mg %Mn %Si %Zn
2024 4,4 1,5 0,6 0 0
6061 0 1 0 0,6 0
7005 0 1,4 0 0 4,5
7075 1,6 2,5 0 0 5,6
356,0 0 0,3 0 7 0

29. Refaça o Exemplo 2.4-4 como um arquivo de script que permita ao usuário
examinar os efeitos dos custos de trabalho. Possibilite ao usuário inserir os
quatro custos de trabalho na tabela a seguir. Quando você rodar o arquivo,
ele deve exibir os custos trimestrais e os custos por categoria. Rode o arquivo
106 Introdução ao MATLAB para Engenheiros

para o caso em que os custos de trabalho por unidade sejam de $3000, $7000,
$4000 e $8000, respectivamente.

Custos dos produtos


Custos por unidade ($ * 103)
Produto Material Trabalho Transporte
1 6 2 1
2 2 5 4
3 4 3 2
4 9 7 3

Volume de produção trimestral


Produto Trimestre 1 Trimestre 2 Trimestre 3 Trimestre 4
1 10 12 13 15
2 8 7 6 4
3 12 10 13 9
4 6 4 11 5

30. Vetores com três elementos podem representar posição, velocidade e acelera-
ção. Uma massa de 5 kg, que está a 3 m do eixo x, parte de x = 2 m e se move
com uma velocidade de 10 m/s paralela ao eixo y. Sua velocidade, portanto, é
descrita por v = [0, 10, 0], e sua posição é descrita por r = [2, 10t + 3, 0]. Seu
vetor momento angular L é calculado a partir de L = m(r * v), em que m é a
massa. Utilize o MATLAB para:
a. Calcular uma matriz P cujas 11 linhas sejam os valores do vetor posição r
avaliado nos instantes de tempo t = 0, 0,5, 1, 1,5,..., 5 s.
b. Qual é a localização da massa quando t = 5 s?
c. Calcule o vetor momento angular L. Qual é a sua direção?
31.* O produto triplo escalar calcula a magnitude M do momento de um vetor força
F em torno de uma linha específica. Ele é dado por M = (r * F) · n, em que r é
o vetor posição que vai da linha ao ponto de aplicação da força e n é um vetor
unitário na direção da linha.
Utilize o MATLAB para calcular a magnitude M no caso em que F = [12,
-5, 4] N, r = [-3, 5, 2] m e n = [6, 5, -7].
32. Verifique a identidade

A * (B * C) ⴝ B (A ⴢ C) - C(A · B)
para os vetores A = 7i - 3j + 7k, B = -6i + 2j + 3k e C = 2i + 8j - 8k.
33. A área de um paralelogramo pode ser calculada a partir de |A * B|, em que A
e B definem dois lados do paralelogramo (ver Figura P33). Calcule a área do
paralelogramo definida por A = 5i e B = i + 3j.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 107

x
A
FIGURA P33

34. O volume de um paralelepípedo pode ser calculado a partir de |A · (B * C)|, em


que A, B e C definem três lados do paralelepípedo (ver Figura P34). Calcule o
volume de um paralelepípedo definido por A = 5i, B = 2i + 4j e C = 3i - 2k.

x
A

z
FIGURA P34

Seção 2.5
35. Utilize o MATLAB para plotar os polinômios y = 3x4 - 6x3 + 8x2 + 4x + 90 e z
= 3x3 + 5x2 - 8x + 70 ao longo do intervalo -3 … x … 3. Rotule adequadamente
a plotagem e cada curva. As variáveis y e z representam corrente em miliampe-
res; a variável x representa tensão em volts.
36. Utilize o MATLAB para plotar o polinômio y = 3x4 - 5x3 - 28x2 - 5x + 200
no intervalo -1 … x … 1. Insira um grid na plotagem e utilize a função ginput
para determinar as coordenadas do pico da curva.
37. Utilize o MATLAB para encontrar o seguinte produto:
(10x3 - 9x2 - 6x + 12)(5x3 - 4x2 - 12x + 8)
108 Introdução ao MATLAB para Engenheiros

38.* Utilize o MATLAB para encontrar o quociente e o resto de

39*. Utilize o MATLAB para avaliar

em x = 5.
40. A lei dos gases ideais provê uma forma de se estimar a pressão e o volume de
um gás em um recipiente. A lei é:

Estimativas mais precisas podem ser feitas com a equação de van der Waals

em que o termo b é uma correção para o volume das moléculas e o termo a/ 2


é uma correção para as atrações moleculares. Os valores de a e b dependem do
tipo de gás. A constante dos gases é R, a temperatura absoluta é T e o volume
específico do gás é . Se 1 mol de um gás ideal for confinado a um volume de
22,41 L a 0°C (273,2 K), ele deverá exercer uma pressão de 1 atm. Nessas uni-
dades, R = 0,08206.
Para o gás cloro (Cl2), a = 6,49 e b = 0,0562. Compare as estimativas do
volume específico dadas pela lei dos gases ideais e pela equação de van der
Waals para 1 mol de Cl2 a 300 K e a uma pressão de 0,95 atm.
41. O avião A está voando para leste a uma velocidade de 300 mi/hr, enquanto que
o avião B está voando para o sul a uma velocidade de 160 mi/hr. A Figura P41
mostra a localização dos aviões às 13 horas.

160 mi/h
410 mi

A 320 mi/h

800 mi

FIGURA P41
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 109

a. Obtenha a expressão para a distância D entre os aviões como uma função


do tempo. Plote D versus tempo até o instante em que D alcança o seu valor
mínimo.
b. Utilize a função roots para calcular o instante em que os aviões estejam
pela primeira vez a menos de 30 mi um do outro.
42. A função

se aproxima de q quando x → 2 e quando x → 5. Plote essa função ao longo


da faixa 0 … x … 7. Escolha uma faixa apropriada para o eixo y.
43. As seguintes fórmulas são comumente utilizadas por engenheiros para prever a
sustentação e o arrasto de um aerofólio:

em que L e D são as forças de sustentação e de arrasto, V é a velocidade do ar,


S é a envergadura da asa, ␳ é a densidade do ar, e CL e CD são os coeficientes de
sustentação e de arrasto. Tanto CL quanto CD dependem de ␣, o ângulo de ata-
que, o ângulo entre a velocidade relativa do ar e a corda média aerodinâmica.
Experimentos em túnel de vento para um aerofólio em particular resulta-
ram nas seguintes fórmulas:
CL = 4,47 * 10-5␣3 + 1,15 * 10-3␣2 + 6,66 * 10-2␣ + 1,02 * 10-1
CD = 5,75 * 10-6␣3 + 5,09 * 10-4␣2 + 1,8 * 10-4␣ + 1,25 * 10-2
para ␣ expresso em graus.
Plote a sustentação e o arrasto desse aerofólio versus V para 0 … V … 150
mi/hr (você deve converter V para ft/s, sabendo que 5280 ft = 1 mi). Utilize
os valores ␳ = 0,002378 slug/ft3 (densidade do ar ao nível do mar), ␣ = 10° e
S = 36 ft. Os valores resultantes de L e D estarão em libras.
44. A razão sustentação-arrasto é uma indicação da eficácia de um aerofólio. De
acordo com o Problema 43, as equações para a sustentação e o arrasto são

em que, para um aerofólio em particular, os coeficientes de sustentação e de


arrasto versus o ângulo de ataque ␣ são dados por:
CL = 4,47 * 10-53␣ + 1,15 * 10-3␣2 + 6,66 * 10-2␣ + 1,02 * 10-1
CD = 5,75 * 10-6␣3 + 5,09 * 10-4␣2 + 1,81 * 10-4␣ + 1,25 * 10-2
110 Introdução ao MATLAB para Engenheiros

Utilizando as duas primeiras equações, vemos que a razão sustentação-arrasto


é dada simplesmente pela razão CL /CD.

Plote L/D versus ␣ para -2° … ␣ … 22°. Determine o ângulo de ataque que ma-
ximiza L/D.

Seção 2.6
45. a. Utilize tanto a indexação de células quanto a indexação de conteúdo para
criar o seguinte arranjo de células 2 * 2:

Motor 28C Test ID 6

b. Quais são os conteúdos do elemento (1,1) na célula (2,1) nesse arranjo?


46. A capacitância de dois condutores paralelos de comprimento L e raio r, separa-
dos entre si no ar por uma distância d, é dada por

em que ⑀ é a permissividade do ar (⑀ = 8,854 * 10-12 F/m). Crie um arranjo de


células com valores de capacitância versus d, L e r para d = 0,003, 0,004, 0,005
e 0,01 m; L = 1, 2, 3 m; e r = 0,001, 0,002, 0,003 m. Utilize o MATLAB para
determinar o valor de capacitância para d = 0,005, L = 2 e r = 0,001.

Seção 2.7
47. a. Crie um arranjo de estruturas que contenha os fatores de conversão para
converter unidades de massa, força e distância entre o sistema métrico inter-
nacional (SI) e o sistema de engenharia britânico.
b. Utilize o seu arranjo para calcular o seguinte:
■ O número de metros em 48 pés.
■ O número de pés em 130 metros.
■ O número de libras equivalente a 36 N.
■ O número de newtons equivalente a 10 lb.
■ O número de kilogramas em 12 slugs.
■ O número de slugs em 30 kg.
Capítulo 2 ■ Arranjos numéricos, de células e de estruturas 111

48. Crie um arranjo de estruturas que contenha os seguintes campos de informação


concernentes a pontes rodoviárias em uma cidade: localização da ponte, carga
máxima (toneladas), ano de construção, ano agendado para a manutenção. Em
seguida, insira os seguintes dados no arranjo:

Agendamento para
Localização Carga máxima Ano de construção a manutenção
Smith St. 80 1928 2011
Hope Ave. 90 1950 2013
Clark St. 85 1933 2012
North Rd. 100 1960 2012

49. Edite o arranjo de estruturas criado no Problema 48 para mudar de 2012 para
2018 o ano agendado para a manutenção da ponte Clark St.
50. Adicione a seguinte ponte ao arranjo de estruturas criado no Problema 48:

Agendamento para
Localização Carga máxima Ano de construção a manutenção
Shore Rd. 85 1997 2014
Foto: cortesia do Laboratório de Propulsão a Jato
(Jet Propulsion Laboratory) da NASA.

Engenharia no
Século XXI…
Microcirurgia assistida por robô

V
ocê não precisa ser médico para participar dos impressionantes desenvol-
vimentos que estão acontecendo no campo da saúde. Muitos avanços na
medicina e na cirurgia são verdadeiras realizações da engenharia, e muitos
engenheiros estão contribuindo com os seus talentos nessa área. Realizações recentes
incluem
■ Cirurgia laparoscópica em que uma fibra ótica guia um pequeno dispositivo ci-
rúrgico. Essa tecnologia elimina a necessidade tanto de grandes incisões quanto
de um longo período de recuperação.
■ Tomografia axial computadorizada (CAT)† e imagem por ressonância magnéti-
ca (MRI)††, que são ferramentas não invasivas para o diagnóstico de problemas
médicos.
■ Instrumentação médica como sensores de oximetria de dedo, para a medição
contínua da concentração de oxigênio no sangue, e sensores de pressão sanguí-
nea automáticos.
À medida que avançamos no século XXI, um desafio bastante interessante será o
desenvolvimento da cirurgia assistida por robô, em que um robô, supervisionado por
um ser humano, realiza operações que requerem movimentos precisos. Os robôs já
auxiliam em cirurgias de quadril em animais, mas um desenvolvimento muito maior
ainda é necessário. Outra tecnologia em desenvolvimento é a telecirurgia, em que um
cirurgião utiliza uma interface de televisão para guiar remotamente um robô cirúr-
gico. Essa tecnologia permitiria a prestação de serviços médicos em áreas remotas.
A microcirurgia assistida por robô, que utiliza um robô capaz de realizar pe-
quenos movimentos com precisão, é muito promissora. Em algumas aplicações, o
dispositivo robótico é utilizado para filtrar tremores normalmente presentes em uma
mão humana. O projeto de tais dispositivos requer análise geométrica, projeto de
sistemas de controle e processamento de imagens. O toolbox de Processamento de
Imagens (Image Processing) e alguns dos toolboxes do MATLAB direcionados a
projetos de sistemas de controle são úteis nesse tipo de aplicação. ■

† N. de T.: CAT é a sigla de Computarized Axial Tomography.


†† N. de T.: MRI é a sigla de Magnetic Resonance Imaging.
3
Funções e arquivos

O MATLAB possui muitas funções internas, incluindo funções trigonométricas, lo-


garítmicas e hiperbólicas, bem como funções para processamento de arranjos. Essas
funções são resumidas na Seção 3.1. Além disso, você pode definir suas próprias
funções com um arquivo de função e utilizá-las do mesmo jeito que você utiliza as
funções internas. Explicaremos essa técnica na Seção 3.2. A Seção 3.3 aborda tópi-
cos adicionais em programação de funções, incluindo handles de funções, funções
anônimas, subfunções e funções aninhadas. Outro tipo de arquivo útil no MATLAB
é o arquivo de dados. A importação e a exportação de tais arquivos são abordadas na
Seção 3.4
As Seções 3.1 e 3.2 contêm tópicos essenciais e devem ser abordadas. O mate-
rial na Seção 3.3 é útil para a criação de programas grandes. O material na Seção 3.4
é útil para leitores que precisam trabalhar com conjuntos grandes de dados.

3.1 Funções matemáticas elementares


Você pode utilizar o comando lookfor para encontrar funções que sejam relevantes
para sua aplicação. Por exemplo, digite lookfor imaginary para obter uma lista
de funções que lidam com números imaginários. Você verá a seguinte exibição:

Note que imaginary não é uma função do MATLAB, mas a palavra é encontrada
nas descrições da função do MATLAB imag e dos símbolos especiais i e j. Seus
nomes e suas breves descrições são exibidos quando você digita lookfor ima-
ginary. Se você sabe a grafia correta de uma função do MATLAB, por exemplo,
disp, você pode digitar help disp para obter uma descrição da função.
Algumas das funções, tais como sqrt e sin, são internas. Elas são arma-
zenadas como arquivos imagem e não são arquivos M. Elas são parte do núcleo
114 Introdução ao MATLAB para Engenheiros

do MATLAB, portanto, são bastante eficientes, mas os detalhes computacionais


não são prontamente acessíveis. Algumas funções são implementadas em arqui-
vos M. Você pode visualizar os códigos e até modificá-los, embora isso não seja
recomendável.

Funções logarítmicas e exponenciais


A Tabela 3.1-1 resume algumas das funções elementares comuns. Um exemplo é a
função raiz quadrada sqrt. Para calcular , você deve digitar sqrt(9) na linha
de comando. Quando você pressionar Enter, você verá o resultado ans = 3. Você
pode utilizar funções com variáveis. Por exemplo, considere a sessão

Note que a função sqrt retorna apenas a raiz positiva.


Um dos pontos fortes do MATLAB é que ele é capaz de tratar uma variável
como um arranjo automaticamente. Por exemplo, para calcular as raízes quadradas de
5, 7 e 15, você deve digitar

A função raiz quadrada atua em cada elemento no arranjo x.

TABELA 3.1-1 Algumas funções matemáticas comuns


Exponenciais
exp(x) Exponencial; ex.
sqrt(x) Raiz quadrada;
Logarítmicas
log(x) Logaritmo natural; ln x.
log10(x) Logaritmo comum (base 10); log x = log10 x
Complexas
abs(x) Valor absoluto; x.
angle(x) Ângulo de um número complexo x.
conj(x) Complexo conjugado.
imag(x) Parte imaginária de um número complexo x.
real(x) Parte real de um número complexo x.
Numéricas
ceil(x) Arredonda para o inteiro mais próximo em direção a q.
fix(x) Arredonda para o inteiro mais próximo em direção a zero.
floor(x) Arredonda para o inteiro mais próximo em direção a -q.
round(x) Arredonda para o inteiro mais próximo.
sign(x) Função sinal: +1 se x 7 0; 0 se x = 0; -1 se x 6 0.
Capítulo 3 ■ Funções e arquivos 115

Similarmente, podemos digitar exp(2) para obter e2 = 7,3891, em que e é a


base dos logaritmos naturais. Se você digitar exp(1), obterá resultado 2,7183, que
é o valor de e. Note que, em texto matemático, ln x indica logaritmo natural, sendo
que x = ey implica que
ln x = ln(ey) = y ln e = y
porque ln e = 1. Todavia, essa notação não é adotada no MATLAB, o qual utiliza
log(x) para representar ln x.
O logaritmo comum (base 10) é indicado no texto por log x ou log10 x. Ele é
definido pela relação x = 10y; isto é,
log10 x = log10 10y = y log10 10 = y
porque log1010 = 1. A função logaritmo comum no MATLAB é log10(x). Um erro
comum é digitar log(x), em vez de log10(x).
Outro erro comum é se esquecer de utilizar o operador de multiplicação de
arranjo .*. Note que, na expressão y = exp(x).*log(x), precisamos utilizar
o operador .* se x for um arranjo, porque exp(x) e log(x) também são arranjos
nesse caso.

Funções de números complexos


O Capítulo 1 explicou como o MATLAB lida facilmente com a aritmética de nú-
meros complexos. Na representação retangular, o número complexo a + ib repre-
senta um ponto no plano xy. A parte real a do número é a coordenada x do ponto,
e a parte imaginária b é a coordenada y. A representação polar utiliza a distância
M do ponto em relação à origem, que é o comprimento da hipotenusa, e o ângulo
␪ entre a hipotenusa e o eixo real positivo. O par (M, ␪) simplesmente representa
as coordenadas polares do ponto. A partir do teorema de Pitágoras, o comprimen-
to da hipotenusa é dado por , que é a magnitude do número. O
ângulo ␪ pode ser obtido a partir da trigonometria do triângulo retângulo, e é dado
por ␪ = arctan (b/a).
A adição e a subtração de números complexos à mão são fáceis de ser realiza-
das quando eles estão na representação retangular. Entretanto, a representação polar
facilita a multiplicação e a divisão de números complexos à mão. Devemos inserir nú-
meros complexos no MATLAB utilizando a forma retangular, e suas respostas serão
dadas nessa forma. Podemos obter a representação retangular a partir da representa-
ção polar da seguinte maneira:
a = M cos ␪ b = M sen ␪
As funções do MATLAB abs(x) e angle(x) calculam a magnitude M a o ân-
gulo ␪ de um número complexo x. As funções real(x) e imag(x) retornam as
partes real e imaginária de x. A função conj(x) calcula o complexo conjugado
de x.
A magnitude do produto z de dois números complexos x e y é igual ao produ-
to de suas magnitudes: |z| = |x||y|. O ângulo do produto é igual à soma dos ângulos:
. Esses fatos são demonstrados abaixo.
116 Introdução ao MATLAB para Engenheiros

Similarmente, para a divisão, se z = x/y, então |z| = |x|/|y| e .


Note que quando x for um vetor de valores reais, abs(x) não retorna o com-
primento geométrico do vetor. Esse comprimento é dado por norm(x). Se x for um
número complexo representando um vetor geométrico, então abs(x) retorna seu
comprimento geométrico.

Funções numéricas
A função round arredonda para o inteiro mais próximo. Se y = [2.3, 2.6,
3.9], o comando round(y) retornará o resultado 2, 3, 4. A função fix trunca
para o número inteiro mais próximo de zero. O comando fix(y) retornará o resul-
tado 2, 2, 3. A função ceil (que representa “ceiling”)† arredonda para o inteiro mais
próximo em direção a q. O comando ceil(y) produzirá a resposta 3, 3, 4.
Suponha que z = [-2.6,-2.3,5.7]. A função floor arredonda para o
inteiro mais próximo em direção a -q. O comando floor(z) produzirá o resul-
tado -3, -3, 5. O comando fix(z) produzirá a resposta -2, -2, 5. A função abs
calcula o valor absoluto. A função abs(z) produzirá 2,6, 2,3, 5,7.

Teste seus conhecimentos


T3.1-1 Para alguns valores de x e y, confirme que ln (xy) = ln x + ln y.
T3.1-2 Encontre a magnitude, o ângulo, a parte real e a parte imaginária do núme-
ro . (Respostas: magnitude = 2,5149, ângulo = 0,6245 rad, parte
real = 2,0402, parte imaginária = 1,4705)

† N. de T.: A palavra ‘ceiling’ significa ‘teto’ em português.


Capítulo 3 ■ Funções e arquivos 117

Argumentos de funções
Quando escrevemos textos matemáticos, utilizamos parênteses ( ), colchetes [ ] e cha-
ves { } para melhorar a legibilidade de expressões, e temos muita liberdade em sua
utilização. Por exemplo, podemos escrever sen 2 em um texto, mas o MATLAB exige
parênteses em torno de 2 (que é chamado de argumento da função ou parâmetro).
Dessa forma, para avaliar sen 2 no MATLAB, devemos digitar sin(2). O nome da
função do MATLAB deve ser seguido pelo argumento entre parênteses. Para expres-
sar em um texto o seno do segundo elemento do arranjo x, digitaríamos sen[x(2)].
Entretanto, no MATLAB você não pode utilizar colchetes ou chaves dessa maneira;
você deve digitar sin(x(2)).
Você pode incluir expressões e outras funções como argumentos. Por exemplo, se
x for um arranjo, para avaliar sen(x2 + 5), você deve digitar sin(x.^2 + 5). Para
avaliar sen( + 1), você deve digitar sin(sqrt(x)+1). Certifique-se quanto à
ordem de precedência, ao número e à localização dos parênteses quando digitar tais
expressões. Cada parêntese esquerdo exige um parêntese direito. Entretanto, essa con-
dição não garante que a expressão esteja correta!
Outro erro comum envolve expressões como sen2x, que significa (sen x)2. No
MATLAB, se x for um escalar, devemos escrever a expressão como (sin(x))^2,
não como sin^2(x), sin^2x ou sin(x^2)!

Funções trigonométricas
Outras funções comumente utilizadas são cos(x), tan(x), sec(x) e csc(x),
que retornam cos x, tan x, sec x e csc x, respectivamente. A Tabela 3.1-2 lista as fun-
ções trigonométricas do MATLAB que operam em modo radiano. Assim, sin(5)
calcula o seno de 5 rad, e não o seno de 5°. Similarmente, as funções trigonométricas
inversas retornam uma resposta em radianos. As funções que operam com valores
em graus possuem uma letra d anexada aos seus nomes. Por exemplo, sind(x)

TABELA 3.1-2 Funções trigonométricas


Trigonométricas†
cos(x) Cosseno; cos x.
cot(x) Cotangente; cot x.
csc(x) Cossecante; csc x.
sec(x) Secante; sec x.
sin(x) Seno; sen x.
tan(x) Tangente; tan x.
Inversas trigonométricas††
acos(x) Arco cosseno; arccos x = cos-1 x.
acot(x) Arco cotangente; arccot x = cot-1 x.
acsc(x) Arco cossecante; arccsc x = csc-1 x.
asec(x) Arco secante; arcsec x = sec-1 x.
asin(x) Arco seno; arcsen x = sen-1 x.
atan(x) Arco tangente; arctan x = tan-1 x.
atan2(y,x) Arco tangente de quatro quadrantes.
† Essas funções aceitam x em radianos.
†† Essas funções retornam um valor em radianos.
118 Introdução ao MATLAB para Engenheiros

aceita o valor x em graus. Para calcular a inversa da função seno em radianos, di-
gite asin(x). Por exemplo, asin(0.5) retorna a resposta 0,5236 rad. Nota: no
MATLAB, sin(x)^(-1) não resulta em sen-1(x); resulta em 1/sen(x)!
O MATLAB possui duas inversas da função tangente. A função atan(x)
calcula arctan x arco tangente ou tangente inversa e retorna um ângulo entre -␲/2
e ␲/2. Outra resposta correta é o ângulo que se encontra no quadrante oposto. O
usuário deve ser capaz de escolher a resposta correta. Por exemplo, atan(1) re-
torna a resposta 0,7854 rad, que corresponde a 45°. Assim, tan 45° = 1. Entretanto,
tan(45° + 180°) = tan 225° = 1 também. Portanto, arctan(1) = 225° também está
correto.
No MATLAB existe a função atan2(y,x) para determinar o arco tangente
sem ambiguidade, em que x e y são as coordenadas de um ponto. O ângulo calculado
por atan2(y,x) é o ângulo entre o eixo real positivo e a linha que vai da origem
(0, 0) ao ponto (x, y). Por exemplo, o ponto x = 1, y = -1 corresponde a -45° ou
-0,7854 rad, e o ponto x = -1, y = 1 corresponde a 135° ou 2,3562 rad. Se você di-
gitar atan2(-1,1), o MATLAB retornará -0,7854, enquanto que se você digitar
atan2(1,-1), o MATLAB retornará 2,3562. A função atan2(y,x) é um exem-
plo de uma função que tem dois argumentos. A ordem dos argumentos é importante
para tais funções. Até o presente, não existe a função atan2d.

Teste seus conhecimentos


T3.1-3 Para alguns valores de x, confirme que eix = cos x + i sen x.
T3.1-4 Para alguns valores de x na faixa 0 … x … 2␲, confirme que sen-1 x + cos-1
x = ␲/2.
T3.1-5 Para alguns valores de x na faixa 0 … x … 2␲, confirme que tan(2x) = 2 tan
x/(1 - tan2 x).

Funções hiperbólicas
As funções hiperbólicas são as soluções de alguns problemas comuns na análise de
engenharia. Por exemplo, a curva catenária, que descreve a forma de um cabo pen-
durado apoiado em ambas as extremidades, pode ser expressa em termos do cosseno
hiperbólico, cosh x, que é definido como

O seno hiperbólico, senh x, é definido como

A inversa do seno hiperbólico, senh-1 x, é o valor de y que satisfaz senh y = x.


Algumas outras funções hiperbólicas foram definidas. A Tabela 3.1-3 lista essas
funções e os comandos do MATLAB correspondentes.
Capítulo 3 ■ Funções e arquivos 119

TABELA 3.1-3 Funções hiperbólicas


Hiperbólicas
cosh(x) Cosseno hiperbólico; cosh x = (ex + e-x)/2.
coth(x) Cotangente hiperbólica; cosh x/senh x.
csch(x) Cossecante hiperbólica; 1/senh x.
sech(x) Secante hiperbólica; 1/cosh x.
sinh(x) Seno hiperbólico; senh x (ex - e-x)/2.
tanh(x) Tangente hiperbólica; senh x/cosh x.
Inversas hiperbólicas
acosh(x) Inversa do cosseno hiperbólico.
acoth(x) Inversa da cotangente hiperbólica.
acsch(x) Inversa da cossecante hiperbólica.
asech(x) Inversa da secante hiperbólica.
asinh(x) Inversa do seno hiperbólico.
atanh(x) Inversa da tangente hiperbólica.

Teste seus conhecimentos


T3.1-6 Para alguns valores de x na faixa 0 … x … 5, confirme que sen(ix) = i senh x.
T3.1-7 Para alguns valores de x na faixa -10 … x … 10, confirme que

3.2 Funções definidas pelo usuário


ARQUIVO Outro tipo de arquivo M é o arquivo de função. Diferentemente de um arquivo de
DE FUNÇÃO script, todas as variáveis em um arquivo de função são variáveis locais, o que signi-
fica que seus valores estão disponíveis apenas dentro da função. Arquivos de funções
VARIÁVEL são úteis quando você precisa repetir um conjunto de comandos algumas vezes. Eles
LOCAL
são blocos de construção de programas maiores.
Para criar um arquivo de função, abra o Editor/Debugador conforme a descrição
LINHA DE no Capítulo 1. A primeira linha em um arquivo de função deve ser uma linha de defi-
DEFINIÇÃO nição de função que apresenta uma lista de entradas e saídas. Essa linha distingue um
DE FUNÇÃO
arquivo de função de um arquivo de script. Sua sintaxe é a seguinte:
function [variaveis de saida] = nome_da_funcao(variaveis
de entrada)
As variáveis de saída são aquelas cujos valores são calculados pela função, utilizan-
do os valores dados das variáveis de entrada. Note que as variáveis de saída devem
estar entre colchetes (que são opcionais se houver apenas uma saída), enquanto que
as variáveis de entrada devem estar entre parênteses. O nome_da_funcao deve
ser igual ao nome do arquivo em que ela é salva (com a extensão .m). Isto é, se o
nome de uma função for drop, ela deve ser salva no arquivo drop.m. A função é
“chamada” quando digitamos o seu nome (por exemplo, drop) na linha de comando.
120 Introdução ao MATLAB para Engenheiros

A palavra function na linha de definição de função deve ser escrita com letras
minúsculas. Antes de nomear uma função, você pode utilizar a função exist para
verificar se outra função possui o mesmo nome.

Alguns exemplos de funções simples


As funções operam variáveis dentro do seu próprio espaço de trabalho (chamadas de
variáveis locais), que é separado do espaço de trabalho (workspace) que você acessa
no prompt de comando do MATLAB. Considere a seguinte função fun definida pelo
usuário.
function z = fun(x,y)
u = 3*x;
z = u + 6*y.^2;
Note a utilização do operador de exponenciação de arranjo (.^). Isso permite à fun-
ção aceitar y como um arranjo. Agora considere o que acontece quando você chama
essa função de várias maneiras na janela de Comandos. Chame a função com seu
argumento de saída:

ou

A função utiliza x = 3 e y = 7 para calcular z.


Chame a função sem seu argumento de saída e tente acessar seu valor. Você verá
uma mensagem de erro.

Atribua o argumento de saída a outra variável:

Você pode suprimir a saída inserindo um sinal de ponto e vírgula após a cha-
mada da função. Por exemplo, se você digitar q = fun(3,7), o valor de q será
calculado, mas não exibido.
As variáveis x e y são ditas variáveis locais da função fun. Desse modo, a não
ser que você passe os seus valores nomeando-os x e y, eles não estarão disponíveis
no espaço de trabalho fora da função. A variável u também é local. Por exemplo,
Capítulo 3 ■ Funções e arquivos 121

Compare isso a

Apenas a ordem dos argumentos é importante, não os seus nomes:

Você pode utilizar arranjos como argumentos de entrada:

Uma função pode ter mais de uma saída. Elas devem estar entre colchetes.
Por exemplo, a função circle calcula a área A e a circunferência C de um círcu-
lo, dado o seu raio como um argumento de entrada.
function [A, C] = circle(r)
A = pi*r.^2;
C = 2*pi*r;
A função é chamada da seguinte maneira, se r = 4.

Uma função pode não ter nenhum argumento de entrada e nenhum argumento
de saída. Por exemplo, a função show_date definida pelo usuário calcula e armaze-
na a data na variável today e exibe o valor de today.
function show_date
today = date

Variações na linha de função


Os seguintes exemplos mostram variações permitidas no formato da linha de função.
As diferenças dependem de não haver saída, de haver uma única saída ou de haver
múltiplas saídas.
122 Introdução ao MATLAB para Engenheiros

Linha de definição de função Nome de arquivo


1. function [area_square] = square(side); square.m
2. function area_square = square(side); square.m
3. function volume_box = box(height,width,length); box.m
4. function [area_circle,circumf] = circle(radius); circle.m
5. function sqplot(side); sqplot.m

O exemplo 1 é uma função com uma entrada e uma saída. Os colchetes são op-
cionais quando há apenas uma saída (ver exemplo 2). O exemplo 3 não tem nenhuma
saída e tem três entradas. O exemplo 4 tem duas saídas e uma entrada. O exemplo 5
não tem variável de saída (por exemplo, uma função que gera uma plotagem). Em tais
casos, o sinal de igualdade pode ser omitido.
Linhas de comentário começando com % podem ser inseridas em qualquer lu-
gar no arquivo de função. Entretanto, se você utilizar o comando help para obter
informação sobre a função, o MATLAB exibirá todas as linhas de comentário que se
encontram imediatamente após a linha de definição de função até a primeira linha em
branco ou até a primeira linha executável. A primeira linha de comentário pode ser
acessada pelo comando lookfor.
Podemos chamar funções internas e funções definidas pelo usuário tanto
com as varáveis de saída explicitamente especificadas, como nos exemplos de 1
a 4, ou sem qualquer saída especificada. Por exemplo, podemos chamar a função
square como square(side) se não estivermos interessados na sua variável
de saída area_square (a função pode realizar outra operação que desejamos
que ocorra, como a produção de uma plotagem). Note que, se omitirmos o sinal de
ponto e vírgula no final da sentença de chamada da função, a primeira variável na
lista de variáveis de saída será armazenada na variável padrão ans e será exibida
na tela.

Variações nas chamadas de funções


A seguinte função, chamada drop, calcula a velocidade de queda de um objeto e a
distância percorrida na queda. As variáveis de entrada são a aceleração g, a veloci-
dade inicial v0 e o tempo decorrido t. Note que devemos utilizar operações elemento
a elemento para quaisquer operações que envolvam entradas de funções que sejam
arranjos. Aqui, antecipamos que t será um arranjo, portanto, utilizaremos operador
elemento a elemento (.^).
function [dist,vel] = drop(g,v0,t);
% Calcula a distância percorrida e a
% velocidade de um objeto em queda, como funções
% de g, da velocidade inicial v0 e do tempo t.
vel = g*t + v0;
dist = 0.5*g*t.^2 + v0*t;
Capítulo 3 ■ Funções e arquivos 123

Os exemplos seguintes mostram várias maneiras de se chamar a função drop:


1. Os nomes das variáveis utilizados na definição da função podem, mas não pre-
cisam, ser utilizados quando a função é chamada:
a = 32.2;
initial_speed = 10;
time = 5;
[feet_dropped,speed] = drop(a,initial_speed,time)
2. As variáveis de entrada não precisam ser atribuídas fora da função antes da
chamada:
[feet_dropped,speed] = drop(32.2,10,5)
3. As entradas e as saídas podem ser arranjos:
[feet_dropped,speed]=drop(32.2,10,0:1:5)
Essa chamada de função produz os arranjos feet_dropped e speed, cada um
com seis valores correspondentes aos seis valores de tempo no arranjo 0:1:5.

Variáveis locais
Os nomes das variáveis de entrada dados na linha de definição de função são locais.
Isso significa que outros nomes de variáveis podem ser utilizados quando você chama
a função. Todas as variáveis dentro de uma função são apagadas após o fim da execu-
ção, exceto quando os mesmos nomes de variáveis aparecem na lista de variáveis de
saída utilizada na chamada da função.
Por exemplo, quando utilizarmos a função drop em um programa, podemos
atribuir um valor à variável dist antes da chamada da função, e esse valor não será
alterado após a chamada porque seu nome não foi utilizado na lista de saída da sen-
tença de chamada (a variável feet_dropped foi utilizada no lugar de dist). Isto
é o que se entende pelo fato de as variáveis das funções serem “locais” à própria
função. Essa característica nos permite escrever funções úteis em geral utilizando
as variáveis que quisermos, sem nos preocuparmos se a chamada do programa uti-
lizará os mesmos nomes de variáveis para outros cálculos. Isso significa que nossos
arquivos de funções são “portáveis” e não precisam ser reescritos toda vez que forem
utilizados em diferentes programas.
Talvez você considere o Debugador de Arquivos M (M-file Debugger) útil para
localizar erros em arquivos de função. Erros em tempo de execução em funções são
mais difíceis de serem localizados porque o espaço de trabalho local da função é per-
dido quando um erro força o retorno para o espaço de trabalho base do MATLAB. O
Debugador possibilita acesso ao espaço de trabalho da função e permite mudar valo-
res. Ele também permite executar uma linha por vez e definir pontos de parada, que
são locais específicos no arquivo em que a execução é suspensa temporariamente. As
aplicações neste texto provavelmente não exigirão a utilização do Debugador, que é
útil principalmente no caso de programas muito grandes. Para mais informações, veja
o Capítulo 4 deste livro e também o Capítulo 4 de [Palm, 2005].
124 Introdução ao MATLAB para Engenheiros

Variáveis globais
O comando global declara certas variáveis como globais e, portanto, seus valores
ficam disponíveis para o espaço de trabalho básico e para outras funções que de-
clarem essas variáveis como globais. A sintaxe para declarar as variáveis A, X e Q é
global A X Q. Utilize um espaço, e não uma vírgula, para separar as variáveis.
Qualquer atribuição a essas variáveis, em qualquer função ou no espaço de trabalho
básico, estará disponível para todas as outras funções que declarem essas variáveis
como globais. Se a variável global ainda não existir quando você digitar pela primeira
vez o comando global, ela será inicializada como uma matriz vazia. Se uma va-
riável com o mesmo nome da variável global já existir no espaço de trabalho atual, o
MATLAB exibirá um alerta e mudará o valor da variável para que ele coincida com
o valor da variável global. Em uma função definida pelo usuário, utilize o coman-
do global na primeira linha executável. Coloque o mesmo comando no programa
principal que chama essa função. É habitual, mas não necessário, escrever os nomes
de variáveis globais com letras maiúsculas e utilizar nomes grandes, de maneira a
tornar essas variáveis facilmente reconhecíveis.
É difícil dizer com precisão em que situação é conveniente declarar uma variá-
vel como global. Na verdade, é recomendável que se evite a utilização de variáveis
globais. Isso pode ser feito muita vezes utilizando-se funções anônimas e aninhadas,
conforme será discutido na Seção 3.3.

Function handle (descritores de funções)


Um function handle é uma forma de referenciar uma dada função. Primeiramente
introduzidos no MATLAB 6.0, os handles de funções passaram a ser largamente utili-
zados e aparecem frequentemente em exemplos na documentação do MATLAB. Você
pode criar um handle para qualquer função utilizando o sinal @ antes do nome da
função. Você pode então dar um nome ao handle e utilizá-lo para referenciar a função.
Por exemplo, considere a seguinte função definida pelo usuário, que calcula
y = x + 2e-x - 3.
function y = f1(x)
y = x + 2*exp(-x) - 3;
Para criar um handle com nome fh1 para essa função, você deve digitar fh1 = @f1.

Funções de funções
Algumas funções do MATLAB atuam em funções. Esses comandos são chamados
de funções de funções. Se a função sobre a qual se atua não é uma função simples, é
mais conveniente definir a função em um arquivo M. Você pode passar a função para
a função principal utilizando um handle.
Encontrando os zeros de uma função Você pode utilizar a função fzero para
encontrar o zero de uma função de uma única variável, que é indicado por x. Sua
sintaxe básica é
fzero(@function, x0)
em que @function é um function handle e x0 é uma estimativa inicial do zero
fornecida pelo usuário. A função fzero retorna um valor de x que é próximo de x0.
Capítulo 3 ■ Funções e arquivos 125

Ela identifica apenas pontos em que a função cruza o eixo x, não pontos em que a fun-
ção apenas toca o eixo. Por exemplo, fzero(@cos,2) retorna o valor x = 1,5708.
Como outro exemplo, y = x2 é uma parábola que toca o eixo x, todavia, o zero não
será encontrado.
A função fzero(@function,x0) tenta encontrar um zero de function
próximo de x0, se x0 for um escalar. O valor retornado por fzero é próximo de um
ponto em que function muda de sinal, ou NaN, se a busca falhar. Nesse caso, a
busca termina quando o intervalo de busca é expandido até Inf, NaN, ou se um valor
complexo for encontrado (fzero não é capaz de encontrar zeros complexos). Se x0
for um vetor de comprimento 2, fzero presume que x0 é um intervalo em que o
sinal de function(x0(1)) é diferente do sinal de function(x0(2)). Um
erro ocorre se isso não for verdade. Utilizar fzero com este intervalo garante que
fzero retornará um valor próximo do ponto em que a função muda de sinal. Plotar
a função antes é uma boa maneira de se obter os valores para o vetor x0. Se a função
não for continua, fzero pode retornar valores que são pontos de descontinuidades,
em vez de zeros. Por exemplo, x = fzero(@tan,1) retorna x = 1.5708, um
ponto de descontinuidade em tan(x).
As funções podem ter mais do que um zero, por isso é útil plotar a função
primeiro e depois utilizar fzero para obter uma resposta que é mais precisa do que
uma resposta lida fora da plotagem. A Figura 3.2-1 mostra a plotagem da função y = x
+ 2e-x - 3, que tem dois zeros, um próximo a x = -0,5 e outro próximo a x = 3. Utili-
zando o arquivo de função f1 criado anteriormente para encontrar o zero próximo a x
= -0,5, digite x = fzero(@f1,-0,5). A resposta é x = -0,5831. Para encontrar
o zero próximo a x = 3, digite x = fzero(@f1,3). A resposta é x = 2,8887.

2,5

1,5

0,5
y

⫺0,5

⫺1

⫺1,5
⫺1 0 1 2 3 4 5
x
FIGURA 3.2-1 Plotagem da função y = x + 2e-x - 3.
126 Introdução ao MATLAB para Engenheiros

A sintaxe fzero(@f1,-0,5) é preferível à sintaxe mais antiga


fzero(’f1’,-0,5).
Minimizando uma função de uma variável A função fminbnd encontra o míni-
mo de uma função de uma única variável, que é indicado por x. Sua sintaxe básica é
fminbnd(@function, x1, x2)
em que @function é um handle da função. A função fminbnd retorna um valor
de x que minimiza a função no intervalo x1 … x … x2. Por exemplo, fminbnd(@
cos,0,4) retorna o valor x = 3,1416.
Entretanto, para utilizar essa função a fim de encontrar o mínimo de funções
mais complicadas, é mais conveniente definir a função em um arquivo de função. Por
exemplo, se y = 1 - xe-x, defina o seguinte arquivo de função:
function y = f2(x)
y = 1-x.*exp(-x);
Para encontrar o valor de x em 0 … x … 5 que define o mínimo de y, digite x =
fminbnd(@f2,0,5). A resposta é x = 1. Para encontrar o valor mínimo de y, digi-
te y = f2(x). A resposta é y = 0.6321.
Sempre que utilizarmos uma técnica de minimização, devemos verificar se a
solução é um mínimo verdadeiro. Por exemplo, considere o polinômio y = 0,025x5
- 0,0625x4 - 0,333x3 + x2. Sua plotagem é mostrada na Figura 3.2-2. A função tem
dois pontos de mínimo no intervalo -1 6 x 6 4. O mínimo próximo a x = 3 é chamado

4,5

3,5

2,5
y

1,5

0,5

0
⫺1 ⫺0,5 0 0,5 1 1,5 2 2,5 3 3,5 4
x
FIGURA 3.2-2 Plotagem da função y = 0,025x5 - 0,0625x4 - 0,333x3 + x2.
Capítulo 3 ■ Funções e arquivos 127

de um mínimo relativo ou local porque ele está em um vale cujo ponto mais baixo é
maior do que o mínimo em x = 0. O mínimo em x = 0 é o verdadeiro mínimo e tam-
bém é chamado de mínimo global. Primeiramente, crie o arquivo de função
function y = f3(x)
y = polyva1([0.025, -0.0625, -0.333, 1, 0, 0], x);
Para especificar o intervalo -1 … x … 4, digite x = fminbnd(@f3,-1,4).
A resposta dada pelo MATLAB será x = 2.0438e-006, que é essencialmente 0,
o verdadeiro ponto de mínimo. Se especificarmos o intervalo 0,1 … x … 2,5, a resposta
do MATLAB será x = 0.1001, que corresponde ao valor mínimo de y no intervalo
0,1 … x … 2,5. Desse modo, perderemos o verdadeiro ponto de mínimo se ele não
estiver incluído em nosso intervalo especificado.
Além disso, fminbnd pode gerar respostas enganadoras. Se especificarmos
o intervalo 1 … x … 4, a resposta do MATLAB (R2009 b) será x = 2.8236, que
corresponde ao “vale” mostrado na plotagem, mas que não é o ponto de mínimo no
intervalo 1 … x … 4. Nesse intervalo, o ponto de mínimo está na fronteira x = 1. O pro-
cedimento fminbnd procura por um ponto de mínimo correspondente a uma incli-
nação nula. Na prática, o melhor a fazer é utilizar a função fminbnd para determinar
com precisão a localização de um ponto de mínimo cuja localização aproximada já
tenha sido encontrada por outro meio, por exemplo, por meio da plotagem da função.
Minimizando uma função de várias variáveis Para encontrar o mínimo de uma
função de mais de uma variável, utilize a função fminsearch. Sua sintaxe básica é
fminsearch(@function, x0)
em que @function é um handle da função. O vetor x0 é uma estimativa ini-
cial que deve ser fornecida pelo usuário. Por exemplo, para utilizar a função
, primeiro defina-a em um arquivo M utilizando o vetor x cujos ele-
mentos são x(1) = x e x(2) = y.
function f = f4(x)
f = x(1).*exp(-x(1).^2-x(2).^2);
Suponha que uma boa estimativa inicial seja em torno de x = y = 0. A sessão é

Portanto, o mínimo ocorre em x = -0,7071, y = 0.


A função fminsearch muitas vezes é capaz de lidar com descontinuidades,
particularmente se elas não ocorrem próximas da solução. A função fminsearch
pode levar apenas a soluções locais, e procura pelo mínimo apenas no conjunto dos
números reais; isto é, x deve consistir apenas em variáveis reais, e function deve
retornar apenas números reais. Quando x tiver valores complexos, eles devem ser
separados em parte real e parte imaginária.
A Tabela 3.2-1 resume a sintaxe básica dos comandos fminbnd, fminse-
arch e fzero.
128 Introdução ao MATLAB para Engenheiros

TABELA 3.2-1 Funções para determinar mínimos e raízes de funções


Função Descrição
fminbnd(@function,x1,x2) Retorna um valor de x no intervalo x1 … x … x2 que
corresponde a um mínimo de uma função de uma variável
descrita pelo handle @function.
fminsearch(@function,x0) Utiliza o vetor inicial x0 para encontrar um mínimo da função
multivariável descrita pelo handle @function.
fzero(@function,x0) Utiliza o valor inicial x0 para encontrar um zero de uma função
de uma variável descrita pelo handle @function.

Essas funções apresentam sintaxe estendida que não é descrita aqui. Com essas
formas você pode especificar a precisão necessária para a solução e o número de
passos a serem realizados até o fim da execução. Utilize o comando help para saber
mais sobre essas funções.

EXEMPLO 3.2-1 Otimização de um canal de irrigação

A Figura 3.2-3 mostra o corte transversal de um canal de irrigação. Uma análise prelimi-
nar mostrou que a área da seção transversal do canal deveria ser de 100 ft2 para canalizar
a vazão de água desejada. Para minimizar o custo do concreto utilizado na construção do
canal, desejamos minimizar o comprimento do perímetro do canal. Encontre os valores de
d, b e ␪ que minimizam esse comprimento.
■ Solução
O comprimento do perímetro L pode ser escrito em termos da base b, da profundidade d e
do ângulo ␪ da seguinte maneira:

A área da seção transversal trapezoidal é

As variáveis a serem selecionadas são b, d e ␪. Podemos reduzir o número de variáveis


resolvendo a última equação para b, obtendo

␪ d ␪

FIGURA 3.2-3 Seção transversal de um canal de irrigação.


Capítulo 3 ■ Funções e arquivos 129

Substitua essa expressão na equação para L. O resultado é

Devemos agora encontrar os valores de d e ␪ que minimizam L.


Defina primeiramente o arquivo de função para o comprimento do perímetro. Seja
x o vetor [d ␪].
function L = channel(x)
L = 100./x(1) - x(1)./tan(x(2)) + 2*x(1)./sin(x(2));
Em seguida, utilize a função fminsearch. Utilizando como estimativa inicial d = 20 ft
e ␪ = 1 rad, a sessão é

Assim, o comprimento do perímetro mínimo é obtido com d = 7,5984 ft e ␪ = 1,0472


rad, ou ␪ = 60°. Utilizando uma estimativa inicial diferente, d = 1 ft, ␪ = 0,1 rad, a mes-
ma resposta é obtida. O valor da base b correspondente a esses valores é b = 8,7738.
Entretanto, utilizando a estimativa inicial d = 20 ft e ␪ = 0,1 rad, o resultado fisica-
mente significativo produzido é d = -781 ft e ␪ = 3,1416 rad. A estimativa inicial d = 1 ft
e ␪ = 1,5 rad produz o resultado fisicamente significativo d = 3,6058 ft e ␪ = -3,1416 rad.
A equação para L é uma função das duas variáveis d e ␪, e ela forma uma superfície
quando L é plotada versus d e ␪ em um sistema de coordenadas tridimensional. Essa su-
perfície pode ter múltiplos picos, múltiplos vales e “passagens montanhosas” chamadas
de pontos de sela que podem enganar uma técnica de otimização. Diferentes estimativas
iniciais para o vetor solução podem fazer com que uma técnica de otimização encontre
diferentes vales e, assim, retorne diferentes resultados. Podemos utilizar as funções de
plotagem de superfícies abordadas no Capítulo 5 para procurar por múltiplos vales, ou
podemos utilizar um número maior de valores iniciais para d e ␪, digamos, ao longo das
faixas fisicamente realistas 0 6 d 6 30 e 0 6 ␪ 6 ␲/2. Se todas as respostas fisicamente
significativas forem idênticas, então podemos estar razoavelmente seguros de que encon-
tramos o mínimo.

Teste seus conhecimentos


T3.2-1 A equação e-0,2x sen(x + 2) = 0,1 tem três soluções no intervalo 0 6 x 6 10.
Encontre essas três soluções. (Respostas: x = 1,0187, 4,5334, 7,0066)
T3.2-2 A função y = 1 + e-0,2x sen(x + 2) tem dois pontos de mínimo no intervalo 0
6 x 6 10. Encontre os valores de x e y em cada mínimo. (Respostas: (x, y) =
(2,5150, 0,4070), (9,0001, 0,8347))
T3.2-3 Encontre a profundidade d e o ângulo ␪ para minimizar o comprimento do
perímetro do canal mostrado na Figura 3.2-3 correspondente a uma área de
200 ft2. (Resposta: d = 10,7457 ft, ␪ = 60°)
130 Introdução ao MATLAB para Engenheiros

3.3 Tópicos adicionais sobre funções


Além dos handles de funções, funções anônimas, subfunções e funções aninhadas
são algumas das mais novas funcionalidades do MATLAB. Esta seção aborda as ca-
racterísticas básicas desses novos tipos de função.

Métodos para a chamada de funções


Há quatro maneiras de se invocar, ou “chamar”, uma função:
1. Como uma string de caracteres identificando o arquivo de função apropriado.
2. Como um handle da função.
3. Como um objeto de função “inline”.
4. Como uma expressão de string.
Exemplos são apresentados a seguir para a função fzero utilizando a função fun1
definida pelo usuário, que calcula y = x2 - 4.
1. Como uma string de caracteres identificando o arquivo de função apropriado,
que é
function y = fun1(x)
y = x.^2-4;
a função pode ser chamada da seguinte maneira, para calcular o zero ao longo
da faixa 0 … x … 3:
>>x = fzero(’fun1’,[0, 3])
2. Como um handle para um arquivo de função existente:
>>x = fzero(@fun1,[0, 3])
3. Como um objeto de função “inline”:
>>fun1 = ’x.^2-4’;
>>fun_inline = inline(fun1);
>>x = fzero(fun_inline,[0, 3])
4. Como uma expressão de string:
>>fun1 = ’x.^2-4’;
>>x = fzero(fun1,[0, 3])
ou como
>>x = fzero(’x.^2-4’,[0, 3])
O método 2 não estava disponível anteriormente para o MATLAB 6.0 e agora
é preferível ao método 1. O terceiro método não é discutido neste texto porque ele é
mais lento do que os dois primeiros. O terceiro e o quarto métodos são equivalentes
porque ambos utilizam a função inline; a única diferença é que com o quarto
método o MATLAB determina que o primeiro argumento de fzero é uma variável
string e chama a função inline para converter a variável string em um objeto de
Capítulo 3 ■ Funções e arquivos 131

função inline. O método do handle da função (método 2) é o mais rápido, seguido do


método 1.
Além da melhoria na velocidade, outra vantagem de se utilizar o handle da fun-
ção é que ele fornece acesso a subfunções, que normalmente não são visíveis de fora
do arquivo M que as define. Isso será discutido posteriormente neste capítulo.

Tipos de funções
Neste ponto é útil rever os tipos de funções existentes no MATLAB. Há funções in-
ternas, como clear, sin e plot, que não são arquivos M, e algumas funções que
são arquivos M, tais como a função mean. Além disso, os seguintes tipos de funções
definidas pelo usuário podem ser criados no MATLAB.

FUNÇÃO ■ A função primária é o primeiro tipo de função em um arquivo M e tipicamente


PRIMÁRIA contém o programa principal. Seguindo a função primária no mesmo arquivo,
pode haver qualquer número de subfunções, que podem servir como sub-rotinas
para a função primária. Normalmente a função primária é a única função em um
arquivo M que você pode chamar a partir da linha de comando do MATLAB ou
a partir de outro arquivo de função. Você pode chamar essa função utilizando
o nome do arquivo M no qual ela está definida. Nós normalmente utilizamos o
mesmo nome para a função e para o arquivo, mas se o nome da função for di-
ferente do nome do arquivo, você deve utilizar o nome do arquivo para chamar
a função.
FUNÇÃO ■ As funções anônimas permitem criar uma função simples sem a necessidade de
ANÔNIMA gerar um arquivo M para ela. Você pode construir uma função anônima tanto
na linha de comando do MATLAB quanto dentro de outra função ou script. As-
sim, as funções anônimas possibilitam uma maneira rápida de se construir uma
função a partir de qualquer expressão do MATLAB, sem a necessidade de criar,
nomear e salvar um arquivo.
SUBFUNÇÕES ■ As subfunções são situadas na função primária e são chamadas pela própria
função primária. Você pode utilizar múltiplas funções dentro de um único ar-
quivo M de função primária.
FUNÇÕES ■ As funções aninhadas são funções definidas dentro de outra função. Elas po-
ANINHADAS dem auxiliar a melhorar a legibilidade do seu programa e também fornecem a
você maior flexibilidade para acessar as variáveis no arquivo M. A diferença
entre as funções aninhadas e as subfunções reside no fato de que as subfun-
ções normalmente não podem ser acessadas de fora do seu arquivo de função
primária.
■ As funções sobrecarregadas são funções que respondem diferentemente a di-
ferentes tipos de argumentos de entrada. Elas são similares a funções sobrecar-
regadas em qualquer linguagem orientada a objeto. Por exemplo, uma função
sobrecarregada pode ser criada para tratar de forma diferente entradas inteiras e
entradas da classe double.
FUNÇÃO ■ As funções privadas permitem restringir o acesso a uma função. Elas podem ser
PRIVADA chamadas apenas a partir de um arquivo M de função no diretório pai.
132 Introdução ao MATLAB para Engenheiros

Funções anônimas
As funções anônimas permitem criar uma função simples sem a necessidade de criar
um arquivo M para ela. Você pode construir uma função anônima tanto na linha de
comando do MATLAB quanto dentro de outra função ou script. A sintaxe para criar
uma função anônima a partir de uma expressão é
fhandle = @(arglist) expr
em que arglist é uma lista de argumentos de entrada separados por vírgulas a
ser passada para a função e expr é uma expressão qualquer válida do MATLAB.
Essa sintaxe cria o function handle fhandle, que permite chamar a função. Note
que essa sintaxe é diferente daquela utilizada para criar outros handles de funções,
fhandle = @functionname. O handle também é útil para passar a função anô-
nima em uma chamada de alguma outra função, da mesma forma que qualquer outro
function handle.
Por exemplo, para criar uma simples função sq para calcular o quadrado de um
número, digite
sq = @(x) x.^2;
Para melhorar a legibilidade, você pode escrever a expressão entre parênteses, como
sq = @(x) (x.^2);. Para executar a função, digite o nome do handle da função,
seguido pelos argumentos de entrada entre parênteses. Por exemplo,

Você pode achar que essa função anônima em particular não economizará nenhum
trabalho, porque digitar sq([5,7]) exige nove toques de tecla, um a mais do que o
necessário para digitar [5,7].^2. Aqui, entretanto, a função anônima protege você
de se esquecer de digitar o ponto (.) necessário para a exponenciação de arranjo. As
funções anônimas são úteis, entretanto, para funções mais complicadas que envolvem
numerosos toques de tecla.
Você pode passar o handle de uma função anônima para outras funções. Por
exemplo, para encontrar o mínimo do polinômio 4x2 - 50x + 5 ao longo do intervalo
[-10, 10], você pode digitar

Se você não for utilizar esse polinômio novamente, você pode omitir a linha de defi-
nição do handle digitando apenas
>>fminbnd(@(x) 4*x.^2 - 50*x + 5, -10, 10)
Capítulo 3 ■ Funções e arquivos 133

Múltiplos argumentos de entrada Você pode criar funções anônimas que tenham
mais de uma entrada. Por exemplo, para definir a função
>>sqrtsum = @(x,y) sqrt(x.^2 + y.^2);
Então

Como outro exemplo, considere a função z = Ax + By definindo um plano. Às


variáveis escalares A e B devem ser atribuídos valores antes de você criar o handle da
função. Por exemplo,

Sem Argumentos de Entrada Para construir um handle para uma função anônima
que não tem argumentos de entrada, utilize parênteses vazios para a lista de argumen-
tos de entrada, como mostrado a seguir: d = @() date;.
Utilize parênteses vazios quando chamar a função, da seguinte maneira:

Você deve incluir os parênteses. Se você não o fizer, o MATLAB simplesmente iden-
tifica handle, mas não executa a função.
Chamando uma função dentro de outra Uma função anônima pode chamar ou-
tra para implementar a composição de função. Considere a função 5 sen(x3). Ela é
composta pelas funções g(y) = 5 sen(y) e f(x) = x3. Na sessão seguinte, a função cujo
handle é h chama as funções cujos handles são f e g para calcular 5 sen(23).

Para preservar uma função anônima de uma sessão do MATLAB para outra,
salve o handle da função em um arquivo MAT. Por exemplo, para salvar a função
associada com o handle h, digite save anon.mat h. Para recuperá-la em uma
sessão posterior, digite load anon.mat h.
Variáveis e funções anônimas As variáveis podem aparecer em funções anônimas
de duas maneiras:
■ Como variáveis especificadas na lista de argumentos, tal como f = @(x)
x.^3;.
134 Introdução ao MATLAB para Engenheiros

■ Como variáveis no corpo da expressão, tais como as variáveis A e B em plane


= @(x,y) A*x + B*y. Nesse caso, quando a função é criada, o MATLAB
captura os valores dessas variáveis e retém aqueles valores durante o tempo de
vida do handle da função. Nesse exemplo, se os valores de A e B forem altera-
dos após a criação do handle, seus valores associados ao handle não mudarão.
Tenha em mente que essa característica apresenta vantagens e desvantagens.

Subfunções
Um arquivo M de função pode conter mais do que uma função definida pelo usuário.
A primeira função definida no arquivo é chamada de função primária, cujo nome é
igual ao nome do arquivo M. Todas as outras funções no arquivo são chamadas de
subfunções. As subfunções são normalmente “visíveis” apenas para a função primária
e para outras subfunções no mesmo arquivo; isto é, elas normalmente não podem ser
chamadas por programas ou funções que estejam fora do arquivo. Entretanto, essa
limitação pode ser removida com a utilização de handles de funções, como veremos
posteriormente nesta seção.
Crie inicialmente a função primária com uma linha de definição de função e
o seu código, e nomeie o arquivo com o nome dessa função. Em seguida, crie cada
subfunção com a sua própria linha de definição de função e o seu próprio código. A
ordem das subfunções não interessa, mas os nomes das funções devem ser únicos
dentro do arquivo M.
A ordem em que o MATLAB verifica a existência de funções é muito importan-
te. Quando uma função é chamada de dentro de um arquivo M, o MATLAB primeiro
verifica se ela é uma função interna, como a função sin. Se não, ele verifica se
ela é uma subfunção no arquivo, e em seguida verifica se ela é uma função privada
(que é um arquivo M de função que reside no subdiretório private da função que
a está chamando). Em seguida, o MATLAB verifica se ela é um arquivo M padrão
no seu caminho de busca. Assim, uma vez que o MATLAB verifica a existência de
subfunções antes de verificar se ela é uma função privada ou um arquivo M de fun-
ção padrão, você pode utilizar subfunções com o mesmo nome de outro arquivo M
existente. Essa característica permite a você nomear subfunções sem se preocupar se
existe outra função com o mesmo nome, então você não precisa escolher nomes lon-
gos de função para evitar conflitos. Essa característica também o protege de utilizar
outra função sem querer.
Note que você pode até mesmo substituir uma função do MATLAB dessa ma-
neira. O exemplo que segue mostra como a função mean do MATLAB pode ser
substituída pela nossa própria definição de média. Consideremos, por exemplo, o
valor quadrático médio. A função mean é uma subfunção. A função subfun_demo
é a função primária.
function y = subfun_demo(a)
y = a - mean(a);
%
function w = mean(x)
w = sqrt(sum(x.^2))/length(x);
Capítulo 3 ■ Funções e arquivos 135

Eis a seguir um exemplo de sessão.

Se tivéssemos utilizado a função mean do MATLAB, teríamos obtido uma res-


posta diferente, isto é,

Assim, a utilização de subfunções permite reduzir o número de arquivos que


definem suas funções. Por exemplo, se não fosse pela subfunção mean no exemplo
anterior, nós teríamos que ter definido um arquivo M separado para nossa função
mean e ter dado um nome diferente de modo a não confundi-la com a função do
MATLAB de mesmo nome.
As subfunções são normalmente visíveis apenas para a função primária e para
outras subfunções no mesmo arquivo. Entretanto, podemos utilizar um function
handle para permitir o acesso à subfunção a partir de um arquivo M externo, assim
como o exemplo a seguir mostra. Crie o seguinte arquivo M com a função primária
fn_demo1(range) e a subfunção testfun(x) para calcular os zeros da função
(x2 - 4) cos x ao longo da faixa especificada na variável de entrada range. Note a uti-
lização de um function handle na segunda linha.
function yzero = fn_demo1(range)
fun = @testfun;
[yzero,value] = fzero(fun,range);
%
function y = testfun(x)
y = (x.^2-4).*cos(x);
Uma sessão de teste gera os seguintes resultados:

Portanto, o zero de (x2 - 4) cos x dentro da faixa 3 … x … 6 ocorre em x = 4,7124.

Funções aninhadas
Com o MATLAB 7 você pode agora inserir as definições de uma ou mais funções
dentro de outra função. Funções assim definidas são ditas aninhadas com a fun-
ção principal. Você também pode aninhar funções dentro de outras funções aninha-
das. Assim como um arquivo de função qualquer, uma função aninhada contém os
componentes típicos de um arquivo de função. Você deve, todavia, sempre finalizar
uma função aninhada com a sentença end. De fato, se um arquivo M contiver pelo
136 Introdução ao MATLAB para Engenheiros

menos uma função aninhada, você deve finalizar todas as funções no arquivo com
a sentença end, incluindo as subfunções, não interessa se elas contiverem ou não
funções aninhadas.
O seguinte exemplo constrói um function handle para uma função aninhada
p(x) e passa esse handle para a função fminbnd do MATLAB para que seja en-
contrado o ponto de mínimo de uma parábola. A função parabola constrói e re-
torna o handle f para a função aninhada p que avalia a parábola ax2 + bx + c. Esse
handle é passado para fminbnd.

Na janela de Comandos, digite

Note que a função p(x) pode ver as variáveis a, b e c no espaço de trabalho da


função parabola.
Compare essa abordagem com aquela que exige a utilização de variáveis glo-
bais. Primeiramente, crie a função p(x).
function y = p(x)
global a b c
y = polyval ([a, b, c], x);
Em seguida, na janela de Comandos, digite
>>global a b c
>>a = 4; b = -50; c = 5;
>> fminbnd (@p, -10, 10)
As funções aninhadas podem parecer iguais às subfunções, mas não são. As
funções aninhadas apresentam duas propriedades únicas:
1. Uma função aninhada pode acessar os espaços de trabalho de todas as funções
dentro das quais ela está aninhada. Assim, por exemplo, uma variável que tenha
um valor atribuído a ela pela função primária pode ser lida ou sobrescrita por
uma função aninhada em algum nível dentro da função principal. Além disso,
uma variável atribuída em uma função aninhada pode ser lida ou sobrescrita por
qualquer uma das funções que contenha a referida função aninhada.
Capítulo 3 ■ Funções e arquivos 137

2. Se você construir um handle para uma função aninhada, ele não apenas ar-
mazena a informação necessária para acessar a função aninhada, mas tam-
bém armazena os valores de todas as variáveis compartilhadas entre a fun-
ção aninhada e as outras funções nas quais ela está contida. Isso significa
que aquelas variáveis permanecem na memória entre as chamadas feitas por
meio do handle.
Considere a seguinte representação de algumas funções cujos nomes são A, B,
..., E.

Você pode chamar uma função aninhada de várias maneiras.


1. Você pode chamá-la a partir do nível imediatamente acima dela. (No código
anterior, a função A pode chamar B ou D, mas não C ou E.)
2. Você pode chamá-la a partir de uma função aninhada no mesmo nível dentro do
mesmo diretório pai. (A função B pode chamar D, e D pode chamar B.)
3. Você pode chamá-la a partir de uma função em qualquer nível abaixo. (A fun-
ção C pode chamar B ou D, mas não E.)
4. Se você construir um handle para uma função aninhada, você pode chamar a
função aninhada a partir de qualquer função do MATLAB que tenha acesso ao
handle.
Você pode chamar uma subfunção a partir de qualquer função aninhada no mesmo
arquivo M.
138 Introdução ao MATLAB para Engenheiros

Funções privadas
As funções privadas residem em subdiretórios com o nome especial private, e
elas são visíveis apenas para as funções do diretório pai. Considere que o diretório
rsmith esteja no caminho de busca do MATLAB. Um subdiretório de rsmith
que tenha o nome private pode conter funções que apenas as funções em rs-
mith são capazes de chamar. Uma vez que as funções privadas são invisíveis fora
do diretório pai rsmith, elas podem ter os mesmos nomes que funções em outros
diretórios. Isso é útil se o diretório principal for utilizado por vários indivíduos e se
R. Smith quiser criar uma versão pessoal de uma função em particular e manter a
original no diretório principal. Uma vez que o MATLAB procura por funções pri-
vadas antes de procurar por arquivos M padrão, ele encontrará uma função privada
de nome, digamos, cylinder.m, antes de encontrar um arquivo M não privado de
nome cylinder.m.
As funções primárias e as subfunções podem ser implementadas como funções
privadas. Para gerar um diretório privado, crie um subdiretório de nome private
utilizando o procedimento padrão para a criação de um diretório ou de uma pasta no
seu computador, mas não insira o diretório privado no seu caminho de busca.

3.4 Trabalhando com arquivos de dados


Um arquivo de dados ASCII pode ter uma ou mais linhas de texto no começo, cha-
madas de cabeçalho. Elas podem ser comentários que descrevem o que os dados
representam, a data em que foram criados e quem criou os dados, por exemplo.
Uma ou mais linhas de dados, arranjadas em linhas e colunas, são encontradas
após cabeçalho. Os números em cada linha podem ser separados por espaços ou
por vírgulas.
Se for conveniente editar o arquivo de dados, o ambiente do MATLAB propor-
ciona algumas maneiras de trazer dados criados em outros aplicativos para o espaço
de trabalho do MATLAB, um processo chamado de importação de dados, e também
de “empacotar” variáveis do espaço de trabalho de modo que os dados possam ser
exportados para outros aplicativos.
Se o arquivo tiver um cabeçalho ou se os dados estiverem separados por vír-
gulas, o MATLAB produzirá uma mensagem de erro. Para corrigir essa situação,
primeiro carregue os arquivos de dados em um editor de textos, remova o cabeçalho
e substitua as vírgulas por espaços. Para recuperar esses dados no MATLAB, digite
load filename. Se o arquivo tiver m linhas com n valores em cada linha, os
dados serão atribuídos a uma matriz m × n que tenha o mesmo nome que o arquivo
sem a extensão. Seu arquivo de dados pode conter qualquer extensão exceto .mat,
de modo que o MATLAB não tente carregar o arquivo de dados como um arquivo do
espaço de trabalho.

Importando arquivos de planilhas


Alguns programas de planilhas armazenam dados no formato .wk1. Você pode utili-
zar o comando M =wk1read(’filename’) a fim de importar esses dados para o
Capítulo 3 ■ Funções e arquivos 139

MATLAB e armazená-los na matriz M. O comando A = xlsread(’filename’)


importa o arquivo filename.xls do Microsoft Excel para o arranjo A. O coman-
do [A, B] = xlsread(’filename’) importa todos os dados numéricos para
o arranjo A e todos os dados de texto para o arranjo de células B.

O Assistente de Importação (Import Wizard)


Você pode utilizar o Assistente de Importação (Import Wizard) para importar mui-
tos tipos de formatos de dados ASCII, incluindo dados no clipboard. O Assistente
de Importação apresenta uma série de caixas de diálogo na qual você especifica o
nome do arquivo, o delimitador utilizado no arquivo e as variáveis que você deseja
importar.
Faça o seguinte para importar essa amostra de arquivo de dados ASCII
testdata.txt:

1. Ative o Assistente de Importação digitando uiimport ou selecionando a op-


ção Import Data no menu File da Área de Trabalho do MATLAB. O Assistente
de Importação exibirá uma caixa de diálogo para que você especifique o nome
do arquivo que deseja importar.
2. O Assistente de Importação processará os conteúdos do arquivo, exibirá abas
identificando as variáveis que ele reconhece no arquivo e mostrará uma por-
ção dos dados em um grid, similar a uma planilha. O Assistente de Impor-
tação utiliza o caractere de espaço como o delimitador padrão. Após clicar
em Next, o Assistente de Importação tentará identificar o delimitador (ver
Figura 3.4-1).
3. Na próxima caixa de diálogo, o Assistente de Importação exibirá uma lista
das variáveis que ele encontrou no arquivo. Ele também exibirá o conteúdo
da primeira variável na lista. Neste exemplo há apenas uma variável, de nome
testdata.
4. Escolha as variáveis que você deseja importar clicando nas caixas de seleção
ao lado dos seus nomes. Por padrão, inicialmente todas as variáveis estarão

FIGURA 3.4-1 A primeira tela do Assistente de Importação (Import Wizard).


140 Introdução ao MATLAB para Engenheiros

selecionadas para importação. Após selecionar as variáveis que deseja importar,


clique no botão Finish a fim de importar os dados para o espaço de trabalho do
MATLAB.
Para importar dados a partir do clipboard, selecione Paste Special no menu Edit. Em
seguida, vá para o passo 2. O nome de variável padrão é A_pastespecial.

Exportando arquivos de dados ASCII


Você pode querer exportar uma matriz do MATLAB como um arquivo de dados AS-
CII em que as linhas e colunas são representadas como valores numéricos separados
por espaços. Para exportar uma matriz do MATLAB como um arquivo de dados AS-
CII, você pode utilizar o comando save, especificando o qualificador –ASCII, ou
a função dlmwrite. O comando save é fácil de ser utilizado; entretanto, a função
dlmwrite proporciona maior flexibilidade, permitindo especificar qualquer carac-
tere como um delimitador e exportar subconjuntos de um arranjo por meio da especi-
ficação de uma faixa de valores.
Suponha que você tenha criado o arranjo A = [1 2 3 4; 5 6 7 8] no
MATLAB. Para exportar o arranjo utilizando o comando save, digite o seguinte na
janela de Comandos:
>> save my_data.out A –ASCII
Por padrão, o comando save utiliza espaços como delimitadores, mas você pode
utilizar tabulações (tabs) em vez de espaços especificando o qualificador –tab.

3.5 Resumo
Na Seção 3.1, introduzimos apenas algumas das funções matemáticas mais comu-
mente utilizadas. Você agora deve ser capaz de utilizar o Sistema de Ajuda do MAT-
LAB para encontrar outras funções de que você precise. Se for necessário, você pode
criar suas próprias funções utilizando os métodos da Seção 3.2. Essa seção também
abordou handles de funções e sua utilização com funções de funções.
As funções anônimas, as subfunções e as funções aninhadas estenderam as ca-
pacidades do MATLAB. Esses tópicos foram tratados na Seção 3.3. Além dos ar-
quivos de funções, arquivos de dados são úteis em diversas aplicações. A Seção 3.4
mostra como importar e exportar esses arquivos no MATLAB.

Termos-chave
Argumento de função, 117 Function handle, 124
Arquivo de função, 119 Linha de definição de função, 119
Função primária, 131 Subfunções, 131
Função privada, 131 Variáveis globais, 124
Funções aninhadas, 131 Variáveis locais, 119
Funções anônimas, 131
Capítulo 3 ■ Funções e arquivos 141

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do texto.

Seção 3.1
1.* Suponha que y = -3 + ix. Para x = 0, 1 e 2, utilize o MATLAB para calcular as
expressões a seguir. Verifique suas respostas à mão.
a. |y| b.
c. (-5 - 7i)y d.
2.* Sendo x = -5 - 8i e y = 10 - 5i, utilize o MATLAB para calcular as seguintes
expressões. Verifique suas respostas à mão.
a. A magnitude e o ângulo de xy.
b. A magnitude e o ângulo de .
3.* Utilize o MATLAB para encontrar os ângulos correspondentes às seguintes
coordenadas. Verifique suas respostas à mão.
a. (x, y) = (5, 8) b. (x, y) = (-5, 8)
c. (x, y) = (5, -8) d. (x, y) = (-5, -8)
4. Para alguns valores de x, utilize o MATLAB para confirmar que sinh x = (ex -
e-x)/2.
5. Para alguns valores de x, utilize o MATLAB para confirmar que cosh-1 x =
.
6. A capacitância de dois condutores paralelos de comprimento L e raio r, separa-
dos por uma distância d no ar, é dada por

em que ⑀ é a permissividade do ar (⑀ = 8,854 × 10-12 F/m).


Escreva um arquivo de script que aceita entradas do usuário para d, L e
r e calcula e exibe C. Teste o arquivo com os valores L = 1 m, r = 0,001 m e
d = 0,004 m.
7.* Quando uma correia é enrolada em torno de um cilindro, a relação entre as for-
ças da correia em cada lado do cilindro é
F1 = F2e␮␤
em que ␤ é o ângulo de envolvimento da correia e µ é o coeficiente de atrito.
Escreva um arquivo de script que primeiro receba como entradas do usuário os
valores de ␤, µ e F2 e em seguida calcule a força F1. Teste seu programa com
os valores ␤ = 130°, µ = 0,3 e F2 = 100 N. (Dica: cuidado com ␤!)
142 Introdução ao MATLAB para Engenheiros

Seção 3.2
8. A saída da função atan2 do MATLAB é dada em radianos. Escreva uma fun-
ção de nome atan2d que produz uma saída em graus.
9. Escreva uma função que aceita como entrada a temperatura em graus Fahre-
nheit (°F) e calcula o valor correspondente em graus Celsius (°C). A relação
entre as duas é:

Certifique-se de testar a sua função.


10.* Um objeto arremessado verticalmente com uma velocidade v0 alcança uma al-
tura h no tempo t, sendo que

Escreva e teste uma função que calcule o tempo necessário t para o objeto
alcançar uma altura específica h, para um dado valor de v0. As entradas da fun-
ção devem ser h, v0 e g. Teste sua função para o caso em que h = 100m, v0 =
50m/s e g = 9,81 m/s2. Interprete as duas respostas.
11. Um tanque de água consiste em uma parte cilíndrica de raio r e altura h e uma
parte superior hemisférica. O tanque deve ser construído para armazenar 600
m3 quando preenchido. A área da superfície da parte cilíndrica é 2␲rh, e seu
volume é ␲r2h. A área da superfície da parte superior hemisférica é dado por
2␲r2, e seu volume é dado por 2␲r3/3. O custo para construir a parte cilíndrica
do tanque é de $400 por metro quadrado de área da superfície; a parte hemisfé-
rica custa $600 por metro quadrado. Utilize a função fminbnd para calcular o
raio que resulta no custo mínimo. Calcule a altura h correspondente.
12. Uma cerca em torno de uma área tem a forma mostrada na Figura P12. Ela con-
siste em um retângulo de comprimento L e largura W, e em um triângulo retângu-
lo que é simétrico ao eixo horizontal central do retângulo. Suponha que a largura
W (em metros) e a área delimitada A (em metros quadrados) sejam conhecidas.
Escreva uma função definida pelo usuário em que W e A são entradas. As saídas
são o comprimento L necessário para que a área delimitada seja A e o compri-
mento total da cerca. Teste sua função para os valores W = 6 m e A = 80 m2.

FIGURA P12
Capítulo 3 ■ Funções e arquivos 143

13. Uma área cercada consiste em um retângulo de comprimento L e largura 2R,


e em um semicírculo de raio R, como mostrado na Figura P13. A área cercada
deve ter uma área A de 2000 ft2. O custo da cerca é de $50/ft para a porção
curva e de $40/ft para os lados em linha reta. Utilize a função fminbnd para
determinar com uma resolução de 0,01 ft os valores de R e L necessários para
minimizar o custo total da cerca. Calcule também o custo mínimo.

2R R

FIGURA P13

14. Utilizando estimativas de precipitação pluvial, evaporação e consumo de água,


o engenheiro da cidade desenvolveu o seguinte modelo do volume de água no
reservatório como uma função do tempo

V(t) = 109 + 108(1 - e-t/100) - rt


em que V é o volume de água em litros, t é o tempo em dias e r é a taxa de con-
sumo da cidade em litros por dia. Escreva duas funções definidas pelo usuário.
A primeira deve definir a função V(t) para ser utilizada pela função fzero. A
segunda deve utilizar fzero para calcular quanto tempo será necessário para
que o volume de água diminua até x% do seu valor inicial de 109 L. As entra-
das da segunda função devem ser x e r. Teste suas funções para o caso em que
x = 50% e r = 107 L/dia.
15. O volume V e a área da superfície A de um copo de papel cônico são dados por

em que r é o raio da base do cone e h é a altura do cone.


a. Eliminando h, obtenha a expressão para A como uma função de r e V.
b. Crie uma função definida pelo usuário que aceita r como o único argumento
e calcula A para um dado valor de V. Declare V como uma variável global
dentro da função.
c. Para V = 10 in.3, utilize a sua função com a função fminbnd para calcular
o valor de r que minimiza a área A. Qual é o valor correspondente da altura
h? Investigue a sensibilidade da solução plotando V versus r. Quanto r pode
variar em torno do seu valor ótimo até que a área aumente 10% acima do
seu valor mínimo?
144 Introdução ao MATLAB para Engenheiros

16. Um toro tem o formato de uma rosquinha. Se o seu raio interno for a e o seu
raio externo for b, o volume e a área da superfície são dados por:

a. Crie uma função definida pelo usuário que calcula V e A a partir dos argu-
mentos a e b.
b. Suponha que o raio externo deva exceder o raio interno em 2 in. Escreva
um arquivo de script que utiliza a sua função para plotar A e V versus a para
0,25 … a … 4 in.
17. Suponha que se saiba que o gráfico da função y = ax3 + bx2 + cx + d passa por
quatro pontos dados (xi, yi), i = 1, 2, 3, 4. Escreva uma função definida pelo
usuário que aceite esses quatro pontos como entradas e calcule os coeficientes
a, b, c e d. A função deve resolver quatro equações lineares em termos das
quatro incógnitas a, b, c e d. Teste sua função para o caso em que (xi, yi) = (-2,
-20), (0, 4), (2, 68) e (4, 508), cuja resposta é a = 7, b = 5, c = -6 e d = 4.

Seção 3.3
18. Crie uma função anônima para 10e-2x e utilize-a para plotar a função ao longo
da faixa 0 … x … 2.
19. Crie uma função anônima para 20x2 - 200x + 3 e utilize-a:
a. Para plotar a função a fim de determinar a localização aproximada do seu
mínimo.
b. Com a função fminbnd para determinar com precisão a localização do mí-
nimo.
20. Crie quatro funções anônimas para representar a função , que é com-
posta pelas funções h(z) = 6ez, g(y) = 3 cos y e f(x) = x2. Utilize as funções anô-
nimas para plotar ao longo da faixa 0 … x … 4.
21. Utilize uma função primária com uma subfunção para calcular os zeros da fun-
ção 3x3 - 12x2 - 33x + 80 ao longo da faixa -10 … x … 10.
22. Crie uma função primária que utiliza um handle com uma função aninhada para
calcular o mínimo da função 20x2 - 200x + 12 ao longo da faixa 0 … x … 10.

Seção 3.4
23. Utilize um editor de textos para criar um arquivo que contenha os dados a
seguir. Depois, utilize a função load para carregar o arquivo no MATLAB e
utilize a função mean para calcular o valor médio de cada coluna.
55 42 98
49 39 95
63 51 92
58 45 90
Capítulo 3 ■ Funções e arquivos 145

24. Insira e salve os dados fornecidos no Problema 23 em uma planilha. Em se-


guida, importe o arquivo de planilha para a variável A do MATLAB. Utilize o
MATLAB para calcular a soma de cada coluna.
25. Utilize um editor de textos para criar um arquivo a partir dos dados fornecidos
no Problema 23, mas separe cada número com um sinal de ponto e vírgula. Em
seguida, utilize o Assistente de Importação (Import Wizard) para carregar e sal-
var os dados na variável A do MATLAB.
Foto: cortesia de Henry Guckel / Departamento de Engenharia Elétrica,
University of Wisconsin.

Engenharia no
Século XXI…
Nanotecnologia

E
nquanto a tecnologia em larga escala está atraindo muito a atenção pública,
muitos dos desafios e das oportunidades em engenharia no século XXI vão
envolver o desenvolvimento de dispositivos extremamente pequenos e até
mesmo a manipulação de átomos individuais. Essa tecnologia é chamada de nanotec-
nologia porque envolve o processamento de materiais cujo tamanho está em torno de
1 nanômetro (nm), que é 10-9 m, ou 1/1 000 000 mm. A distância entre átomos em
um cristal de silício é de 0,5 nm.
A nanotecnologia se encontra na sua infância, apesar de alguns dispositivos de
trabalho já terem sido criados. O micromotor com um trem de engrenagens mostrado
acima tem uma dimensão de aproximadamente 10-4 m. Esse dispositivo converte
potência elétrica de entrada em movimento. Ele foi construído utilizando-se as pro-
priedades magnéticas de películas de metal galvanizado.
Enquanto estamos aprendendo a como construir tais dispositivos, outro desafio
é desenvolver aplicações inovadoras para eles. Muitas das aplicações propostas até
agora são de natureza médica; pequenas bombas para transporte de medicamentos e
ferramentas cirúrgicas são dois exemplos. Pesquisadores do Laboratório Lawrence
Livermore desenvolveram uma micropinça para tratar aneurismas cerebrais. Ela tem
o tamanho aproximado de um grão de areia e foi construída a partir de vigas de silício
em balanço dotadas de um atuador metálico com memória de forma. Para projetar e
aplicar esses dispositivos, os engenheiros devem, primeiramente, modelar adequada-
mente as suas propriedades mecânicas e elétricas. As funcionalidades do MATLAB
constituem um excelente suporte para essas análises. ■
4
Programando com
o MATLAB

O modo interativo do MATLAB é muito útil para a resolução de problemas simples,


mas problemas mais complexos exigem um arquivo de script. Esse arquivo pode ser
chamado de programa de computador, e o ato de escrevê-lo é chamado de progra-
mação. A Seção 4.1 apresenta uma abordagem geral e eficiente para o projeto e o
desenvolvimento de programas.
A utilidade do MATLAB se torna muito maior com a presença de funções de
tomada de decisão nos seus programas. Essas funções permitem a você escrever pro-
gramas cujas operações dependem dos resultados de cálculos feitos pelo próprio pro-
grama. As Seções 4.2, 4.3 e 4.4 abordam essas funções de tomada de decisão.
O MATLAB também pode repetir cálculos um número específico de vezes ou
até que alguma condição seja satisfeita. Essa funcionalidade permite aos engenheiros
resolver problemas de grande complexidade ou que requerem muitos cálculos. Essas
estruturas de “laço” são abordadas nas Seções 4.5 e 4.6.
A estrutura switch aumenta as capacidades de tomada de decisão do MAT-
LAB. Esse tópico é abordado na Seção 4.7. A utilização do Editor/Debugador do
MATLAB para debugar programas é abordada na Seção 4.8.
A Seção 4.9 discute “simulação”, uma das principais aplicações do MATLAB
que nos permite estudar a operação de sistemas, processos e organizações de alta
complexidade. Tabelas resumindo os comandos do MATLAB introduzidos neste ca-
pítulo aparecem em algumas páginas, e a Tabela 4.10-1 ajudará você a localizar a
informação de que precisa.

4.1 Projeto e desenvolvimento de programas


Neste capítulo, introduzimos operadores relacionais, tais como > e ==, e os dois tipos
de laço utilizados no MATLAB, o laço for e o laço while. Essas funcionalidades,
juntamente com as funções do MATLAB e os operadores lógicos a serem introduzi-
148 Introdução ao MATLAB para Engenheiros

dos na Seção 4.3, formam a base para a construção de programas no MATLAB para
resolver problemas complexos. O projeto de programas de computador para resolver
problemas complexos precisa ser feito de maneira sistemática desde o princípio, a fim
de se evitar consumo de tempo e frustrações posteriores no processo. Nesta seção,
mostraremos como estruturar e gerenciar o processo de projeto de programas.

Algoritmos e estruturas de controle


Um algoritmo é uma sequência ordenada de instruções precisamente definidas que
realiza uma determinada tarefa em uma quantidade finita de tempo. Uma sequência
ordenada significa que as instruções podem ser numeradas, mas um algoritmo muitas
vezes deve ter a habilidade de alterar a ordem de suas instruções utilizando uma es-
trutura de controle. Há três categorias de operações algorítmicas:
Operações sequenciais. Essas instruções são executadas em ordem.
Operações condicionais. Essas estruturas de controle primeiro fazem uma
pergunta que deve ser respondida com verdadeiro ou falso, e em seguida
selecionam a próxima instrução com base na resposta.
Operações iterativas (laços). Essa estrutura de controle repete a execução
de um bloco de instruções.
Nem todo problema pode ser resolvido com um algoritmo, e algumas soluções
algorítmicas potenciais podem falhar em virtude de os algoritmos levarem muito tem-
po para encontrar uma solução.

Programação estruturada
A programação estruturada é uma técnica para o projeto de programas em que uma
hierarquia de módulos é utilizada, cada um tendo uma única entrada e um único ponto
de saída, e em que o controle é passado de cima para baixo através da estrutura sem
ramificações incondicionais para os níveis mais altos. No MATLAB esses módulos
podem ser funções internas ou funções definidas pelo usuário.
O controle do fluxo de programa utiliza os mesmos três tipos de estruturas de
controle: sequencial, condicional e iterativa. Em geral, qualquer programa de compu-
tador pode ser escrito com essas três estruturas. Essa realização conduziu ao desen-
volvimento da programação estruturada. As linguagens disponíveis para a programa-
ção estruturada, como o MATLAB, não possuem um equivalente à sentença goto
que você já pode ter visto nas linguagens BASIC e FORTRAN. Um resultado infeliz
da sentença goto é um código confuso, chamado de código espaguete, composto de
um complexo emaranhado de ramificações.
A programação estruturada, se utilizada adequadamente, resulta em programas
fáceis de ser escritos, entendidos e modificados. As vantagens da programação estru-
turada são as seguintes:
1. Os programas estruturados são mais fáceis de ser escritos porque o programa-
dor pode primeiramente estudar o problema como um todo e lidar com os deta-
lhes posteriormente.
2. Os módulos (funções) escritos para uma aplicação podem ser utilizados em
outras aplicações (isso é chamado de código reutilizável).
Capítulo 4 ■ Programando com o MATLAB 149

3. Os programas estruturados são mais fáceis de ser debugados porque cada mó-
dulo é projetado para realizar apenas uma tarefa, e assim ele pode ser testado
separadamente dos outros módulos.
4. A programação estruturada é eficaz num ambiente de trabalho em equipe por-
que diversas pessoas podem trabalhar em um programa comum, cada pessoa
desenvolvendo um ou mais módulos.
5. Os programas estruturados são mais fáceis de ser entendidos e modificados,
especialmente se nomes significativos são escolhidos para os módulos e se a
documentação identifica com clareza a tarefa de cada módulo.

Projeto top-down e documentação do programa


Um método para a criação de programas estruturados é o projeto top-down, que visa
descrever a finalidade do programa em um nível muito alto inicialmente e depois
dividir o problema repetidamente em níveis mais detalhados, um nível por vez, até
que a estrutura do programa seja suficientemente entendida de modo que seja possí-
vel codificá-lo. A Tabela 4.1-1, que é repetida do Capítulo 1, resume o processo do
projeto top-down. No passo 4 você cria os algoritmos utilizados para obter a solução.
Note que o passo 5, Escreva e rode o programa, é apenas parte do processo do projeto
top-down. Nesse passo, você cria os módulos necessários e os testa separadamente.
Dois tipos de diagramas auxiliam no desenvolvimento de programas estrutu-
DIAGRAMA rados e na sua documentação. São os diagramas estruturais e os fluxogramas. Um
ESTRUTURAL diagrama estrutural é uma descrição gráfica que mostra como as partes diferentes do
programa estão conectadas. Esse tipo de diagrama é particularmente útil nos estágios
FLUXOGRAMA iniciais do projeto top-down.
Um diagrama estrutural exibe a organização de um programa sem mostrar os
detalhes dos cálculos e dos processos de decisão. Por exemplo, podemos criar mó-
dulos do programa utilizando arquivos de funções que realizam tarefas específicas e
prontamente identificáveis. Programas maiores são normalmente compostos de um
programa principal que chama os módulos para realizar suas tarefas especializadas
quando necessário. Um diagrama estrutural mostra a conexão entre o programa prin-
cipal e os módulos.

TABELA 4.1-1 Passos para o desenvolvimento de uma solução computacional


1. Defina o problema de maneira concisa.
2. Especifique os dados a serem utilizados pelo programa. Isso é a entrada.
3. Especifique a informação a ser gerada pelo programa. Isso é a saída.
4. Trabalhe à mão ou com uma calculadora ao longo dos passos da solução; utilize um conjunto mais
simples de dados se necessário.
5. Escreva e rode o programa.
6. Compare a saída do programa com sua solução à mão.
7. Rode o programa com seus dados de entrada e submeta a saída a uma “verificação de veracidade”.
Ela faz sentido? Estime a faixa de valores esperados e compare-a com sua resposta.
8. Se você for utilizar o programa como uma ferramenta geral no futuro, faça testes rodando-o com
uma faixa de valores de dados razoáveis; submeta os resultados a uma verificação de veracidade.
150 Introdução ao MATLAB para Engenheiros

Por exemplo, suponha que você queira escrever um programa para jogar o jogo
da velha. Você precisa de um módulo para permitir que um jogador humano entre
com um movimento, de um módulo que atualize e exiba o tabuleiro do jogo, e de um
módulo que contenha a estratégia do computador para escolher os seus movimentos.
A Figura 4.1-1 mostra o diagrama estrutural de tal programa.
Os fluxogramas são úteis para o desenvolvimento e a documentação de progra-
mas que contêm sentenças condicionais, porque eles podem exibir os diferentes ca-
minhos (chamados de ramos) que um programa pode seguir, dependendo de como as
sentenças condicionais são executadas. A representação em fluxograma da descrição
verbal da sentença if (abordada na Seção 4.3) é mostrada na Figura 4.1-2. Os fluxo-
gramas utilizam o símbolo em formato losangular para indicar os pontos de decisão.
A utilidade dos diagramas estruturais e dos fluxogramas é limitada pelo seu ta-
manho. Para programas maiores e mais complicados, desenhar esses diagramas pode
ser impraticável. Entretanto, para projetos menores, esboçar um fluxograma ou um
diagrama estrutural pode ajudar você a organizar seus pensamentos antes de começar
a escrever o código específico do MATLAB. Por causa do espaço necessário para tais
diagramas, nós não os utilizaremos neste texto. Você é encorajado, todavia, a utilizá-
-los para resolver problemas.
A documentação adequada de problemas é muito importante, mesmo que você
nunca entregue os seus programas a outras pessoas. Se você precisar modificar um
de seus programas, verá que frequentemente é muito difícil se lembrar de como ele
opera se você ficar algum tempo sem utilizá-lo. Uma documentação eficaz pode ser
realizada com a utilização de
1. Seleção adequada de nomes de variáveis para refletir as quantidades que elas
representam.
2. Comentários dentro do programa.
3. Diagramas estruturais.
4. Fluxogramas.
5. Uma descrição verbal do programa, normalmente em pseudocódigo.

Programa principal

Programa de Programa de exibição Programa


entrada do jogador do status do jogo de estratégia

FIGURA 4.1-1 Diagrama estrutural de um programa de jogo.


Capítulo 4 ■ Programando com o MATLAB 151

Início

Falso
Expressão
lógica

Verdadeiro

Sentenças

Fim

FIGURA 4.1-2 Representação em fluxograma da descrição verbal da sentença if.

A vantagem de se utilizar nomes adequados e comentários é que eles são ine-


rentes ao programa; qualquer pessoa que obtiver uma cópia do programa verá a do-
cumentação. Entretanto, ela muitas vezes não consegue fornecer uma visão geral do
programa. Os três últimos elementos podem fornecer essa visão geral.

Pseudocódigo
A utilização de uma língua natural, como o português, para descrever algoritmos
resulta frequentemente em uma descrição verborrágica e sujeita a erros de interpre-
tação. Para evitar lidar imediatamente com a sintaxe possivelmente complicada da
linguagem de programação, podemos utilizar um pseudocódigo, no qual uma língua
natural e expressões matemáticas são utilizadas para construir sentenças que se pa-
recem com sentenças computacionais, mas sem a sintaxe detalhada. O pseudocódigo
também pode utilizar alguma sintaxe simples do MATLAB para explicar a operação
do programa.
Como o próprio nome indica, o pseudocódigo é uma imitação do código
computacional real. Ele pode proporcionar a base para comentários dentro do pro-
grama. Além de auxiliar na documentação, o pseudocódigo é útil para esboçar um
programa antes de o código ser escrito detalhadamente, o qual leva mais tempo
para ser escrito porque precisa estar em conformidade com as regras estritas do
MATLAB.
152 Introdução ao MATLAB para Engenheiros

Cada instrução do pseudocódigo pode ser numerada, mas deve ser inequívoca
e computável. Note que o MATLAB não utiliza números de linha, exceto no Debu-
gador. Cada um dos exemplos seguintes ilustra como um pseudocódigo pode do-
cumentar cada uma das estruturas de controle utilizadas em algoritmos: operações
sequenciais, condicionais e iterativas.
Exemplo 1. Operações sequenciais Calcule o perímetro p e a área A de um triân-
gulo cujos lados são a, b e c. As fórmulas são

1. Insira os comprimentos dos lados a, b e c.


2. Calcule o perímetro p.
p=a+b+c
3. Calcule o semiperímetro s.

4. Calcule a área A.

5. Exiba os resultados p e A.
6. Pare.
O programa é
a = input(’Insira o valor do lado a: ’);
b = input(’Insira o valor do lado b: ’);
c = input(’Insira o valor do lado c: ’);
p = a + b + c;
s = p/2;
A = sqrt(s*(s-a)*(s-b)*(s-c));
disp(’O perímetro é:’)
p
disp(’A area é:’)
A

Exemplo 2. Operações condicionais Dadas as coordenadas (x, y) de um ponto,


calcule suas coordenadas polares (r, ␪), em que

1. Insira as coordenadas x e y.
2. Calcule a hipotenusa r.
r = sqrt(x^2+y^2)
Capítulo 4 ■ Programando com o MATLAB 153

3. Calcule o ângulo ␪.
3.1 Se x Ú 0
theta = atan(y/x)
3.2 Se não
theta = atan(y/x) + pi
4. Converta o ângulo de radianos para graus.
theta = theta*(180/pi)
5. Exiba os resultados r e theta.
6. Pare.
Note a utilização do esquema de numeração 3.1 e 3.2 para indicar cláusulas subor-
dinadas. Note também que a sintaxe do MATLAB pode ser utilizada para maior cla-
reza quando necessário. O programa a seguir implementa o pseudocódigo utilizando
algumas das funcionalidades do MATLAB a serem introduzidas neste capítulo. Ele
utiliza o operador relacional >=, que significa “maior que ou igual a” (na Seção 4.2).
O programa também utiliza a construção “if-else-end”, que é abordada na Seção 4.3.

Exemplo 3. Operações iterativas Determine quantos termos são necessários para


que a soma da série 10k2 - 4k + 2, k = 1, 2, 3, ... exceda 20 000. Qual é a soma para
essa quantidade de termos?
Uma vez que nós não sabemos quantas vezes precisaremos avaliar a expressão
10k2 - 4k + 2, utilizaremos um laço while, que é abordado na Seção 4.6.
1. Inicialize o total com zero.
2. Inicialize o contador com zero.
3. Enquanto o total for menor do que 20 000, calcule o total.
3.1 Incremente o contador em um.
k = k + 1
3.2 Atualize o total
total = 10*k^2 - 4*k + 2 + total
154 Introdução ao MATLAB para Engenheiros

4. Exiba o valor atual do contador.


5. Exiba o valor do total.
6. Pare.
O programa a seguir implementa o pseudocódigo. As sentenças no laço while são
executadas até que a variável total seja maior que ou igual 2 * 104.

Encontrando bugs
Debugar um programa é o processo de encontrar e remover os “bugs”, ou erros, em
um programa, que normalmente estão em uma das seguintes categorias:
1. Erros de sintaxe, tais como a omissão de um parênteses ou de uma vírgula, ou a
digitação incorreta de um comando. O MATLAB normalmente detecta os erros
mais óbvios e exibe uma mensagem descrevendo o erro e sua localização.
2. Erros devido a um procedimento matemático incorreto. Esses são chamados de
erros em tempo de execução. Eles não ocorrem necessariamente toda vez que
o programa é executado; sua ocorrência muitas vezes depende especificamente
dos dados de entrada. Um exemplo comum é a divisão por zero.
As mensagens de erro do MATLAB normalmente permitem a você encontrar os erros
de sintaxe. Entretanto, os erros em tempo de execução são mais difíceis de ser locali-
zados. Para localizar um erro desse tipo, tente o seguinte:
1. Sempre teste seu programa com uma versão simples do problema, cujas respos-
tas podem ser verificadas por cálculos à mão.
2. Exiba cálculos intermediários removendo o sinal de ponto e vírgula do final das
sentenças.
3. Para testar funções definidas pelo usuário, tente comentar a linha function e
rodar o arquivo como um script.
4. Utilize as funcionalidades do Editor/Debugador, o qual será discutido na Seção 4.8.

4.2 Operadores relacionais e variáveis lógicas


O MATLAB tem seis operadores relacionais para fazer comparações entre arranjos.
Esses operadores são mostrados na Tabela 4.2-1. Note que o operador igual a consis-
te em dois sinais =, e não em um único sinal =, como você poderia esperar. O sinal =
é o operador de atribuição, ou de substituição, no MATLAB.
Capítulo 4 ■ Programando com o MATLAB 155

TABELA 4.2-1 Operadores relacionais


Operador relacional Significado
< Menor que.
<= Menor que ou igual a.
> Maior que.
>= Maior que ou igual a.
== Igual a.
~= Não é igual a.

O resultado de uma comparação utilizando operadores relacionais pode ser 0


(se a comparação for falsa) ou 1 (se a comparação for verdadeira), e tal resultado
pode ser utilizado como uma variável. Por exemplo, se x = 2 e y = 5, então z =
x < y retorna o valor z = 1, e u = x == y retorna o valor u = 0. Para tornar as
sentenças mais legíveis, podemos agrupar as operações lógicas utilizando parênteses.
Por exemplo, z = (x < y) e u = (x == y).
Quando utilizado para comparar arranjos, os operadores relacionais realizam
a comparação elemento a elemento. Os arranjos a serem comparados devem ter a
mesma dimensão. A única exceção ocorre quando comparamos um arranjo com um
escalar. Nesse caso, todos os elementos do arranjo são comparados com o escalar. Por
exemplo, suponha que x = [6,3,9] e y = [14,2,9]. A seguinte sessão do
MATLAB mostra alguns exemplos:

Os operadores relacionais podem ser utilizados no endereçamento de arranjos.


Por exemplo, com x = [6,3,9] e y = [14,2,9], o comando z = x(x < y)
encontra todos os elementos em x que são menores do que o elemento corresponden-
te em y. O resultado é z = 6.
Os operadores aritméticos +, -, *, / e \ tem precedência sobre os operadores
relacionais. Assim, a sentença z = 5 > 2 + 7 é equivalente a z = 5 > (2+7)
e retorna o resultado z = 0. Podemos utilizar parênteses para mudar a ordem de
precedência; por exemplo, z = (5 > 2) + 7 resulta em z = 8.
Os operadores relacionais têm precedência igual entre si, e o MATLAB os ava-
lia em ordem da esquerda para a direita. Assim, a sentença
z = 5 > 3 ~= 1
é equivalente a
z = (5 > 3) ~= 1
156 Introdução ao MATLAB para Engenheiros

Ambas as sentenças retornam o resultado z = 0.


Com os operadores relacionais que consistem em mais de um caractere, tais
como == ou >=, tenha o cuidado de não inserir um espaço entre os caracteres.

A classe logical
Quando os operadores relacionais são utilizados, como x = (5 > 2), eles criam
uma variável lógica, nesse caso, x. Antes do MATLAB 6.5, logical era um atri-
buto de qualquer tipo de dado numérico. Agora, logical é um tipo de dado de
primeira classe e uma classe do MATLAB, portanto, logical é agora equivalente a
outros tipos de primeira classe, tais como arranjos de caracteres e arranjos de células.
As variáveis lógicas podem assumir apenas os valores 1 (verdadeiro) ou 0 (falso).
Todavia, um determinado arranjo não necessariamente é um arranjo lógico pelo
fato de ele conter apenas 0s e 1s. Por exemplo, na sessão a seguir, k e w parecem ser
o mesmo, mas k é um arranjo lógico e w é um arranjo numérico, e assim uma mensa-
gem de erro é exibida.

A função logical
Os arranjos lógicos podem ser criados com os operadores relacionais e lógicos e com
a função logical. A função logical retorna um arranjo que pode ser utilizado
para indexação lógica e testes lógicos. A sentença B = logical(A), em que A é
um arranjo numérico, retorna o arranjo lógico B. Desse modo, para corrigir o erro na
sessão anterior, você pode digitar w = logical([1,0,0,0,1]) antes de digitar
v = x(w).
Quando um valor real finito diferente de 1 ou 0 é atribuído a uma variável ló-
gica, o valor é convertido para 1 e uma mensagem de alerta é exibida. Por exemplo,
quando você digita y = logical(9), a y será atribuído o valor lógico 1 e um
alerta será exibido. Você pode utilizar a função double para converter um arran-
jo lógico em um arranjo da classe double. Por exemplo, x = (5 > 3); y
= double(x);. Algumas operações aritméticas convertem um arranjo lógico em
um arranjo numérico. Por exemplo, se adicionarmos um zero a cada elemento de B
Capítulo 4 ■ Programando com o MATLAB 157

digitando B = B + 0, então B será convertido em um arranjo numérico (double).


Entretanto, nem todas as operações matemáticas são definidas para variáveis lógicas.
Por exemplo, ao digitar
>>x = ([2, 3] > [1, 6]);
>>y = sin(x)
será gerada uma mensagem de erro. Isso não é uma questão importante porque dificil-
mente faz sentido calcular o seno de dados lógicos ou variáveis lógicas.

Acessando arranjos utilizando arranjos lógicos


Quando um arranjo lógico é utilizado para endereçar outro arranjo, ele extrai daquele
arranjo os elementos em que o arranjo lógico tiver 1s. Portanto, ao digitar A(B), em
que B é um arranjo lógico do mesmo tamanho que A, serão retornados os valores de
A nos índices em que B é igual a 1.
Dados A = [5,6,7;8,9,10;11,12,13] e B = logical(eye(3)),
podemos extrair os elementos da diagonal de A digitando C = A(B), obtendo C =
[5;9;13]. Ao especificarmos subscritos de arranjos com arranjos lógicos, são ex-
traídos os elementos que correspondem a elementos verdadeiros (1) no arranjo lógico.
Note, entretanto, que utilizar o arranjo numérico eye(3), como C =
A(eye(3)), resulta em uma mensagem de erro porque os elementos de eye(3)
não correspondem a locais em A. Se os valores do arranjo numérico correspondem a
locais válidos, você pode utilizar um arranjo numérico para extrair os elementos. Por
exemplo, para extrair os elementos da diagonal de A com um arranjo numérico, digite
C = A([1,5,9]).
Os tipos de dados do MATLAB são preservados quando a atribuição indexada é
utilizada. Portanto, agora que logical é um tipo de dado do MATLAB, se A for um
arranjo lógico, por exemplo, A = logical(eye(4)), então digitar A(3,4) =
1 não transformará A em um arranjo numérico. Entretanto, digitar A(3,4) = 5 irá
atribuir o valor lógico 1 a A(3,4) e ocorrerá a exibição de um alerta.

4.3 Operadores lógicos e funções lógicas


Há no MATLAB cinco operadores lógicos, que são algumas vezes chamados de ope-
radores Booleanos (ver Tabela 4.3-1). Esses operadores realizam operações elemento
a elemento. Com exceção do operador NOT (~), eles têm uma precedência menor
que a dos operadores aritméticos e relacionais (ver Tabela 4.3-2). O símbolo NOT é
chamado de til.
A operação NOT ~A retorna um arranjo com a mesma dimensão que A; o novo
arranjo tem 1s onde A é 0 e 0s onde A é diferente de 0. Se A for lógico, então ~A
substitui 1s por 0s e 0s por 1s. Por exemplo, se x = [0,3,9] e y = [14,-2,9],
então z = ~x retorna o arranjo z = [1,0,0] e a sentença u = ~x > y retor-
na o resultado u = [0,1,0]. Essa expressão é equivalente a u = (~x) > y,
enquanto que v = ~(x > y) gera o resultado v = [1,0,1]. Essa expressão é
equivalente a v = (x <= y).
158 Introdução ao MATLAB para Engenheiros

TABELA 4.3-1 Operadores lógicos


Operador Nome Definição
~ NOT ~A retorna um arranjo com a mesma dimensão que A; o novo arranjo tem
1s onde A é igual a 0 e tem 0s onde A é diferente de zero
& AND A & B retorna um arranjo com a mesma dimensão de A e B; o novo
arranjo tem 1s onde ambos A e B têm elementos diferentes de zero e 0s
onde A ou B seja igual a 0.
| OR A | B retorna um arranjo com a mesma dimensão de A e B; o novo
arranjo tem 1s onde pelo menos um elemento de A ou B seja diferente de
zero e 0s onde A e B sejam ambos iguais a 0.
&& Pequeno circuito AND Operador para expressões lógicas escalares. A && B retorna verdadeiro
se ambos (A e B) forem verdadeiros, ou falso caso contrário.
|| Pequeno circuito OR Operador para expressões lógicas escalares. A || B retorna verdadeiro
se A ou B ou ambos forem verdadeiros, ou falso caso contrário.

TABELA 4.3-2 Ordem de precedência para tipos de operadores


Precedência Tipo de operador
Primeiro Parênteses; avaliado começando pelo par mais interno.
Segundo Operadores aritméticos e o operador lógico NOT (~); avaliado da esquerda para a
direita.
Terceiro Operadores relacionais; avaliado da esquerda para a direita.
Quarto AND lógico.
Quinto OR lógico.

Os operadores & e | comparam dois arranjos de mesma dimensão. A única


exceção, assim como no caso dos operadores relacionais, é aquela em que um arran-
jo pode ser comparado com um escalar. A operação AND A & B retorna 1s onde
ambos (A e B) têm elementos diferentes de zero, e 0s onde qualquer elemento de A
ou B for 0. A expressão z = 0 & 3 retorna z = 0; z = 2 & 3 retorna z = 1;
z = 0 & 0 retorna z = 0, e z = [5,-3,0,0] & [2,4,0,5] retorna z =
[1,1,0,0]. Por causa da precedência dos operadores, z = 1 & 2 + 3 é equiva-
lente a z = 1 & (2 + 3), que retorna z = 1. Similarmente, z = 5 < 6 & 1 é
equivalente a z = (5 < 6) & 1, que retorna z = 1.
Sejam x = [6,3,9] e y = [14,2,9] e seja a = [4,3,12]. A expressão
z = (x > y) & a
resulta em z = [0,1,0], e
z = (x > y) & (x > a)
retorna o resultado z = [0,0,0]. Isso é equivalente a
z = x > y & x > a
que é muito menos legível.
Capítulo 4 ■ Programando com o MATLAB 159

Seja cuidadoso ao utilizar os operadores lógicos com desigualdades. Por exem-


plo, note que ~(x > y) é equivalente a x <= y, e não equivalente a x < y.
Como outro exemplo, a relação 5 6 x 6 10 deve ser escrita como
(5 < x) & (x < 10)
no MATLAB.
A operação OR A|B retorna 1s onde pelo menos um dos arranjos A ou B tiver
elementos diferentes de zero, e 0s onde ambos forem 0. A expressão z = 0|3 retor-
na z = 1; a expressão z = 0|0 retorna z = 0; e
z = [5,-3,0,0]|[2,4,0,5]
retorna z = [1,1,0,1]. Por causa da precedência dos operadores,
z = 3 < 5|4 == 7
é equivalente a
z = (3 < 5)|(4 == 7)
que retorna z = 1. Similarmente, z = 1|0 & 1 é equivalente a z = (1|0) &
1, que retorna z = 1, enquanto que z = 1|0 & 0 retorna z = 0, e z = 0 &
0|1 retorna z = 1.
Por causa da precedência do operador NOT, a sentença
z = ~3 == 7|4 == 6
retorna o resultado z = 0, que é equivalente a
z = ((~3) == 7)|(4 == 6)
A função OU exclusivo (exclusive OR) xor(A,B) retorna 0s onde A e B fo-
rem ambos diferentes de zero ou iguais a zero, e 1s onde A ou B forem diferentes de
zero, mas não ambos. A função é definida em termos dos operadores AND, OR e
NOT da seguinte maneira:
function z = xor(A,B)
z = (A|B) & ~(A & B);
A expressão
z = xor([3,0,6],[5,0,0])
retorna z = [0,0,1], ao passo que
z = [3,0,6]|[5,0,0]
retorna z = [1,0,1].
TABELA A Tabela 4.3-3 é uma tabela verdade que define as operações dos operadores
VERDADE lógicos e da função xor. Até você adquirir mais experiência com os operadores ló-
gicos, você deve utilizar essa tabela para verificar suas sentenças. Lembre-se de que
160 Introdução ao MATLAB para Engenheiros

TABELA 4.3-3 Tabela verdade


x y ~x x|y x & y xor(x,y)
verdadeiro verdadeiro falso verdadeiro verdadeiro falso
verdadeiro falso falso verdadeiro falso verdadeiro
falso verdadeiro verdadeiro verdadeiro falso verdadeiro
falso falso verdadeiro falso falso falso

verdadeiro é equivalente ao 1 lógico, e falso é equivalente ao 0 lógico. Podemos testar


a tabela verdade construindo o seu equivalente numérico conforme segue, sendo x e
y as duas primeiras colunas da tabela verdade em termos de 1s e 0s.
A seguinte sessão do MATLAB gera a tabela verdade em termos de 1s e 0s.

A partir do MATLAB 6, o operador AND (&) passou a ter uma precedência


maior do que o operador OR (|). Isso não era verdade nas versões anteriores do
MATLAB, portanto, se você estiver utilizando um código criado em uma versão
anterior, você deve fazer as alterações necessárias antes de utilizá-lo no MATLAB
6 ou em alguma versão mais recente. Por exemplo, agora a sentença y = 1|5
& 0 é avaliada como y = 1|(5 & 0), resultando em y = 1, ao passo
que no MATLAB 5.3 e nas versão anteriores a sentença seria avaliada como y =
(1|5) & 0, resultando em y = 0. Para evitar problemas devido à precedência,
é importante utilizar parênteses nas sentenças contendo operadores aritméticos, re-
lacionais ou lógicos, mesmo quando os parênteses forem opcionais. O MATLAB
agora proporciona uma funcionalidade que permite ao sistema produzir uma men-
sagem de erro ou um alerta para qualquer expressão que contenha & ou | que seria
avaliada diferentemente em versões anteriores. Se você não utilizar essa funcio-
nalidade, por padrão o MATLAB exibirá um alerta. Para ativar a funcionalidade
de erro, digite feature(’OrAndError’,1). Para retornar ao padrão, digite
feature(’OrAndError’,0).

Operadores de curto-circuito
Os seguintes operadores realizam as operações AND e OR em expressões lógicas
que contenham apenas valores escalares. Eles são chamados de operadores de curto-
-circuito porque eles avaliam o seu segundo operando apenas quando o resultado não
estiver completamente determinado pelo primeiro operando. Eles são definidos da
seguinte maneira em termos das duas variáveis lógicas A e B.
Capítulo 4 ■ Programando com o MATLAB 161

A && B Retorna verdadeiro (1 lógico) se ambos A e B forem verdadeiros,


e falso (0 lógico) caso contrário.
A||B Retorna verdadeiro (1 lógico) se A ou B ou ambos forem verdadei-
ros, e falso (0 lógico) caso contrário.
Assim, na sentença A && B, se A for igual ao zero lógico, então toda a expres-
são resultará em falso, não interessando o valor de B, portanto, não há necessidade de
se avaliar B.
Para A||B, se A for verdadeiro, não interessa o valor de B, a sentença resultará
em verdadeiro.
A Tabela 4.3-4 lista diversas funções lógicas úteis.

TABELA 4.3-4 Funções lógicas


Função lógica Definição
all(x) Retorna um escalar, que é 1 se todos os elementos no vetor x forem diferentes
de zero, ou 0 caso contrário.
all(A) Retorna um vetor linha com o mesmo número de colunas que a matriz A
contendo 1s e 0s, dependendo de a coluna correspondente de A ter ou não todos
os elementos diferentes de zero.
any(x) Retorna um escalar, que é 1 se qualquer um dos elementos no vetor x for
diferente de zero, ou 0 caso contrário.
any(A) Retorna um vetor linha com o mesmo número de colunas que a matriz A
contendo 1s e 0s, dependendo de a coluna correspondente da matriz A conter ou
não algum elemento diferente de zero.
find(A) Gera um arranjo que contém os índices dos elementos do arranjo A diferentes de 0.
[u,v,w] = find(A) Gera os arranjos u e v que contêm os índices de linha e de coluna dos
elementos diferentes de zero do arranjo A e gera o arranjo w que contém os
valores dos elementos diferentes de zero. O arranjo w pode ser omitido.
finite(A) Retorna um arranjo do mesmo tamanho de A com 1s onde os elementos são
finitos e 0s nas outras posições.
ischar(A) Retorna 1, se A for um arranjo de caracteres, ou 0, caso contrário.
isempty(A) Retorna 1, se A for uma matriz vazia, ou 0, caso contrário.
isinf(A) Retorna um arranjo do mesmo tamanho de A com 1s onde os elementos são
Inf e 0s nas outras posições.
isnan(A) Retorna um arranjo do mesmo tamanho de A com 1s onde os elementos são
NaN e 0s nas outras posições. (NaN representa “não é um número” (Not a
Number), o que significa um resultado indefinido.)
isnumeric(A) Retorna 1, se A for um arranjo numérico, ou 0, caso contrário.
isreal(A) Retorna 1, se A não tiver elementos com parte imaginária, ou 0, caso contrário.
logical(A) Converte os elementos de um arranjo A em valores lógicos.
xor(A,B) Retorna um arranjo com a mesma dimensão de A e B; o novo arranjo terá 1s
onde A ou B forem diferentes de zero, mas não ambos, e 0s onde A e B forem
ambos diferentes de zero ou iguais a zero.
162 Introdução ao MATLAB para Engenheiros

Operadores lógicos e a função find


A função find é muito útil para a criação de programas de tomada de decisão, es-
pecialmente quando combinados com operadores relacionais ou lógicos. A função
find(x) gera um arranjo que contém os índices dos elementos diferentes de 0 do
vetor x. Por exemplo, considere a sessão

O arranjo resultante y = [1, 3] indica que o primeiro e o terceiro elementos


de x são diferentes de zero. Note que a função find retorna os índices, não os valo-
res. Na sessão seguinte, note a diferença entre o resultado obtido por x(x < y) e o
resultado obtido por find(x < y).

Assim, dois valores no arranjo x são menores do que os valores correspondentes no


arranjo y. Eles são o primeiro e o quarto valores, 6 e 11. Para encontrar quantos são
esses valores, também poderíamos ter digitado length(indices).
A função find também é útil quando combinada com operadores lógicos. Por
exemplo, considere a sessão

O arranjo resultante z = [1, 2, 5] indica que o primeiro, o segundo e o quinto


elementos de ambos os arranjos x e y são diferentes de zero. Note que a função find
retorna os índices, não os valores. Na sessão a seguir, note a diferença entre o resulta-
do obtido por y(x & y) e o resultado obtido por find(x & y) acima.
Capítulo 4 ■ Programando com o MATLAB 163

Assim, há três valores diferentes de zero no arranjo y que correspondem a valores


diferentes de zero no arranjo x. Eles são o primeiro, o segundo e o quinto valores, que
são 2, 4 e 7.
Nos exemplos anteriores, havia apenas alguns números nos arranjos x e y, e as-
sim poderíamos ter obtido as respostas por inspeção visual. Entretanto, esses métodos
do MATLAB são muito úteis quando houver muitos dados de modo que o processo
de inspeção visual se torne muito oneroso em termos de tempo de cálculo, ou quando
os valores forem gerados internamente em um programa.

Teste seus conhecimentos


T4.3-1 Se x = [5,-3,18,4] e y = [-9,13,7,4], qual será o resultado
das seguintes operações? Utilize o MATLAB para verificar suas respostas.
a. z = ~y > x
b. z = x & y
c. z = x | y
d. z = xor(x,y)
T4.3-2 Suponha que x = [-9,-6,0,2,5] e y = [-10,-6,2,4,6]. Qual
é o resultado das seguintes operações? Determine as respostas à mão, e em
seguida utilize o MATLAB para verificar suas respostas.
a. z = (x < y)
b. z = (x > y)
c. z = (x ~= y)
d. z = (x == y)
e. z = (x > 2)
T4.3-3 Suponha que x = [-4,-1,0,2,10] e y = [-5,-2,2,5,9]. Uti-
lize o MATLAB para encontrar os valores e os índices dos elementos em x
que são maiores do que os elementos correspondentes em y.

EXEMPLO 4.3-1 Altura e velocidade de um projétil

A altura e a velocidade de um projétil (tal como uma bola arremessada) lançado com uma
velocidade y0 e com um ângulo A em relação à horizontal são dadas por

em que g é a aceleração devido à gravidade. O projétil irá se chocar contra o solo quando
h(t) = 0, o que acontece no tempo thit = 2(v0/g)sen A. Suponha que A = 40°, v0 = 20 m/s e g
= 9,81 m/s2. Utilize os operadores relacionais e lógicos do MATLAB para encontrar os ins-
tantes de tempo em que, simultaneamente, a altura não é menor do que 6 m e a velocidade
não é maior do que 16 m/s. Além disso, discuta outra abordagem para obter uma solução.
164 Introdução ao MATLAB para Engenheiros

■ Solução
A chave para solucionar esse problema com operadores relacionais e lógicos é utilizar o co-
mando find para determinar os instantes de tempo em que a expressão lógica (h >= 6) &
(v <= 16) é verdadeira. Primeiramente, devemos gerar os vetores h e v correspondentes
aos instantes de tempo t1 e t2 entre 0 … t … thit, utilizando um espaçamento para t que seja
suficientemente pequeno para se alcançar uma boa precisão. Escolheremos um espaçamento
de thit/100, que define 101 valores de tempo. O programa é apresentado a seguir. Quando cal-
cularmos os instantes de tempo t1 e t2, devemos subtrair 1 de u(1) e de length(u) porque
o primeiro elemento no arranjo t corresponde a t = 0 (isto é, t(1) é 0).
% Determine os valores para a velocidade inicial, a
% gravidade e o ângulo.
v0 = 20; g = 9.81; A = 40*pi/180;
% Calule o instante de tempo de choque com o solo.
t_hit = 2*v0*sin(A)/g;
% Calcule os arranjos que contêm o tempo, a altura e a
% velocidade.
t = 0:t_hit/100:t_hit;
h = v0*t*sin(A) - 0.5*g*t.^2;
v = sqrt(v0^2 - 2*v0*g*sin(A)*t + g^2*t.^2);
% Determine quando a altura não é menor do que 6
% e quando a velocidade não é maior do que 16.
u = find(h >= 6 & v <= 16);
% Calcule os instantes de tempo correspondentes.
t_1 = (u(1)- 1)*(t_hit/100)
t_2 = u(length(u)- 1)*(t_hit/100)
Os resultados são t1 = 0,8649 s e t2 = 1,7560 s. Entre esses dois instantes de tempo, h Ú 6
m e v … 16 m/s.
Poderíamos ter resolvido esse problema plotando h(t) e v(t), mas a precisão dos
resultados seria limitada pela nossa habilidade de escolher os pontos a partir do gráfico;
além do mais, se tivéssemos que resolver muitos problemas, o método gráfico consumiria
muito mais tempo.

Teste seus conhecimentos


T4.3-4 Considere o problema dado no Exemplo 4.3-1. Utilize operadores lógicos
e relacionais para encontrar os instantes de tempo para os quais a altura do
projétil é menor do que 4 m ou a velocidade é maior do que 17 m/s. Plote
h(t) e v(t) para confirmar sua resposta.

4.4 Sentenças condicionais


Na linguagem cotidiana, descrevemos nossas tomadas de decisão utilizando frases
condicionais como: “Se eu receber um aumento, eu comprarei um carro novo”. Se a
sentença “Receber um aumento” for verdadeira, a ação indicada (comprar um carro
novo) será executada. Aqui está outro exemplo: Se eu receber um aumento de pelo
Capítulo 4 ■ Programando com o MATLAB 165

menos $100 por semana, eu comprarei um carro novo; se não, eu economizarei o


dinheiro do aumento. Um exemplo um pouco mais complicado é: Se eu receber um
aumento de pelo menos $100 por semana, eu comprarei um carro novo; caso contrá-
rio, se o aumento for maior do que $50, eu comprarei um aparelho de som novo; caso
contrário, eu economizarei o dinheiro do aumento.
Podemos ilustrar a lógica do primeiro exemplo da seguinte maneira:

Note como o ponto marca o fim da sentença.


O segundo exemplo pode ser ilustrado da seguinte maneira:

O terceiro exemplo é apresentado a seguir:

As sentenças condicionais do MATLAB nos permitem escrever programas que


tomam decisões. As sentenças condicionais contêm uma ou mais das sentenças if,
else e elseif. A sentença end indica o final de uma sentença condicional, assim
como o ponto foi utilizado nos exemplos anteriores. Essas sentenças condicionais
têm uma forma similar à dos exemplos, e elas são de certo modo lidas do mesmo
modo que os seus equivalentes em português.

A sentença if
A forma básica da sentença if é

Toda sentença if deve ser acompanhada por uma sentença end. A sentença end
marca o fim das sentenças a serem executadas se a expressão lógica for verdadeira.
Um espaço é necessário entre o if e a expressão lógica, que pode ser um escalar, um
vetor ou uma matriz.
Por exemplo, suponha que x seja um escalar e que nós queiramos calcular
y= apenas se x Ú 0. Em português, poderíamos especificar o procedimento da
seguinte maneira: Se x for maior que ou igual a zero, calcule y = . A sentença if
166 Introdução ao MATLAB para Engenheiros

a seguir implementa esse procedimento no MATLAB, considerando que x já possui


um valor escalar.

Se x for negativo, o programa não faz nada. A expressão lógica aqui é x >= 0, e a
sentença é a linha única y = sqrt(x).
A estrutura if pode ser escrita em uma linha única; por exemplo,
if x >= 0, y = sqrt(x), end
Entretanto, essa forma é menos legível do que a forma anterior. A prática usual é
indentar as sentenças para que fique claro quais sentenças pertencem ao if e ao seu
end correspondente, o que melhora a legibilidade.
A expressão lógica pode ser uma expressão composta; as sentenças podem ser
um único comando ou uma série de comandos separados por vírgulas ou sinais de pon-
to e vírgula, ou em linhas separadas. Por exemplo, se x e y contiverem valores escalares,

Os valores de z e w são calculados apenas se x e y forem não negativos. Caso con-


trário, z e w continuam com os seus valores iguais a zero. O fluxograma é mostrado
na Figura 4.4-1.
Podemos “aninhar” sentenças if, como é mostrado pelo exemplo a seguir
exemplo.

Note que cada sentença if é acompanhada por uma sentença end.

A sentença else
Quando mais de uma ação pode ocorrer como o resultado de uma decisão, podemos
utilizar as sentenças else e elseif juntamente com a sentença if. A estrutura
básica para a utilização da sentença else é

A Figura 4.4-2 mostra o fluxograma dessa estrutura.


Capítulo 4 ■ Programando com o MATLAB 167

x, y

Início

x ⱖ 0? Falso

Expressão Falso
Verdadeiro lógica

Falso Verdadeiro
y ⱖ 0?

Grupo de Grupo de
sentenças 1 sentenças 2
Verdadeiro

Calcule z, w

Fim Fim

FIGURA 4.4-1 Fluxograma ilustrando FIGURA 4.4-2 Fluxograma da estrutura else.


dois testes lógicos.

Por exemplo, suponha que para x Ú 0 e que y = ex - 1 para x 6 0. As


sentenças a seguir calcularão y, presumindo-se que x já possui um valor escalar.

Quando o teste if expressão lógica é realizado, em que a expressão lógica


pode ser um arranjo, ele retorna um valor verdadeiro apenas se todos os elementos da
expressão lógica forem verdadeiros! Por exemplo, se nós não compreendemos como
o teste é feito, as seguintes sentenças não realizam aquilo que esperamos.
168 Introdução ao MATLAB para Engenheiros

Quando esse programa roda, ele gera o resultado

O programa não testa cada elemento de x em sequência. Em vez disso, ele testa a ve-
racidade da relação vetorial x < 0. O teste if x < 0 retorna um valor falso porque
ele gera o vetor [0,1,0]. Compare o programa anterior com o seguinte programa:

Quando executado, ele produz o seguinte resultado: Um ou mais elementos


de x são negativos. O teste if x < 0 é falso, e o teste if x >= 0 também
é falso porque x >= 0 retorna o vetor [1,0,1].
Algumas vezes devemos escolher entre um programa que é conciso, mas talvez
mais difícil de ser entendido, e outro que utiliza mais sentenças do que o necessário.
Por exemplo, as sentenças

podem ser substituídas pelo programa mais conciso

A sentença elseif
A forma geral da sentença if é

As sentenças else e elseif podem ser omitidas se não forem necessárias. Entre-
tanto, se ambas forem utilizadas, a sentença else deve vir após a sentença elseif
para tratar de todas as condições que não tenham sido consideradas. A Figura 4.4-3 é
o fluxograma para a estrutura if geral.
Capítulo 4 ■ Programando com o MATLAB 169

Início

Expressão Falso
lógica 1

Verdadeiro

Grupo de Expressão Falso


sentenças 1 lógica 2

Verdadeiro
Grupo de
sentenças 3
Grupo de
sentenças 2

Fim

FIGURA 4.4-3 Fluxograma para a estrutura if geral.

Por exemplo, suponha que y = ln x se x Ú 5 e que se 0 … x 6 5. As se-


guintes sentenças calcularão y se x contiver um valor escalar.

Se x = -2, por exemplo, nenhuma ação será realizada. Menos sentenças serão neces-
sárias se utilizarmos um elseif. Por exemplo,

Note que a sentença elseif não precisa de uma sentença end separada.
170 Introdução ao MATLAB para Engenheiros

A sentença else pode ser utilizada com a sentença elseif para criar progra-
mas de tomada de decisão detalhados. Por exemplo, suponha que y = ln x para x 7 10,
para 0 … x … 10, e y = ex - 1 para x 6 0. As seguintes sentenças calcularão y
se x contiver um valor escalar.

As estruturas de decisão podem ser aninhadas; isto é, uma estrutura pode con-
ter outra estrutura, que por sua vez pode conter outra estrutura, e assim por diante.
Indentações são utilizadas para enfatizar os grupos de sentenças associados a cada
sentença end.

Teste seus conhecimentos


T4.4-1 Dado um número x e o quadrante q (q = 1, 2, 3, 4), escreva um programa
para calcular sen-1 (x) em graus, levando em consideração o quadrante. O
programa deve exibir uma mensagem de erro se |x| 7 1.

Verificando o número de argumentos de entrada e de saída


Algumas vezes você desejará que uma função atue de maneira diferente dependendo
de quantas entradas ela tiver. Você pode utilizar a função nargin, que representa
“número de argumentos de entrada”. Dentro da função você pode utilizar sentenças
condicionais para direcionar o fluxo do cálculo dependendo de quantos argumentos
de entrada houver. Por exemplo, suponha que você queira calcular a raiz quadrada da
entrada se houver apenas uma entrada, ou a raiz quadrada da média das entradas se
houver duas entradas. A sessão a seguir faz isso.

A função nargout pode ser utilizada para determinar o número de argumen-


tos de saída.

Strings e sentenças condicionais


Uma string é uma variável que contém caracteres. As strings são úteis para a criação
de prompts de entrada e mensagens, bem como para a armazenagem e a operação de
Capítulo 4 ■ Programando com o MATLAB 171

dados como nomes e endereços. Para criar uma variável string, escreva os caracteres
entre aspas simples. Por exemplo, a variável string name é criada da seguinte maneira:

A seguinte string, chamada de number,

não é a mesma variável number criada digitando-se number = 123.


As strings são armazenadas como vetores linha em que cada coluna representa
um caractere. Por exemplo, a variável name possui 1 linha e 14 colunas (cada espaço
em branco ocupa uma coluna). Podemos acessar qualquer coluna da mesma maneira
que fazemos com um vetor qualquer. Por exemplo, a letra S no nome Leslie Student
ocupa a oitava coluna no vetor name. Ela pode ser acessada digitando-se name(8).
Uma das aplicações mais importantes para as strings é a criação de prompts de
entrada e de mensagens de saída. O seguinte programa utiliza a função isempty(x),
que retorna 1 se o arranjo x estiver vazio ou 0 caso contrário. Ele também utiliza a
função input, cuja sintaxe é
x = input(’prompt’, ’string’)
Essa função exibe a string prompt na tela, espera pela entrada a partir do teclado e re-
torna o valor inserido na variável string x. A função retorna uma matriz vazia se você
pressionar Enter sem digitar nada.
O programa a seguir é um arquivo de script que permite ao usuário responder
Sim digitando S ou s ou pressionando a tecla Enter. Qualquer outra resposta é tratada
como um Não.

Muitas outras funções de string estão disponíveis no MATLAB. Digite help


strfun para obter informações sobre elas.

4.5 Laços for


Um laço é uma estrutura que é utilizada para a repetição de um determinado cálcu-
lo um certo número de vezes. Cada repetição do laço é uma iteração. O MATLAB
utiliza dois tipos de laços explícitos: o laço for, quando o número de iterações é
conhecido antecipadamente, e o laço while, quando o processo deve ser finalizado
assim que uma condição específica for satisfeita, portanto, nesse caso, o número de
iterações não é conhecido antecipadamente.
172 Introdução ao MATLAB para Engenheiros

Um exemplo simples de um laço for é

À variável do laço k é inicialmente atribuído o valor 5, e x é calculado a partir de


x = k^2. Cada iteração sucessiva através do laço incrementa k em 10 e calcula x
até k exceder 35. Dessa forma, k assume os valores 5, 15, 25 e 35; e x assume os va-
lores 25, 225, 625 e 1225. Em seguida, o programa continua a executar as sentenças
que se encontram após a sentença end.
Uma estrutura típica de um laço for é

Início

Defina k ⫽ m

Verdadeiro
k ⬎ n?

Incremente
k em s
Falso

Sentenças

Fim

Sentenças
após o End.

FIGURA 4.5-1 Fluxograma de um laço for.


Capítulo 4 ■ Programando com o MATLAB 173

A expressão m:s:n atribui um valor inicial m à variável do laço, que é incrementada


pelo valor s, chamado de valor de passo ou valor incremental. As sentenças são
executadas uma vez durante cada iteração, utilizando o valor corrente da variável do
laço. O laço continua até que a variável do laço exceda o valor final n. Por exemplo,
na expressão para k = 5:10:36, o valor final de k é 35. Note que não precisamos
inserir um sinal de ponto e vírgula após a sentença for m:s:n para suprimir a im-
pressão de k. A Figura 4.5-1 mostra o fluxograma de um laço for.
Note que uma sentença for deve ser acompanhada por uma sentença end. A
sentença end marca o final das sentenças a serem executadas. Um espaço é neces-
sário entre o for e a variável do laço, que pode ser um escalar, um vetor ou uma
matriz, apesar de o caso escalar ser evidentemente o mais comum.
O laço for pode ser escrito em uma única linha; por exemplo,
for x = 0:2:10, y = sqrt(x), end
Entretanto, essa forma é menos legível do que a anterior. A prática usual é indentar as
sentenças para que fique claro quais sentenças pertencem ao for e o seu end corres-
pondente, melhorando assim a legibilidade.

EXEMPLO 4.5-1 Cálculo de série com um laço for

Escreva um arquivo de script para calcular a soma dos 15 primeiros termos da série 5k2 -
2k, k = 1, 2, 3, ..., 15.
■ Solução
Como nós sabemos quantas vezes devemos avaliar a expressão 5k2 - 2k, podemos utilizar
um laço for. O arquivo de script é o seguinte:

A resposta é 5960.

EXEMPLO 4.5-2 Plotando com um laço for

Escreva um arquivo de script para plotar a função

para -5 … x … 30.
174 Introdução ao MATLAB para Engenheiros

■ Solução
Escolhemos um espaçamento dx = 35/500 para obter 301 pontos, os quais são suficientes
para que a plotagem seja suave. O arquivo de script é o seguinte:

Note que devemos utilizar o índice k para referenciar x dentro do laço como x(k).

LAÇOS Podemos aninhar laços e sentenças condicionais, como é mostrado no exemplo


ANINHADOS seguinte. (Note que cada sentença for e if precisa ser acompanhada por uma sen-
tença end.)
Suponha que nós queiramos criar uma matriz quadrada especial que tenha 1s na
primeira linha e na primeira coluna, e cujos elementos restantes sejam a soma de dois
elementos, o elemento acima e o elemento à esquerda, se a soma for menor do que
20. Caso contrário, o elemento será o máximo dentre aqueles dois valores. A função a
seguir cria essa matriz. O índice das linhas é r; o índice das colunas é c. Note como
a indentação melhora a legibilidade.
Capítulo 4 ■ Programando com o MATLAB 175

Se digitarmos specmat(5), a seguinte matriz será obtida.

Teste seus conhecimentos


T4.5-1 Escreva um arquivo de script utilizando sentenças condicionais para avaliar
a seguinte função, presumindo que a variável escalar x contém um valor. A
função é para x 6 0, y = 3x + 1 para 0 … x 6 10 e y = 9 sen
(5x - 50) + 31 para x Ú 10. Utilize seu arquivo para avaliar y quando x = -
5, x = 5 e x = 15, e verifique os resultados à mão.
T4.5-2 Utilize um laço for para determinar a soma dos primeiros 20 termos na
série 3k2, k = 1, 2, 3, ..., 20. (Resposta: 8610)
T4.5-3 Escreva um programa para produzir a seguinte matriz:

Note as seguintes regras quando utilizar laços for com a expressão de variável
do laço k = m:s:n:
■ O valor de passo s pode ser negativo. Por exemplo, k = 10:-2:4 produz
k = 10, 8, 6, 4.
■ Se s for omitido, o valor de passo predefinido é 1.
■ Se s for positivo, o laço não será executado se m for maior do que n.
■ Se s for negativo, o laço não será executado se m for menor do que n.
■ Se m for igual a n, o laço será executado apenas uma vez.
■ Se o valor de passo s não for um inteiro, erros de arredondamento podem fazer
com que o laço execute um número de iterações diferente do desejado.
Quando o laço é finalizado, a variável k retém o seu último valor. Você não deve
alterar o valor da variável do laço k dentro das sentenças. Fazer isso pode levar a
resultados imprevisíveis.
Uma prática comum nas linguagens de programação tradicionais como BASIC
e FORTRAN é utilizar os símbolos i e j como variáveis do laço. Entretanto, essa
convenção não é uma boa prática no MATLAB, que utiliza esses símbolos para a
unidade imaginária .
176 Introdução ao MATLAB para Engenheiros

As sentenças break e continue


É permitido utilizar uma sentença if para “pular” para fora do laço antes de a variá-
vel do laço atingir o seu valor final. O comando break, que finaliza o laço, mas não
o programa inteiro, pode ser utilizado para esse fim. Por exemplo,

Todavia, normalmente é possível escrever um código que não precisa da utilização


do comando break. Isso muitas vezes pode ser feito com um laço while, que será
explicado na próxima seção.
A sentença break para a execução do laço. Pode haver aplicações em que
não queiramos executar uma iteração que produzirá um erro, mas em que queiramos
executar as iterações seguintes do laço. Podemos utilizar a sentença continue para
fazer isso. A sentença continue passa o controle para a próxima iteração do laço
for ou while em que ela aparece, pulando quaisquer sentenças remanescentes no
corpo do laço. Em laços aninhados, a sentença continue passa o controle para a
próxima iteração do laço for ou while que a contém.
Por exemplo, o seguinte código utiliza a sentença continue para evitar o
cálculo do logaritmo de um número negativo:

Os resultados são k = 1, 2, 0, 4 e y = 1, 3, NaN, 2.

Utilizando um arranjo como índice de um laço


É possível utilizar uma expressão matricial para especificar o número de iterações.
Nesse caso, a variável do laço é um vetor que é igualado às sucessivas colunas da
expressão matricial durante cada iteração, Por exemplo,
Capítulo 4 ■ Programando com o MATLAB 177

é equivalente a

A expressão comum k = m:s:n é um caso especial de uma expressão matricial em


que as colunas da expressão são escalares, não vetores.
Por exemplo, suponha que queiramos calcular a distância da origem a um con-
junto de três pontos especificados por suas coordenadas xy (3,7), (6,6) e (2,8). Pode-
mos armazenar as coordenadas no arranjo coord da seguinte maneira:

Assim, coord = [3,6,2;7,6,8]. O programa a seguir calcula a distância e


determina qual ponto é o mais distante da origem. Na primeira iteração do laço o
índice coord é [3, 7]’. Na segunda vez o índice é [6, 6]’ e na iteração final
o índice é [2, 8]’.

O programa acima ilustra a utilização de um arranjo como índice, mas o proble-


ma pode ser resolvido de forma mais concisa com o programa a seguir, que utiliza a
função diag para extrair os elementos da diagonal de um arranjo.
coord = [3,6,2;7,6,8];
distance = sqrt(diag(coord’*coord))
[max_distance,farthest] = max(distance)

Laços implícitos
Muitos comandos do MATLAB contêm laços implícitos. Por exemplo, considere es-
sas sentenças:
x = [0:5:100];
y = cos(x);
Para obter os mesmos resultados utilizando um laço for, devemos digitar
178 Introdução ao MATLAB para Engenheiros

O comando find é outro exemplo de laço implícito. A sentença y = find(x>0)


é equivalente a

Se você tiver familiaridade com alguma linguagem de programação tradicional como


FORTRAN ou BASIC, pode ser que se sinta inclinado a resolver problemas no MAT-
LAB utilizando laços em vez de utilizar os poderosos comando do MATLAB, como
o comando find. Para utilizar esses comandos e maximizar o poder do MATLAB,
você precisa adotar uma nova abordagem para a resolução de problemas. Como o
exemplo anterior mostra, você frequentemente pode economizar muitas linhas de
código utilizando os comandos do MATLAB e não laços. Seus programas também
rodarão mais rapidamente porque o MATLAB foi projetado para realizar cálculos
vetoriais com alta velocidade.

Teste seus conhecimentos


T4.5-4 Escreva um laço for que é equivalente ao comando sum(A), em que A é
uma matriz.

EXEMPLO 4.5-3 Ordenação de dados

Um vetor x foi obtido a partir de medições. Suponha que nós queiramos classificar como
errados quaisquer valores de dados na faixa -0,1 6 x 6 0,1. Desejamos remover todos
esses elementos e substituí-los por zero no final do arranjo. Desenvolva duas maneiras de
fazer isso. Um exemplo é dado na seguinte tabela:

Antes Depois
x(1) 1,92 1,92
x(2) 0,05 -2,43
x(3) -2,43 0,85
x(4) -0,02 0
x(5) 0,09 0
x(6) 0,85 0
x(7) -0,06 0

■ Solução
O arquivo de script a seguir utiliza um laço for com sentenças condicionais. Note como
o arranjo nulo [] é utilizado.
Capítulo 4 ■ Programando com o MATLAB 179

O novo arquivo de script utiliza a função find.

Utilização de arranjos lógicos como máscaras


Considere o arranjo A.

O programa a seguir gera o arranjo B calculando a raiz quadrada de cada elemento de


A cujo valor é menor do que zero e somando 50 a cada elemento negativo.

O resultado é
180 Introdução ao MATLAB para Engenheiros

Quando um arranjo lógico é utilizado para endereçar outro arranjo, ele extrai
desse último os elementos nos locais correspondentes aos seus 1s lógicos. Muitas
vezes podemos evitar a utilização de laços e ramificações e assim criar programas
MÁSCARAS mais simples e mais rápidos utilizando um arranjo lógico como uma máscara que
seleciona os elementos do outro arranjo. Quaisquer elementos não selecionados per-
manecerão inalterados.
A sessão a seguir cria o arranjo lógico C a partir do arranjo numérico A dado
anteriormente.

O resultado é

Podemos utilizar essa técnica para calcular a raiz quadrada apenas daqueles
elementos de A dados no programa anterior que não são menores do que 0 e adicionar
50 àqueles elementos que são negativos. O programa é

O resultado depois de a terceira linha ser executada é

O resultado depois de a última linha ser executada é

EXEMPLO 4.5-4 Voo de um foguete instrumentado

Todos os foguetes perdem peso conforme eles consomem combustível; portanto, a massa
do sistema é variável. As equações a seguir descrevem a velocidade v e a altura h de um
foguete lançado verticalmente, desprezando a resistência do ar. Elas podem ser derivadas
a partir das leis de Newton.
Capítulo 4 ■ Programando com o MATLAB 181

(4.5-1)

(4.5-2)

em que m0 é a massa inicial do foguete, q é a taxa com a qual o foguete queima a massa do
combustível, u é a velocidade de escape do combustível queimado em relação ao foguete,
e g é a aceleração devido à gravidade. Sendo b o tempo de queima, após o qual todo o
combustível é consumido, a massa do foguete sem combustível é me = m0 - qb.
Para t 7 b o motor do foguete não produz mais impulso, e assim a velocidade e a
altura são dadas por
y(t) = y(b) - g(t - b) (4.5-3)

(4.5-4)

O tempo tp necessário para alcançar a altura de pico é encontrado definindo-se y(t) =


0. O resultado é tp = b + y(b)/g. A substituição dessa expressão na expressão (4.5-4)
para h(t) resulta na seguinte expressão para a altura de pico: hp = h(b) + v2(b)/(2g). O
instante de tempo em que o foguete atinge o solo é
Supondo que o foguete esteja transportando instrumentos para estudar a parte
superior da atmosfera, precisamos determinar a quantidade de tempo gasto acima de
50 000 ft como uma função do tempo de queima b (portanto, como uma função da
massa de combustível qb). Suponha que sejam dados os seguintes valores: me = 100
slugs, q = 1 slug/s, u = 8000 ft/s e g = 32,2 ft/s2. Se a carga máxima de combustível do
foguete é de 100 slugs, o valor máximo de b é 100/q = 100. Escreva um programa no
MATLAB para resolver esse problema.
■ Solução
O pseudocódigo para o desenvolvimento do programa aparece na Tabela 4.5-1. Um laço
for é uma escolha lógica para resolver o problema porque nós conhecemos o tempo de

TABELA 4.5-1 Pseudocódigo para o Exemplo 4.5-4


Insira os dados.
Incremente o tempo de queima de 0 a 100. Para cada valor de tempo de queima:
Calcule m0, , hb, hp.
Se hp hdesejado ,
Calcule tp e thit.
Incremente o tempo de 0 a thit.
Calcule a altura como uma função do tempo, utilizando
a equação apropriada, dependendo de quando a queima
completa do combustível tiver acontecido.
Calcule a duração acima da altura desejada.
Fim do laço de tempo.
Se hp hdesejado , defina a duração igual a 0.
Fim do laço de tempo de queima.
Plote os resultados.
182 Introdução ao MATLAB para Engenheiros

queima b e o tempo thit que o foguete leva para atingir o solo. Um programa do MATLAB
para resolver esse problema aparece na Tabela 4.5-2. Ele apresenta dois laços for ani-
nhados. O laço interno avalia as equações de movimento em instantes de tempo espaçados
de 1/10 s entre si. Esse laço calcula a duração acima de 50 000 ft para um valor específico
do tempo de queima b. Podemos obter uma maior precisão utilizando um valor menor de
incremento de tempo dt. O laço externo varia o tempo de queima em valores inteiros de b
= 1 a b = 100. O resultado final é o vetor de durações para os vários tempos de queima. A
Figura 4.5-2 apresenta a plotagem resultante.

TABELA 4.5-2 Programa do MATLAB para o Exemplo 4.5-4


% Arquivo de script rocket1.m
% Calcula a duração do voo como uma função do tempo de queima.
% Valores de dados básicos.
m_e = 100; q = 1; u = 8000; g = 32.2;
dt = 0.1; h_desejado = 50 000;
for b = 1:100 % Laço de tempo de queima.
tempo_de_queima(b) = b;
% As linhas seguintes implementam as fórmulas no texto.
m_0 = m_e + q*b; v_b = u*log(m_0/m_e) - g*b;
h_b = ((u*m_e)/q)*log(m_e/(m_e+q*b))+u*b - 0.5*g*b^2;
h_p = h_b + v_b^2/(2*g);
if h_p >= h_desejado
% Calcule apenas se altura de pico > altura desejada.
t_p = b + v_b/g; % Calcula o instante de pico.
t_hit = t_p + sqrt(2*h_p/g); % Calcula o instante de choque com o solo.
for p = 0:t_hit/dt
% Utilize um laço para calcular o vetor de alturas.
k = p + 1; t = p*dt; time(k) = t;
if t <= b
% A queima completa ainda não aconteceu.
h(k) = (u/q)*(m_0 - q*t)*log(m_0 - q*t)...
+ u*(log(m_0) + 1)*t - 0.5*g*t^2 ...
- (m_0*u/q)*log(m_0);
else
% A queima completa já aconteceu.
h(k) = h_b - 0.5*g*(t - b)^2 + v_b*(t - b);
end
end
% Calcule a duração.
duracao(b) = length(find(h>=h_desejado))*dt;
else
% O foguete não alcançou a altura desejada.
duracao(b) = 0;
end
end % Plote os resultados.
plot(tempo_de_queima,duracao),xlabel(’Tempo de Queima (s)’),...
ylabel(’Duração (s)’),title(’Duração Acima de 50 000 ft’)
Capítulo 4 ■ Programando com o MATLAB 183

Duração acima de 50 000 ft


180

160

140

120
Duração (s)

100

80

60

40

20

0
0 10 20 30 40 50 60 70 80 90 100
Tempo de queima (s)
FIGURA 4.5-2 Duração acima de 50 000 ft como uma função do tempo de queima.

4.6 Laços while


O laço while é utilizado quando o processo de repetição de cálculos termina porque
uma condição específica foi satisfeita. Desse modo, o número de iterações não é co-
nhecido antecipadamente. Um exemplo simples de um laço while é

Os resultados exibidos pela sentença disp são 5, 9 e 17. À variável do laço x é


inicialmente atribuído o valor 5, e ela armazena esse valor até que a sentença x =
2*x – 1 seja encontrada pela primeira vez. O valor então muda para 9. Antes de
cada nova iteração do laço, verifica-se se o valor de x é menor do que 25. Em caso
afirmativo, a iteração é realizada. Caso contrário, o laço é interrompido e o programa
continua a executar as sentenças que se encontram após a sentença end.
Uma das principais aplicações dos laços while surge quando queremos que
um conjunto específico de sentenças seja repetido enquanto uma determinada senten-
184 Introdução ao MATLAB para Engenheiros

ça é verdadeira. Tal tarefa é muitas vezes mais difícil de ser realizada com um laço
for. A estrutura típica de um laço while é apresentada a seguir.

O MATLAB primeiro testa se a expressão lógica é verdadeira. Uma variável


do laço deve ser incluída na expressão lógica. Por exemplo, x é a variável do laço na
sentença while x < 25. Se a expressão lógica for verdadeira, as sentenças são
executadas. Para que o laço while funcione adequadamente, as duas condições a
seguir devem ocorrer:
1. A variável do laço deve conter um valor antes que a sentença while seja exe-
cutada.
2. A variável do laço deve ser modificada de alguma maneira pelas sentenças.
As sentenças são executadas uma vez a cada iteração, utilizando o valor corrente da
variável do laço. O laço continua até que a expressão lógica se torne falsa. A Figura
4.6-1 mostra o fluxograma do laço while.

Início

Falso
Expressão
lógica

Verdadeiro

Sentenças
(que incrementam
a variável do laço)

Fim

Sentenças
após o end

FIGURA 4.6-1 Fluxograma de um laço while.


Capítulo 4 ■ Programando com o MATLAB 185

Cada sentença while deve ser acompanhada por uma sentença end. Assim
como nos laços for, as sentenças devem ser indentadas a fim de se melhorar a legi-
bilidade. Você pode aninhar laços while, e também pode aninhá-los com laços for
e sentenças if.
Certifique-se sempre de que um valor já tenha sido atribuído à variável do laço
antes do início da sentença while. Por exemplo, o seguinte laço pode gerar um re-
sultado não desejado se x contiver um valor anterior que foi negligenciado:

Se um valor não tiver sido atribuído a x antes do início do laço, uma mensagem de
erro será exibida. Se desejamos que x comece com zero, então devemos escrever x =
0; antes da sentença while.
É possível criar um laço infinito, que é um laço que nunca é interrompido. Por
exemplo,

Dentro do laço a variável x assume os valores 5, 2, -1, -4, ..., e a condição x ~= 0


sempre é satisfeita, portanto o laço nunca é interrompido. Se um laço desse tipo ocor-
rer, pressione Ctrl-C para interrompê-lo.

EXEMPLO 4.6-1 Cálculo de série com um laço while

Escreva um arquivo de script para determinar o número de termos necessários para que a
soma da série 5k2 - 2k, k = 1, 2, 3, ... exceda 10 000. Qual é a soma para esse número de
termos?
■ Solução
Uma vez que nós não sabemos quantas vezes devemos avaliar a expressão 5k2 - 2k, utili-
zaremos um laço while. O arquivo de script é o seguinte:

A soma é 10 203 após 18 termos.


186 Introdução ao MATLAB para Engenheiros

EXEMPLO 4.6-2 Crescimento de uma conta bancária

Determine quanto tempo será necessário para que você acumule pelo menos $10 000 em
uma conta bancária se você depositar inicialmente $500 e mais $500 ao final de cada ano,
com um rendimento anual de 5%.
■ Solução
Uma vez que nós não sabemos quantos anos serão necessários, um laço while deve ser
utilizado. O arquivo de script é mostrado abaixo.

Os resultados finais são quantia = 1.0879e+004, ou $10 789, e k = 14, ou 14


anos.

EXEMPLO 4.6-3 Tempo para alcançar uma altura específica

Considere o foguete de massa variável tratado no Exemplo 4.5-4. Escreva um programa


que determine o tempo necessário para que o foguete alcance 40 000 ft se o tempo de
queima for de 50 s.
■ Solução
O pseudocódigo aparece na Tabela 4.6-1. Como não sabemos o tempo necessário, é con-
veniente utilizar um laço while. O programa na Tabela 4.6-2 realiza a tarefa e é uma mo-
dificação do programa na Tabela 4.5-2. Note que o novo programa admite a possibilidade
de o foguete não alcançar os 40 000 ft. É importante que você escreva um programa capaz
de lidar com todas as circunstâncias previsíveis. A resposta dada pelo programa é 53 s.

TABELA 4.6-1 Pseudocódigo para o Exemplo 4.6-3


Insira os dados.
Calcule m0, b, hb, hp.
Se hp hdesejado ,
Utilize um laço while para incrementar o tempo e calcular a altura até que a
altura desejada seja alcançada.
Calcule a altura como uma função do tempo, utilizando a equação adequada,
dependendo de a queima completa do combustível ter acontecido ou não.
Fim do laço de tempo.
Exiba os resultados.
Se hp hdesejado , o foguete não pode alcançar a altura desejada.
Capítulo 4 ■ Programando com o MATLAB 187

TABELA 4.6-2 Programa do MATLAB para o Exemplo 4.6-3


% Arquivo de script rocket2.m
% Calcula o tempo para alcançar a altura desejada.
% Determine os valores dos dados.
h_desejado = 40000; m_e = 100; q = 1;
u = 8000; g = 32.2; dt = 0.1; b = 50;
% Calcule valores quando ocorre a queima completa,
% o tempo de pico e a altura de pico.
m_0 = m_e + q*b; v_b = u*log(m_0/m_e) - g*b;
h_b = ((u*m_e)/q)*log(m_e/(m_e+q*b))+u*b - 0.5*g*b^2;
t_p = b + v_b/g;
h_p = h_b + v_b^2/(2*g);
% Se h_p > h_desejado, calcule o tempo para alcançar h_desejado.
if h_p > h_desejado
h = 0; k = 0;
while h < h_desejado % Calcule h até h = h_desejado.
t = k*dt; k = k + 1;
if t <= b
% Ainda não ocorreu a queima completa.
h = (u/q)*(m_0 - q*t)*log(m_0 - q*t)...
+ u*(log(m_0) + 1)*t - 0.5*g*t^2 ...
- (m_0*u/q)*log(m_0);
else
% Ocorreu a queima completa.
h = h_b - 0.5*g*(t - b)^2 + v_b*(t - b);
end
end
% Exiba os resultados.
disp(’O tempo para alcançar a altura desejada é:’)
disp(t)
else
disp(’O foguete não pode alcançar a altura desejada.’)
end

Teste seus conhecimentos


T4.6-1 Utilize um laço while para determinar quantos termos na série 3k2, k = 1,
2, 3, ... são necessários para que a soma exceda 2000. Qual é a soma para
esse número de termos? (Resposta: 13 termos, com uma soma de 2457)
T4.6-2 Reescreva o seguinte código utilizando um laço while para evitar o uso de
um comando break.

T4.6-3 Encontre o maior valor de x com duas casas decimais que faz com que o
erro na aproximação da série ex L 1 + x2/2 + x3/6 não exceda 1%. (Respos-
ta: x = 0,83)
188 Introdução ao MATLAB para Engenheiros

4.7 A estrutura switch


A estrutura switch é uma alternativa à utilização dos comandos if, elseif e
else. Qualquer coisa programada utilizando-se switch também pode ser progra-
mada utilizando-se estruturas if. Entretanto, para algumas aplicações a estrutura
switch é mais legível do que um código que utiliza a estrutura if. A sintaxe é

A expressão de entrada é comparada com cada valor da sentença case. Se


forem iguais, então as sentenças que se encontram após aquela sentença case são
executadas e o processo continua com as outras sentenças que vêm após a sentença
end. Se a expressão de entrada for uma string, então ela é igual ao valor da sentença
case se strcmp retorna um valor igual a 1 (verdadeiro). Apenas a primeira sen-
tença case igual à expressão de entrada é executada. Se não for verificada nenhuma
igualdade entre os valores da sentença case e a expressão de entrada, então as sen-
tenças que se encontram após a sentença otherwise são executadas. Cada sentença
case deve ocupar uma única linha.
Por exemplo, suponha que a variável angulo armazene um valor inteiro
que representa um ângulo medido em graus em relação ao Norte. O seguinte bloco
switch exibe o ponto na bússola que corresponde àquele ângulo:

A utilização de uma variável string para a expressão de entrada pode resultar


em programas bastante legíveis. Por exemplo, no seguinte código o vetor numérico x
contêm valores, e o usuário insere o valor da variável string resposta, que deve ser
Capítulo 4 ■ Programando com o MATLAB 189

min, max ou sum. O código então encontra o valor máximo ou o valor mínimo de x,
ou soma os elementos de x, conforme a determinação do usuário.

A sentença switch é capaz de lidar com múltiplas condições em uma única


sentença case se os valores forem encerrados em um arranjo de células. Por exem-
plo, o seguinte bloco switch exibe o ponto correspondente na bússola, dado o ângu-
lo inteiro medido em relação ao Norte:

Teste seus conhecimentos


T4.7-1 Escreva um programa utilizando a estrutura switch que tem como en-
trada um ângulo, cujo valor pode ser 45, -45, 135 ou -135°, e que exibe o
quadrante (1, 2, 3 ou 4) que contém esse ângulo.

EXEMPLO 4.7-1 Utilizando a estrutura switch para cálculos de calendário

Utilize a estrutura switch para calcular o total de dias decorridos em um ano, dados o
número do mês (1–12), o dia e a indicação de o ano ser bissexto ou não.
190 Introdução ao MATLAB para Engenheiros

■ Solução
Note que fevereiro possui um dia extra se o ano for bissexto. A seguinte função calcula
o número total de dias decorridos em um ano, dados o mês, o dia do mês e o valor de
dia_extra, que é 1, para ano bissexto, ou 0, caso contrário.

A função pode ser utilizada como é mostrado no programa a seguir.


mes = input(’Insira o mês (1 - 12): ’);
dia = input(’Insira o dia (1 - 31): ’);
dia_extra = input(’Insira 1 para ano bissexto ou 0 caso contrário: ’);
total_de_dias = total(mes,dia,dia_extra)

Um dos problemas do capítulo relacionados com a Seção 4.4 (Problema 19) pro-
põe que você escreva um programa para determinar se um dado ano é bissexto ou não.

4.8 Debugando programas no MATLAB


A utilização do Editor/Debugador do MATLAB como um editor de arquivos M foi
discutida na Seção 1.4. A Figura 1.4-1 mostra a tela do Editor/Debugador. A Figura
4.8-1 mostra o Debugador contendo um programa a ser analisado. Aqui nós discu-
tiremos a sua utilização como um debugador. Antes de você utilizar o Debugador,
tente debugar o seu programa seguindo as diretrizes apresentadas no item Debugan-
do Arquivos de Script na Seção 1.4. Os programas do MATLAB muitas vezes são

FIGURA 4.8-1 O Editor/Debugador contendo um programa a ser analisado.


Capítulo 4 ■ Programando com o MATLAB 191

pequenos em virtude do poder dos seus comandos, e pode ser que você não precise
utilizar o Debugador, a não ser que esteja escrevendo programas grandes. Todavia, o
modo celular discutido nesta seção é útil mesmo para programas pequenos. A barra
de menus do Editor/Debugador contém os seguintes itens: File, Edit, Text, Go, Cell,
Tools, Debug, Desktop, Window e Help. Os menus File, Edit, Desktop, Window
e Help são similares àqueles da Área de Trabalho (Desktop). O menu Go permite ir
para trás ou para a frente no arquivo. O menu Cell será discutido brevemente. O menu
Tools envolve tópicos avançados que não serão tratados neste texto. O menu Desktop
é similar àquele da janela de Comandos. Ele permite ancorar e desancorar janelas,
organizar a janela do Editor e ativar ou desativar a barra de ferramentas do Editor.
Abaixo da barra de menu está a barra de ferramentas do Editor/Debugador.
Ela permite a você acessar alguns dos itens dos menus com um clique do mouse.
Mantenha o cursor do mouse sobre um botão na barra de ferramentas para ver a sua
função. Por exemplo, clicar no botão com o ícone de um binóculo é equivalente a
selecionar Find and Replace no menu Edit. Um item na barra de ferramentas que
não está nos menus é o botão de função com o ícone f. Utilize esse botão para ir para
uma função específica no arquivo M. A lista de funções que você verá inclui apenas
aquelas funções cujas sentenças estejam no programa. A lista não inclui funções que
são chamadas a partir do arquivo M.
O menu Text suplementa o menu Edit na criação de arquivos M. Com o menu
Text você pode inserir ou remover comentários, ajustar a indentação, ativar a inden-
tação inteligente e avaliar e exibir os valores das variáveis selecionadas na janela de
Comandos. Clique em qualquer lugar de uma linha já digitada e, em seguida, clique
em Comment no menu Text. Isso transformará a linha inteira em um comentário.
Para transformar uma linha comentada em uma linha executável, clique em qualquer
lugar na linha e, em seguida, clique em Uncomment no menu Text.

Modo celular
O modo celular pode ser utilizado para debugar programas. Ele também pode ser
utilizado para gerar um relatório. Veja o final da Seção 5.2 para uma discussão sobre a
geração de relatórios. Uma célula é um grupo de comandos (essa célula não deve ser
confundida com o arranjo de células abordado na Seção 2.6). Digite duas vezes o ca-
ractere de porcentagem (%%) para marcar o início de uma nova célula; ele é chamado
de divisor de células. O modo celular é habilitado quando você insere o seu programa
no Editor. Para desabilitar o modo celular, clique no botão Cell e selecione Disable
Cell Mode. A barra de ferramentas celular é mostrada na Figura 4.8-2.
Considere o programa simples a seguir, que plota uma função quadrática e uma
função cúbica.
%% Avalie uma quadrática e uma cúbica.
clear, clc
x = linspace(0, 10, 300);
%% Quadrática
y1 = polyval([1, -8, 6], x); plot(x,y1)
%% Cúbica
y2 = polyval([1, -11, 9, 9], x); plot(x,y2)
192 Introdução ao MATLAB para Engenheiros

FIGURA 4.8-2 O modo celular do Editor/Debugador.

Após digitar e salvar o programa, você pode clicar em um dos ícones de ava-
liação mostrados no lado esquerdo da barra de ferramentas celular (ver Figura 4.8-
2). Isso permite a você avaliar a célula corrente (isto é, a célula onde está o cursor),
avaliar a célula corrente e seguir para a próxima célula, ou avaliar o programa inteiro.
Uma funcionalidade útil do modo celular é que ele permite a você avaliar os
resultados da mudança de um parâmetro. Por exemplo, na Figura 4.8-2, suponha que
o cursor esteja próximo ao número -8. Se você clicar no sinal de adição (+) ou de
subtração (–) na barra de ferramentas celular, o parâmetro (-8) será decrementado ou
incrementado em uma quantidade a qual é mostrada na janela (1,0 é o padrão, o qual
você pode alterar). Se você já tiver rodado o programa e a plotagem quadrática estiver
na tela, clique no sinal de subtração uma vez para mudar o parâmetro de -8 para -9
e veja a plotagem mudar.
Você também pode mudar o parâmetro por um fator de divisão ou por um fator
multiplicativo (1,1 é o padrão). Clique no símbolo de divisão ou de multiplicação na
barra de ferramentas celular.

O menu Debug
PONTO DE Pontos de quebra são pontos no arquivo em que a execução é interrompida tempora-
QUEBRA riamente de modo que você possa examinar os valores das variáveis até aquele pon-
to. Você pode definir pontos de quebra com o item Set/Clear Breakpoint no menu
Debug. Utilize os itens Step, Step In e Step Out no menu Debug para caminhar ao
longo do seu arquivo após você ter definido os pontos de quebra e rodado o programa.
Clique em Step para ver o script executar um passo de cada vez. Clique em Step In
para ir para a primeira linha executável em uma função que está sendo chamada. Cli-
que em Step Out em uma função que foi chamada para rodar o restante da função e
em seguida retornar ao programa principal.
Capítulo 4 ■ Programando com o MATLAB 193

Uma seta verde sólida à esquerda da linha do texto indica a próxima linha a
ser executada. Quando ela se torna uma seta verde vazia, significa que o controle do
MATLAB agora está em uma função que está sendo chamada. A execução retorna à
linha com a seta verde sólida depois que a função completar a sua operação. A seta
se torna amarela em uma linha onde a execução é interrompida ou onde uma função
completa a sua operação. Quando o programa é pausado, você pode atribuir novos
valores a uma variável utilizando tanto a janela de Comandos quanto o Editor de
Arranjos (Array Editor).
Clique no item Go Until Cursor para rodar o arquivo até a linha na qual está o
cursor; esse processo define um ponto de quebra temporário no cursor. Você pode sal-
var e executar o seu programa diretamente a partir do menu Debug se quiser clicando
em Run (ou Save and Run se você tiver feito alguma mudança). Você também pode
clicar no ícone Run. Você não precisa definir nenhum ponto de quebra de antemão.
Clique em Exit Debug Mode para retornar à edição normal. Para salvar quaisquer
mudanças que você tenha feito no programa, primeiro saia do modo debugador e em
seguida salve o arquivo.

Utilizando pontos de quebra


A maioria das sessões de debugação começam definindo-se um ponto de quebra.
Um ponto de quebra interrompe a execução de um arquivo M em uma linha especí-
fica e permite a você visualizar ou mudar valores no espaço de trabalho da função
antes de retomar a execução. Para definir um ponto de quebra, posicione o cursor na
linha de texto e clique no ícone de ponto de quebra na barra de ferramentas ou sele-
cione Set/Clear Breakpoints no menu Debug. Você também pode definir um ponto
de quebra clicando com o botão direito do mouse na linha de texto e selecionando
Set/Clear Breakpoint no menu Context. Um círculo vermelho próximo à linha
indica que um ponto de quebra foi definido naquela linha. Se a linha selecionada
para um ponto de quebra não for uma linha executável, então o ponto de quebra é
definido na próxima linha executável. O menu Debug permite apagar todos os pon-
tos de quebra (Clear Breakpoints in All Files) e também permite parar a execução
do arquivo M se o seu código gerar um alerta, um erro ou um valor NaN ou Inf
(selecione Stop if Errors/Warnings).

4.9 Aplicações em simulação


Simulação é o processo de construção (e de análise das saídas) de programas de com-
putador que descrevem as operações de uma organização, de um processo ou de um
sistema físico. Esse programa é chamado de modelo computacional. A simulação é
PESQUISA frequentemente utilizada em pesquisa operacional, que é o estudo quantitativo de uma
OPERACIONAL organização em ação, o qual busca encontrar formas de melhoria do seu funcionamen-
to. A simulação permite aos engenheiros estudar com esse propósito as ações passadas,
presentes e futuras da organização. Técnicas de pesquisa operacional são úteis em todos
os campos da engenharia. Exemplos comuns incluem planejamento de linhas aéreas,
estudos de fluxo de tráfego e linhas de produção. Os operadores lógicos e os laços do
MATLAB são excelentes ferramentas para a construção de programas de simulação.
194 Introdução ao MATLAB para Engenheiros

EXEMPLO 4.9-1 Um modelo de matrículas em uma faculdade: Parte I

Para exemplificar como a simulação pode ser utilizada em pesquisa operacional, consi-
dere este modelo de matrículas em uma faculdade. Uma determinada faculdade deseja
analisar o efeito das admissões e da taxa de retenção de calouros sobre a matrícula a
fim de prever a necessidade futura de instrutores e de outros recursos. Considere que a
faculdade possui estimativas do percentual de estudantes repetentes e do percentual de
estudantes que abandonam a instituição antes de se graduarem. Desenvolva uma equação
matricial sobre a qual seja possível basear um modelo de simulação que possa auxiliar
nessa análise.
■ Solução
Suponha que o número de matrículas de calouros por ano seja 500 e que a faculdade
decida admitir 1000 alunos por ano a partir de agora. A estimativa da faculdade é de que
10% dos calouros repetirão o ano. O número de calouros no ano seguinte será de 0,1(500)
+ 1000 = 1050, depois será de 0,1(1050) + 1000 = 1105, e assim por diante. Seja x1(k)
o número de calouros no ano k, em que k = 1, 2, 3, 4, 5, 6, ... . Portanto, no ano k + 1, o
número de calouros é dado por

(4.9-1)

Uma vez que nós conhecemos o número de calouros no primeiro ano de nossa análise
(que é 500), podemos resolver essa equação passo a passo para prever o número de calou-
ros no futuro.
Seja x2(k) o número de alunos de 2o ano no ano k. Suponha que 15% dos calouros
não retornam e que 10% repetem o primeiro ano. Assim, 75% dos calouros vão para o 2o
ano. Suponha também que 5% dos alunos de 2o ano repetem o ano e que 200 deles são
transferidos a cada ano de outras faculdades. Assim, no ano k + 1, o número de alunos de
2o ano é dado por
x2(k + 1) = 0,75x1(k) + 0,05x2(k) + 200
Para resolver essa equação, precisamos resolver a equação dos “calouros” (4.9-1) ao mes-
mo tempo, o que é fácil de se fazer com o MATLAB. Antes de resolver essas equações,
vamos desenvolver o restante do modelo.
Sejam x3(k) e x4(k) o número de alunos de 3o e 4o ano, respectivamente, no ano k.
Suponha que 5% dos alunos de 2o e 3o ano abandonam a faculdade e que 5% dos alunos
de 2o, 3o e 4o ano repetem o ano. Assim, 90% dos alunos de 2o e 3o ano passam para o ano
seguinte. Os modelos para os alunos de 3o e 4o ano são
x3(k + 1) = 0,9x2(k) + 0,05x3(k)
x4(k + 1) = 0,9x3(k) + 0,05x4(k)
Capítulo 4 ■ Programando com o MATLAB 195

Essas quatro equações podem ser escritas no formato matricial:

No Exemplo 4.9-2 veremos como utilizar o MATLAB para resolver tais equações.

Teste seus conhecimentos


T4.9-1 Suponha que 70% dos calouros, em vez de 75%, retornam para cursar o
segundo ano. Como isso altera a equação anterior?

EXEMPLO 4.9-2 Um modelo de matrículas em uma faculdade: Parte II

Para estudar os efeitos das políticas de admissão e de transferência, generalize o modelo


no Exemplo 4.9-1 para permitir a variação das admissões e das transferências.
■ Solução
Seja a(k) o número de novos calouros admitidos na primavera do ano k para o ano seguin-
te k + 1, e seja d(k) o número de transferências de alunos de 2o ano para o ano seguinte.
Então, o modelo se torna

no qual nós escrevemos os coeficientes na forma simbólica c21, c22, e assim por diante,
em vez de escrevê-los na forma numérica, de maneira a poder alterar os seus valores se
assim desejarmos.
DIAGRAMA DE
Esse modelo pode ser representado graficamente pelo diagrama de transição de
TRANSIÇÃO estados, como aquele apresentado na Figura 4.9-1. Tais diagramas são largamente utiliza-
DE ESTADOS dos para representar processos dependentes do tempo e probabilísticos. As setas indicam

Transferências de alunos de 2o ano

d (k)
a (k) c21 c32 c43

Novas admissões
x1 (k) x2 (k) x3 (k) x4 (k)
o o
Calouros 2o ano 3 ano 4 ano

c11 c22 c33 c44


FIGURA 4.9-1 O diagrama de transição de estados para o modelo de matrículas em uma faculdade.
196 Introdução ao MATLAB para Engenheiros

como os cálculos do modelo são atualizados para cada ano. O número de matrículas no
ano k é descrito completamente pelos valores de x1(k), x2(k), x3(k) e x4(k), isto é, pelo
vetor x(k), que é chamado de vetor de estados. Os elementos do vetor de estados são as
variáveis de estado. O diagrama de transição de estados mostra como os novos valores das
variáveis de estado dependem tanto dos valores anteriores quanto das entradas a(k) e d(k).
As quatro equações podem ser escritas no seguinte formato matricial:

ou, de maneira mais compacta,


x(k + 1) = Cx(k) + b(k)
em que

Suponha que o número de matrículas inicial total seja de 1480, sendo 500 de
calouros, 400 de segundo ano, 300 de terceiro ano e 280 de quarto ano. A faculdade
deseja analisar, ao longo de um período de 10 anos, os efeitos de incrementar as ad-
missões em 100 a cada ano e de incrementar as transferências em 50 a cada ano até
que o número total matrículas atinja o valor de 4000; a partir de então, as admissões e
as matrículas serão mantidas constantes. Assim, as admissões e as transferências para
os próximos 10 anos são dadas por
a(k) = 900 + 100k
d(k) = 150 + 50k
para k = 1, 2, 3, ... até que o número total de matrículas atinja o valor de 4000; a partir
de então, as admissões e as transferências são mantidas constantes e iguais aos valores
do ano anterior. Não podemos determinar quando esse evento ocorrerá sem realizar uma
simulação. A Tabela 4.9-1 apresenta o pseudocódigo para a resolução desse problema. A
matriz de matrículas E é 4 * 10, e suas colunas representam as matrículas em cada ano.
Uma vez que nós sabemos quanto tempo durará o período de análise (10 anos),
um laço for é uma escolha natural. Utilizaremos uma sentença if para determinar
a partir de quando será necessário manter constantes os números de admissões e de
transferências. Um arquivo de script do MATLAB para prever o número de matrícu-
las para os próximos 10 anos aparece na Tabela 4.9-2. A Figura 4.9-2 mostra a plo-
Capítulo 4 ■ Programando com o MATLAB 197

TABELA 4.9-1 Pseudocódigo para o Exemplo 4.9-2


Insira a matriz de coeficientes C e vetor de matrículas inicial x.
Insira os números de admissões e de transferências iniciais.
Defina a primeira coluna da matriz de matrículas E igual a x.
Laço ao longo dos anos 2 a 10.
Se o total de matrículas for menor que ou igual a 4000, aumente o número
de admissões em 100 e o número de transferências em 50 a cada ano.
Se o total de matrículas for maior que 4000, mantenha constantes as
admissões e as transferências.
Atualize o vetor x, utilizando x ⴝ Cx ⴙ b.
Atualize a matriz de matrículas E acrescentando outra coluna igual a x.
Encerre o laço ao longo dos anos 2 a 10.
Plote os resultados.

TABELA 4.9-2 Modelo de matrículas em uma faculdade


% Arquivo de script enroll1.m. Calcula o número de matrículas em uma faculdade.
% Coeficientes do modelo.
C = [0.1,0,0,0;0.75,0.05,0,0;0,0.9,0.05,0;0,0,0.9,0.05];
% Vetor de matrículas inicial.
x = [500;400;300;280];
% Admissões e transferências iniciais.
a(1) = 1000; d(1) = 200;
% E é a matriz de matrículas 4 x 10.
E(:,1) = x;
% Laço ao longo dos anos 2 a 10.
for k = 2:10
% Os comandos seguintes descrevem a políticas de admissão
% e de transferência.
if sum(x) <= 4000
% Aumente as admissões e as transferências.
a(k) = 900+100*k;
d(k) = 150+50*k;
else
% Mantenha constantes as admissões e as transferências.
a(k) = a(k-1);
d(k) = d(k-1);
end
% Atualize a matriz de matrículas.
b = [a(k);d(k);0;0];
x = C*x+b;
E(:,k) = x;
end
% Plote os resultados.
plot(E’),hold,plot(E(1,:),’o’),plot(E(2,:),’+’),plot(E(3,:),’*’),...
plot(E(4,:),’x’),xlabel(’Ano’),ylabel(’Número de alunos’),...
gtext(’Cal.’),gtext(’Seg.’),gtext(’Terc.’),gtext(’Quart.’),...
title(’Número de Matrículas como uma Função do Tempo’)
198 Introdução ao MATLAB para Engenheiros

Número de matrículas como uma função do tempo


1600

1400

Cal.
1200
Número de alunos

1000 Seg.

800
Terc.
Quart.
600

400

200
1 2 3 4 5 6 7 8 9 10
Ano
FIGURA 4.9-2 Número de matrículas versus tempo.

tagem resultante. Note que após o ano 4 haverá mais alunos de segundo ano do que
calouros. A razão é que o aumento da taxa de transferência eventualmente superará o
aumento da taxa de admissão.
Na prática esse programa deve ser rodado muitas vezes para que seja analisado
o efeito de diferentes políticas de admissão e de transferência e para que seja exami-
nado o que acontece se diferentes valores forem utilizados para os coeficientes na
matriz C (indicando diferentes taxas de desistência e de repetição).

Teste seus conhecimentos


T4.9-2 No programa na Tabela 4.9-2, as linhas 16 e 17 calculam os valores de
a(k) e d(k). Essas linhas são repetidas aqui:

a(k) = 900 + 100*k;


d(k) = 150 + 50*k;
Por que o programa contém as linhas a(1) = 1000; d(1) = 200;?
Capítulo 4 ■ Programando com o MATLAB 199

4.10 Resumo
Agora que você finalizou este capítulo, você deve ser capaz de escrever programas
que realizam procedimentos de tomada de decisão; isto é, as operações do programa
dependem do resultado dos seus cálculos ou das entradas fornecidas pelo usuário. As
Seções 4.2, 4.3 e 4.4 abordaram as funções necessárias: os operadores relacionais, os
operadores lógicos, as funções lógicas e as sentenças condicionais.
Você também deve ser capaz de utilizar as estruturas de laço do MATLAB para
escrever programas que repetem cálculos um número específico de vezes ou até que
alguma condição seja satisfeita. Essa funcionalidade permite aos engenheiros solu-
cionar problemas de grande complexidade ou que requerem uma quantidade muito
grande de cálculos. As estruturas dos laços for e while foram abordadas nas Se-
ções 4.5 e 4.6. A Seção 4.7 abordou a estrutura switch.
A Seção 4.8 apresentou uma visão geral e um exemplo de como debugar pro-
gramas utilizando o Editor/Debugador. A Seção 4.9 apresentou uma aplicação desses
métodos em simulação, o que permite aos engenheiros estudar a operação de siste-
mas, processos e organizações de alta complexidade.
Tabelas que resumem os comandos do MATLAB introduzidos neste capítulo
são apresentadas ao longo do texto. A Tabela 4.10-1 auxiliará você a encontrar essas
tabelas. Ela também resume os comandos que não se encontram nas outras tabelas.

TABELA 4.10-1 Guia para os comandos do MATLAB introduzidos no Capítulo 4


Operadores relacionais Tabela 4.2-1
Operadores lógicos Tabela 4.3-1
Ordem de precedência para tipos de operadores Tabela 4.3-2
Tabela verdade Tabela 4.3-3
Funções lógicas Tabela 4.3-4
Comandos diversos
Comando Descrição Seção
break Finaliza a execução de um laço for ou de um laço while. 4.5, 4.6
case Utilizado com switch para direcionar a execução do programa. 4.7
continue Passa o controle para a próxima iteração de um laço for ou while. 4.5, 4.6
double Converte um arranjo lógico para a classe double. 4.2
else Indica um bloco alternativo de sentenças. 4.4
elseif Executa sentenças condicionalmente. 4.4
end Finaliza sentenças for, while e if. 4.4, 4.5, 4.6
for Repete sentenças específicas um certo número de vezes. 4.5
if Executa sentenças condicionalmente. 4.4
input(’s1’, ’s’) Exibe a string s1 no prompt e armazena a entrada do usuário como uma string. 4.4
logical Converte valores numéricos em valores lógicos. 4.2
nargin Determina o número de argumentos de entrada de uma função. 4.4
nargout Determina o número de argumentos de saída de uma função. 4.4
switch Direciona a execução do programa comparando a expressão de entrada com 4.7
as expressões das sentenças case associadas.
while Repete sentenças um número indefinido de vezes. 4.6
xor Função OU exclusivo (exclusive OR). 4.3
200 Introdução ao MATLAB para Engenheiros

Termos-chave
Diagrama de transição de estados, 195 Operador relacional, 154
Diagrama estrutural, 149 Pesquisa operacional, 193
Estrutura switch, 188 Ponto de quebra, 192
Fluxograma, 149 Programação estruturada, 148
Laço for, 171 Projeto top-down, 149
Laço implícito, 177 Pseudocódigo, 151
Laço while, 183 Sentença condicional, 164
Laços aninhados, 174 Simulação, 193
Máscaras, 180 Tabela verdade, 159
Operadores lógicos, 157

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do livro.

Seção 4.1
1. O volume V e a área da superfície A de uma esfera de raio r são dados por

a. Desenvolva uma descrição em pseudocódigo de um programa que calcule V


e A para 0 … r … 3 m e que plote V versus A.
b. Escreva e rode o programa descrito em a.
2. As raízes da equação quadrática ax2 + bx + c = 0 são dadas por

a. Desenvolva uma descrição em pseudocódigo de um programa para calcular


ambas as raízes dados os valores a, b e c. Certifique-se de identificar as par-
tes real e imaginária.
b. Escreva o programa descrito em a e teste-o para os seguintes casos:
1. a = 2, b = 10, c = 12
2. a = 3, b = 24, c = 48
3. a = 4, b = 24, c = 100
3. Deseja-se calcular a soma dos primeiros 10 termos da série 14k3 - 20k2 + 5k, k
= 1, 2, 3, ...
a. Desenvolva uma descrição em pseudocódigo do programa requerido.
b. Escreva e rode o programa descrito em a.
Capítulo 4 ■ Programando com o MATLAB 201

Seção 4.2
4.* Suponha que x = 6. Encontre os resultados das seguintes operações à mão e
utilize o MATLAB para verificar os seus resultados:
a. z = (x < 10)
b. z = (x == 10)
c. z = (x >= 4)
d. z = (x ~= 7)
5.* Encontre os resultados das seguintes operações à mão e utilize o MATLAB
para verificar os seus resultados:
a. z = 6 > 3 + 8
b. z = 6 + 3 > 8
c. z = 4 > (2 + 9)
d. z = (4 < 7) + 3
e. z = 4 < 7 + 3
f. z = (4<7)*5
g. z = 4<(7*5)
h. z = 2/5>=5
6.* Suponha que x = [10, -2, 6, 5, -3] e y = [9, -3, 2, 5,
-1]. Encontre os resultados das seguintes operações à mão e utilize o MAT-
LAB para verificar os seus resultados:
a. z = (x < 6)
b. z = (x <= y)
c. z = (x == y)
d. z = (x ~= y)
7. Para os arranjos x e y dados abaixo, utilize o MATLAB para encontrar todos os
elementos em x que são maiores do que os elementos correspondentes em y.
x = [-3, 0, 0, 2, 6, 8] y = [-5, -2, 0, 3, 4, 10]
8. O arranjo preco dado abaixo contém o preço em dólares de um determinado
estoque ao longo de 10 dias. Utilize o MATLAB para determinar por quantos
dias o preço foi maior do que $20.
preco = [19, 18, 22, 21, 25, 19, 17, 21, 27, 29]
9. Os arranjos preco_A e preco_B dados abaixo contêm o preço em dólares
de dois estoques ao longo de 10 dias. Utilize o MATLAB para determinar por
quantos dias o preço do estoque A foi maior do que o preço do estoque B.
preco_A = [19, 18, 22, 21, 25, 19, 17, 21, 27, 29]
preco_B = [22, 17, 20, 19, 24, 18, 16, 25, 28, 27]
10. Os arranjos preco_A, preco_B e preco_C dados abaixo contêm o preço
em dólares de três estoques ao longo de 10 dias.
a. Utilize o MATLAB para determinar por quantos dias o preço do estoque A
foi maior do que o preço do estoque B e o preço do estoque C.
202 Introdução ao MATLAB para Engenheiros

b. Utilize o MATLAB para determinar por quantos dias o preço do estoque A foi
maior do que o preço do estoque B ou maior do que o preço do estoque C.
c. Utilize o MATLAB para determinar por quantos dias o preço do estoque A
foi maior do que o preço do estoque B apenas ou maior do que o preço do
estoque C apenas.
preco_A = [19, 18, 22, 21, 25, 19, 17, 21, 27, 29]
preco_B = [22, 17, 20, 19, 24, 18, 16, 25, 28, 27]
preco_C = [17, 13, 22, 23, 19, 17, 20, 21, 24, 28]

Seção 4.3
11.* Suponha que x = [-3, 0, 0, 2, 5, 8] e y = [-5, -2, 0, 3,
4, 10]. Encontre os resultados das seguintes operações à mão e utilize o
MATLAB para verificar os seus resultados:
a. z = y < ~x
b. z = x & y
c. z = x|y
d. z = xor(x,y)
12. A altura e a velocidade de um projétil lançado com uma velocidade v0 e um
ângulo A com a horizontal são dados por

em que g é a aceleração devido à gravidade. O projétil irá se chocar contra o


chão quando h(t) = 0, o que ocorre no tempo thit = 2(v0/g) sen A.
Suponha que A = 30°, y0 = 40 m/s e g = 9,81 m/s2. Utilize os operadores
lógicos e relacionais do MATLAB para encontrar os instantes de tempo em que
a. A altura não é menor do que 15 m.
b. A altura não é menor do que 15 m e, ao mesmo tempo, a velocidade não é
maior do que 36 m/s.
c. A altura não é menor do que 15 m ou a velocidade é maior do que 35 m/s.
13.* O preço, em dólares, de um determinado estoque ao longo de um período de 10
dias é dado no seguinte arranjo
preco = [19, 18, 22, 21, 25, 19, 17, 21, 27, 29]
Suponha que você possuía 1000 ações no início do período de 10 dias, e que
você tenha comprado 100 ações todos os dias em que o preço era menor do
que $20 e que você tenha vendido 100 ações todos os dias em que o preço era
maior do que $25. Utilize o MATLAB para calcular (a) a quantidade que você
gastou comprando ações, (b) a quantidade que você recebeu com a venda das
ações, (c) o número total de ações que você possui após o décimo dia e (d) o
aumento líquido no valor do seu portfólio.
Capítulo 4 ■ Programando com o MATLAB 203

14. Sejam e1 e e2 expressões lógicas. A lei de DeMorgan para expressões lógicas


estabelece que
NOT(e1 AND e2) implica (NOT e1) OR (NOT e2)
e
NOT(e1 OR e2) implica (NOT e1) AND (NOT e2)
Utilize essas leis para encontrar uma expressão equivalente para cada uma das
seguintes expressões e utilize o MATLAB para verificar a equivalência.
a. ~((x < 10) & (x >= 6))
b. ~((x == 2) | (x > 5))
15. Estas expressões são equivalentes? Utilize o MATLAB para verificar suas res-
postas para valores específicos de a, b, c e d.
a. 1. (a == b) & ((b == c)|(a == c))
2. (a == b)|((b == c)&(a == c))
b. 1. (a < b) & ((a > c)|(a > d))
2. (a < b) & (a > c)|((a < b)&(a > d))
16. Escreva um arquivo de script utilizando sentenças condicionais para avaliar
a seguinte função, considerando que a variável escalar x contém um valor. A
função é y = ex + 1 para x 6 -1, y = 2 + cos(␲x) para -1 … x 6 5, e y = 10(x - 5)
+ 1 para x Ú 5. Utilize seu arquivo para avaliar y quando x = -5, x = 3 e x = 15,
e verifique os resultados à mão.

Seção 4.4
17. Reescreva as seguintes sentenças utilizando apenas uma sentença if:

18. Escreva um programa que aceite um valor numérico x de 0 a 100 como entrada
e que calcule e exiba a letra correspondente à nota de acordo com a seguinte
tabela.
A x Ú 90
B 80 … x … 89
C 70 … x … 79
D 60 … x … 69
F x 6 60
a. Utilize sentenças if aninhadas no seu programa (não utilize elseif).
b. Utilize apenas cláusulas elseif no seu programa.
19. Escreva um programa que aceita um ano como entrada e determina se esse ano é
bissexto ou não. Utilize a função mod. A saída deve ser a variável dia_extra,
204 Introdução ao MATLAB para Engenheiros

que deve conter o valor 1, se o ano for bissexto, ou 0, caso contrário. As regras
para determinar anos bissextos no calendário Gregoriano são as seguintes:
1. Todos os anos divisíveis por 400 são anos bissextos.
2. Anos que são divisíveis por 100, mas que não são divisíveis por 400, não
são anos bissextos.
3. Anos que são divisíveis por 4, mas que não são divisíveis por 100, são anos
bissextos.
4. Todos os outros anos não são bissextos.
Por exemplo, os anos 1800, 1900, 2100, 2300 e 2500 não são anos bis-
sextos, mas 2400 é um ano bissexto.
20. A Figura P20 mostra um modelo massa-mola do tipo utilizado para projetar
suspensões de veículos, por exemplo. A mola exerce uma força que é propor-
cional à sua compressão, e a constante de proporcionalidade é a constante k da
mola. As duas molas laterais proporcionam resistência adicional se o peso W
for muito grande para a mola central. Quando o peso W é delicadamente colo-
cado sobre a plataforma, ele se desloca ao longo de uma distância x antes de
ficar em repouso. De acordo com a estática, a força peso deve balancear a força
das molas nessa nova posição. Assim,

Essas relações podem ser utilizadas para gerar a plotagem de x versus W.


a. Crie um arquivo de função que calcule a distância x utilizando os parâme-
tros de entrada W, k1, k2 e d. Teste sua função para os dois casos a seguir,
utilizando os valores k1 = 104 N/m; k2 = 1,5 * 104 N/m; d = 0,1 m.

b. Utilize sua função para plotar x versus W ao longo da faixa 0 … W … 3000 N


com os valores de k1, k2 e d dados em a.

W Plataforma

d k1
x

k2 k2

FIGURA P20
Capítulo 4 ■ Programando com o MATLAB 205

Seção 4.5
21. Utilize um laço for para plotar a função dada no Problema 16 ao longo do in-
tervalo -2 … x … 6. Rotule adequadamente a plotagem. A variável y representa
a altura em quilômetros, e a variável x representa o tempo em segundos.
22. Utilize um laço for para determinar a soma dos 10 primeiros termos na série
5k3, k = 1, 2, 3, ..., 10.
23. As coordenadas (x, y) de um determinado objeto como funções do tempo são
dadas por
x(t) = 5t - 10 y(t) = 25t2 - 120t + 144
para 0 … t … 4. Escreva um programa que determine o instante em que o objeto
esteja mais próximo da origem (0, 0). Determine também a distância mínima.
Faça isso de duas maneiras:
a. Utilizando um laço for.
b. Sem utilizar um laço for.
24. Considere o arranjo A.

Escreva um programa que gere um arranjo B calculando o logaritmo natural de


todos os elementos de A cujos valores são menores do que 1 e adicionando 20
a cada elemento que é maior que ou igual a 1. Faça isso de duas maneiras:
a. Utilizando um laço for com sentenças condicionais.
b. Utilizando um arranjo lógico como uma máscara.
25. Desejamos analisar o sistema massa-mola discutido no Problema 20 para o
caso em que o peso W cai sobre a plataforma sustentada pela mola central. Se
o peso cair de uma altura h acima da plataforma, podemos encontrar a máxima
compressão x da mola igualando a energia potencial gravitacional W(h + x) à
energia potencial armazenada nas molas. Assim,

que pode ser resolvida para x como

e
206 Introdução ao MATLAB para Engenheiros

que resulta na seguinte equação quadrática a ser resolvida para x:


(k1 + 2k2)x2 - (4k2d + 2W)x + 2k2d2 - 2 Wh = 0 se x Ú d
a. Crie um arquivo de função que calcule a compressão máxima x devido à
queda do peso. Os parâmetros de entrada da função são k1, k2, d, W e h. Tes-
te sua função para os dois casos a seguir, utilizando os valores k1 = 104 N/m;
k2 = 1,5 * 104 N/m; e d = 0,1 m.
W = 100 N h = 0,5 m
W = 2000 N h = 0,5 m
b. Utilize seu arquivo de função para gerar uma plotagem de x versus h para 0
… h … 2 m. Utilize W = 100 N e os valores de k1, k2 e d dados no item a.
26. Diz-se que resistores elétricos estão conectados “em série” se a mesma corren-
te passa por todos, e diz-se que eles estão conectados “em paralelo” se a mes-
ma tensão for aplicada nos terminais de cada um deles. Se estiverem em série,
eles são equivalentes a um resistor único cuja resistência é dada por
R = R1 + R2 + R3 + Á + Rn
Se estiverem em paralelo, sua resistência equivalente é dada por

Escreva um arquivo M que receba como entrada do usuário o tipo de conexão


(série ou paralelo), o número de resistores n e os n valores de resistência, e cal-
cule a resistência equivalente.
27. a. Um diodo ideal bloqueia o fluxo de corrente na direção oposta àquela dada
pela seta do símbolo do diodo. Ele pode ser utilizado na construção de um
retificador de meia onda, como mostrado na Figura P27a. Para o diodo
ideal, a tensão yL nos terminais da carga RL é dada por

Suponha que a tensão fornecida seja


yS(t) = 3e-t/3 sen(␲t) V
em que o tempo t está em segundos. Escreva um programa no MATLAB
para plotar a tensão vL versus t para 0 … t … 10.
b. Um modelo mais preciso do comportamento do diodo é dado pelo modelo
do diodo com offset, que leva em consideração o offset de tensão inerente
aos diodos semicondutores. O modelo com offset contém um diodo ideal e
uma bateria cuja tensão é igual à tensão de offset (que é de aproximadamen-
Capítulo 4 ■ Programando com o MATLAB 207


Diodo
vS vL

(a)

0,6V
⫹ ⫺

vS vL

(b)

FIGURA P27

te 0,6 V para diodos de silício) [Rizzoni, 2007]. O retificador de meia onda


que utiliza esse modelo é apresentado na Figura P27b. Para esse circuito,

Utilizando a mesma fonte de tensão dada em a, plote a tensão vL versus t


para 0 … t … 10; em seguida, compare os resultados com a plotagem obtida
em a.
28.* Uma companhia deseja situar um centro de distribuição que servirá a seis dos
seus maiores clientes em uma área de 30 mi * 30 mi. As posições dos clientes
relativas ao canto sudoeste da área são dadas na tabela seguinte em termos de
coordenadas (x, y) (a direção x é leste; a direção y é norte) (ver Figura P28).
Também é dado o volume em toneladas por semana que deve ser entregue
pelo centro de distribuição a cada cliente. O custo de entrega semanal ci para
o cliente i depende do volume Vi e da distância di em relação ao centro de dis-
tribuição. Para simplificar, consideraremos que essa distância é a distância em
linha reta (consideramos, portanto, que a rede viária é densa). O custo semanal
é dado por ci = 0,5diVi, i = 1, ..., 6. Encontre a posição do centro de distribuição
que minimiza o custo semanal total para servir a todos os seis clientes.
208 Introdução ao MATLAB para Engenheiros

Norte

30
1

20 2
y
(milhas)
3
5
10

6
4

0 Leste
0 10 20 30
x (milhas)

FIGURA P28

Coordenada x Coordenada y Volume


Cliente (mi) (mi) (toneladas/semana)
1 1 28 3
2 7 18 7
3 8 16 4
4 17 2 5
5 22 10 2
6 27 8 6

29. Uma companhia pode produzir até quatro produtos diferentes com o seu ma-
quinário, que consiste em máquinas de torneamento, retificação e fresagem. O
número de horas requeridas em cada máquina para produzir um produto é dado
na tabela a seguir, juntamente com o número de horas disponíveis por semana
para cada tipo de máquina. Considere que a companhia pode vender todas as
coisas que ela produz. O lucro por item para cada produto aparece na última
linha da tabela.

Produto
1 2 3 4 Horas disponíveis
Horas requeridas
Torneamento 1 2 0,5 3 40
Retificação 0 2 4 1 30
Fresagem 3 1 5 2 45
Lucro unitário ($) 100 150 90 120
Capítulo 4 ■ Programando com o MATLAB 209

a. Determine quantas unidades de cada produto da companhia devem ser fa-


bricadas para maximizar seu lucro total, e em seguida calcule esse lucro.
Lembre-se de que a companhia não pode produzir unidades fracionárias,
portanto, sua resposta deve ser dada em inteiros. (Dica: Primeiro estime os
limites superiores para o número de produtos que pode ser produzido sem
exceder a capacidade disponível.)
b. Qual é a sensibilidade da sua resposta? Em quanto o lucro diminuirá se você
produzir um item a mais ou a menos do que o ótimo?
30. Uma determinada companhia fabrica televisões, unidades de som e alto-falan-
tes. Seu estoque de peças inclui chassis, tubos de imagem, cones para alto-fa-
lantes, fontes de energia e dispositivos eletrônicos. O estoque, os componentes
necessários e o lucro para cada produto aparecem na tabela a seguir. Determine
quanto de cada produto deve ser fabricado para maximizar o lucro.

Produto
Televisão Unidade de som Unidade de alto-falante Estoque
Requerimentos
Chassis 1 1 0 450
Tubo de imagem 1 0 0 250
Cone para alto-falante 2 2 1 800
Fonte de energia 1 1 0 450
Dispositivos 2 2 1 600
eletrônicos
Lucro unitário ($) 80 50 40

Seção 4.6
31. Plote a função y = 10(1 - e-x/4) ao longo do intervalo 0 … x … xmáx, utilizando
um laço while para determinar o valor de xmáx de modo que y(xmáx) = 9,8.
Rotule adequadamente a plotagem. A variável y representa a força em newtons,
e a variável x representa o tempo em segundos.
32. Utilize um laço while para determinar quantos termos na série 2k, k = 1, 2,
3, ..., são necessários para que a soma dos termos exceda 2000. Qual é a soma
para esse número de termos?
33. Um banco paga 5,5% de rendimento anual, ao passo que um segundo banco
paga 4,5% de rendimento anual. Determine quanto tempo é necessário para
se acumular pelo menos $50 000 na segunda conta bancária se você depositar
$1000 dólares inicialmente e $1000 dólares ao final de cada ano.
34*. Utilize um laço no MATLAB para determinar quanto tempo é necessário para
se acumular $1 000 000 em uma conta bancária se você depositar $10 000
dólares inicialmente e $10 000 ao final de cada ano; o banco paga 6% de rendi-
mento anual.
35. Um peso W é suportado por dois cabos ancorados a uma distância D um do ou-
tro (ver Figura P35). O comprimento do cabo LAB é dado, mas o comprimento
210 Introdução ao MATLAB para Engenheiros

A ␪ ␾ C

LAB LAC

FIGURA P35

LAC deve ser determinado. Cada cabo suporta uma tensão máxima igual à força
W. Para que o peso permaneça em repouso, a força horizontal total e a força
vertical total devem ser iguais a zero cada. Esse princípio resulta nas equações

Podemos resolver essas equações para as forças de tensão TAB e TAC se conhe-
cermos os ângulos ␪ e ␾. A partir da lei dos cossenos

A partir da lei dos senos

Para os valores dados D = 6 ft, LAB = 3 ft e W = 2000 lb, utilize um laço no


MATLAB para encontrar LACmín, o comprimento LAC mínimo que podemos
utilizar sem que TAB ou TAC exceda 2000 lb. Note que o maior LAC pode ser 6,7
ft (que corresponde a ␪ = 90°). Plote as forças de tensão TAB e TAC no mesmo
gráfico versus LAC para LACmín … LAC … 6,7.
36*. Na estrutura apresentada na Figura P36a, seis fios suportam três vigas. Os fios
1 e 2 não podem suportar mais do que 1200 N cada, os fios 3 e 4 não podem
suportar mais do que 400 N cada, e os fios 5 e 6 não podem suportar mais do
que 200 N cada. Três pesos iguais W são situados nos pontos mostrados. Con-
siderando que a estrutura está em repouso e que os pesos dos fios e das vigas
são muito pequenos comparados com W, os princípios da estática aplicados a
uma viga específica estabelecem que a soma das forças verticais é igual a zero
e que a soma dos momentos em relação a quaisquer pontos também é zero.
Capítulo 4 ■ Programando com o MATLAB 211

1m 1m 1m 1m 1m 1m 1m
1 2

3 4
6
W
5

(a)
W

T1 T2
1 3 1 1 1

T3 T4 W T6

1 1 1

(b)

T5 T6
W 1 2

FIGURA P36

Aplicando esses princípios a cada viga utilizando os diagramas de corpo livre


mostrados na Figura P36b, obtemos as seguintes equações, sendo a força de
tensão no fio i dada por Ti. Para a viga 1,

Para a viga 2,

Para a viga 3,
212 Introdução ao MATLAB para Engenheiros

R1 R2 R3
i1 i2 i3

i4 i5
+ +
v1 R4 R5 v2
- -

FIGURA P37

Encontre o valor máximo do peso W que a estrutura é capaz de suportar. Lem-


bre-se de que os fios não podem suportar compressão, portanto, Ti deve ser não
negativo.
37. As equações que descrevem o circuito mostrado na Figura P37 são

a. Os valores dados de resistências e da tensão y1 são R1 = 5, R2 = 100, R3 =


200, R4 = 150, R5 = 250 kæ e v1 = 100 V (note que 1 kæ = 1000 æ). Su-
ponha que cada resistência não pode suportar um corrente maior do que 1
mA (= 0,001 A). Determine a faixa permitida de valores positivos para a
tensão y2.
b. Suponha que queiramos investigar como a resistência R3 limita a faixa per-
mitida para y2. Obtenha uma plotagem do limite permitido para y2 como
uma função de R3 para 150 … R3 … 250 kæ.
38. Muitas aplicações exigem que conheçamos a distribuição de temperatura em
um objeto. Por exemplo, essa informação é importante para controlar as pro-
priedades do material, como a rigidez, quando resfriamos um objeto formado a
partir de metal fundido. Em um curso de transferência de calor, normalmente a
seguinte descrição da distribuição de temperatura em uma lâmina retangular de
metal é derivada. A temperatura é mantida constante com valor T1 em três la-
dos e com valor T2 no quarto lado (ver Figura P38). A temperatura T(x,y) como
uma função das coordenadas xy mostradas é dada por
T (x, y) = (T2 - T1)w(x, y) + T1
Capítulo 4 ■ Programando com o MATLAB 213

T2
W

T1 T (x, y) T1

0 x
0 L
T1

FIGURA P38

em que

Utilize os seguintes dados: T1 = 70 °F, T2 = 200 °F e W = L = 2 ft.


a. Os termos na série anterior se tornam menores em magnitude conforme n
aumenta. Escreva um programa no MATLAB para verificar esse fato para
n = 1, ..., 19 para o centro da lâmina (x = y = 1).
b. Utilizando x = y = 1, escreva um programa no MATLAB para determinar
quantos termos são necessários para produzir um cálculo de temperatura com
precisão de 1% (isto é, para que valor de n a adição do próximo termo na sé-
rie produz uma mudança em T menor do que 1%?) Utilize seu insight físico
para determinar se essa resposta é a temperatura correta no centro da lâmina.
c. Modifique o programa do item b para calcular as temperaturas na lâmina;
utilize um espaçamento de 0,2 tanto para x quanto para y.
39. Considere o seguinte arquivo de script. Preencha as linhas da tabela a seguir
com os valores que seriam exibidos imediatamente após a sentença while se
você rodasse o arquivo de script. Escreva os valores das variáveis a cada vez
que a sentença while for executada. Você pode precisar de mais algumas
linhas na tabela. Em seguida, digite o código em um arquivo e rode-o para ve-
rificar suas respostas.
214 Introdução ao MATLAB para Engenheiros

Iteração k b x y
Primeira
Segunda
Terceira
Quarta
Quinta

40. Suponha que uma pessoa faça o primeiro movimento contra o computador em
um jogo da velha, que possui um grid 3 * 3. Escreva uma função no MATLAB
que permita ao computador responder àquele movimento. O argumento de en-
trada da função deve ser a localização da célula correspondente ao movimento
da pessoa. A saída da função deve ser a localização da célula correspondente
ao primeiro movimento do computador. Rotule as células como 1, 2 e 3 na li-
nha superior; 4, 5 e 6 na linha do meio; e 7, 8 e 9 na linha de baixo.

Seção 4.7
41. A tabela a seguir apresenta valores aproximados do coeficiente de atrito estáti-
co ␮ para vários materiais.

Materiais ␮
Entre metal e metal 0,20
Entre madeira e madeira 0,35
Entre metal e madeira 0,40
Entre borracha e concreto 0,70

Para iniciar o movimento de um peso W sobre uma superfície horizontal, você


deve empurrá-lo com uma força F, em que F = µW. Escreva um programa no
MATLAB que utilize a estrutura switch para calcular a força F. O programa
deve aceitar como entradas o valor de W e os tipos de materiais.
42. A altura e a velocidade de um projétil (como uma bola arremessada) lançado
com uma velocidade v0 e com um ângulo A em relação à horizontal são dados
por
Capítulo 4 ■ Programando com o MATLAB 215

em que g é a aceleração devido à gravidade. O projétil irá se chocar contra o


solo quando h(t) = 0, o que ocorrerá no instante thit = 2(v0/g) sen A.
Utilize a estrutura switch para escrever um programa no MATLAB
que calcule a altura máxima alcançada pelo projétil, a distância horizontal total
percorrida ou o instante em que o projétil se choca contra o solo. O programa
deve aceitar como entradas a escolha do usuário de qual quantidade deve ser
calculada e os valores de v0, A e g. Teste o programa para o caso em que v0 =
40 m/s, A = 30° e g = 9,81 m/s2.
43. Utilize a estrutura switch para escrever um programa no MATLAB que cal-
cule a quantidade de dinheiro que é acumulada em uma conta durante um ano.
O programa deve aceitar as seguintes entradas: a quantidade inicial de dinheiro
depositada na conta; a frequência do rendimento (mensal, trimestral, semestral
ou anual); e o rendimento. Rode o seu programa para um depósito inicial de
$1000 para cada caso; utilize um rendimento de 5%. Compare as quantidades
de dinheiro que são acumuladas em cada caso.
44. Engenheiros frequentemente precisam estimar a pressão e o volume de um gás
em um recipiente. A equação de van der Waals é muitas vezes utilizada com
esse propósito. A equação é a seguinte:

em que o termo b é uma correção para o volume das moléculas e o termo


é uma correção para as atrações moleculares. A constante dos gases é R, a tem-
peratura absoluta é T e o volume específico do gás é . O valor de R é o mes-
mo para todos os gases: 0,08206 L-atm/mol-K. Os valores de a e b dependem
do tipo de gás. Alguns valores são dados na tabela seguinte. Escreva uma fun-
ção definida pelo usuário utilizando a estrutura switch que calcule a pressão
P a partir da equação de van der Waals. Os argumentos de entrada da função
devem ser T, , e uma variável string que contenha o nome do gás listado na
tabela. Teste sua função para o gás cloro (Cl2) com T = 300 K e = 20 L/mol.

Gás a (L2-atm/mol2) b (L/mol)


Hélio, He 0,0341 0,0237
Hidrogênio, H2 0,244 0,0266
Oxigênio, O2 1,36 0,0318
Gás cloro, Cl2 6,49 0,0562
Dióxido de carbono, CO2 3,59 0,0427

45. Utilizando o programa desenvolvido no Problema 19, escreva um programa


que utiliza a estrutura switch para calcular o número de dias em um ano até
uma determinada data, dados o ano, o mês e o dia do mês.
216 Introdução ao MATLAB para Engenheiros

Seção 4.9
46. Considere o modelo de matrículas em um colégio discutido no Exemplo 4.9-2.
Suponha que o colégio queira limitar a admissão de calouros a 120% do núme-
ro atual de alunos do segundo ano, além de limitar a transferência de alunos do
segundo ano a 10% do número atual de calouros. Reescreva e rode o programa
dado no exemplo para examinar os efeitos dessas políticas ao longo de um pe-
ríodo de 10 anos. Plote os resultados.
47. Suponha que você planeje depositar as seguintes quantidades mensais em uma
conta por um período de 5 anos. Não há dinheiro na conta inicialmente.

Ano 1 2 3 4 5
Depósito mensal ($) 300 350 350 350 400

Ao final de cada ano em que o saldo da conta é de pelo menos $3000, você
retira $2000 para comprar um certificado de depósito (CD), que paga 6% de
juros anualmente.
Escreva um programa no MATLAB que calcule quanto dinheiro será
acumulado na conta e nos CDs que você comprar. Rode o programa para duas
taxas de rendimento diferentes: 4% e 5%.
48.* Um certa companhia fabrica e vende carrinhos de golfe. Ao final de cada sema-
na, a companhia transfere os carrinhos produzidos naquela semana para o esto-
que. Todos os carrinhos que são vendidos são retirados do estoque. Um modelo
simples do processo é

I(k + 1) = P(k) + I(k) - S(k)


em que
P(k) = número de carrinhos produzidos na semana k
I(k) = número de carrinhos no estoque na semana k
S(k) = número de carrinhos vendidos na semana k
As vendas semanais projetadas para uma janela temporal de 10 semanas são

Semana 1 2 3 4 5 6 7 8 9 10
Vendas 50 55 60 70 70 75 80 80 90 55

Suponha que a produção semanal seja baseada nas vendas da semana anterior,
de modo que P(k) = S(k - 1). Considere que a primeira produção semanal é de
50 carrinhos, isto é, P(1) = 50. Escreva um programa no MATLAB que calcule
Capítulo 4 ■ Programando com o MATLAB 217

e plote o número de carrinhos no estoque para cada uma das 10 semanas ou até
que o estoque seja menor do que zero. Rode o programa para dois casos: (a)
um estoque inicial de 50 carrinhos, isto é, I(1) = 50, e (b) um estoque inicial de
30 carrinhos, isto é, I(1) = 30.
49. Refaça o Problema 48 com a restrição de que a produção da semana seguinte
será igual a zero se o estoque exceder 40 carrinhos.
Foto: cortesia da Aero Vironment, Inc.

Engenharia no
Século XXI…
Aeronáutica de baixa velocidade

A
lgumas vezes, quando imaginamos que uma área técnica já está suficiente-
mente madura e que a possibilidade de novos desenvolvimentos é impro-
vável, somos surpreendidos por um novo projeto. Inovações recentes na
aeronáutica de baixa velocidade são exemplos desse fenômeno. Mesmo que os enge-
nheiros já saibam há anos que um ser humano é capaz de gerar energia suficiente para
impulsionar uma aeronave, tal feito era impossível antes do surgimento dos materiais
leves que permitiram que o Gossamer Challenger cruzasse o Canal Inglês. Aeronaves
movidas a energia solar que podem permanecer no ar por mais de um dia são outros
casos.
Outro exemplo é o surgimento recente dos veículos com asa em efeito solo
(WIG)†. Os veículos WIG utilizam um colchão de ar para criar sustentação. Eles
são uma mistura de aeronave com aerobarco, e a maioria deles é projetada para voar
apenas sobre a água. Um aerobarco passeia sobre um colchão de ar criado por ven-
toinhas, mas o colchão de ar de um veículo WIG surge devido ao ar que é capturado
abaixo de suas asas curtas.
Pequenas aeronaves com câmeras serão úteis para busca e reconhecimento. Um
exemplo de tal “microveículo aéreo” (MAV)†† é o Black Widow de 6 polegadas de
comprimento produzido pela Aero Vironment, Inc. Ele transporta uma câmera de ví-
deo de 2 g que é do tamanho de um torrão de açúcar, e voa a uma velocidade de 65
km/h com um alcance de 10 km. O projeto adequado desse tipo de veículo exige
uma metodologia sistemática para se encontrar a combinação ótima entre a forma do
aerofólio, o tipo do motor, o tipo da bateria e, o mais importante, a forma da hélice.
Os recursos gráficos do MATLAB fazem dele uma ferramenta útil para a visua-
lização dos padrões de fluxo, e o toolbox de Otimização é útil para o projeto desses
veículos. ■

† N. de T.: WIG é a sigla de Wing in Ground.


†† N. de T.: MAV é a sigla de Micro Air Vehicle.
5
Plotagem avançada

Neste capítulo você aprenderá funcionalidades adicionais a serem utilizadas para


criar uma grande variedade de plotagens bidimensionais, que também são chamadas
de plotagens xy, e de plotagens tridimensionais, também chamadas de plotagens xyz,
ou plotagens de superfície. Plotagens bidimensionais são discutidas nas Seções 5.1,
5.2 e 5.3. A Seção 5.4 discute plotagens tridimensionais. Essas funções de plotagem
são descritas nas categorias graph2d e graph3d do Sistema de Ajuda, portanto, se
você digitar help graph2d ou help graph3d, uma lista de funções de plota-
gem relevantes será exibida.
Uma aplicação importante da plotagem é a estimação de função, que é uma
técnica de utilização das plotagens de dados para se obter uma função matemática ou
um “modelo matemático” que descreve o processo que gerou os dados. Este tópico é
tratado no Capítulo 6.

5.1 Funções de plotagem xy


A “anatomia” e a nomenclatura de uma típica plotagem xy são mostradas na Figura
5.1-1, na qual aparecem a plotagem de um conjunto de dados e de uma curva gerada a
partir de uma equação. Uma plotagem pode ser feita a partir de dados medidos ou de
SÍMBOLO uma equação. Quando os dados são plotados, cada ponto é plotado com um símbolo
DE DADOS de dados ou um marcador de pontos, tais como os pequenos círculos mostrados na
Figura 5.1-1. Uma exceção a essa regra aconteceria quando houvesse muitos dados
e os símbolos ficassem densamente distribuídos. Neste caso, cada dado deveria ser
plotado tendo como símbolo um ponto. Todavia, quando a plotagem é gerada a partir
de uma função, os símbolos de dados nunca devem ser utilizados! Linhas entre os
pontos espaçados devem ser sempre utilizadas para plotar uma função.
A função de plotagem xy básica do MATLAB é a função plot(x,y), como
vimos no Capítulo 1. Se x e y forem vetores, uma única curva é plotada com os
valores de x nas abscissas e os valores de y nas ordenadas. Os comandos xla-
bel e ylabel inserem rótulos nas abscissas e nas ordenadas, respectivamente. A
220 Introdução ao MATLAB para Engenheiros

TÍTULO DA
PLOTAGEM
Altura de um objeto em queda versus tempo

1600
SÍMBOLO DE DADOS
1400

1200

1000
Altura (pés)

LEGENDA
800

600
Modelo com arrasto nulo
Dados
400
TICK MARK
200

0
0 1 2 3 4 5 6 7 8 9 10
Tempo (segundos)

RÓTULO DO
RÓTULO DO EIXO TICK MARK
FIGURA 5.1-1 Nomenclatura para uma típica plotagem xy.

sintaxe é xlabel(’text’), em que text é o texto do rótulo. Note que você


deve escrever o texto rótulo entre aspas simples. A sintaxe para ylabel é a mesma.
O comando title insere um título na parte superior da plotagem. Sua sintaxe é
title(’text’), em que text é o texto do título.
A função de plotagem plot(x,y) no MATLAB seleciona automaticamente
um espaçamento entre tick marks para cada eixo e insere rótulos apropriados para
cada tick mark. Essa funcionalidade é chamada de dimensionamento automático. O
MATLAB também escolhe os limites para os eixos x e y. A ordem dos comandos
xlabel, ylabel e title não interessa, mas eles devem ser inseridos após o co-
mando plot, tanto em linhas separadas, usando reticências, quanto na mesma linha,
separados por vírgulas.
Após o comando plot ser executado, a plotagem aparecerá na janela Figure.
Você pode obter uma cópia da plotagem utilizando um dos seguintes caminhos:
1. Utilize o menu do sistema. Selecione Print no menu File da janela Figure.
Clique em OK para confirmar o processo de impressão.
Capítulo 5 ■ Plotagem avançada 221

2. Digite print na linha de comando. Esse comando envia a plotagem atual


diretamente para a impressora.
3. Salve a plotagem em arquivo para ser impressa posteriormente ou para ser
importada para outro aplicativo, como um editor de textos. Você precisa
saber alguma coisa sobre formatos de arquivos gráficos para poder utilizar
esse arquivo adequadamente. Veja a subseção Exportanto Figuras que se
encontra mais a frente nesta seção.
Digite help print para obter mais informações.
O MATLAB atribui a saída do comando plot à janela Figure de número 1.
Quando outro comando plot é executado, o MATLAB sobrescreve o conteúdo da
janela Figure existente com a nova plotagem. Apesar de você poder manter mais do
que uma janela Figure ativa, nós não utilizamos essa funcionalidade neste texto.
Quando você não precisar mais da plotagem, feche a janela Figure selecionando
Close no menu File na própria janela Figure. Se você não fechar a janela, ela não
reaparecerá quando um novo comando plot for executado. Todavia, a figura ainda
será atualizada.
A Tabela 5.1-1 lista os requerimentos essenciais para produzir plotagens que
informam de maneira eficaz.

TABELA 5.1-1 Requerimentos para uma plotagem correta


1. Cada eixo deve ser rotulado com o nome da quantidade que está sendo plotada e com a sua unidade
de medida! Se duas ou mais quantidades com diferentes unidades de medida forem plotadas (como
em uma plotagem de distância e velocidade versus tempo), indique as unidades no rótulo do eixo,
se houver espaço, ou na legenda ou nos rótulos de cada curva.
2. Cada eixo deve conter tick marks espaçados regularmente e com intervalos adequados – nem muito
esparsos, nem muito densos –, de modo que o espaçamento seja fácil de se interpretar e interpolar.
Por exemplo, utilize 0,1, 0,2, e assim por diante, em vez de 0,13, 0,26, e assim por diante.
3. Se você estiver plotando mais do que uma curva ou conjunto de dados, rotule cada um na plotagem,
utilize tipos diferentes de linha ou utilize uma legenda para distingui-las.
4. Se você estiver preparando múltiplas plotagens de um tipo similar ou se os rótulos dos eixos não
puderem transmitir informação suficiente, utilize um título.
5. Se você estiver plotando dados medidos, plote cada um com um símbolo, como um círculo, um
quadrado ou uma cruz (utilize o mesmo símbolo para cada ponto no mesmo conjunto de dados). Se
houver muitos dados, plote-os utilizando o ponto como símbolo.
6. Algumas vezes os símbolos de dados são conectados por linhas para melhorar a sua visualização,
especialmente se houver poucos dados. Todavia, ao conectar os dados dessa forma, especialmente
com uma linha sólida, pode-se pensar que há conhecimento do que ocorre entre os pontos dos
dados. Portanto, você deve ter cuidado para evitar essa interpretação equivocada.
7. Se você estiver plotando pontos gerados a partir da avaliação de uma função (e não pontos de
dados medidos), não utilize um símbolo para plotar os pontos. Em vez disso, gere muitos pontos, e
conecte-os com linhas sólidas.
222 Introdução ao MATLAB para Engenheiros

Comandos axis e grid


O comando grid exibe linhas de grid correspondentes aos rótulos dos tick marks.
Você pode utilizar o comando axis para substituir as escolhas do MATLAB para os
LIMITES limites dos eixos. A sintaxe básica é axis([xmin xmax ymin ymax]). Esse
DOS EIXOS comando define a escala para os valores de x e y com os valores mínimos e máximos
indicados. Note que, diferentemente de um arranjo, esse comando não utiliza vírgulas
para separar os valores.
A Figura 5.1-2 mostra uma plotagem em que o comando axis([0 10 -2
5]) foi utilizado para substituir os limites escolhidos pelo dimensionamento automá-
tico (o qual escolheu 4 para ser o limite superior).
O comando axis apresenta as seguintes variantes:
■ axis square escolhe os limites dos eixos de forma que a plotagem seja
quadrada.
■ axis equal escolhe os fatores de escala e o espaçamento entre tick marks
iguais para cada eixo. Essa variação faz com que o resultado do comando
plot(sin(x),cos(x)) se pareça mais com um círculo do que com uma
elipse.
■ axis auto faz com que o escalonamento dos eixos retorne ao modo padrão
de dimensionamento automático, em que os melhores limites dos eixos são cal-
culados automaticamente.
Digite help axis para ver a lista completa de variantes.

FIGURA 5.1-2 Uma amostra de plotagem mostrada na janela Figure.


Capítulo 5 ■ Plotagem avançada 223

Plotagens de números complexos


Com apenas um argumento, digamos, plot(y), a função plot plotará os valo-
res no vetor y versus os índices 1, 2, 3, ..., e assim por diante. Se y for complexo,
plot(y) plota as partes imaginárias versus as partes reais. Assim, plot(y) nesse
caso é equivalente a plot(real(y),imag(y)). Essa situação é a única em que
a função plot lida com as partes imaginárias; em todas as outras variantes da função
plot, as partes imaginárias são ignoradas. Por exemplo, o arquivo de script
z = 0.1 + 0.9i;
n = 0:0.01:10;
plot(z.^n),xlabel(’Real’),ylabel(’Imaginary’)
gera uma plotagem em espiral.

O comando de plotagem de funções fplot


Há no MATLAB um comando “inteligente” para a plotagem de funções. O coman-
do fplot analisa automaticamente a função a ser plotada e decide quantos pontos
serão utilizados de modo que a plotagem mostre todas as características da função.
Sua sintaxe é fplot(function, [xmin xmax]), em que function é um
handle da função a ser plotada e [xmin xmax] especifica os valores mínimo e
máximo da variável independente. A faixa de valores da variável dependente tam-
bém pode ser especificada. Nesse caso, a sintaxe é fplot(function, [xmin
xmax ymin ymax]).
Por exemplo, a sessão
>>f = @(x) (cos(tan(x)) - tan(sin(x)));
>>fplot(f,[1 2])
produz a plotagem mostrada na Figura 5.1-3a. O comando fplot seleciona auto-
maticamente os pontos suficientes para exibir todas as variações na função. Podemos
obter os mesmos resultados utilizando o comando plot, mas precisamos saber quan-
tos valores devem ser calculados para gerar a plotagem. Por exemplo, se escolhermos
um espaçamento de 0,01 e utilizarmos o comando plot, obteremos a plotagem na
Figura 5.1-3b. Vemos que essa escolha de espaçamento não é capaz de representar
parte do comportamento da função.
Outra forma é [x,y] = fplot(function, limits), em que li-
mits pode ser [xmin xmax] ou [xmin xmax ymin ymax]. Com essa for-
ma o comando retorna os valores das abscissas e das ordenadas nos vetores coluna
x e y, mas nenhuma plotagem é produzida. Os valores retornados podem então ser
utilizados com outros propósitos, como a plotagem de múltilplas curvas, que é o
tópico da próxima seção. Outros comandos podem ser utilizados com o comando
fplot para melhorar a aparência da plotagem, por exemplo, os comandos ti-
tle, xlabel e ylabel, e os comandos de tipos de linha a serem introduzidos
na próxima seção.

Plotando polinômios
Podemos plotar polinômios mais facilmente utilizando a função polyval. A função
polyval(p,x) avalia o polinômio p em valores específicos da sua variável inde-
224 Introdução ao MATLAB para Engenheiros

0,5 0,5

1 1

1,5 1,5

2 2

2,5 2,5

3 3
1,3 1,4 1,5 1,6 1,7 1,8 1,3 1,4 1,5 1,6 1,7 1,8
(a) (b)
FIGURA 5.1-3 (a) Plotagem gerada com o comando fplot. (b) Plotagem gerada com o co-
mando plot utilizando 101 pontos.

pendente x. Por exemplo, para plotar o polinômio 3x5 + 2x4 - 100x3 + 2x2 - 7x + 90
ao longo da faixa -6 … x … 6 com um espaçamento de 0,01, você deve digitar
>>x = -6:0.01:6;
>>p = [3,2,-100,2,-7,90];
>>plot(x,polyval(p,x)),xlabel(’x’),ylabel(’p’)
A Tabela 5.1-2 resume os comandos de plotagem xy discutidos nesta seção.

Teste seus conhecimentos


T5.1-1 Plote a equação y = para 0 … x … 35 e 0 … y … 3,5.
T5.1-2 Utilize o comando fplot para investigar a função tan(cos x) - sen(tan x)
para 0 … x … 2. Quantos valores de x são necessários para que seja obtida a
mesma plotagem utilizando-se o comando plot? (Resposta: 292 valores)
T5.1-3 Plote a parte imaginária versus a parte real da função (0,2 + 0,8i)n para 0 …
n … 20. Escolha uma quantidade suficiente de pontos para obter uma curva
suave. Rotule cada eixo e insira um título na plotagem. Utilize o comando
axis para alterar o espaçamento entre os rótulos dos tick-marks.
Capítulo 5 ■ Plotagem avançada 225

TABELA 5.1-2 Comandos básicos de plotagens xy


Comando Descrição
axis([xmin xmax ymin ymax]) Estabelece os limites mínimos e máximos dos eixos x e y.
fplot(function,[xmin xmax]) Realiza plotagens inteligentes de funções, em que function é um
function handle que descreve a função a ser plotada e [xmin xmax]
especifica os valores mínimo e máximo da variável independente. A faixa
da variável dependente também pode ser especificada. Nesse caso, a
sintaxe é fplot(function, [xmin xmax ymin ymax]).
grid Exibe linhas de grid correspondentes aos rótulos dos tick-marks.
plot(x,y) Gera uma plotagem do arranjo y versus o arranjo x com eixos lineares.
plot(y) Plota os valores de y versus os seus índices se y for um vetor. Plota as
partes imaginárias versus as partes reais de y se ele for um vetor que
contêm valores complexos.
polyval(p,x) Avalia o polinômio p em valores específicos da sua variável independente x.
print Imprime a plotagem na janela Figure.
title(’text’) Insere text em um título na parte superior da plotagem.
xlabel(’text’) Adiciona o rótulo text ao eixo x (as abscissas).
xlabel(’text’) Adiciona o rótulo text ao eixo y (as ordenadas).

Salvando figuras
Quando você cria uma plotagem, a janela Figure aparece. Essa janela apresenta oito
menus, que são discutidos em detalhes na Seção 5.3. O menu File é utilizado para
salvar e imprimir a figura. Você pode salvar a sua figura em um formato que pode ser
aberto durante outra sessão do MATLAB ou em um formato que pode ser utilizado
por outros aplicativos.
Para salvar uma figura que pode ser aberta em sessões subsequentes do MAT-
LAB, acrescente a extensão .fig ao nome do arquivo. Para fazer isso, selecione Save
no menu File da janela Figure ou clique no botão Save (o ícone do disquete) na barra
de ferramentas. Se essa for a primeira vez que você estiver salvando o arquivo, apa-
recerá a caixa de diálogo Save As. Certifique-se de que o tipo é Figura do MATLAB
(*.fig). Especifique o nome que você quer atribuir ao arquivo de figura. Clique em
OK. Você também pode utilizar o comando saveas.
Para abrir um arquivo de figura, selecione Open no menu File ou clique no bo-
tão Open (o ícone de uma pasta aberta) na barra de ferramentas. Selecione o arquivo
de figura que você quer abrir em clique em OK. O arquivo de figura aparecerá em
uma nova janela Figure.

Exportando figuras
Se você quiser salvar a figura em um formato que pode ser utilizado por outro aplicativo,
como os formatos de arquivos gráficos padrão TIFF ou EPS, execute os passos a seguir:
1. Selecione Export Setup no menu File. Essa caixa de diálogo fornece opções
que você pode especificar para o arquivo de saída, tais como o tamanho da figu-
ra, a fonte, o tamanho e o estilo das linhas e o formato da saída.
2. Selecione Export na caixa de diálogo Export Setup. Aparecerá uma caixa de
diálogo Save As padrão.
226 Introdução ao MATLAB para Engenheiros

3. Selecione o formato na lista de formatos que aparece no menu de tipos da caixa


de diálogo Save As. Ao selecionar o formato do arquivo exportado, será adicio-
nada a extensão de nome de arquivo padrão que é dada a arquivos daquele tipo.
4. Insira o nome que você quer dar ao arquivo, sem a extensão.
5. Clique em Save.
Você também pode exportar a figura a partir da linha de comando utilizando o co-
mando print. Veja o Sistema de Ajuda do MATLAB para mais informações sobre a
exportação de figuras em diferentes formatos.
Você também pode copiar uma figura para o clipboard e colá-la em outro apli-
cativo:
1. Selecione Copy Options no menu Edit da janela Figure. Aparecerá a página
Copying Options da caixa de diálogo Preferences.
2. Complete os campos na página Copying Options e clique em OK.
3. Selecione Copy Figure no menu Edit.
A figura é copiada para o clipboard do Windows e pode ser colada em outro aplicativo.
O MATLAB também permite salvar figuras em formatos compatíveis com o Po-
werPoint e o MS Word. Veja o Sistema de Ajuda do MATLAB para mais informações.
As funções gráficas abordadas nesta seção e na Seção 5.3 podem ser inseridas
em arquivos de script para serem reutilizadas a fim de se gerar plotagens similares.
Essa funcionalidade dá a essas funções uma vantagem em relação às ferramentas de
plotagem interativas discutidas na Seção 5.3.
Quando você estiver criando plotagens, tenha em mente que as ações listadas
na Tabela 5.1-3, ainda que não sejam requeridas, podem mesmo assim melhorar a
aparência e a utilidade de suas plotagens.

TABELA 5.1-3 Dicas para a melhoria de plotagens


1. Comece a escala de zero sempre que possível. Essa técnica evita uma falsa impressão das
magnitudes de quaisquer variações mostradas na plotagem.
2. Utilize um espaçamento entre tick-marks que faça sentido. Por exemplo, se as quantidades forem
meses, escolha um espaçamento de 12 porque 1/10 de um ano não é uma divisão conveniente.
Reduza suficientemente o espaçamento entre os tick-marks para que eles sejam úteis, mas não o
reduza mais do que isso.
3. Minimize o número de zeros nos rótulos dos tick-marks. Por exemplo, utilize uma escala em
milhões de dólares quando for apropriado, em vez de uma escala em dólares com seis zeros após
cada número.
4. Determine os valores mínimos e máximos para cada eixo antes de plotar os dados. Em seguida,
defina limites para os eixos de maneira a cobrir toda a faixa de dados, com o acréscimo de uma
quantidade adicional que permita a seleção de um espaçamento conveniente entre os tick-marks.

5.2 Comandos adicionais e tipos de plotagem


O MATLAB pode criar figuras que contêm um arranjo de plotagens, chamadas de
SUBPLOTAGEM subplotagens. Elas são úteis quando você quiser comparar os mesmos dados plotados
com diferentes tipos de eixo, por exemplo. O comando subplot do MATLAB cria
Capítulo 5 ■ Plotagem avançada 227

esse tipo de figura. Frequentemente é preciso plotar mais do que uma curva ou con-
junto de dados em uma única plotagem. Isso é chamado de plotagem sobreposta. Esta
seção descreve essas plotagens e alguns outros tipos de plotagem.

Subplotagens
Você pode utilizar o comando subplot para obter algumas “subplotagens” menores
na mesma figura. A sintaxe é subplot(m,n,p). Esse comando divide a janela
Figure em um arranjo de painéis retangulares com m linhas e n colunas. A variável
p diz ao MATLAB para inserir a saída do comando plot que vem após o comando
subplot na p-ésimo painel. Por exemplo, subplot(3,2,5) cria um arranjo de
seis painéis, distribuídos em três linhas e duas colunas, e faz com que a próxima plo-
tagem apareça no quinto painel (no canto esquerdo inferior). O seguinte arquivo de
script criou a Figura 5.2-1, a qual mostra as plotagens das funções y = e-1,2x sen(10x
+ 5) para 0 … x … 5 e y = |x3 - 100| para -6 … x … 6.
x = 0:0.01:5;
y = exp(-1.2*x).*sin(10*x+5);
subplot(1,2,1)
plot(x,y),xlabel(’x’),ylabel(’y’),axis([0 5 -1 1])
x = -6:0.01:6;
y = abs(x.^3-100);
subplot(1,2,2)
plot(x,y),xlabel(’x’),ylabel(’y’),axis([-6 6 0 350])

1 350

0,8
300
0,6

0,4 250

0,2
200
0
y

150
0,2

0,4 100

0,6
50
0,8

1 0
0 1 2 3 4 5 0 5
x x
FIGURA 5.2-1 Aplicação do comando subplot.
228 Introdução ao MATLAB para Engenheiros

Teste seus conhecimentos


T5.2-1 Escolha um espaçamento adequado para t e v, e utilize o comando sub-
plot para plotar a função z = e-0,5t cos(20t - 6) para 0 … t … 8 e a função u
= 6 log10 (v2 + 20) para -8 … v … 8. Rotule cada eixo.

Plotagens sobrepostas
Você pode utilizar as seguintes variantes das funções de plotagem básicas do MAT-
LAB plot(x,y) e plot(y) para criar plotagens sobrepostas:
■ plot(A) plota as colunas de A versus seus índices e gera n curvas, sendo A
uma matriz com m linhas e n colunas.
■ plot(x,A) plota a matriz A versus o vetor x, em que x é um vetor linha ou
um vetor coluna e A é uma matriz com m linhas e n colunas. Se o comprimento
de x for m, então cada coluna de A será plotada versus o vetor x. Haverá tantas
curvas quantas forem as colunas de A. Se x tiver comprimento n, então cada
linha de A será plotada versus o vetor x. Haverá tantas curvas quantas forem as
linhas de A.
■ plot(A,x) plota o vetor x versus a matriz A. Se o comprimento de x for m,
então x será plotado versus as colunas de A. Haverá tantas curvas quantas forem
as colunas de A. Se o comprimento de x for n, então x será plotado versus as
linhas de A. Haverá tantas curvas quantas forem as linhas de A.
■ plot(A,B) plota as colunas da matriz B versus as colunas da matriz A.

Marcadores de dados e tipos de linha


Para plotar o vetor y versus o vetor x e marcar cada ponto com um marcador de
dados, envolva o símbolo para o marcador entre aspas simples na função plot.
A Tabela 5.2-1 mostra os símbolos para alguns dos marcadores de dados disponí-
veis. Por exemplo, para utilizar um círculo pequeno, que é representado pela letra
minúscula o, digite plot(x,y,’o’). Essa notação resulta em uma plotagem
como a que é apresentada à esquerda na Figura 5.2-2. Para conectar cada marca-

TABELA 5.2-1 Especificadores para marcadores de dados, tipos de linha e cores


Marcadores de dados† Tipos de linha Cores
Ponto (·) · Linha sólida - Preto k
Asterisco (*) * Linha tracejada -- Azul b
Cruz (×) × Linha tracejada com pontos -. Ciano c
Círculo (o) o Linha com pontos : Verde g
Sinal de adição (+) + Magenta m
Quadrado (䊐) s Vermelho r
Diamante (䉫) d Branco w
Estrela de cinco pontas (夹) p Amarelo y
† Há outros marcadores de dados disponíveis. Procure por “markers” no Sistema de Ajuda do MATLAB.
Capítulo 5 ■ Plotagem avançada 229

3,5 3,5

3 3

2,5 2,5

2 2
y

y
1,5 1,5

1 1

0,5 0,5

0 0
0 5 10 0 5 10
x x
FIGURA 5.2-2 Utilização de marcadores de dados.

dor de dados com uma linha reta, precisamos plotar os dados duas vezes, digitando
plot(x,y,x,y,’o’). Veja a plotagem à direita na Figura 5.2-2.
Suponha que nós tenhamos duas curvas ou conjuntos de dados armazenados
nos vetores x, y, u e v. Para plotar y versus x e v versus u na mesma janela Figu-
re, digite plot(x,y,u,v). Ambos os conjuntos serão plotados com uma linha
sólida, que é o estilo de linha padrão. Para distinguir os conjuntos, podemos plotá-
-los com diferentes tipos de linha. Para plotar y versus x com uma linha sólida e
u versus v com uma linha tracejada, digite plot(x,y,u,v,’--’), em que os
símbolos ’--’ representam uma linha tracejada. A Tabela 5.2-1 apresenta os sím-
bolos para outros tipos de linha. Para plotar y versus x com asteriscos (*) conec-
tados por uma linha com pontos, você deve plotar os dados duas vezes digitando
plot(x,y,’*’,x,y,’:’).
Você pode obter símbolos e linhas de diferentes cores utilizando os símbolos de
cor mostrados na Tabela 5.2-1. O símbolo de cor pode ser combinado com o símbolo
de marcador de dados e o símbolo de tipo de linha. Por exemplo, para plotar y versus x
com asteriscos verdes conectados por uma linha tracejada vermelha, você deve plotar
os conjuntos de dados duas vezes digitando plot(x,y,’g*’,x,y,’r--’). (Não
utilize cores se você for imprimir sua plotagem em uma impressora em preto e branco.)

Rotulando curvas e dados


Quando mais do que uma curva ou conjunto de dados forem plotados em um gráfico,
devemos ser capazes de distingui-los. Se utilizarmos diferentes símbolos de dados ou
diferentes tipos de linha, então podemos fornecer uma legenda ou inserir um rótulo
230 Introdução ao MATLAB para Engenheiros

próximo a cada curva. Para criar uma legenda, utilize o comando legend. A forma
básica desse comando é legend(’string1’,’string2’), em que string1
e string2 são strings de texto que você deve escolher. O comando legend auto-
maticamente obtém da plotagem o tipo de linha utilizado por cada conjunto de dados
e exibe uma amostra desse tipo de linha na caixa de legenda próxima à string que você
escolheu. O seguinte arquivo de script produziu a plotagem mostrada na Figura 5.2-3.

O comando legend deve ser situado em algum lugar após o comando plot.
Quando a plotagem aparecer na janela Figure, utilize o mouse para posicionar a caixa
de legenda. (Pressione o botão esquerdo do mouse e mova a caixa.)
Outra maneira de diferenciar curvas é situando um rótulo próximo a cada
uma delas. O rótulo pode ser gerado tanto com o comando gtext, que permite
a você inserir o rótulo utilizando o mouse, ou com o comando text, que requer
que você especifique as coordenadas do rótulo. A sintaxe do comando gtext é
gtext(’string’), em que string é uma string de texto que especifica o rótulo
que você escolher. Quando esse comando for executado, o MATLAB esperará por
um clique do mouse ou que uma tecla seja pressionada enquanto o cursor do mouse
estiver dentro da janela Figure; o rótulo será inserido na posição do cursor do mouse.

3,5
Seno hiperbólico e tangente hiperbólica

3
senh(x)
tanh(x)
2,5

1,5

0,5

00 0,2 0,4 0,6 0,8 1 1,2 1,4 1,6 1,8 2


x
FIGURA 5.2-3 Aplicação do comando legend.
Capítulo 5 ■ Plotagem avançada 231

Você pode utilizar mais do que um comando gtext para uma determinada plota-
gem. O comando text(x,y,’string’) adiciona uma string de texto à plotagem
no local especificado pelas coordenadas x,y. Essas coordenadas e os dados da plo-
tagem estão nas mesmas unidades de medida. Encontrar os valores apropriados das
coordenadas para que seja utilizado o comando text normalmente requer um pouco
de tentativa e erro.

O comando hold
O comando hold cria uma plotagem que precisa de dois ou mais comandos plot.
Suponha que nós queiramos exibir y2 = 4 + e-x cos 6x versus y1 = 3 + e-x sen 6x, -1 …
x … 1, e z = (0,1 + 0,9i)n, 0 … n … 10, na mesma plotagem. O seguinte arquivo de script
cria a plotagem na Figura 5.2-4:

Quando mais de um comando plot for utilizado, não insira nenhum dos comandos
gtext antes de qualquer um dos comandos plot. Uma vez que a escala muda após
a execução de cada comando plot, o rótulo inserido pelo comando gtext pode
acabar em uma posição errada. A Tabela 5.2-2 resume os comandos para melhoria de
plotagens introduzidos nesta seção.

6
y2 versus y1

1
Imag (z) versus Real (z)
0

1
1 0 1 2 3 4 5 6
FIGURA 5.2-4 Aplicação do comando hold.
232 Introdução ao MATLAB para Engenheiros

Teste seus conhecimentos


T5.2-2 Exiba os dois conjuntos de dados a seguir na mesma plotagem. Para cada
conjunto, x = 0, 1, 2, 3, 4, 5. Utilize um marcador de dados diferente para cada
conjunto. Conecte os marcadores para o primeiro conjunto com linhas sólidas.
Conecte os marcadores para o segundo conjunto com linhas tracejadas. Utilize
uma legenda e rotule apropriadamente cada eixo da plotagem. O primeiro con-
junto é y = 11, 13, 8, 7, 5, 9. O segundo conjunto é y = 2, 4, 5, 3, 2, 4.
T5.2-3 Plote y = cosh x e y = 0,5ex na mesma janela Figure para 0 … x … 2. Utilize
diferentes tipos de linha e uma legenda para distinguir as curvas. Rotule os
eixos apropriadamente.
T5.2-4 Plote y = senh x e y = 0,5ex na mesma janela Figure para 0 … x … 2. Utilize
uma linha sólida para cada curva, o comando gtext para rotular a curva
senh x e o comando text para rotular a curva 0,5ex. Rotule os eixos apro-
priadamente.
T5.2-5 Utilize o comando hold e o comando plot duas vezes para plotar y = sen
x e y = x - x3/3 na mesma janela Figure para 0 … x … 1. Utilize uma linha
sólida para cada curva e utilize o comando text para rotular cada curva.
Rotule os eixos apropriadamente.

TABELA 5.2-2 Comandos para melhoria de plotagens


Comando Descrição
gtext(’text’) Insere a string text na janela Figure em um ponto especificado pelo mouse.
hold Congela a plotagem atual para comandos gráficos subsequentes.
legend(’leg1’,’leg2’,...) Cria uma legenda utilizando as strings leg1, leg2, e assim por diante, e
permite o seu reposicionamento com o mouse.
plot(x,y,u,v) Plota, em eixos lineares, quatro arranjos: y versus x e v versus u.
plot(x,y,’type’) Plota o arranjo y versus o arranjo x em eixos lineares, utilizando o tipo de
linha, o marcador de dados e as cores especificadas na string type. Ver
Tabela 5.2-1.
plot(A) Plota as colunas do arranjo A m * n versus seus índices e gera n curvas.
plot(P,Q) Plota o arranjo Q versus o arranjo P. Ver o texto para uma descrição das
possíveis variantes envolvendo vetores e/ou matrizes: plot(x,A),
plot(A,x) e plot(A,B).
subplot(m,n,p) Divide a janela Figure em uma arranjo de subjanelas com m linhas e n colunas,
e direciona os comandos de plotagem subsequentes para a p-ésima subjanela.
text(x,y,’text’) Insere, na janela Figure, a string text no ponto especificado pelas
coordenadas x,y.

Anotações em plotagens
Você pode criar textos, títulos e rótulos que contêm símbolos matemáticos, letras gregas e
outros efeitos, como a formatação em itálico. Essas funcionalidades são baseadas na lin-
guagem de composição tipográfica TEX. Para mais informações, incluindo uma lista dos
caracteres disponíveis, busque pela página “Text Properties” no Sistema de Ajuda online.
Procure também a página “Mathematical symbols, Greek Letters, and TEX Characters”.
Capítulo 5 ■ Plotagem avançada 233

Você pode criar um título que contenha a função matemática Ae-t/␶ sen(t) di-
gitando
>>title(’{\it Ae}^{-{\it t/\tau}}\sin({\it \omega t})’)
O caractere barra invertida \ precede todas as sequências de caracteres TEX. Assim, as
strings \tau e \omega representam as letras gregas  e . Sobrescritos são criados
digitando-se ^; subscritos são criados digitando-se _. Para definir múltiplos caracteres
como sobrescritos ou subscritos, digite-os entre chaves. Por exemplo, digite x_{13}
para produzir x13. Em texto matemático, as variáveis normalmente aparecem em itá-
lico, e as funções, como sen, aparecem em tipo romano. Para definir um caractere,
digamos, x, em itálico utilizando os comandos TEX, você deve digitar {\it x}.

Plotagens logarítimicas
Escalas logarítmicas – abreviadas como escalas log – são largamente utilizadas (1)
para representar um conjunto de dados que cobre uma grande faixa de valores e (2)
para identificar certas tendências em dados. Alguns tipos de relações funcionais apa-
recem como linhas retas quando plotadas utilizando-se uma escala logarítmica. Esse
método torna mais fácil a identificação da função. Uma plotagem log-log possui es-
calas logarítimicas em ambos os eixos. Uma plotagem semilog possui uma escala
logarítimica em apenas um dos eixos.
A Figura 5.2-5 mostra uma plotagem linear e uma plotagem log-log da função

(5.2-1)

35 102

30

101
25

20
100
y

15

10
101

0 102 2
0 50 100 10 100 102
x x
(a) (b)
FIGURA 5.2-5 (a) Plotagem linear da função na Equação (5.2-1). (b) Plotagem log-log da fun-
ção. Note a grande faixa de valores tanto de x quanto de y.
234 Introdução ao MATLAB para Engenheiros

Em virtude da grande faixa de valores tanto no eixo das abscissas quanto no eixo das
ordenadas, as escalas lineares não revelam as características importantes. O seguinte
programa produziu a Figura 5.2-5:
% Cria a Plotagem Linear
x1 = 0:0.01:100; u1 = x1.^2;
num1 = 100*(1-0.01*u1).^2 + 0.02*u1;
den1 = (1-u1).^2 + 0.1*u1;
y1 = sqrt(num1./den1);
subplot(1,2,1), plot(x1,y1),xlabel(’x’),ylabel(’y’),
% Cria a Plotagem Log-Log
x2 = logspace(-2, 2, 500); u2 = x2.^2;
num2 = 100*(1-0.01*u2).^2 + 0.02*u2;
den2 = (1-u2).^2 + 0.1*u2;
y2 = sqrt(num2./den2);
subplot(1,2,2), loglog(x2,y2),xlabel(’x’),ylabel(’y’)
É importante lembrar os seguintes pontos quando utilizamos escalas logarítmicas:
1. Você não pode plotar números negativos em uma escala logarítmica, porque o
logaritmo de um número negativo não é definido como um número real.
2. Você não pode plotar o número 0 em uma escala logarítmica, porque log10 0 =
ln 0 = -q. Você deve escolher um número pequeno adequado como o limite
inferior na plotagem.
3. Os rótulos dos tick-marks em uma escala logarítmica são os valores reais sendo
plotados; eles não são os logaritmos dos números. Por exemplo, as faixas de
valores tanto de x quanto de y na plotagem da Figura 5.2.5b vão de 10-2 = 0,01
até 102 = 10.
Há no MATLAB três comandos para a geração de plotagens com escalas lo-
garítmicas. Os comandos apropriados dependem do eixo que deve estar em escala
logarítmica. Siga as seguintes regras:
1. Utilize o comando loglog(x,y) para que ambos os eixos estejam em escala
logarítmica.
2. Utilize o comando semilogx(x,y) para que x esteja em escala logarítmica
e y esteja em escala linear.
3. Utilize o comando semilogy(x,y) para que y esteja em escala logarítmica
e x esteja em escala linear.
A Tabela 5.2-3 resume essas funções. Para outros tipos de plotagens bidimensio-
nais, digite help specgraph. Nós podemos plotar múltiplas curvas com esses co-
mandos assim como fazemos com o comando plot. Além disso, podemos utilizar ou-
tros comandos, tais como grid, xlabel e axis, da mesma maneira. A Figura 5.2-6
mostra como esses comandos são aplicados. Ela foi criada com o seguinte programa:
Capítulo 5 ■ Plotagem avançada 235

TABELA 5.2-3 Comandos especializados para plotagens


Comando Descrição
bar(x,y) Cria um gráfico de barras de y versus x.
loglog(x,y) Produz uma plotagem log-log de y versus x.
plotyy(x1,y1,x2,y2) Produz uma plotagem com dois eixos y, y1 à esquerda e y2 à direita.
polar(theta,r,’type’) Produz uma plotagem polar a partir da coordenadas polares theta
e r, utilizando o tipo de linha, o marcador de dados e as cores
especificados na string type.
semilogx(x,y) Produz uma plotagem de y versus x com as abscissas em escala
logarítmica.
semilogy(x,y) Produz uma plotagem de y versus x com as ordenadas em escala
logarítmica.
stairs(x,y) Produz um gráfico de degraus de y versus x.
stem(x,y) Produz um gráfico de hastes de y versus x.

103 102
y  25e 0,5x
y  15x0,37
y  40(1,7) x

102 101
y
y

101 100 1
0 1 2 3 10 100 101
x x
FIGURA 5.2-6 Dois exemplos de funções exponenciais plotadas com a função semilogy
(a plotagem à esquerda), e um exemplo de uma função potência plotada com a função
loglog (à direita).
236 Introdução ao MATLAB para Engenheiros

Note que as duas funções exponenciais y = 25e0,5x e y = 40(1,7)x produzem linhas


retas em uma plotagem com o eixo y em escala logarítimica. A função potência y =
15x0,37 produz uma linha reta em uma plotagem log-log.

Gráficos de hastes, degraus e barras


Há no MATLAB alguns outros tipos de plotagem xy. Elas incluem gráficos de has-
tes, degraus e barras. Sua sintaxe é muito simples: stem(x,y), stairs(x,y) e
bar(x,y). Ver Tabela 5.2-3.

Eixos y separados
A função p l o t y y gera um gráfico com dois eixos y. A sintaxe
plotyy(x1,y1,x2,y2) plota y1 versus x1 com o eixo y rotulado à esquerda,
e plota y2 versus x2 com o eixo y rotulado à direita. A sintaxe plotyy(x1,y1,
x2,y2,’type1’,’type2’) gera uma plotagem type1 de y1 versus x1 com
o eixo y rotulado à esquerda, e gera uma plotagem type2 de y2 versus x2 com o
eixo y rotulado à direita. Por exemplo, plotyy(x1,y1,x2,y2,’plot’,’st
em’) utiliza plot(x1,y1) para gerar uma plotagem para o eixo à esquerda, e
stem(x2,y2) para gerar uma plotagem para o eixo à direita. Para ver outras varia-
ções da função plotyy, digite help plotyy.

Plotagens polares
Plotagens polares são plotagens bidimensionais que utilizam coordenadas polares.
Se as coordenadas polares forem (, r), em que  é a coordenada angular e r é a
coordenada radial de um ponto, então o comando polar(theta,r) produzi-
rá a plotagem polar. Um grid será sobreposto automaticamente à plotagem polar.
Esse grid consiste em círculos concêntricos e linhas radiais a cada 30o. Os coman-
dos title e gtext podem ser utilizados para inserir um título e texto. A variante
polar(theta,r,’type’) pode ser utilizada para especificar o tipo de linha ou
o marcador de dados, assim como no caso do comando plot.

EXEMPLO 5.2-1 Plotando órbitas

A equação

descreve as coordenadas polares de uma órbita medida a partir de um de seus dois pontos
focais. Para objetos em órbita em torno do Sol, o Sol se encontra em um dos pontos fo-
cais. Assim, r é a distância do objeto em relação ao Sol. Os parâmetros p e  determinam
o tamanho da órbita e a sua excentricidade, respectivamente. Obtenha a plotagem polar
que representa uma órbita que tenha  = 0,5 e p = 2 UA (UA representa “unidade astro-
nômica”; 1 UA é a distância média entre o Sol e a Terra). Qual é a maior distância que o
objeto atinge em relação ao Sol? Qual é a menor distância que o objeto atinge em relação
à órbita da Terra?
Capítulo 5 ■ Plotagem avançada 237

Excentricidade da órbita  0,5


904
120 60
3

150 2 30

180 0

210 330

240 300
270
FIGURA 5.2-7 Uma plotagem polar que mostra uma órbita com excentricidade igual a 0,5.

■ Solução
A Figura 5.2-7 mostra a plotagem polar da órbita. A plotagem foi gerada pela seguinte
sessão:
>>theta = 0:pi/90:2*pi;
>>r = 2./(1-0.5*cos(theta));
>>polar(theta,r),title(’Excentricidade da Órbita = 0.5’)
O Sol se encontra na origem, e o grid de círculos concêntricos da plotagem nos
permite determinar que as distâncias menor e maior entre o objeto e o Sol são de aproxi-
madamente 1,3 UA e 4 UA, respectivamente. A órbita da Terra, que é aproximadamente
circular, é representada pelo círculo mais interno. Assim, a menor distância entre o objeto
e a órbita da Terra é de aproximadamente 0,3 UA. As linhas de grid radiais nos permitem
determinar que quando  = 90o e 270o, a distância entre o objeto e o Sol é de 2 UA.

Plotagens com barras de erro


Dados experimentais são frequentemente representados com plotagens que contêm
barras de erro. As barras mostram os erros calculados ou estimados para cada pon-
to do conjunto de dados. Elas também podem ser utilizadas para exibir o erro de
uma fórmula aproximada. Por exemplo, manter dois termos na expansão em série de
Taylor de cos x em torno de x = 0 resulta em cos x ≈ 1 - x2/2. O seguinte programa
cria a plotagem mostrada na Figura 5.2-8:
238 Introdução ao MATLAB para Engenheiros

Aproximação = 1  x2/2
2

cos(x)
1

1

2

3

4
0 0,5 1 1,5 2 2,5 3 3,5
x

FIGURA 5.2-8 Barras de erro para a aproximação cos x ≈ 1 - x2/2.

Há mais de 20 funções para plotagens bidimensionais disponíveis no MATLAB.


Nós mostramos as mais importantes para as aplicações em engenharia.

Teste seus conhecimentos


T5.2-6 Plote as funções a seguir utilizando eixos que produzirão uma plotagem
em linha reta. A função potência é y = 2x-0,5, e a função exponencial é
y = 101-x.
T5.2-7 Plote a função y = 8x3 para -1 … x … 1 com um espaçamento entre tick-
-marks de 0,25 no eixo x e de 2 no eixo y.
T5.2-8 A espiral de Arquimedes é descrita pelas coordenadas polares (, r), em
que r = a. Obtenha uma plotagem polar dessa espiral para 0 …  … 4,
com o parâmetro a = 2.

Publicando relatórios que contêm gráficos


Tendo começado com o MATLAB 7, a função publish está disponível para a cria-
ção de relatórios, os quais podem conter gráficos. Relatórios gerados pela função
publish podem ser exportados para uma grande variedade de formatos comuns,
Capítulo 5 ■ Plotagem avançada 239

incluindo HTML, que é utilizado para relatórios baseados em Web; MS Word; Po-
werPoint; e LATEX. Para publicar um relatório, faça o seguinte:
1. Abra o Editor, digite no arquivo M que forma a base do relatório e salve-o.
Utilize o símbolo de porcentagem duplo (%%) para indicar o cabeçalho de uma
seção no relatório. Esse caractere marca o início de uma nova célula, que é um
grupo de comandos. (Essa célula não deve ser confundida com o tipo de arranjo
de células abordado na Seção 2.6.) Insira quaisquer linhas que você deseja que
apareçam no relatório. Considere, como um exemplo muito simples, o seguinte
arquivo de amostra polyplot.m:

%% Exemplo de Publicação de Relatório:


% Plotando a cúbica y = x^3 – 6x^2 + 10x + 4.

%% Crie a variável independente.


x = linspace(0, 4, 300); % Utilize 300 pontos entre 0 e 4.
%% Defina a cúbica a partir dos seus coeficientes.
p = [1, –6, 10, 4]; % p contém os coeficientes.

%% Plote a cúbica
plot(x, polyval(p, x)), xlabel(’x’), ylabel(’y’)
2. Rode o arquivo para verificar os erros. (Para fazer isso no caso de um arquivo
maior, você pode utilizar o modo celular do Debugador para executar a verifica-
ção em uma célula por vez; ver Seção 4.7.)
3. Utilize as funções publish e open para criar o relatório no formato desejado.
Utilizando o nosso arquivo de amostra, podemos obter um relatório no formato
HTML digitando

>>publish (’polyplot’,’html’)
>>open html/polyplot.html
Você deve ver um relatório como o que é mostrado na Figura 5.2-9.
Em vez de utilizar as funções publish e open, você pode selecionar Pu-
blish to HTML no menu File da janela do Editor. Para publicar em outro for-
mato, selecione Publish to e em seguida escolha o formato desejado a partir
do menu.
Uma vez que ele tenha sido publicado em HTML, você pode clicar em um
cabeçalho de seção que aparece em Contents para ir àquela seção. Isso é útil para
relatórios maiores.
Se você quiser que uma equação seja profissionalmente formatada, você pode
editar o relatório obtido no editor apropriado (digamos, MS Word ou LATEX). Por
exemplo, para definir o polinômio cúbico no arquivo LATEX, utilize os comandos
apresentados anteriormente nesta seção para substituir a equação na segunda linha
do relatório por
y = {\it x}^3 - 6{\it x}^2 + 10{\it x} + 4
240 Introdução ao MATLAB para Engenheiros

Exemplo de publicação de relatório:


Plotando a cúbica y  xˆ3  6 xˆ2 10x 4.

Conteúdo
• Crie a variável independente.
• Defina a cúbica.
• Plote a cúbica.

Crie a variável independente.


x = linspace(0, 4, 300); % Utilize 300 pontos entre 0 e 4.

Defina a cúbica.
p = [1, -6, 10, 4]; % p contém os coeficientes.

Plote a cúbica
plot(x,polyval(p,x)),xlabel(’x’),ylabel(’y’)

12

11

10

8
y

4
0 0,5 1 1,5 2 2,5 3 3,5 4
x

FIGURA 5.2-9 Uma amostra de relatório publicado pelo MATLAB.


Capítulo 5 ■ Plotagem avançada 241

5.3 Plotagem interativa no MATLAB


O ambiente de plotagem interativa do MATLAB é um conjunto de ferramentas para:
■ Criar diferentes tipos de gráficos.
■ Selecionar variáveis a serem plotadas diretamente a partir do Navegador do
Espaço de Trabalho (Workspace Browser).
■ Criar e editar subplotagens.
■ Adicionar anotações como linhas, setas, texto, retângulos, elipses.
■ Editar propriedades dos objetos gráficos, como cores, espessura da linha e fonte.
A interface de Ferramentas de Plotagem inclui os três seguintes painéis associa-
dos a uma dada figura:
■ A Paleta da Figura (Figure Palette): Utilize-a para criar e arranjar subplotagens,
para visualizar e plotar variáveis do espaço de trabalho e para adicionar anotações.
■ O Navegador da Plotagem (Plot Browser): Utilize-o para selecionar e con-
trolar a visibilidade dos eixos ou dos objetos gráficos plotados na figura e para
adicionar dados à plotagem.
■ O Editor de Propriedades (Property Editor): Utilize-o para definir as proprie-
dades básicas do objeto selecionado e para obter acesso a todas as propriedades
por meio do Inspetor de Propriedades (Property Inspector).

A janela Figure
Quando você cria uma plotagem, a janela Figure aparece com a barra de ferramentas
visível (ver Figura 5.3-1). Essa janela possui oito menus:
File O menu File é utilizado para salvar e imprimir a figura. Esse menu foi discuti-
do na Seção 5.1, nos tópicos Salvando Figuras e Exportando Figuras.
Edit Você pode utilizar o menu Edit para cortar, copiar e colar itens, tais como
uma legenda ou o texto de um título, que aparecem na figura. Clique em Figure Pro-
perties para abrir o Editor de Propriedades – caixa de diálogo para mudar algumas
propriedades da figura.
Três itens no menu Edit são muito úteis na edição de figuras. Se você clicar no
item Axis Properties, será aberto o Editor de Propriedades – caixa de diálogo asso-
ciada aos eixos. Clique duas vezes em qualquer eixo para abrir essa caixa. Você pode
mudar o tipo de escala (linear, log, etc.), os rótulos e os tick-marks selecionando a aba
para o eixo desejado ou a fonte a ser editada.

FIGURA 5.3-1 A barra de ferramentas exibida na janela Figure.


242 Introdução ao MATLAB para Engenheiros

O item Current Object Properties permite a você mudar as propriedades de


um objeto na figura. Para fazer isso, primeiro clique no objeto, como uma linha plo-
tada, e em seguida clique em Current Object Properties no menu Edit. Você verá
o Editor de Propriedades – caixa de diálogo que permite a você mudar propriedades
como cor, tipo de marcador de dados e tipo de plotagem.
Clique em qualquer texto, como aquele inserido pelos comandos title, xla-
bel, ylabel, legend ou gtext, e em seguida selecione Current Object Pro-
perties no menu Edit para que apareça o Editor de Propriedades – caixa de diálogo
de texto que permite editar o texto.
View Os itens no menu View são as três barras de ferramentas (Figure Toolbar,
Plot Edit Toolbar e Câmera Toolbar), a Paleta da Figura (Figure Palette), o Na-
vegador da Plotagem (Plot Browser) e o Editor de Propriedades (Property Edi-
tor). Eles serão discutidos posteriormente nesta seção.
Insert O menu Insert permite inserir rótulos, legendas, títulos, textos e objetos de
desenho, mais do que apenas utilizar os comandos relevantes a partir da janela de
Comandos. Para inserir um rótulo no eixo y, por exemplo, clique no item Y Label do
menu; uma caixa aparecerá no eixo y. Digite o rótulo nessa caixa, e em seguida clique
fora da caixa para finalizar.
O menu Insert também permite inserir setas, linhas, textos, retângulos e elip-
ses na figura. Para inserir uma seta, por exemplo, clique no item Arrow; o cursor
do mouse assumirá o aspecto de uma cruz. Clique com o botão do mouse e mova o
cursor para criar a seta. A ponta da seta aparecerá no ponto em que você deixar de
pressionar o botão do mouse. Certifique-se de adicionar setas, linhas e outras anota-
ções apenas após ter finalizado a movimentação e o dimensionamento dos seus eixos,
porque esses objetos não são ancorados aos eixos. (Eles podem ser ancorados à plota-
gem por meio de pinning; veja o Sistema de Ajuda do MATLAB.)
Para apagar ou mover uma linha ou uma seta, clique sobre ela e em seguida
pressione a tecla Delete para apagá-la, ou pressione o botão do mouse e mova-a para
o local desejado. O item Axes permite a você utilizar o mouse para inserir um novo
conjunto de eixos dentro da plotagem já existente. Clique sobre os novos eixos e uma
caixa aparecerá em torno deles. Quaisquer comandos de plotagens extras a partir da
janela de comandos direcionarão a saída para esses eixos.
O item Light se aplica a plotagens tridimensionais.
Tools O menu Tools inclui itens para ajustar a visualização (por meio de zoom e pa-
norâmica) e o alinhamento de objetos na plotagem. O item Edit Plot inicia o modo de
edição da plotagem, que também pode ser inicializada clicando-se na seta que aponta
para o noroeste na barra de ferramentas da janela Figure. O menu Tools também
permite o acesso ao Data Cursor, que será discutido posteriormente nesta seção. Os
últimos dois itens, Basic Fitting e Data Statistics, serão discutidos nas Seções 6.3 e
7.1, respectivamente.
Outros Menus O menu Desktop permite ancorar a janela Figure à Área de Traba-
lho. O menu Window permite a você alternar entre a janela de Comandos e qualquer
outra janela figure. O menu Help acessa o Sistema de Ajuda geral do MATLAB, bem
como as funcionalidades de ajuda específicas para plotagens.
Capítulo 5 ■ Plotagem avançada 243

Há três barras de ferramentas disponíveis na janela Figure: a barra de ferra-


mentas Figure, a barra de ferramentas Plot Edit e a barra de ferramentas Camera. O
menu View permite selecionar quais você quer que apareçam. Discutiremos a barra
de ferramentas Figure e a barra de ferramentas Plot Edit nesta seção. A barra de fer-
ramentas Camera é útil para plotagens tridimensionais, que serão discutidas no final
deste capítulo.

A barra de ferramentas Figure


Para ativar a barra de ferramentas Figure, selecione-a no menu View (ver Figura 5.3-
1). Os quatro botões mais à esquerda são para abrir, salvar e imprimir a figura. Quan-
do você clica no botão com a seta que aponta para noroeste, o modo de edição de
plotagem alterna entre ativado e desativado.
Os botões Zoom-in e Zoom-out permitem obter uma visão próxima ou à dis-
tância da figura. Os botões Pan e Rotate 3D são utilizados para plotagens tridimen-
sionais.
O botão Data Cursor permite ler dados diretamente de um gráfico exibindo
os valores dos pontos que você seleciona nas linhas plotadas, superfícies, imagens e
assim por diante.
O botão Insert Colorbar insere um mapa de cores em forma de tira no gráfico
e é útil para plotagens de superfícies tridimensionais. O botão Insert Legend permite
a você inserir uma legenda na plotagem. Os últimos dois botões ocultam ou exibem
as ferramentas de plotagem e ancoram a figura se ela não estiver ancorada.

A barra de ferramantas Plot Edit


Uma vez que uma plotagem esteja na janela, você pode exibir a barra de ferramen-
tas Plot Edit a partir do menu View. Essa barra de ferramentas é mostrada na Figura
5.3-2. Você pode habilitar a edição da plotagem clicando no botão com a seta que
aponta para noroeste, o qual aparece na barra de ferramentas Figure. Em seguida,
clique duas vezes sobre um eixo, uma linha plotada ou um rótulo para ativar o editor
de propriedades apropriado. Para adicionar texto que não é um rótulo, um título
ou uma legenda, clique sobre o botão com um T, mova o cursor até o local em que
você deseja inserir o texto, clique com o botão do mouse e digite o texto. Quando
você tiver finalizado, clique fora da caixa de texto e note que o nono botão mais à
esquerda fica realçado e disponível. Ele permite modificar a cor, a fonte e outros
atributos do texto.
Para inserir setas, linhas, retângulos e elipses, clique no botão apropriado e siga
as instruções dadas previamente para o menu Insert.

FIGURA 5.3-2 Exibição das barras de ferramentas Figure e Plot Edit.


244 Introdução ao MATLAB para Engenheiros

As ferramentas de plotagem
Uma vez que uma figura tenha sido criada, você pode exibir quaisquer das três ferra-
mentas de plotagem (Figure Palette, Plot Browser e Property Editor) selecionando-as
a partir do menu View. Você também pode inicializar o ambiente primeiro criando
uma plotagem e em seguida clicando no ícone Show Plot Tools bem à direita na barra
de ferramentas Figure (ver Figura 5.3-3), ou criando uma figura juntamente com as
ferramentas de plotagem utilizando o comando plottools. Remova as ferramen-
tas clicando no ícone Hide Tools, que é o segundo da esquerda para a direita.
A Figura 5.3-3 mostra o resultado de se clicar na linha plotada após o clique no
ícone Show Plot Tools. A interface de plotagem exibe então o Editor de Propriedades
(Property Editor – Lineseries).

A Paleta da Figura (Figure Palette )


A Paleta da Figura contém três painéis, os quais são selecionados e expandidos cli-
cando-se no botão apropriado. Clique no ícone do grid no painel New Subplots para
exibir o seletor de grades que permite a você especificar a disposição das subplota-
gens. No painel Variables você pode selecionar uma função gráfica para plotar a
variável selecionando-a e clicando com o botão direito do mouse para exibir o menu
de contexto. Esse menu contém uma lista de possíveis tipos de plotagens de acordo
com o tipo de variável que você selecionar. Você também pode arrastar a variável para
um conjunto de eixos, e o MATLAB selecionará um tipo de plotagem apropriado.
Selecionar More Plots a partir do menu de contexto ativa a ferramenta Plot Ca-
talog, que possibilita o acesso à maioria das funções de plotagem. Após selecionar uma
categoria de plotagem, e um tipo de plotagem daquela categoria, você verá sua descri-
ção exibida mais à direita. Digite o nome de uma ou mais variáveis no campo Variables

FIGURA 5.3-3 A janela Figure com as ferramentas de plotagem ativadas.


Capítulo 5 ■ Plotagem avançada 245

Plotted, separados por vírgulas, e elas serão passadas como argumentos para a função
de plotagem selecionada. Você também pode digitar uma expressão no MATLAB que
utilize quaisquer variáveis do espaço de trabalho mostradas na Paleta da Figura.
Clique no painel Annotations para exibir um menu de objetos como linhas, se-
tas, etc. Clique no objeto desejado e utilize o mouse para posicioná-lo e dimensioná-lo.

O Navegador da Plotagem (Plot Browser)


O Navegador da Plotagem fornece uma legenda de todos os gráficos na figura. Por
exemplo, se você plotar um arranjo com múltiplas linhas e colunas, o navegador lista
cada eixo e os objetos (linhas, superfícies, etc.) utilizados para criar o gráfico. Para de-
finir as propriedades de uma linha individual, clique duas vezes na linha. Suas proprie-
dades são exibidas no Editor de Propriedades que é aberto na parte inferior da figura.
Se você selecionar uma linha no gráfico, a entrada correspondente no Navega-
dor da Plotagem é realçada, indicando qual coluna na variável produziu a linha. A
caixa de diálogo próxima a cada item no navegador controla a visibilidade do objeto.
Por exemplo, se você quiser plotar apenas algumas colunas dos dados, você pode
desmarcar as colunas não desejadas. O gráfico é atualizado conforme você desmarca
cada caixa e redimensiona os eixos.

O Editor de Propriedades (Property Editor)


O editor de Propriedades permite a você acessar um subconjunto das propriedades
dos objetos selecionados. Quando nenhum objeto for selecionado, o Editor de Pro-
priedades exibe as propriedades da figura. Há várias maneiras de se exibir o Editor
de Propriedades:
1. Clique duas vezes em um objeto quando o modo de edição de plotagem estiver
habilitado.
2. Selecione um objeto, clique duas para exibir seu menu de contexto e, em segui-
da, selecione Properties.
3. Selecione Properties Editor no menu View.
4. Utilize o comando propertyeditor.
O Editor de Propriedades permite alterar as propriedades dos objetos. Se você
quiser acessar todas as propriedades dos objetos, utilize o Inspetor de Propriedades
(Property Inspector). Para exibir o Inspetor de Propriedades, clique no botão Inspec-
tor em qualquer painel do Editor de Propriedades. A utilização dessa funcionalidade
requer um conhecimento detalhado das propriedades dos objetos e de como lidar com
gráficos e, portanto, não será abordada aqui.

Recriando gráficos a partir de arquivos M


Uma vez que o seu gráfico esteja finalizado, você pode gerar um código no MATLAB
para reproduzir o gráfico selecionando Generate M-File no menu File. O MAT-
LAB cria uma função que recria o gráfico e abre o arquivo M gerado no editor. Essa
funcionalidade é particularmente útil para capturar a definição de propriedades e ou-
tras modificações feitas no editor de plotagem. Você também pode utilizar a função
makecode.
246 Introdução ao MATLAB para Engenheiros

Adicionando dados aos eixos


O Navegador da Plotagem fornece um mecanismo por meio do qual você pode adi-
cionar dados aos eixos. O procedimento é o seguinte:
1. Selecione um conjunto de eixos bidimensional ou tridimensional a partir do
subpainel New Subplots.
2. Após criar os eixos, selecione-os no painel do Navegador da Plotagem para
habilitar o botão Add Data na parte inferior do painel.
3. Clique no botão Add Data para exibir a caixa de diálogo Add Data to Axes, a
qual permite selecionar um tipo de plotagem e especificar as variáveis do espa-
ço de trabalho a serem passadas para a função de plotagem. Você também pode
especificar uma expressão no MATLAB, que é avaliada para produzir os dados
a serem plotados.

5.4 Plotagens tridimensionais


Há no MATLAB muitas funções para a criação de plotagens tridimensionais. Aqui
nós resumiremos as funções básicas para criar três tipos de plotagem: plotagens de
linhas, plotagens de superfícies e plotagens de contornos. Informações sobre as fun-
ções relacionadas estão disponíveis no Sistema de Ajuda do MATLAB (categoria
graph3d).

Plotagens de linhas tridimensionais


Linhas em espaços tridimensionais podem ser plotadas com a função plot3. Sua
sintaxe é plot3(x,y,z). Por exemplo, as seguintes equações geram uma curva
tridimensional conforme o parâmetro t é variado ao longo de uma faixa:

Se deixarmos t variar de t = 0 a t = 10, as funções seno e cosseno irão variar ao


longo de cinco ciclos, enquanto que os valores absolutos de x e y se tornarão menores
com o aumento de t. Esse processo resulta na curva em espiral mostrada na Figura
5.4-1, que foi produzida com a seguinte sessão.

Note que a função grid e as funções de rótulo também podem ser utilizadas com
a função plot3, e que podemos rotular o eixo z utilizando a função zlabel, que
acabamos de ver pela primeira vez. Similarmente, podemos utilizar outras funções
para a melhoria de plotagens, discutidas nas Seções 5.1 e 5.2, para adicionar título e
texto e para especificar o tipo e a cor da linha.
Capítulo 5 ■ Plotagem avançada 247

35

30

25

20
z

15

10

0
1
0,5 1
0 0,5
0
0,5
0,5
y 1 1
x
FIGURA 5.4-1 A curva x = e -0,05t
sen t, y = e -0,05t
cos t, z = t plotada com a função plot3.

Plotagens de malhas de superfícies


A função z = f(x, y) representa uma superfície quando plotada nos eixos xyz, e a
função mesh possibilita uma maneira de se gerar uma plotagem de superfície.
Antes de utilizar essa função, você deve gerar um grid de pontos no plano xy e, em
seguida, avaliar a função f(x, y) nesses pontos. A função meshgrid gera o grid.
A sintaxe é [X,Y] = meshgrid(x,y). Se x = xmin:xspacing:xmax
e y = ymin:yspacing:ymax, então essa função irá gerar as coordenadas de
um grid retangular com um canto em (xmin, ymin) e o canto oposto em (xmax,
ymax). Cada painel retangular no grid terá uma largura igual a xspacing e uma
profundidade igual a yspacing. As matrizes resultantes X e Y contêm os pares
coordenados de todo ponto no grid. Esses pares são então utilizados para que a
função seja avaliada.
A função [X,Y] = meshgrid(x) é equivalente a [X,Y] = meshgrid(x,x)
e pode ser utilizada se x e y tiverem o mesmos valores mínimos, os mesmos valores má-
ximos e o mesmo espaçamento. Utilizando esse formato, você pode digitar [X,Y] =
meshgrid(min:spacing:max), em que min e max especificam os valores míni-
mo e máximo de x e y e spacing é o espaçamento desejado para os valores de x e y.
Após ter computado o grid, você cria a plotagem da superfície com a função
mesh. Sua sintaxe é mesh(x,y,z). As funções de grid, de rótulos e de texto po-
dem ser utilizadas com a função mesh. A sessão a seguir mostra como gerar a plota-
gem de superfície da função , para -2 … x … 2 e -2 … y … 2, com
um espaçamento de 0,1. Essa plotagem aparece na Figura 5.4-2.
248 Introdução ao MATLAB para Engenheiros

0,5

0
z

0,5
2
1 2
0 1
0
1 1
y 2 2
x
FIGURA 5.4-2 Uma plotagem da superfície criada com a função mesh.

>>[X,Y] = meshgrid(-2:0.1:2);
>>Z = X.*exp(-((X-Y.^2).^2_Y.^2));
>>mesh(X,Y,Z),xlabel(’x’),ylabel(’y’),zlabel(’z’)
Tenha cuidado para não selecionar um espaçamento muito pequeno para os valores
de x e y, por duas razões: (1) Pequenos espaçamentos criam pequenos painéis de grid,
o que torna a superfície difícil de ser visualizada, e (2) as matrizes X e Y se tornam
muito grandes.
As funções surf e surfc são similares às funções mesh e meshc, exceto
pelo fato de que as primeiras criam uma plotagem de superfície com sombra. Você
pode utilizar a barra de ferramentas Camera e alguns itens do menu na janela Figure
para alterar a visualização e a iluminação da figura.

Plotagens de contorno
Plotagens topográficas mostram os contornos do terreno por meio de linhas de eleva-
ção constante. Essas linhas são também chamadas de linhas de contorno, e a plota-
gem, de plotagem de contorno. Se você caminhar ao longo de uma linha de contorno,
você permanece na mesma elevação. Plotagens de contorno podem ajudar você a
visualizar a forma de uma função. Elas podem ser criadas com a função contour,
cuja sintaxe é contour(X,Y,Z). Essa função e a função mesh são utilizadas da
mesma maneira; isto é, primeiro você deve utilizar a função meshgrid para gerar o
grid e, em seguida, deve gerar os valores da função. A sessão a seguir gera a plotagem
de contorno da função cuja plotagem de superfície é mostrada na Figura 5.4-2, isto é,
, para -2 … x … 2 e -2 … y … 2, com um espaçamento de 0,1. Essa
plotagem aparece na Figura 5.4-3.
Capítulo 5 ■ Plotagem avançada 249

1,5

0,5

0
y

0,5

1

1,5

2
2 1,5 1 0,5 0 0,5 1 1,5 2
x
FIGURA 5.4-3 Uma plotagem de contorno da superfície criada com a função
contour.

>>[X,Y] = meshgrid(-2:0.1:2);
>>Z = X.*exp(-((X-Y.^2).^2+Y.^2));
>>contour(X,Y,Z),xlabel(’x’),ylabel(’y’)
Você pode adicionar rótulos às linhas de contorno. Digite help clabel.
Plotagens de contorno e plotagens de superfície podem ser utilizadas em con-
junto para facilitar a análise da função. Por exemplo, a não ser que as elevações
estejam rotuladas nas linhas de contorno, você não consegue dizer se há um ponto
de mínimo ou um ponto de máximo. Entretanto, uma olhada de relance para a plo-
tagem de superfície permite determinar isso facilmente. Por outro lado, medições
precisas não são possíveis em uma plotagem de superfície; elas podem ser feitas
na plotagem de contorno pelo fato de não haver nenhuma distorção. Assim, uma
função útil é meshc, que mostra as linhas de contorno abaixo da plotagem de su-
perfície. A função meshz desenha uma série de linhas verticais sob a plotagem de
superfície, enquanto que a função waterfall desenha linhas de malha em uma
direção apenas. Os resultados dessas funções são mostrados na Figura 5.4-4 para a
função .
A Tabela 5.4-1 resume as funções introduzidas nesta seção. Para outros tipos de
plotagens tridimensionais, digite help specgraph.
250 Introdução ao MATLAB para Engenheiros

0.5 0.5

0 0
z

z
0.5 0.5
2 2
2 2
0 0 0 0
y 2 2 x y 2 2 x
(a) (b)

0.5 0.5

0 0
z

z
0.5 0.5
2 2
2 2
0 0 0 0
y 2 2 x y 2 2 x
(c) (d)
FIGURA 5.4-4 Plotagens de superfície criadas com a função mesh e as suas va-
riantes: meshc, meshz e waterfall. (a) mesh, (b) meshc, (c) meshz, (d) waterfall.

TABELA 5.4-1 Funções de plotagem tridimensional


Função Descrição
contour(x,y,z) Cria uma plotagem de contorno.
mesh(x,y,z) Cria uma plotagem de uma malha de superfície tridimensional.
meshc(x,y,z) O mesmo que mesh, mas desenha uma plotagem de contorno sob
a superfície.
meshz(x,y,z) O mesmo que mesh, mas desenha uma série de linhas de
referência verticais sob a superfície.
surf(x,y,z) Cria uma plotagem de uma malha de superfície tridimensional com
sombra.
surfc(x,y,z) O mesmo que surf, mas desenha uma plotagem de contorno sob
a superfície.
[X,Y] = meshgrid(x,y) Cria as matrizes X e Y a partir dos vetores x e y para definir um
grid retangular.
[X,Y] = meshgrid(x) O mesmo que [X,Y] = meshgrid(x,x).
waterfall(x,y,z) O mesmo que mesh, mas desenha linhas de malha em uma única
direção.

Teste seus conhecimentos


T5.4-1 Crie uma plotagem de superfície e uma plotagem de contorno da função
z = (x - 2)2 + 2xy + y2.
Capítulo 5 ■ Plotagem avançada 251

5.5 Resumo
Esse capítulo explicou como utilizar os poderosos comandos do MATLAB para criar
plotagens bidimensionais e tridimensionais eficazes e de bom aspecto. As seguintes
diretrizes ajudarão você a criar plotagens que transmitam efetivamente a informação
desejada:
■ Rotule cada eixo com o nome da quantidade que está sendo plotada e explicite
as unidades!
■ Utilize tick-marks regularmente espaçados com intervalos adequados ao longo
de cada eixo.
■ Se você estiver plotando mais do que uma curva ou conjunto de dados, rotule
cada um deles ou utilize uma legenda para distingui-los.
■ Se você estiver preparando múltiplas plotagens de um tipo similar ou se os rótu-
los dos eixos não transmitirem informação suficiente, utilize um título.
■ Se você estiver plotando dados medidos, plote cada ponto em um dado conjunto
com o mesmo símbolo, tal como um círculo, um quadrado ou uma cruz.
■ Se você estiver plotando pontos gerados por meio da avaliação de uma função
(e não dados obtidos via medição), não utilize um símbolo para plotar os pon-
tos. Em vez disso, conecte os pontos com linhas sólidas.

Termos-chave
Limites dos eixos, 222 Plotagem sobreposta, 228
Plotagem de contorno, 248 Símbolo de dados, 219
Plotagem de malha de superfície, 247 Subplotagem, 226
Plotagem polar, 236

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do livro.

Seções 5.1, 5.2 e 5.3


1.* A análise de equilíbrio determina o volume de produção para o qual o custo de
produção total é igual à receita total. No ponto de equilíbrio, não há lucro nem
perda. Em geral, os custos da produção consistem em custos fixos e custos va-
riáveis. Os custos fixos incluem salários daqueles não diretamente envolvidos
com a produção, custos de manutenção de fábrica, seguros, e assim por diante.
Os custos variáveis dependem do volume de produção e incluem custos de
material, trabalho e energia. Na análise a seguir, considere que nós produzimos
apenas o que podemos vender; assim, a quantidade de produção é igual à quan-
tidade de vendas. Q é a quantidade de produção, em galões por ano.
Considere os seguintes custos para um determinado produto químico:
Custo fixo: $3 milhões por ano.
Custo variável: 2,5 centavos por galão de produto.
252 Introdução ao MATLAB para Engenheiros

O preço de venda é de 5,5 centavos por galão.


Utilize esses dados para plotar o custo total e a receita versus Q, e determine
graficamente o ponto de equilíbrio. Rotule toda a plotagem e marque o ponto
de equilíbrio. Para qual faixa de Q a produção gera lucro? Para qual valor de Q
o lucro é máximo?
2. Considere os seguintes custos para um determinado produto químico:
Custo fixo: $2,045 milhões/ano.
Custos variáveis:
Custo material: 62 centavos por galão de produto.
Custo de energia: 24 centavos por galão de produto.
Custo de trabalho: 16 centavos por galão de produto.
Considere que nós produzimos apenas o que vendemos. P é o preço de venda
em dólares por galão. Suponha que o preço de venda e a quantidade de vendas
Q estejam inter-relacionados da seguinte maneira: Q = 6 * 106 - 1,1 * 106P.
Portanto, se elevarmos o preço, o produto se torna menos competitivo e as ven-
das caem.
Utilize essa informação para plotar o custo fixo e o custo variável total
versus Q, e determine graficamente o(s) ponto(s) de equilíbrio. Rotule toda a
plotagem e marque o(s) ponto(s) de equilíbrio. Para qual faixa de Q a produção
gera lucro? Para qual valor de Q o lucro é máximo?
3.* a. Estime as raízes da equação

por meio da sua plotagem.


b. Utilize as estimativas encontradas em a para encontrar as raízes de maneira
mais precisa com a função fzero.
4. Para calcular forças em estruturas, algumas vezes precisamos resolver equa-
ções similares à que segue. Utilize a função fplot para encontrar as raízes
positivas dessa equação:
x tan x = 9
5.* Cabos são utilizados para suspender pontes cobertas e outras estruturas. Se um
cabo uniforme pesado for suspenso pelas extremidades, ele assumirá a forma
de uma curva catenária cuja equação é

em que a é a altura do ponto mais baixo do cabo acima da linha de referência


horizontal, x é a coordenada horizontal medida à direita do ponto mais baixo
do cabo, e y é a coordenada vertical medida acima da linha de referência.
Seja a = 10 m. Plote a curva catenária para -20 … x … 30 m. Qual é a al-
tura de cada extremidade?
Capítulo 5 ■ Plotagem avançada 253

6. Utilizando estimativas de quedas de chuva, evaporação e consumo de água, o


engenheiro da cidade desenvolveu o seguinte modelo do volume de água no
reservatório como uma função do tempo:
V(t) = 109 + 108(1 - e-t/100) - 107t
em que V é o volume de água em litros e t é o tempo em dias. Plote V(t) versus
t. Utilize a plotagem para estimar quantos dias se passarão antes que o volume
de água no reservatório seja igual a 50% do seu volume inicial de 109 L.
7. Sabe-se que a seguinte série de Leibniz converge para o valor /4 quando n → q.

Plote a diferença entre /4 e a soma S(n) versus n para 0 … n … 200.


8. Um determinado navio de pesca está inicialmente localizado em um plano
horizontal com coordenadas x = 0 e y = 10 mi. Ele se move ao longo de uma
trajetória durante 10 horas, sendo que x = t e y = 0,5t2 + 10, em que t está em
horas. Um limite internacional de pesca é descrito pela linha y = 2x + 6.
a. Plote e rotule a trajetória do navio e o limite.
b. A distância perpendicular entre o ponto (x1, y1) e a linha Ax + By + C = 0 é
dada por

em que o sinal é escolhido para fazer d Ú 0. Utilize esse resultado para plotar
a distância entre o navio e o limite de pesca como uma função do tempo para
0 … t … 10 hr.
9. Plote as colunas 2 e 3 da matriz A a seguir versus a coluna 1. Os dados na co-
luna 1 são valores de tempo (segundos). Os dados nas colunas 2 e 3 são valores
de força (newtons).

10.* Muitas aplicações utilizam a seguinte aproximação de “ângulo pequeno” para


o seno com a finalidade de se obter um modelo mais simples que seja fácil de
ser entendido e analisado. A aproximação estabelece que sen x ≈ x, em que x
deve estar em radianos. Investigue a precisão dessa aproximação criando três
plotagens. Na primeira, plote sen x versus x para 0 … x … 1. Na segunda, plote o
erro da aproximação sin x - x versus x para 0 … x … 1. Na terceira, plote o erro
relativo [sin(x) - x]/sin(x) versus x para 0 … x … 1. Quão pequeno x deve ser
para que o erro da aproximação seja menor do que 5%?
254 Introdução ao MATLAB para Engenheiros

11. Você pode utilizar identidades trigonométricas para simplificar as equações


que aparecem em muitas aplicações. Confirme a identidade tan(2x) = 2 tan x/
(1 - tan2 x) plotando tanto o lado esquerdo quanto o lado direito da equação
versus x ao longo da faixa 0 … x … 2.
12. A identidade de números complexos eix = cos x + i sen x é frequentemente
utilizada para converter as soluções de equações em um formato que é relativa-
mente mais fácil de ser visualizado. Confirme essa identidade plotando a parte
imaginária versus a parte real dos lados esquerdo e direito da equação ao longo
da faixa 0 … x … 2.
13. Utilize uma plotagem ao longo da faixa 0 … x … 5 para confirmar que sen(ix) =
i senh x.
14.* A função y(t) = 1 - e-bt, em que t é o tempo e b 7 0, descreve muitos proces-
sos, tais como a altura de um líquido em um tanque conforme ele é preenchido
e a temperatura de um objeto sendo aquecido. Investigue o efeito do parâmetro
b em y(t). Para fazer isso, sobreponha plotagens de y versus t para alguns valo-
res de b. Quanto tempo é necessário para que y(t) atinja 98% do seu valor em
estado estacionário?
15. As seguintes funções descrevem as oscilações em circuitos elétricos e as vibra-
ções de máquinas e estruturas. Sobreponha as plotagens dessas funções. Como
elas são similares, defina qual é a melhor forma de plotá-las e de rotulá-las
para evitar confusão.

x(t) = 10e-0,5t sen(3t + 2)


y(t) = 7e-0,4t cos(5t - 3)
16. Em alguns tipos de vibrações estruturais, uma força periódica atuando na es-
trutura fará com que a amplitude da vibração cresça e decresça repetidamente
com o tempo. Esse fenômeno, chamado de batimento, também ocorre em sons
musicais. Um deslocamento de estrutura particular é descrito por

em que y é o deslocamento em polegadas e t é o tempo em segundos. Plote y


versus t ao longo da faixa 0 … t … 20 para f1 = 8 rad/s e f2 = 1 rad/s. Certifique-
-se de escolher uma quantidade suficiente de pontos de maneira a obter uma
plotagem precisa.
17.* A altura h(t) e a distância horizontal x(t) percorridas por uma bola arremessada
com um ângulo A e com velocidade y são dadas por
Capítulo 5 ■ Plotagem avançada 255

Na superfície da Terra a aceleração devido à gravidade é g = 9,81 m/s2.


a. Suponha que a bola é arremessada com uma velocidade y = 10 m/s e com um
ângulo de 35°. Utilize o MATLAB para calcular quão alto e quão longe a bola
irá, e quanto tempo será necessário para que ela se choque contra o chão.
b. Utilize os valores de v e de A dados no item a para plotar a trajetória da
bola; isto é, plote h versus x para valores positivos de h.
c. Plote as trajetórias para v = 10m/s que correspondem a cinco valores do ân-
gulo A: 20°, 30°, 45°, 60° e 70°.
d. Plote as trajetórias para A = 45° correspondentes a cinco valores da veloci-
dade inicial y: 10, 12, 14, 16 e 18 m/s.
18. A lei dos gases perfeitos relaciona a pressão p, a temperatura T, a massa m e o
volume V de um gás. Ela estabelece que
pV = mRT
A quantidade R é a constante dos gases. O valor de R para o ar é 286,7 (N · m)/
(kg · K). Suponha que o ar esteja contido num recipiente à temperatura am-
biente (20° C = 293 K). Crie uma plotagem que tenha três curvas da pressão
do gás em N/m2 versus o volume do recipiente V em m3 para 20 … V … 100. As
três curvas correspondem às seguintes massas de ar no recipiente: m = 1 kg,
m = 3 kg e m = 7 kg.
19. Oscilações em estruturas mecânicas e circuitos elétricos podem muitas vezes
ser descritas pela função
y(t) = e-t/ sen(t +
)
em que t é o tempo e  é a frequência de oscilação em radianos por unidade de
tempo. As oscilações apresentam um período de 2/, e suas amplitudes de-
caem com o tempo a uma taxa determinada por , que é chamada constante de
tempo. Quanto menor for , mais rapidamente as oscilações irão desvanecer.
a. Utilize esses fatos para desenvolver um critério de escolha do espaça-
mento dos valores de t e do limite superior de t a fim de que seja obtida
um plotagem precisa de y(t). (Dica: Considere dois casos: 4 7 2/ e
4 6 2/.)
b. Aplique o seu critério e plote y(t) para  = 10,  =  e
= 2.
c. Aplique o seu critério e plote y(t) para  = 0,1,  = 8 e
= 2.
20. Quando uma tensão constante foi aplicada a um determinado motor inicial-
mente em repouso, sua velocidade de rotação s(t) versus o tempo t foi medida.
Os dados aparecem na seguinte tabela:

Tempo (s) 1 2 3 4 5 6 7 8 10
Velocidade (rpm) 1210 1866 2301 2564 2724 2881 2879 2915 3010
256 Introdução ao MATLAB para Engenheiros

Determine se a função a seguir é capaz de descrever os dados. Se for, encontre


os valores das constantes b e c.
s(t) = b(1 - ect)
21. A tabela a seguir mostra a temperatura média para cada ano em uma determi-
nada cidade. Gere gráficos com os dados utilizando gráficos de hastes, barras e
degraus.

Ano 2000 2001 2002 2003 2004


Temperatura (°C) 21 18 19 20 17

22. Uma soma de $10 000 investida com um rendimento anual de 4% crescerá de
acordo com a fórmula
y(k) = 104(1,04)k
em que k é o número de anos (k = 0, 1, 2, ...). Plote a quantidade de dinheiro na
conta por um período de 10 anos. Resolva esse problema com quatro tipos de
plotagens: plotagem xy, gráfico de hastes, gráfico de degraus e gráfico de barras.
23. O volume V e a área da superfície A de uma esfera de raio r são dados por

a. Plote V e A versus r em duas subplotagens, para 0,1 … r … 100 m. Escolha ei-


xos que resultarão em gráficos com linhas retas, tanto para V quanto para A.
b. Plote V e r versus A em duas subplotagens, para 1 … A … 104 m2. Escolha
eixos que resultarão em gráficos com linhas retas tanto para V quanto
para r.
24. A quantidade atual A de um valor principal P investido em uma poupança com
rendimento igual a r é dada por

em que n é igual ao número de vezes por ano em que o rendimento é aplicado


sobre o valor atual. Para rendimento contínuo, A = Pert. Suponha que $10 000
sejam inicialmente investidos a uma taxa de rendimento anual de 3,5%.
a. Plote A versus t no intervalo de tempo 0 … t … 20 anos para quatro casos: ren-
dimento contínuo, rendimento anual (n = 1), rendimento trimestral (n = 4) e
rendimento mensal (n = 12). Mostre todos os quatro casos na mesma subplo-
tagem e rotule cada curva. Em uma segunda subplotagem, plote a diferença
entre a quantidade obtida com o rendimento contínuo e os outros três casos.
b. Refaça a parte a, mas plote A versus t em plotagens log-log e semilog. Qual
plotagem resulta em uma linha reta?
Capítulo 5 ■ Plotagem avançada 257

Fonte

i1
R1

v1 Carga v2

FIGURA P25

25. A Figura P25 é uma representação de um sistema elétrico com uma fonte de
alimentação e uma carga. A fonte de alimentação produz a tensão fixa y1 e
fornece a corrente i1 requerida pela carga, cuja queda de tensão é y2. A relação
tensão-corrente obtida a partir de experimentos para uma carga específica é
dada por

Suponha que a resistência da fonte é R1 = 30 æ e que a tensão da fonte é


y1 = 15 V. Para selecionar ou projetar uma fonte de alimentação adequada,
precisamos determinar a quantidade de corrente que será exigida da fonte de
alimentação quando a carga for acoplada a ela. Encontre também a queda de
tensão y2.
26. O circuito mostrado na Figura P26 consiste em um resistor e um capacitor,
por isso é chamado de circuito RC. Se aplicarmos uma tensão senoidal vi,
chamada de tensão de entrada, ao circuito RC, então a tensão de saída yo
também será senoidal, com a mesma frequência mas com uma amplitude
diferente e deslocada no tempo em relação à tensão de entrada. Especifi-
camente, se yi = Ai sen t, então yo = Ao sen(t +
). A resposta em fre-
quência é uma plotagem de Ao/Ai versus a frequência . Ela é normalmente
plotada em eixos logarítmicos. Cursos mais avançados de engenharia expli-

vi C
vo

FIGURA P26
258 Introdução ao MATLAB para Engenheiros

cam que, para o circuito RC mostrado, essa razão depende de  e de RC da


seguinte maneira:

em que s = i. Para RC = 0,1 s, obtenha a plotagem log-log de |Ao/Ai| versus


 e utilize-a para encontrar a faixa de frequências para a qual a amplitude da
saída Ao é menor do que 70% da amplitude de entrada Ai.
27. Uma aproximação para a função sen x é sen x ≈ x - x3/6. Plote a função sen x e
20 barras de erro uniformemente espaçadas representando o erro da aproxima-
ção.

Seção 5.4
28. As equações paramétricas para uma hélice circular são

em que a é o raio do caminho helicoidal e b é uma constante que determina a


“estreiteza” do caminho. Além disso, se b 7 0, a hélice tem a forma de um pa-
rafuso destro; se b 6 0, a hélice tem a forma de um parafuso canhoto.
Obtenha uma plotagem tridimensional da hélice para os três casos a se-
guir e compare-os. Utilize 0 … t … 10 e a = 1.
a. b = 0,1
b. b = 0,2
c. b = -0,1
29. Um robô gira em torno de sua base a uma velocidade de 2 rpm enquanto abai-
xa o seu braço e estende a sua mão. Ele abaixa o braço a uma velocidade de
120° por minuto e estende a mão a uma velocidade de 5m/min. O braço tem
0,5 m de comprimento. As coordenadas xyz da mão são dadas por

em que t é o tempo em minutos.


Obtenha uma plotagem tridimensional da trajetória da mão para 0 … t …
0,2 min.
Capítulo 5 ■ Plotagem avançada 259

30. Obtenha as plotagens de superfície e de contorno para a função z = x2 - 2xy +


4y2, mostrando o mínimo em x = y = 0.
31. Obtenha as plotagens de contorno e de superfície para a função z = - x2 + 2xy
+ 3y2. Essa superfície tem a forma de uma sela. No seu ponto de sela dado por
x = y = 0, a superfície tem inclinação igual a zero, mas esse ponto não corres-
ponde a um mínimo nem a um máximo. Que tipo de linha de contorno corres-
ponde a um ponto de sela?
32. Obtenha as plotagens de contorno e de superfície para a função z = (x - y2)(x -
3y2). Essa superfície possui um ponto singular em x = y = 0, em que a superfície
tem inclinação igual a zero, mas esse ponto não corresponde a um mínimo nem
a um máximo. Que tipo de linha de contorno corresponde a um ponto singular?
33. Uma placa de metal quadrada é aquecida a 80°C no canto correspondente a
x = y = 1. A distribuição de temperatura na placa é descrita por

Obtenha as plotagens de superfície e de contorno para a temperatura. Rotule


cada eixo. Qual é a temperatura no canto correspondente a x = y = 0?
34. A seguinte função descreve oscilações em algumas estruturas mecânicas e em
alguns circuitos elétricos:
z(t) = e-t/ sen(t +
)
Nessa função, t é o tempo e  é a frequência de oscilação em radianos por unida-
de de tempo. As oscilações apresentam um período de 2/, e suas amplitudes
decaem com o tempo a uma taxa determinada por , que é chamada constante de
tempo. Quanto menor for , mais rapidamente as oscilações irão desvanecer.
Suponha que
= 0,  = 2, e  pode assumir valores na faixa 0,5 …  … 10
s. Então, a equação anterior assume o seguinte formato:

z(t) = e-t/ sen(2t)


Obtenha as plotagens de superfície e de contorno dessa função para que elas
ajudem na visualização do efeito da variação de  para 0 … t … 15 s. Seja t a
variável x, e seja  a variável y.
35. A seguinte equação descreve a distribuição de temperatura em uma placa de
metal retangular plana. A temperatura em três lados é mantida constante e
igual a T1, e no quarto lado ela é mantida igual a T2 (ver Figura P35). A tempe-
ratura T(x, y) como uma função das coordendadas xy mostradas é dada por
T(x, y) = (T2 - T1)w(x, y) + T1
em que
260 Introdução ao MATLAB para Engenheiros

T2
W

T1 T (x, y) T1

0 x
0 L
T1

FIGURA P35

Os dados fornecidos para esse problema são T1 = 70°F, T2 = 200°F e


W = L = 2 ft.
Utilizando um espaçamento de 0,2 tanto para x quanto para y, gere uma
plotagem de malha de superfície e uma plotagem de contorno para distribuição
de temperatura.
36. O potencial elétrico V em um ponto, devido a duas partículas carregadas, é
dado por

em que q1 e q2 são as cargas das partículas em coulombs (C), r1 e r2 são as


distâncias entre as cargas e o ponto (em metros), e 0 é a permissividade do
espaço livre, cujo valor é
0 = 8,854 * 10-12 C2 / (N m2)
Suponha que as cargas são q1 = 2 * 10-10 C e q2 = 4 * 10-10 C. Suas respec-
tivas localizações no plano xy são (0,3, 0) e (-0,3, 0) m. Gere uma superfície
tridimensional para o potencial elétrico, com V potado no eixo z ao longo das
faixas -0,25 … x … 0,25 e -0,25 … y … 0,25. Crie a plotagem de duas maneiras:
(a) utilizando a função surf, e (b) utilizando a função meshc.
37. Referente ao Problema 25 do Capítulo 4. Utilize o arquivo de função criado na
solução daquele problema para gerar uma plotagem de malha de superfície e
uma plotagem de contorno de x versus h e W para 0 … W … 500 N e para 0 … h
… 2 m. Utilize os valores k1 = 104 N/m, k2 = 1,5 * 104 N/m e d = 0,1 m.
Capítulo 5 ■ Plotagem avançada 261

38. Referente ao Problema 28 do Capítulo 4. Para ver quão sensível é o custo em


relação à localização do centro de distribuição, obtenha uma plotagem de
superfície e uma plotagem de contorno do custo total como uma função das
coordenadas x e y da localização do centro de distribuição. Em quanto o custo
aumentaria se o centro fosse localizado a 1 milha em qualquer direção em rela-
ção à localização ótima?
39. Referente ao Exemplo 3.2-1. Utilize uma plotagem de superfície e uma plota-
gem de contorno do comprimento do perímetro L como uma função de d e  ao
longo das faixas 1 … d … 30 ft e 0,1 …  … 1,5 rad. Há outros vales além daque-
le correspondente a d = 7,5984 e  = 1,0472? Há algum ponto de sela?
Direito autoral livre de royalties/CORBIS

Engenharia no
Século XXI…
Prototipagem virtual

P
ara muitas pessoas, desenho assistido por computador (CAD) ou engenharia
assistida por computador (CAE) significa criação de desenhos de engenharia.
Entretanto, significa muito mais. Engenheiros podem utilizar computadores
para determinar as forças, tensões e correntes, dentre outras grandezas, que poderiam
fazer parte de um determinado projeto, e então, utilizar essas informações para se
certificarem de que o hardware pode resistir às forças previstas ou fornecer as tensões
e as correntes requeridas. Os engenheiros estão apenas começando a utilizar todo o
potencial do CAE.
As etapas normais no desenvolvimento de um novo veículo, tal como uma ae-
ronave, anteriormente consistiam em testes aerodinâmicos com um modelo em es-
cala; na construção de um modelo de madeira em tamanho real para verificação de
interferências nos tubos, nos cabos e estruturais; e, finalmente, na construção e no
teste de um protótipo, o primeiro veículo completo. O CAE está mudando o ciclo de
desenvolvimento tradicional. O Boeing 777 é a primeira aeronave a ser projetada e
construída utilizando CAE, sem tempo extra e gastos na construção de um modelo em
tamanho real. Todas as equipes de projeto responsáveis pelos vários subsistemas, tais
como aerodinâmica, estruturas, hidráulica e sistemas elétricos, tiveram acesso à base
de dados que descrevia a aeronave. Assim, quando uma equipe fazia alguma alteração
de projeto, a base de dados era atualizada, o que permitia que as outras equipes verifi-
cassem se aquela mudança afetava o seu subsistema. Esse processo de projeto e teste
com um modelo computacional foi chamado de prototipagem virtual. A prototipagem
virtual reduziu as alterações de engenharia, erros e retrabalhos em 50% e aumentou
bastante a manufaturabilidade da aeronave. Quando a produção começou, as partes
foram facilmente reunidas.
O MATLAB é uma ferramenta poderosa para muitas aplicações CAE. Ele é um
complemento para pacotes de modelagem geométrica por ser capaz de fazer cálculos
avançados que esses pacotes não podem fazer. ■
6
Construção de modelos
e regressão

Uma aplicação importante das técnicas de plotagem abordadas no Capítulo 5 é a es-


timação de função, que utiliza plotagens de dados para obter uma função matemática
ou um “modelo matemático” que descreve o processo que gerou os dados. Esse é o
tópico da Seção 6.1. Uma maneira sistemática de encontrar uma equação que melhor
se ajusta aos dados é a regressão (também chamada de método de mínimos quadra-
dos). A regressão é tratada na Seção 6.2. A Seção 6.3 introduz a Interface Básica de
Ajuste de Curvas do MATLAB, que suporta regressão.

6.1 Estimação de função


A estimação de função é o processo de encontrar, ou “descobrir”, uma função que
seja capaz de descrever um conjunto de dados em particular. Os três tipos de funções
a seguir frequentemente podem descrever fenômenos físicos:
1. A função linear: y(x) = mx + b. Note que y(0) = b.
2. A função potência: y(x) = bxm. Note que y(0) = 0 se m Ú 0, e y(0) = q se m 6 0.
3. A função exponencial: y(x) = b(10)mx ou sua forma equivalente y = bemx, em que e
é a base do logaritmo natural (ln e = 1). Note que y(0) = b para ambas as formas.
Cada função resulta em uma linha reta quando plotada utilizando-se um conjunto de
eixos específico:
1. A função linear y = mx + b resulta em uma linha estreita quando plotada em eixos
lineares. Sua inclinação é m e sua interseção com o eixo das ordenadas é b.
2. A função potência y = bxm resulta em uma linha reta quando plotada em eixos
log-log.
264 Introdução ao MATLAB para Engenheiros

3. A função exponencial y = b(10)mx e sua forma equivalente y = bemx resultam em


uma linha reta quando plotadas em escala semilog com o eixo y logarítmico.
Buscamos uma linha reta em uma plotagem porque ela é relativamente fácil de ser re-
conhecida e, portanto, podemos dizer facilmente se a função se ajustará bem aos dados.
Utilize o procedimento a seguir para encontrar uma função que descreve um
determinado conjunto de dados. Consideraremos que um dos tipos de função (linear,
exponencial ou potência) é capaz de descrever os dados.
1. Examine os dados próximos à origem. A função exponencial nunca pode passar
pela origem (a não ser para b = 0, é claro, o que é um caso trivial). (Ver Figura
6.1-1 para exemplos com b = 1.) A função linear pode passar pela origem ape-
nas se b = 0. A função potência pode passar pela origem apenas se m 7 0. (Ver
Figura 6.1-2 para exemplos com b = 1)
2. Plote os dados utilizando escalas lineares. Se os dados formarem uma linha reta,
então eles podem ser representados pela função linear. Caso contrário, se você
tiver algum dado em x = 0, então
a. Se y(0) = 0, tente a função potência.
b. Se y(0) Z 0, tente a função exponencial.
Se não houver nenhum dado disponível para x = 0, prossiga com o passo 3.

A função exponencial y ⫽ 10mx


4

m=2
3.5 m=1

2.5

2
y

1.5

m=0
1

0.5
m = –1
m = –2
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
x
FIGURA 6.1-1 Exemplos de funções exponenciais.
Capítulo 6 ■ Construção de modelos e regressão 265

A função potência y ⫽ xm
4

3.5
m⫽2
m⫽1
3

2.5

m ⫽ 0.5
2
y

1.5

m⫽0
1

0.5
m ⫽ ⫺0.5

0
0 0.5 1 1.5 2 2.5 3 3.5 4
x
FIGURA 6.1-2 Exemplos de funções potência.

3. Se você suspeitar de uma função potência, plote os dados utilizando escalas log-
-log. Apenas uma função potência formará uma linha reta em uma plotagem
log-log. Se você suspeitar de uma função exponencial, plote os dados utilizando
escalas semilog. Apenas uma função exponencial formará uma linha reta em
uma escala semilog.
4. Em aplicações de estimação de função, utilizamos plotagens log-log e semilog
apenas para identificar o tipo de função, mas não para encontrar os coeficientes b
e m. A razão é que é difícil realizar interpolação em escalas logarítmicas.
Podemos encontrar os valores de b e m com a função polyfit do MATLAB.
Essa função encontra os coeficientes de um polinômio de grau n especificado que
melhor se ajusta aos dados, no sentido de mínimos quadrados. A sintaxe aparece na
Tabela 6.1-1. O fundamento matemático do método de mínimos quadrados é apresen-
tado na Seção 6.2.
Uma vez que estamos considerando que os nossos dados formarão uma linha
reta em plotagem linear, semilog ou log-log, estamos interessados apenas em um
polinômio que corresponde a uma linha reta, isto é, um polinômio de primeiro grau,
que indicaremos como w = p1z + p2. Assim, referindo-se à Tabela 6.1-1, vemos que
266 Introdução ao MATLAB para Engenheiros

TABELA 6.1-1 A função polyfit


Comando Descrição
p = polyfit(x,y,n) Ajusta um polinômio de grau n aos dados descritos pelos vetores x e
y, em que x é a variável independente. Retorna um vetor linha p de
tamanho n + 1 que contém os coeficientes do polinômio em ordem
decrescente de potência.

o vetor p será [p1 p2] se n for 1. Esse polinômio tem uma interpretação diferente em
cada um dos três casos:
■ A função linear: y = mx + b. Nesse caso, as variáveis w e z no polinômio w =
p1z + p2 são as variáveis de dados originais x e y, e podemos encontrar uma
função linear que se ajusta aos dados digitando p = polyfit(x,y,1). O
primeiro elemento p1 do vetor p será m, e o segundo elemento p2 será b.
■ A função potência: y = bxm. Nesse caso, log10 y = m log10 x + log10 b, que
tem a forma w = p1z + p2, em que as variáveis w e z estão relacionadas com
as variáveis de dados originais x e y por meio de w = log10 y e z = log10 x.
Assim, podemos encontrar uma função potência que se ajusta aos dados di-
gitando p = polyfit(log10(x), log10(y), 1). O primeiro ele-
mento p1 do vetor p será m, e o segundo elemento p2 será log10 b. Podemos
encontrar b a partir de b = 10P2.
■ A função exponencial: y = b(10)mx. Nesse caso, log10 y = mx + log10 b, que tem
a forma w = p1z + p2, em que as variáveis do polinômio w e z estão relacionadas
com as variáveis de dados originais x e y por meio de w = log10 y e z = x. Assim,
podemos encontrar a função exponencial que se ajusta aos dados digitando p =
polyfit(x, log10(y), 1). O primeiro elemento p1 do vetor p será m, e o
segundo elemento p2 será log10 b. Nós podemos encontrar b a partir de b = 10P2.

EXEMPLO 6.1-1 Dinâmica de temperatura

A temperatura de resfriamento do café em uma caneca de porcelana à temperatura ambien-


te (68°F) foi medida em diversos instantes de tempo. Os dados são apresentados abaixo.

Tempo t (s) Temperatura T (°F)


0 145
620 130
2266 103
3482 90

Desenvolva um modelo da temperatura do café como uma função do tempo, e utilize-o


para estimar quanto tempo foi necessário para que a temperatura atingisse 120°F.
Capítulo 6 ■ Construção de modelos e regressão 267

80 102

Temperatura relativa (graus F)

Temperatura relativa (graus F)


70

60

50

40

30

20 101
0 1000 2000 3000 4000 0 1000 2000 3000 4000
Tempo (s) Tempo (s)

102 150
Temperatura relativa (graus F)

140

Temperatura (graus F)
130

120

110

100

90
1
10 80
0 1000 2000 3000 4000 0 1000 2000 3000 4000
Tempo (s) Tempo (s)

FIGURA 6.1-3 Temperatura de uma xícara de café em resfriamento plotada em várias coordenadas.

■ Solução
Uma vez que T(0) é finita, mas diferente de zero, a função potência não pode descrever esses
dados, então nem precisamos plotar os dados em eixos log-log. O senso comum nos diz que o
café resfriará e que sua temperatura eventualmente será igual à temperatura ambiente. Assim,
subtraímos a temperatura ambiente da temperatura do café e plotamos a temperatura relativa
T - 68 versus o tempo. Se a temperatura relativa for uma função linear do tempo, o modelo é
T - 68 = mt + b. Se a temperatura relativa for um função exponencial do tempo, o modelo é
T - 68 = b(10)mt. A Figura 6.1-3 mostra as plotagens utilizadas para resolver o problema. O
seguinte arquivo de script do MATLAB gera as duas plotagens superiores. Os dados de tempo
são inseridos no arranjo time, e os dados de temperatura são inseridos em temp.
% Insira os dados.
time = [0,620,2266,3482];
temp = [145,130,103,90];
% Subtraia a temperatura ambiente.
temp = temp - 68;
% Plote os dados em escalas lineares.
subplot(2,2,1)
plot(time,temp,time,temp,’o’),xlabel(’Tempo (s)’),...
ylabel(’Temperatura Relativa (graus F)’)
268 Introdução ao MATLAB para Engenheiros

%
% Plote os dados em escalas semilog.
subplot(2,2,2)
semilogy(time,temp,time,temp,’o’),xlabel(’Tempo (s)’),. ..
ylabel(’Temperatura Relativa (graus F)’)
Os dados formam uma linha reta apenas na plotagem semilog (a plotagem superior à di-
reita). Assim, os dados podem ser descritos por uma função exponencial T = 68 + b(10)mt.
Utilizando o comando polyfit, as seguintes linhas podem ser adicionadas ao arquivo
de script:
% Ajuste uma linha reta aos dados transformados.
p = polyfit(time,log10(temp),1);
m = p(1)
b = 10^p(2)
Os valores calculados são m = -1,5557 * 10-4 e b = 77,4469. Assim, o nosso modelo é T
= 68 + b(10)mt. Para estimar o tempo necessário para que o café seja resfriado até 120°F,
devemos resolver a equação 120 = 68 + b(10)mt para t. A solução é t = [log10(120–68) –
log10(b)]/m. O comando do MATLAB para esse cálculo é mostrado no seguinte arquivo de
script, que é uma continuação do script anterior e produz as duas subplotagens inferiores
na Figura 6.1-3:
% Calcule o tempo para atingir 120 graus.
t_120 = (log10(120-68)-log10(b))/m
% Exiba a curva derivada e o ponto estimado em escalas semilog.
t = 0:10:4000;
T = 68+b*10.^(m*t);
subplot(2,2,3)
semilogy(t,T-68,time,temp,’o’,t_120,120-68,’+’),
xlabel(’Tempo (s)’),...
ylabel(’Temperatura Relativa (graus F)’)
%
% Exiba a curva derivada e o ponto estimado em escalas lineares.
subplot(2,2,4)
plot(t,T,time,temp+68,’o’,t_120,120,’+’),xlabel(’Tempo (s)’),...
ylabel(’Temperatura (graus F)’)
O valor calculado de t_120 é 1112. Assim, o tempo necessário para se alcançar 120°F
é 1112 s. A plotagem do modelo, juntamente com os dados e ponto estimado (1112, 120)
marcado com um sinal +, é mostrada nas duas subplotagens inferiores da figura 6.1-3.
Uma vez que o gráfico de nosso modelo situa-se perto dos pontos correspondentes aos
dados, podemos ter alguma confiança na sua previsão de 1112 s.

EXEMPLO 6.1-2 Resistência hidráulica

Um pote com capacidade para 15 xícaras de café (ver Figura 6.1-4) foi colocado debaixo
de uma torneira e preenchido com água até a linha correspondente a 15 xícaras. Com a
válvula de saída aberta, a vazão da torneira foi ajustada até que o nível ficasse constante
em 15 xícaras, e o tempo necessário para que uma xícara escoasse para fora do pote foi
Capítulo 6 ■ Construção de modelos e regressão 269

FIGURA 6.1-4 Um experimento para verificar o princípio de Torricelli.

medido. Esse experimento foi repetido com o pote preenchido em vários níveis, e os resul-
tados são mostrados na seguinte tabela:

Volume líquido V (xícaras) Tempo para preencher uma xícara t (s)


15 6
12 7
9 8
6 9

(a) Utilize os dados acima para obter uma relação entre a vazão e o número de
xícaras no pote. (b) O fabricante deseja fazer um pote com capacidade para 36 xícaras
utilizando a mesma válvula de saída, mas está preocupado com o fato de que uma xícara
talvez seja preenchida muito rapidamente, o que pode causar derramamentos. Extrapole
a relação desenvolvida em (a) e faça a previsão de quanto tempo será necessário para que
uma xícara seja preenchida quando o pote contiver 36 xícaras.
■ Solução
(a) O princípio de Torricelli em hidráulica estabelece que f = rV1/2, em que f é a vazão na
válvula de saída em xícaras por segundo, V é o volume de líquido no pote em xícaras e
r é uma constante cujo valor deve ser encontrado. Vemos que essa relação é uma função
potência em que o expoente é 0,5. Assim, se plotarmos log10(f) versus log10(V), deveremos
obter uma linha reta. Os valores para f são obtidos a partir dos recíprocos dos valores da-
dos para t. Isto é, f = 1/t xícaras por segundo.
O arquivo de script do MATLAB é apresentado a seguir. A plotagem resultante
aparece na Figura 6.1-5. Os dados de volume são inseridos no arranjo cups, e os dados
de tempo são inseridos em meas_times.
270 Introdução ao MATLAB para Engenheiros

Vazão (xícaras/s)

10 –1
101
Volume (xícaras)

10
Tempo de preenchimento
de uma xícara (s)

0
5 10 15 20 25 30 35
Volume (xícaras)
FIGURA 6.1-5 Vazão e tempo de preenchimento de uma xícara.

% Dados para o problema.


cups = [6,9,12,15];
meas_times = [9,8,7,6];
meas_flow = 1./meas_times;
%
% Ajuste uma linha reta aos dados transformados.
p = polyfit(log10(cups),log10(meas_flow),1);
coeffs = [p(1),10^p(2)];
m = coeffs(1)
b = coeffs(2)
%
% Plote os dados e a linha ajustada em escala log-log
% para visualizar quão bem a linha se ajusta aos dados.
x = 6:0.01:40;
y = b*x.^m;
subplot(2,1,1)
loglog(x,y,cups,meas_flow,’o’),grid,xlabel(’Volume (xícaras)’),...
ylabel(’Vazão (xícaras/s)’),axis([5 15 0.1 0.3])
Os valores calculados são m = 0,433 e b = 0,0499, e nossa relação derivada é f =
0,0499V0,433. Uma vez que o expoente é 0,433, não 0,5, nosso modelo não concorda exa-
tamente com o princípio de Torricelli, mas se aproxima muito dele. Note que a primeira
Capítulo 6 ■ Construção de modelos e regressão 271

plotagem na Figura 6.1-5 mostra que os dados não estão situados exatamente na linha reta
ajustada. Nessa aplicação, é difícil medir o tempo necessário para se preencher uma xícara
com uma precisão maior do que um segundo, portanto, essa imprecisão pode ter feito com
que nosso resultado estivesse em desacordo com o resultado previsto por Torricelli.
(b) Note que o tempo de preenchimento é 1/f, o recíproco da vazão. A continuação
do script do MATLAB utiliza a relação da vazão f = 0,0499V0,433 para plotar a curva de
tempo de preenchimento extrapolada versus V.
% Plote a curva do tempo de preenchimento extrapolada para 36 xícaras.
subplot(2,1,2)
plot(x,1./y,cups,meas_times,’o’),grid,xlabel(’Volume(xícaras)’),...
ylabel(’Tempo de Preenchimento de uma Xícara (s)’),axis([5 36 0 10])
%
% Calcule o tempo de preenchimento para V = 36 xícaras.
fill_time = 1/(b*36^m)
O tempo de preenchimento previsto para uma xícara é de 4,2 s. O fabricante deve
agora decidir se esse tempo é suficiente para que o usuário consiga evitar o transbordo.
(De fato, o fabricante construiu um pote de 36 xícaras, e o tempo de preenchimento é de
aproximadamente 4 segundos, o que está de acordo com a nossa previsão.)

6.2 Regressão
Na Seção 6.1, utilizamos a função polyfit do MATLAB para realizar análise de
regressão com funções que são lineares ou que podem ser convertidas para uma for-
ma linear por uma transformação logarítmica ou por outra transformação. A função
polyfit é baseada no método de mínimos quadrados, que é também chamado de
regressão. Agora, mostraremos como utilizar essa função para desenvolver polinô-
mios e outros tipos de funções.

O método de mínimos quadrados


Suponha que tenhamos um conjunto de dados formado pelos três pontos fornecidos
na seguinte tabela, e que precisamos determinar os coeficientes da linha reta y = mx +
b que melhor se ajusta aos dados no sentido de mínimos quadrados:

x y
0 2
5 6
10 11

De acordo com o critério de mínimos quadrados, a linha que resulta no melhor


ajuste é aquela que minimiza J, a soma dos quadrados das diferenças verticais entre a
272 Introdução ao MATLAB para Engenheiros

RESÍDUOS linha e os dados. Essas diferenças são chamadas de resíduos. No caso em análise há
três pontos, e J é dado por

Os valores de m e b que minimizam J são encontrados igualando-se as deriva-


das parciais 0J/0m e 0J/0b a zero.

Essas condições resultam em duas equações que devem ser resolvidas para duas in-
cógnitas m e b. A solução é m = 0,9 e b = 11/6. A melhor linha reta no sentido de
mínimos quadrados é y = 0,9x + 11/6. Se avaliarmos essa equação nos valores x = 0,
x = 5 e x = 10, obteremos os valores y = 1,833, y = 6,333 e y = 10,8333. Esses valores
são diferentes dos valores dos dados y = 2, y = 6 e y =11, uma vez que a linha reta não
é um ajuste perfeito para os dados. O valor de J é J = (1,833 - 2)2 + (6,333 - 6)2 +
(10,8333 - 11)2 = 0,16656689. Nenhuma outra linha reta resultará em um valor de J
menor para esses dados.
Em geral, para o polinômio a1xn + a2xn-1 + . . . + anx + an+1, a soma dos quadra-
dos dos resíduos para m pontos é

Os valores dos n + 1 coeficientes ai que minimizam J podem ser encontrados resol-


vendo-se um conjunto de n + 1 equações lineares. A função polyfit fornece essa
solução. Sua sintaxe é p = polyfit(x,y,n). A Tabela 6.2-1 resume as funções
polyfit e polyval.
Considere o conjunto de dados em que x = 1, 2, 3, . . ., 9 e y = 5, 6, 10, 20, 28,
33, 34, 36 e 42. O seguinte arquivo de script calcula os coeficientes dos polinômios de
primeiro a quarto grau para esses dados e avalia J para cada polinômio.
x = 1:9;
y = [5,6,10,20,28,33,34,36,42];
for k = 1:4
coeff = polyfit(x,y,k)
J(k) = sum((polyval(coeff,x)-y).^2)
end
Os valores de J são, considerando-se dois algarismos significativos, 75, 57, 42 e 4,7.
Assim, o valor de J decresce com o aumento do grau do polinômio, como poderíamos
esperar. A Figura 6.2-1 mostra esses dados e os quatro polinômios. Note como o ajus-
te melhora com o polinômio de maior grau.
Capítulo 6 ■ Construção de modelos e regressão 273

TABELA 6.2-1 Funções para regressão polinomial


Comando Descrição
p = polyfit(x,y,n) Ajusta um polinômio de grau n aos dados descritos pelos vetores x e
y, em que x é a variável independente. Retorna um vetor linha p de
tamanho n+1 que contém os coeficientes do polinômio em ordem
decrescente de potência.
[p,s,um] = polyfit(x,y,n) Ajusta um polinômio de grau n aos dados descritos pelos vetores x e y,
em que x é a variável independente. Retorna um vetor linha p de tamanho
n+1 que contém os coeficientes do polinômio em ordem decrescente de
potência e uma estrutura s para ser utilizada com a função polyval para
se obter estimativas de erro para previsões. A variável de saída opcional mu
é um vetor de dois elementos que contém a média e o desvio padrão de x.
[y,delta] = polyval(p,x,s,mu) Utiliza a estrutura de saída opcional s produzida por [p,s,mu] =
polyfit(x,y,n) para gerar estimativas de erro. Se os erros nos
dados utilizados com polyfit forem independentes e normalmente
distribuídos com variância constante, pelo menos 50% dos dados se
encontrarão na faixa y ± delta.

Primeiro grau Segundo grau


50 50

40 40

30 30
y

20 20

10 10

0 0
0 5 10 0 5 10
x x
Terceiro grau Quarto grau
50 50

40 40

30 30
y

20 20

10 10

0 0
0 5 10 0 5 10
x x
FIGURA 6.2-1 Regressão utilizando polinômios de primeiro a quarto grau.
274 Introdução ao MATLAB para Engenheiros

80

60

40

20
y

⫺20

⫺40
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
x
FIGURA 6.2-2 Um exemplo de um polinômio de quinto grau que passa por todos os seis pontos
do conjunto de dados, mas que exibe grandes excursões entre os pontos.

Advertência: É tentador utilizar polinômios de grau elevado para obter o me-


lhor ajuste possível. Entretanto, há dois perigos em sua utilização. Muitas vezes, esses
polinômios exibem grandes excursões entre os pontos do conjunto de dados, portanto,
devem ser evitados, se possível. A Figura 6.2-2 mostra um exemplo desse fenômeno.
O segundo perigo na utilização de polinômios de grau elevado é que eles podem pro-
duzir grandes erros se os seus coeficientes não forem representados com um número
suficiente de algarismos significativos. Em alguns casos pode não ser possível ajustar
um polinômio de pequeno grau aos dados. Nesses casos, podemos utilizar alguns poli-
nômios cúbicos. Esse método, denominado splines cúbicas, é abordado no Capítulo 7.

Teste seus conhecimentos


T6.2-1 Obtenha e plote os polinômios de primeiro a quarto grau para os seguintes
dados: x = 0, 1, ..., 5 e y = 0, 1, 60, 40, 41, 47. Encontre os coeficientes e os
valores de J.
(Resposta: Os polinômios são 9,5714x + 7,5714; -3,6964x2 + 28,0536x -
4,7500; 0,3241x3 - 6,1270x2 +32,4934x - 5,7222; e 2,5208x4 - 24,8843x3 +
71,2986x2 - 39,5304x - 1,4008. Os valores de J correspondentes são 1534,
1024, 1017 e 495, respectivamente.)
Capítulo 6 ■ Construção de modelos e regressão 275

Ajustando outras funções


Para o conjunto de dados (y, z), a função logarítmica y = m ln z + b pode ser conver-
tida em um polinômio de primeiro grau transformando-se os valores de z nos valores
de x da seguinte maneira: x = ln z. A função resultante é y = mx + b.
Para o conjunto de dados (y, z), a função y = b(10)m/z pode ser convertida em
função exponencial transformando-se os valores de z da seguinte maneira: x = 1/z.
Para o conjunto de dados (v, x), a função v = 1/(mx + b) pode ser convertida em
um polinômio de primeiro grau transformando-se os valores de v da seguinte manei-
ra: y = 1/v. A função resultante é y = mx + b.
Para entender como obter a função y = kx que passa pela origem, veja o Pro-
blema 8.

A qualidade de um ajuste de curva


O critério de mínimos quadrados utilizado para ajustar uma função f(x) é a soma dos
quadrados dos resíduos J. Ele é definido como

(6.2-1)

Podemos utilizar o valor de J para comparar a qualidade do ajuste de curva para duas
ou mais funções utilizadas para descrever o mesmo conjunto de dados. A função que
resulta no menor valor de J é a que melhor se ajusta aos dados.
Indicaremos com a letra S a soma dos quadrados dos desvios dos valores de y
em relação ao seu valor médio , e essa soma pode ser calculada a partir da seguinte
expressão:

(6.2-2)

Essa fórmula pode ser utilizada para calcular outra medida da qualidade do ajuste de
COEFICIENTE DE curva, o coeficiente de determinação, também conhecido como valor r quadrado. Ele
DETERMINAÇÃO é definido como

(6.2-3)

Para um ajuste perfeito, J = 0 e r2 = 1. Assim, quanto mais próximo r2 estiver


de 1, melhor será o ajuste. O maior valor que r2 pode assumir é 1. O valor de S indica
quão espalhados os dados estão em torno da média, e o valor de J indica quanto do
espalhamento dos dados não é considerado pelo modelo. Dessa forma, a razão J/S in-
dica a fração da variação não considerada pelo modelo. É possível que J seja maior do
que S e, portanto, que r2 seja negativo. Tais casos, entretanto, são indícios de um mo-
delo muito pobre que não deve ser utilizado. Como uma regra prática, um bom ajuste
leva em consideração 99% da variação dos dados. Esse valor corresponde a r2 Ú 0,99.
Por exemplo, a tabela a seguir fornece os valores de J, S e r2 para os polinômios
de primeiro a quarto grau utilizados para ajustar os dados x = 1, 2, 3, . . ., 9 e y = 5, 6,
10, 20, 28, 33, 34, 36, 42.
276 Introdução ao MATLAB para Engenheiros

Grau n J S r2
1 72 1562 0,9542
2 57 1562 0,9637
3 42 1562 0,9732
4 4,7 1562 0,9970

Uma vez que o polinômio de quarto grau possui o maior valor de r2, ele representa os da-
dos melhor do que os polinômios de primeiro a terceiro grau, de acordo com o critério r2.
Para calcular os valores de S e r2, adicione as seguintes linhas ao final do arqui-
vo de script mostrado na página 272:
mu = mean(y);
for k=1:4
S(k) = sum((y-mu).^2);
r2(k) = 1 - J(k)/S(k);
end
S
r2

Escalonando os dados
O efeito de erros computacionais no cálculo dos coeficientes pode ser minimizado es-
calonando-se adequadamente os valores de x. Quando a função polyfit(x,y,n)
é executada, será exibida uma mensagem de alerta se o grau do polinômio n for maior
que ou igual ao número de pontos no conjunto de dados (porque não haverá equações
suficientes no MATLAB para que sejam determinados os coeficientes), ou se o vetor
x tiver pontos repetidos, ou quase repetidos, ou se o vetor x precisar ser centralizado
e/ou escalonado. A sintaxe alternativa [p, s, mu] = polyfit(x,y,n) encon-
tra os coeficientes p de um polinômio de grau n em termos da variável

= (x - ␮x)/␴x
A variável de saída mu é um vetor de dois elementos [␮x, ␴x], em que ␮x é a média de
x e ␴x é o desvio padrão de x (o desvio padrão é discutido no Capítulo 7).
Você pode escalonar os dados por si mesmo antes de utilizar a função polyfit.
Alguns métodos de escalonamento comuns são

= x - xmín ou = x - ␮x
se a faixa de x for pequena, ou

se a faixa de x for grande.


Capítulo 6 ■ Construção de modelos e regressão 277

EXEMPLO 6.2-1 Estimação de fluxo de tráfego

Os dados a seguir correspondem ao número de veículos (em milhões) que cruzam uma
ponte a cada ano durante 10 anos. Ajuste um polinômio cúbico aos dados e utilize o ajuste
para estimar o fluxo no ano de 2010.

Ano 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
Fluxo de veículos 2,1 3,4 4,5 5,3 6,2 6,6 6,8 7 7,4 7,8
(milhões)

■ Solução
Se tentarmos ajustar uma cúbica a esses dados, como na sessão seguinte, obteremos uma
mensagem de alerta.
>>Year = 2000:2009;
>>Veh_Flow = [2.1,3.4,4.5,5.3,6.2,6.6,6.8,7,7.4,7.8];
>>p = polyfit(Year,Veh_Flow,3)
Warning: Polynomial is badly conditioned.
O problema é causado pelos valores grandes da variável independente Year. Como sua
faixa é pequena, podemos simplesmente subtrair 2000 de cada valor. Continuemos a ses-
são da seguinte maneira:
>>x = Year-2000; y = Veh_Flow;
>>p = polyfit(x,y,3)
p =
0.0087 -0.1851 1.5991 2.0362
>>J = sum((polyval(p,x)-y).^2);
>>S = sum((y-mean(y)).^2);
>>r2 = 1 - J/S
r2 =
0.9972
Assim, o ajuste polinomial é bom porque o coeficiente de determinação é 0,9972. O poli-
nômio correspondente é
f = 0,0087(t - 2000)3 - 0,1851(t - 2000)2 + 1,5991(t - 2000) + 2,0362
em que f é o fluxo de tráfego em milhões de veículos e t é o tempo em anos medido a
partir de 0. Podemos utilizar essa equação para estimar o fluxo no ano 2010 substituindo
t = 2010, ou digitando polyval(p,10) no MATLAB. Arredondado para uma casa
decimal, a resposta é 8,2 milhões de veículos.

Utilizando resíduos
Agora mostraremos como utilizar os resíduos como um guia para escolher uma fun-
ção apropriada para descrever os dados. Em geral, se você visualizar um padrão na
plotagem dos resíduos, isso é um indicativo de que outra função pode ser utilizada
para descrever melhor os dados.
278 Introdução ao MATLAB para Engenheiros

EXEMPLO 6.2-2 Modelando o crescimento de bactérias

A tabela a seguir fornece os dados de crescimento de uma determinada população de bac-


térias com o tempo. Ajuste uma equação a esses dados.

Tempo (min) Bactérias (ppm) Tempo (min) Bactérias (ppm)


0 6 10 350
1 13 11 440
2 23 12 557
3 33 13 685
4 54 14 815
5 83 15 990
6 118 16 1170
7 156 17 1350
8 210 18 1575
9 282 19 1830

■ Solução
Tentemos três ajustes polinomiais (linear, quadrático e cúbico) e um ajuste exponencial.
O arquivo de script é dado abaixo. Note que podemos escrever a forma exponencial como
y = b(10)mt = 10mt+a, em que b = 10ª.
% Dados de tempo
x = 0:19;
% Dados de população
y = [6,13,23,33,54,83,118,156,210,282,...
350,440,557,685,815,990,1170,1350,1575,1830];
% Ajuste linear
p1 = polyfit(x,y,1);
% Ajuste quadrático
p2 = polyfit(x,y,2);
% Ajuste cúbico
p3 = polyfit(x,y,3);
% Ajuste exponencial
p4 = polyfit(x,log10(y),1);
% Resíduos
res1 = polyval(p1,x)-y;
res2 = polyval(p2,x)-y;
res3 = polyval(p3,x)-y;
res4 = 10.^polyval(p4,x)-y;
Você pode plotar em seguida os resíduos mostrados na Figura 6.2-3. Note que há um
padrão definido nos resíduos do ajuste linear. Isso indica que a função linear não é capaz
de explicar a curvatura dos dados. Os resíduos do ajuste quadrático são muito menores,
Capítulo 6 ■ Construção de modelos e regressão 279

400 60

200 40

Resíduos (ppm)

Resíduos (ppm)
20
0 Linear
0
⫺200
⫺20

⫺400 ⫺40 Quadrático

⫺600 ⫺60
0 5 10 15 20 0 5 10 15 20
t (min) t (min)

10 1500

5
1000
Resíduos (ppm)

Resíduos (ppm)
0
500 Exponencial
⫺5

0
⫺10 Cúbico

⫺15 ⫺500
0 5 10 15 20 0 5 10 15 20
t (min) t (min)

FIGURA 6.2-3 Plotagens dos resíduos para os quatro modelos.

mas ainda há um padrão, com uma componente aleatória. Isso indica que a função qua-
drática não é capaz de explicar a curvatura dos dados. Os resíduos do ajuste cúbico são
ainda menores, sem um padrão forte e com uma grande componente aleatória. Isso indica
que um polinômio de grau maior do que 3 não será capaz de explicar a curvatura melhor
do que o ajuste cúbico. Os resíduos para o ajuste exponencial são os maiores de todos, e
indicam um ajuste pobre. Note também como os resíduos crescem sistematicamente com
t, indicando que a exponencial não é capaz de descrever o comportamento dos dados após
certo tempo.
Assim, o ajuste cúbico é o melhor dentre os quatro modelos considerados. Seu coe-
ficiente de determinação é r2 = 0,9999. O modelo é
y = 0,1916t3 + 1,2082t2 + 3,607t + 7,7307
em que y é a população de bactérias em ppm e t é o tempo em minutos.

Regressão linear múltipla


Suponha que y é uma função linear de duas ou mais variáveis x1, x2, . . ., por exemplo,
y = a0 + a1x1 + a2x2. Para encontrar os valores dos coeficientes a0, a1 e a2 para ajus-
tar um determinado conjunto de dados (y, x1, x2) no sentido de mínimos quadrados,
podemos fazer uso do fato de que o método da divisão à esquerda para resolução de
equações lineares utiliza o método de mínimos quadrados quando o conjunto é sobre-
280 Introdução ao MATLAB para Engenheiros

determinado. Para utilizar esse método, sendo n o número de pontos no conjunto de


dados, escreva a equação linear no formato matricial Xa = y, em que

em que x1i, x2i e yi são os dados, i = 1, . . ., n. A solução para os coeficientes é dada


por a = X\y.

EXEMPLO 6.2-3 Resistência à ruptura e composição de liga

Queremos prever a resistência de partes metálicas como uma função de sua composição
de liga. A força de tensão y necessária para promover a ruptura de uma barra de aço é
uma função dos percentuais x1 e x2 de cada um dos dois elementos de liga presentes no
metal. A tabela a seguir fornece alguns dados importantes. Obtenha um modelo linear
y = a0 + a1x1 + a2x2 para descrever a relação.

% do elemento 1 % do elemento 2
Resistência à ruptura (kN) x1 x1
7,1 0 5
19,2 1 7
31 2 8
45 3 11

■ Solução
O arquivo de script é como o seguinte:
x1 = (0:3)’;x2 = [5,7,8,11]’;
y = [7.1,19.2,31,45]’;
X = [ones(size(x1)), x1, x2];
a = X\y
yp = X*a;
Max_Percent_Error = 100*max(abs((yp-y)./y))
O vetor yp é o vetor de valores de resistência à ruptura previstos pelo modelo. O escalar
Max_Percent_Error é o erro percentual máximo nas quatro previsões. Os resulta-
dos são a = [0.8000, 10.2429, 1.2143]’ e Max_Percent_Error =
3.2193. Assim, o modelo é y = 0,8 + 10,2429x1 + 1,2143x2. O erro percentual máximo
das previsões do modelo, em comparação com os dados fornecidos, é igual a 3,2193%.

Regressão linear nos parâmetros


Algumas vezes, queremos ajustar uma expressão que não é um polinômio nem uma
função que pode ser convertida em uma forma linear por uma transformação logarít-
Capítulo 6 ■ Construção de modelos e regressão 281

mica ou por alguma outra transformação. Em alguns casos, ainda podemos realizar
um ajuste por meio do método de mínimos quadrados, se a expressão for uma função
linear em termos dos seus parâmetros. O seguinte exemplo ilustra o método:

EXEMPLO 6.2-4 Resposta de um instrumento biomédico

Engenheiros desenvolvedores de instrumentação frequentemente necessitam obter


uma curva de resposta que descreve quão rápido o instrumento é capaz de realizar
medições. A teoria de instrumentação mostra que muitas vezes a resposta pode ser
descrita por uma das equações a seguir, em que v é a tensão de saída e t é o tempo. Em
ambos os modelos, a tensão atinge um valor constante em estado estacionário quanto t
→ q, e T é o tempo necessário para que a tensão seja igual a 95% do valor em estado
estacionário.

Os dados a seguir representam a tensão de saída de um determinado dispositivo como uma


função do tempo. Obtenha a função que descreve esses dados.

t (s) 0 0,3 0,8 1,1 1,6 2,3 3


y (V) 0 0,6 1,28 1,5 1,7 1,75 1,8

■ Solução
Plotando os dados, podemos estimar que são necessários aproximadamente 3 s para que a
tensão se torne constante, isto é, T = 3. O modelo de primeira ordem escrito para cada um
dos n pontos do conjunto de dados resulta em n equações, as quais podem ser expressas
da seguinte maneira:

ou, em formato matricial,

Xa = y¿
e que podem ser solucionadas para o vetor de coeficientes a utilizando-se a divisão à es-
querda. O seguinte script do MATLAB resolve o problema.
t = [0,0.3,0.8,1.1,1.6,2.3,3];
y = [0,0.6,1.28,1.5,1.7,1.75,1.8];
X = [ones(size(t));exp(-t)]’;
a = X\y’
A resposta é a1 = 2,0258 e a2 = -1,9307.
282 Introdução ao MATLAB para Engenheiros

1,8

1,6

1,4

1,2
v (V)

1
Dados
0,8 Primeira ordem
Segunda ordem
0,6

0,4

0,2

0
0 0,5 1 1,5 2 2,5 3
t (s)
FIGURA 6.2-4 Comparação de ajustes de modelos de primeira e de segunda ordem.

Um procedimento similar pode ser seguido para o modelo de segunda ordem.

Dê continuidade ao script anterior da seguinte maneira:


X = [ones(size(t));exp(-t);t.*exp(-t)]’;
a = X\y’
A resposta é a1 = 1,7946, a2 = -1,7682 e a3 = 0,8885. Os dois modelos são plotados com
os dados na Figura 6.2-4. Claramente o modelo de segunda ordem resulta em um ajuste
melhor.

6.3 A interface básica de ajuste de curvas


O MATLAB suporta ajuste de curvas por meio da Interface Básica de Ajuste de Cur-
vas (Basic Fitting). Utilizando essa interface, você pode realizar rapidamente tarefas
básicas de ajuste de curvas dentro de um mesmo ambiente fácil de ser utilizado. A
interface é projetada para que você seja capaz de realizar as seguintes tarefas:
■ Ajustar dados utilizando uma spline cúbica ou um polinômio de até décimo
grau.
■ Plotar múltiplos ajustes simultaneamente para um determinado conjunto de dados.
■ Plotar resíduos.
Capítulo 6 ■ Construção de modelos e regressão 283

■ Examinar os resultados numéricos de um ajuste.


■ Interpolar ou extrapolar um ajuste.
■ Escrever na plotagem os resultados do ajuste numérico e a norma dos resíduos.
■ Salvar na área de trabalho do MATLAB o ajuste e os resultados obtidos.
Dependendo da sua aplicação específica de ajuste de curvas, você pode utilizar
a interface Basic Fitting, as funções de linha de comando ou ambos os recursos.
Nota: você pode utilizar a interface Basic Fitting apenas com dados bidimensio-
nais. Entretanto, se você plotar múltiplos conjuntos de dados como subplotagens,
e pelo menos um dos conjuntos de dados for bidimensional, a interface estará
habilitada.
Dois painéis da interface Basic Fitting são mostrados na Figura 6.3-1. Para re-
produzir esse estado:
1. Plote alguns dados.
2. Selecione Basic Fitting no menu Tools da janela Figure.
3. Quando o primeiro painel da interface Basic Fitting aparecer, clique uma vez no
botão com uma seta para a direita.

FIGURA 6.3-1 A interface Basic Fitting.


284 Introdução ao MATLAB para Engenheiros

O terceiro painel é utilizado para interpolação ou extrapolação de um ajuste. Ele apa-


recerá quando você clicar uma segunda vez no botão com uma seta para a direita.
No topo do primeiro painel está a janela Select Data, que contém os nomes de
todos os conjuntos de dados exibidos na janela Figure associados com a interface Ba-
sic Fitting. Utilize esse menu para selecionar o conjunto de dados para o qual será fei-
to o ajuste. Você pode realizar múltiplos ajustes para o conjunto de dados seleciona-
do. Utilize o Editor de Plotagem (Plot Editor) para alterar o nome de um conjunto de
dados. Os itens remanescentes no primeiro painel são utilizados da seguinte maneira:
■ Center and scale X data. Se for marcado, os dados serão centralizados em
torno de um valor médio igual a zero e escalonados de modo a apresentarem um
desvio padrão unitário. Talvez você precise centralizar e escalonar seus dados
para melhorar a precisão dos cálculos numéricos subsequentes. Conforme foi
descrito na seção anterior, uma mensagem de alerta é retornada para a janela de
Comandos se um ajuste produzir resultados que podem ser imprecisos.
■ Plot fits. Esse painel permite a você explorar visualmente um ou mais ajustes
para o conjunto de dados selecionado.
■ Check to display fits on figure. Selecione os ajustes que você deseja exi-
bir para o conjunto de dados selecionado. Você pode escolher quantos ajustes
quiser para um determinado conjunto de dados. Entretanto, se o seu conjunto
de dados tiver n pontos, você deve utilizar polinômios com, no máximo, n co-
eficientes. Se você fizer um ajuste utilizando polinômios com mais do que n
coeficientes, a interface automaticamente igualará a zero um número suficiente
de coeficientes durante o cálculo a fim de que uma solução possa ser obtida.
■ Show equations. Se for marcado, a equação de ajuste será exibida na plotagem.
■ Significant digits. Seleciona os algarismos significativos associados à exibi-
ção dos coeficientes do ajuste.
■ Plot residuals. Se for marcado, os resíduos serão exibidos. Você pode exibir
os resíduos utilizando um gráfico de barras, um gráfico de dispersão ou um grá-
fico de linha utilizando a mesma janela de figura dos dados ou utilizando uma
janela de figura separada. Se você plotar múltiplos conjuntos de dados como
subplotagens, então os resíduos podem ser plotados apenas em uma janela de
figura separada. Ver Figura 6.3-2.
■ Show norm of residuals. Se for marcado, a norma dos resíduos será exibida.
A norma dos resíduos é uma medida da qualidade do ajuste, em que um valor
pequeno de norma indica um bom ajuste. A norma é a raiz quadrada da soma
dos quadrados dos resíduos.
O segundo painel da interface Basic Fitting é rotulado como Numerical Results. Esse
painel permite a você explorar os resultados numéricos de um ajuste simples aos da-
dos selecionados sem plotar o ajuste. Ele contém três itens:
■ Fit. Utilize esse menu para selecionar uma equação que ajuste o conjunto
de dados selecionados. Os resultados do ajuste são exibidos na caixa abaixo
do menu. Note que a seleção de uma equação nesse menu não afeta o estado
Capítulo 6 ■ Construção de modelos e regressão 285

FIGURA 6.3-2 Figura produzida pela interface Basic Fitting.

da seleção Plot fits. Portanto, se você quiser exibir o ajuste na plotagem dos
dados, pode ser que precise marcar as caixas de seleção relevantes em Plot
fits.
■ Coefficients and norm of residuals. Exibe os resultados numéricos para a equa-
ção selecionada em Fit. Note que quando você abre o painel Numerical Results,
os resultados do último ajuste que você selecionou em Plot fits são exibidos.
■ Save to workspace. Abre uma caixa de diálogo que permite salvar os resulta-
dos do ajuste como variáveis do espaço de trabalho.
O terceiro painel da interface Basic Fitting contém três itens:
■ Find Y = f(X). Utilize para interpolar ou extrapolar o ajuste atual. Insira um
escalar ou um vetor de valores correspondentes à variável independente (X).
O ajuste atual será avaliado depois que você clicar no botão Evaluate, e os
resultados serão exibidos na janela associada. O ajuste atual será exibido na
janela Fit.
■ Save to workspace. Abre uma caixa de diálogo que permite salvar os resulta-
dos obtidos como variáveis do espaço de trabalho.
■ Plot evaluated results. Se for marcado, os resultados obtidos são exibidos
em uma plotagem.
286 Introdução ao MATLAB para Engenheiros

6.4 Resumo
Neste capítulo, você aprendeu uma aplicação importante das plotagens – estimação
de função –, técnica que utiliza gráficos para obter uma função matemática que des-
creve os dados. A regressão pode ser utilizada para o desenvolvimento de um modelo
nos casos em que há um espalhamento considerável nos dados.
Muitos processos físicos podem ser modelados com funções que produzem
uma linha reta quando plotados utilizando-se um conjunto adequado de eixos. Em
alguns casos, podemos encontrar uma transformação que produz uma linha reta na
variável transformada.
Quando essa função ou transformação não pode ser encontrada, recorremos à
regressão polinomial, à regressão linear múltipla ou à regressão linear nos parâmetros
para obter uma descrição funcional aproximada dos dados. A interface Basic Fitting
do MATLAB é um auxiliar poderoso na obtenção de modelos de regressão.

Termos-chave
Coeficiente de determinação, 275
Linear nos parâmetros, 280
Regressão linear múltipla, 279
Regressão, 271
Resíduos, 272

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do livro.

Seção 6.1
1. A distensão de uma mola em relação a seu “comprimento livre” é uma função
da força de tensão que lhe é aplicada. A tabela a seguir fornece o comprimento
y da mola devido à aplicação da força f. O comprimento livre da mola é de 4,7
in. Encontre uma relação funcional entre f e x, a distensão em relação ao com-
primento livre (x = y - 4,7).

Força f (lb) Comprimento livre (in)


0 4,7
0,94 7,2
2,30 10,6
3,28 12,9

2.* Em cada um dos problemas a seguir, determine a melhor função y(x) (função
linear, função exponencial ou função potência) para descrever os dados. Plote a
função juntamente com os dados. Rotule e formate as plotagens adequadamente.
Capítulo 6 ■ Construção de modelos e regressão 287

a. x 25 30 35 40 45
y 5 260 480 745 1100

b.
x 2,5 3 3.5 4 4,5 5 5,5 6 7 8 9 10
y 1500 1220 1050 915 810 745 690 620 520 480 410 390

c.
x 550 600 650 700 750
y 41,2 18,62 8,62 3,92 1,86

3. Os dados populacionais de um determinado país são os seguintes:

Ano 2004 2005 2006 2007 2008 2009


População (milhões) 10 10,9 11,7 12,6 13,8 14,9

Obtenha uma função que descreva esses dados. Plote a função juntamente com
os dados. Estime quando a população terá o dobro do seu tamanho em 2004.
4.* A meia-vida de uma substância radioativa é o tempo que ela leva para decair à
metade. A meia-vida do carbono 14, que é utilizado para a datação de fósseis,
é de 5500 anos. Quando um organismo morre, ele para de acumular carbono
14. O carbono 14 existente na hora da morte decai com o tempo. Seja C(t)/C(0)
a fração de carbono 14 remanescente no instante t. Na datação de carbono
radioativo, os cientistas normalmente consideram que a fração remanescente
decai exponencialmente de acordo com a seguinte fórmula:

a. Utilize a meia-vida do carbono para encontrar o valor do parâmetro b; plote


a função.
b. Se 90% do carbono 14 original ainda remanesce, estime há quanto tempo o
organismo morreu.
c. Suponha que nossa estimativa de b seja da ordem de ± 1%. De que modo
esse erro afeta a estimativa da idade?
5. A têmpera é o processo de imersão de um objeto de metal quente em um ba-
nho por um tempo específico para que ele obtenha certas propriedades, como
rigidez. Uma esfera de cobre de 25 mm de diâmetro, inicialmente a 300°C, é
imersa em um banho a 0°C. A tabela seguinte fornece medições da temperatura
da esfera ao longo do tempo. Encontre uma descrição funcional desses dados.
Plote a função juntamente com os dados.
288 Introdução ao MATLAB para Engenheiros

Tempo (s) 0 1 2 3 4 5 6
Temperatura (°C) 300 150 75 35 12 5 2

6. A vida útil do rolamento de uma máquina depende da sua temperatura de


operação, como mostram os dados a seguir. Obtenha uma descrição funcional
desses dados. Plote a função juntamente com os dados. Estime a vida do rola-
mento se ele operar a 150°F.

Temperatura (°F) 100 120 140 160 180 200 220


Vida do rolamento (horas * 103) 28 21 15 11 8 6 4

7. Um determinado circuito elétrico contém um resistor e um capacitor. O capaci-


tor está inicialmente carregado de modo a produzir uma diferença de potencial
de 100 V. Quando a fonte de alimentação é desacoplada, a tensão do capacitor
decai com o tempo, como é mostrado pelos dados na tabela a seguir. Encontre
uma descrição funcional da tensão do capacitor v como uma função do tempo
t. Plote a função juntamente com os dados.

Tempo (s) 0 0,5 1 1,5 2 2,5 3 3,5 4


Tensão (V) 100 62 38 21 13 7 4 2 3

Seções 6.2 e 6.3


8. Os dados a seguir representam o tempo de secagem T de uma determinada tinta
como uma função da quantidade de um determinado aditivo A.
a. Encontre os polinômios de primeiro a quarto grau que se ajustam aos dados,
e plote cada polinômio juntamente com os dados. Determine a qualidade do
ajuste de curva para cada um calculando J, S e r2.
b. Utilize o polinômio que resulta no melhor ajuste para estimar a quantidade
de aditivo que minimiza o tempo de secagem.

A (oz) 0 1 2 3 4 5 6 7 8 9
T (min) 130 115 110 90 89 89 95 100 110 125

9.* Os dados a seguir representam a distância de parada d como uma função da


velocidade inicial v para um determinado modelo de carro. Encontre um poli-
nômio quadrático que se ajusta aos dados. Determine a qualidade do ajuste de
curva calculando J, S e r2.
Capítulo 6 ■ Construção de modelos e regressão 289

y (mi/hr) 20 30 40 50 60 70
d (ft) 45 80 130 185 250 330

10.* O número y de torções necessárias para que uma determinada barra se rom-
pa é uma função do percentual x1 e x2 de cada um dos dois elementos de
liga presentes na barra. A tabela a seguir fornece alguns dados importantes.
Utilize uma regressão linear múltipla para obter um modelo y = a0 + a1x1 +
a2x2 da relação entre o número de torções e os percentuais dos elementos de
liga. Além disso, encontre o erro percentual máximo nas previsões.

Número de torções Percentual do elemento 1 Percentual do elemento 2


y x1 x2
40 1 1
51 2 1
65 3 1
72 4 1
38 1 2
46 2 2
53 3 2
67 4 2
31 1 3
39 2 3
48 3 3
56 4 3

11. Os dados a seguir representam amostras de pressão, em libras por polegada


quadrada (psi), medidas em uma linha de combustível uma vez por segundo ao
longo de 10 segundos.

Tempo (s) Pressão (psi) Tempo (s) Pressão (psi)


1 26,1 6 30,6
2 27,0 7 31,1
3 28,2 8 31,3
4 29,0 9 31,0
5 29,8 10 30,5

a. Ajuste um polinômio de primeiro grau, um polinômio de segundo grau e um


polinômio de terceiro grau a esses dados. Plote os ajustes de curva junta-
mente com os dados.
290 Introdução ao MATLAB para Engenheiros

b. Utilize os resultados da parte a para prever a pressão em t = 11 s. Explique


qual ajuste de curva resulta na previsão mais confiável. Considere os coefi-
cientes de determinação e os resíduos de cada ajuste para fazer a sua escolha.
12. Um líquido ferve quando a sua pressão de vapor se iguala à pressão externa
que atua na superfície do líquido. Esse é o motivo de a água ferver a uma tem-
peratura mais baixa em altitudes mais altas. Essa informação é importante para
pessoas que projetam processos que utilizam líquidos em ebulição. Dados da
pressão de vapor P da água como uma função da temperatura T são fornecidos
na tabela a seguir. Sabemos da teoria que ln P é proporcional a 1/T. Obtenha
um ajuste de curva para P(T) a partir desses dados. Utilize o ajuste para estimar
a pressão de vapor a 285 e a 300 K.

T (K) P (torr)
273 4,579
278 6,543
283 9,209
288 12,788
293 17,535
289 23,756

13. A solubilidade do sal na água é uma função da temperatura da água. Sendo


S a solubilidade de NaCl (cloreto de sódio) em gramas de sal por 100 g de
água, e T a temperatura em °C, utilize os dados a seguir para obter um ajuste
de curva para S como uma função de T. Utilize o ajuste para estimar S quando
T = 25°C.

T (°C) S (g NaCl/100 g H2O)


10 35
20 35,6
30 36,25
40 36,9
50 37,5
60 38,1
70 38,8
80 39,4
90 40

14. A solubilidade do oxigênio na água é uma função da temperatura da água.


Seja S a solubilidade de O2 em milimols de O2 por litro de água. Sendo T a
temperatura em °C, utilize os seguintes dados para obter um ajuste de curva
para S como uma função de T. Utilize o ajuste para estimar S quando T = 8°C
e T = 50°C.
Capítulo 6 ■ Construção de modelos e regressão 291

T (°C) S (mmol 02 / L H2O)


5 1,95
10 1,7
15 1,55
20 1,40
25 1,30
30 1,15
35 1,05
40 1,00
45 0,95

15. A seguinte função é linear nos parâmetros a1 e a2:

y(x) = a1 + a2 ln x
Utilize a regressão por mínimos quadrados com os dados a seguir para estimar
os valores de a1 e a2. Utilize o ajuste de curva para estimar os valores de y em x
= 2,5 e x = 11.

x 1 2 3 4 5 6 7 8 9 10
y 10 14 16 18 19 20 21 22 23 23

16. Químicos e engenheiros devem ser capazes de prever as mudanças de concen-


tração química em uma reação. Um modelo utilizado para muitos processos
com um único reagente é

Taxa de mudança de concentração = - kCn


em que C é a concentração química e k é a constante da taxa. A ordem da rea-
ção é o valor do expoente n. Métodos de solução para equações diferenciais
(que são discutidos no Capítulo 9) podem mostrar que a solução para uma rea-
ção de primeira ordem (n = 1) é

C(t) = C(0)e-kt
Os seguintes dados descrevem a reação:

(CH3)3CBr + H2O → (CH3)3COH + HBr


Utilize esses dados para obter um ajuste por mínimos quadrados para estimar o
valor de k.
292 Introdução ao MATLAB para Engenheiros

Tempo t (h) C (mol de (CH3)3 CBr/L)


0 0,1039
3,15 0,0896
6,20 0,0776
10,0 0,0639
18,3 0,0353
30,8 0,0207
43,8 0,0101

17. Químicos e engenheiros devem ser capazes de prever as mudanças de concen-


tração química em uma reação. Um modelo utilizado para muitos processos
com um único reagente é

Taxa de mudança de concentração = - kCn


em que C é a concentração química e k é a constante da taxa. A ordem da rea-
ção é o valor do expoente n. Métodos de solução para equações diferenciais
(que são discutidos no Capítulo 9) podem mostrar que a solução para uma rea-
ção de primeira ordem (n = 1) é

C(t) = C(0)e-kt
e a solução para uma reação de segunda ordem (n = 2) é

Os seguintes dados (extraídos de Brown, 1994) descrevem a decomposição ga-


sosa de dióxido de nitrogênio a 300°C:

2NO2 → 2NO + O2

Tempo t (s) C (mol NO2 / L)


0 0,0100
50 0,0079
100 0,0065
200 0,0048
300 0,0038

Determine se essa é uma reação de primeira ou de segunda ordem, e estime o


valor da constante k.
18. Químicos e engenheiros devem ser capazes de prever as mudanças de concen-
tração química em uma reação. Um modelo utilizado para muitos processos
com um único reagente é
Taxa de mudança de concentração = - kCn
Capítulo 6 ■ Construção de modelos e regressão 293

em que C é a concentração química e k é a constante da taxa. A ordem da rea-


ção é o valor do expoente n. Métodos de solução para equações diferenciais
(que são discutidos no Capítulo 9) podem mostrar que a solução para uma rea-
ção de primeira ordem (n = 1) é
C(t) = C(0)e-kt
A solução para uma reação de segunda ordem (n = 2) é

e a solução para uma reação de terceira ordem (n = 3) é

Tempo t (min) C (mols de reagente/L)


5 0,3575
10 0,3010
15 0,2505
20 0,2095
25 0,1800
30 0,1500
35 0,1245
40 0,1070
45 0,0865

Os dados acima descrevem uma determinada reação. Examinando os resíduos,


determine se essa é uma reação de primeira, segunda ou terceira ordem, e esti-
me o valor da constante k.
© The McGraw-Hill Companies, Inc./ Mark Dierker, Fotógrafo.

Engenharia no
Século XXI…
Transporte energeticamente
eficiente

A
s sociedades modernas se tornaram muito dependentes de transportes à base
de gasolina e óleo diesel. Há discordância em torno de quanto tempo será
necessário para que esses recursos combustíveis sejam exauridos, mas isso
certamente acontecerá. Novos desenvolvimentos de engenharia, tanto no transporte
pessoal quanto no transporte coletivo, serão necessários para reduzir nossa depen-
dência em relação a tais combustíveis. Esses desenvolvimentos serão necessários em
diversas áreas, como projeto de motores, motores elétricos e tecnologia de baterias,
materiais leves e aerodinâmica.
Uma série de iniciativas como essas se encontra em andamento. Alguns proje-
tos têm o propósito de desenvolver um carro de seis passageiros que é um terço mais
leve e 40% mais aerodinâmico do que os carros atuais mais elegantes. Um veículo
híbrido movido a gás e a eletricidade é o mais promissor até o momento. Um motor
de combustão interna e um motor elétrico acionam as rodas. Uma célula de combus-
tível ou uma bateria é carregada por um gerador acionado pelo motor ou pela energia
recuperada durante a frenagem.
A redução do peso pode ser alcançada com a construção de uma peça única toda
em alumínio e pelo projeto melhorado do motor, do radiador e dos freios por meio da
utilização de materiais avançados, como compósitos e magnésio. Outros fabricantes
estão investigando corpos de plástico feitos a partir de material reciclado.
Ainda há muito espaço para a melhoria da eficiência, e os engenheiros de pes-
quisa e desenvolvimento nessa área continuarão ocupados por algum tempo. O MAT-
LAB é amplamente utilizado para auxiliar esses esforços com ferramentas de mode-
lagem e análise para o projeto de veículos híbridos. ■
7
Estatística, probabilidade
e interpolação

Este capítulo começa com uma introdução à estatística básica na Seção 7.1. Você
verá como obter e interpretar histogramas, que são plotagens específicas para a
exibição de resultados estatísticos. A distribuição normal, geralmente chamada de
curva em forma de sino, forma a base da maior parte da teoria de probabilidade e de
muitos métodos estatísticos. Ela é abordada na Seção 7.2. Na Seção 7.3, você verá
como incluir processos aleatórios nos seus programas de simulação. Na Seção 7.4,
verá como utilizar interpolação com tabelas de dados para estimar valores que não
estão na tabela.
Ao final deste capítulo, você deverá ser capaz de utilizar o MATLAB para:
■ Resolver problemas básicos de estatística e probabilidade.
■ Criar simulações que incorporem processos aleatórios.
■ Aplicar técnicas de interpolação.

7.1 Estatísticas e histogramas


MÉDIA Com o MATLAB você pode calcular a média, a moda (o valor que ocorre com mais
frequência) e a mediana (o valor do meio) de um conjunto de dados. Há no MATLAB
MODA as funções mean(x), mode(x) e median(x) para calcular a média, a moda e a
mediana dos dados armazenados em x, se x for um vetor. Entretanto, se x for uma
MEDIANA matriz, um vetor linha é retornado contendo a média (ou a moda, ou a mediana) de
cada coluna de x. Essas funções não exigem que os elementos de x estejam em or-
dem ascendente ou descendente.
296 Introdução ao MATLAB para Engenheiros

A maneira como os dados estão espalhados em torna da média pode ser descrita
por um histograma. Um histograma é uma plotagem da frequência de ocorrência dos
valores em um conjunto de dados versus os próprios valores. Ele é um gráfico de bar-
ras da quantidade de valores que ocorrem dentro de uma faixa, com a barra centrada
no meio da faixa.
Para plotar um histograma, você deve agrupar os dados em subfaixas, chamadas
BARRAS de barras. As escolhas da largura e do centro da barra podem mudar drasticamente a
forma do histograma. Se o número de valores no conjunto de dados for relativamente
pequeno, a largura da barra não pode ser pequena porque algumas das barras pode-
riam não conter nenhum dado, e o histograma resultante não seria capaz de ilustrar de
maneira útil a distribuição dos dados.
Para obter um histograma, primeiro ordene os dados se eles ainda não foram or-
denados (você pode utilizar a função sort nesse caso). Em seguida, escolha as largu-
ras e os centros das barras e conte o número de valores em cada barra. Utilize a função
bar para plotar um diagrama de barras do número de valores em cada barra versus
os centros das barras. A função bar(x,y) cria o diagrama de barras de y versus x.
Também há no MATLAB o comando hist para gerar um histograma. Esse
comando apresenta várias formas. Sua forma básica é hist(y), em que y é um ve-
tor de dados. Essa forma agrega os dados em dez barras igualmente espaçadas entre
o valor mínimo e o valor máximo de y. A segunda forma é hist(y,n), em que n
é um escalar definido pelo usuário que indica o número de barras. A terceira forma é
hist(y,x), em que x é um vetor definido pelo usuário que determina a localização
dos centros das barras; as larguras das barras são as distâncias entre os centros.

EXEMPLO 7.1-1 Resistência de fios à ruptura

Para garantir um controle de qualidade adequado, um fabricante de fios seleciona amos-


tras e testa a sua resistência à ruptura. Suponha que 20 amostras de fio são puxadas até
que sejam rompidas, e a força de ruptura é medida em newtons e arredondada para valo-
res inteiros. Os valores de força de ruptura registrados foram 92, 94, 93, 96, 93, 94, 95,
96, 91, 93, 95, 95, 95, 92, 93, 94, 91, 94, 92 e 93. Plote o histograma dos dados.
■ Solução
Armazene os dados no vetor y, que é mostrado no arquivo de script a seguir. Como há seis
resultados (91, 92, 93, 94, 95, 96 N), escolhemos seis barras. Entretanto, se você utilizar
hist(y,6), as barras não serão centradas em 91, 92, 93, 94, 95 e 96. Assim, utilize a
forma hist(y,x), em que x = 91:96. O arquivo de script a seguir gera o histograma
mostrado na Figura 7.1-1.
% Dados de resistência de fios à ruptura para 20 testes.
y = [92,94,93,96,93,94,95,96,91,93,...
95,95,95,92,93,94,91,94,92,93];
% Os seis resultados possíveis são 91,92,93,94,95,96.
x = 91:96;
hist(y,x),axis([90 97 0 6]),ylabel(’Frequência Absoluta’),...
xlabel(’Resistência do Fio (N)’),...
title(’Histograma de Frequência Absoluta para 20 Testes’)
Capítulo 7 ■ Estatística, probabilidade e interpolação 297

Histograma de frequência absoluta para 20 testes


6

4
Frequência absoluta

0
90 91 92 93 94 95 96 97
Resistência do fio (N)
FIGURA 7.1-1 Histograma para 20 testes de resistência de fio.

FREQUÊNCIA A frequência absoluta é número de vezes que ocorre um resultado específi-


ABSOLUTA co. Por exemplo, em 20 testes esses dados mostram que o valor 94 ocorreu 4 ve-
zes. A frequência absoluta é 3, e sua frequência relativa é 4/20, ou 20% das vezes.
FREQUÊNCIA Quando há uma grande quantidade de dados, é possível evitar a digitação de
RELATIVA
cada valor se você primeiro agregar os dados. O exemplo a seguir mostra como isso é
feito utilizando-se a função ones. Os dados a seguir foram gerados a partir do teste
de 100 fios. O número de vezes que 91, 92, 93, 94, 95 e 96 N foram medidos é 13, 15,
22, 19, 17 e 14, respectivamente.
% Dados de resistência de fios para 100 testes.
y = [91*ones(1,13),92*ones(1,15),93*ones(1,22),...
94*ones(1,19),95*ones(1,17),96*ones(1,14)];
x = 91:96;
hist(y,x),ylabel(’Frequência Absoluta’),...
xlabel(’Resistência do Fio (N)’),...
title(’Histograma de Frequência Absoluta para 100 Testes’)
O resultado aparece na Figura 7.1-2.
298 Introdução ao MATLAB para Engenheiros

Histograma de frequência absoluta para 100 testes


25

20
Frequência absoluta

15

10

0
90 91 92 93 94 95 96 97
Resistência do fio (N)
FIGURA 7.1-2 Histograma de frequência absoluta para 100 testes de fio.

A função hist, de certa forma, limitada na sua habilidade de produzir histo-


gramas úteis. A não ser que todos os valores de resultados sejam iguais aos centros
das barras (como no caso dos exemplos de resistência à ruptura de fio), o gráfico pro-
duzido pela função hist não será satisfatório. Isso ocorre quando você deseja obter
um histograma de frequência relativa. Nesses casos, você pode utilizar a função bar
para gerar o histograma. O arquivo a seguir de script gera o histograma de frequência
relativa para os 100 testes. Note que, se você for utilizar a função bar, primeiro você
precisa agregar os dados.
% Histograma de frequência relativa utilizando a função bar.
tests = 100;
y = [13,15,22,19,17,14]/tests;
x = 91:96;
bar(x,y),ylabel(’Frequência Relativa’),...
xlabel(’Resistência do Fio (N)’),...
title(Histograma de Frequência Relativa para 100 Testes’)
O resultado aparece na Figura 7.1-3.
A quarta, a quinta e a sexta formas da função hist não geram uma plotagem,
mas são utilizadas para calcular a contagem de frequência e as localizações das bar-
Capítulo 7 ■ Estatística, probabilidade e interpolação 299

Histograma de frequência relativa para 100 testes


0,25

0,2
Frequência relativa

0,15

0,1

0,05

0
90 91 92 93 94 95 96 97
Resistência do fio (N)
FIGURA 7.1-3 Histograma de frequência relativa para 100 testes de fio.

ras. A função bar pode então ser utilizada para plotar o histograma. A sintaxe da
quarta forma é [z,x] = hist(y), em que z é um vetor que contém a contagem
de frequência e x é o vetor que contém as localizações das barras. A quinta e a sexta
formas são [z,x] = hist(y,n) e [z,x] = hist(y,x). No último caso,
o vetor x de saída é o mesmo vetor x fornecido pelo usuário. O seguinte arquivo de
script mostra como a sexta forma pode ser utilizada para gerar um histograma de fre-
quência relativa para o exemplo do fio com 100 testes:
tests = 100;
y = [91*ones(1,13),92*ones(1,15),93*ones(1,22),...
94*ones(1,19),95*ones(1,17),96*ones(1,14);

x = 91:96;
[z,x] = hist(y,x);bar(x,z/tests),...
ylabel(’Frequência Relativa’),xlabel(’Resistência do Fio
(N)’),...
title(’Histograma de Frequência Relativa para 100 Testes’)
A plotagem gerada pelo arquivo M será idêntica àquela mostrada na Figura 7.1-3.
Esses comandos são resumidos na Tabela 7.1-1.
300 Introdução ao MATLAB para Engenheiros

TABELA 7.1-1 Funções de histograma


Comando Descrição
bar(x,y) Cria um diagrama de barras de y versus x.
hist(y) Agrega os dados no vetor y em 10 barras igualmente espaçadas entre os
valores mínimo e máximo de y.
hist(y,n) Agrega os dados no vetor y em n barras igualmente espaçadas entre os
valores mínimo e máximo de y.
hist(y,x) Agrega os dados no vetor y em barras cujas centros são especificados
pelo vetor x. As larguras das barras são as distâncias entre os centros.
[z,x] = hist(y) O mesmo que hist(y), mas retorna dois vetores z e x que contêm a
contagem de frequência e as localizações das barras.
[z,x] = hist(y,n) O mesmo que hist(y,n), mas retorna dois vetores z e x que contêm
a contagem de frequência e as localizações das barras.
[z,x] = hist(y,x) O mesmo que hist(y,x), mas retorna dois vetores z e x que contêm
a contagem de frequência e as localizações das barras. O vetor de saída
x é o mesmo vetor x fornecido pelo usuário.

Teste seus conhecimentos


T71.1 Em 50 testes de fio, o número de vezes em que 91, 92, 93, 94, 95 ou 96 N
foi medido foi 7, 8, 10, 6, 12 e 7, respectivamente. Obtenha os histogramas
de frequência absoluta e relativa.

A ferramenta Data Statistics


Com a ferramenta Data Statistics você pode calcular estatísticas para os dados e plo-
tá-las em um gráfico dos dados. A ferramenta é acessada a partir da janela Figure
após você plotar os dados. Clique no menu Tools e selecione Statistics. O menu
aparece como mostrado na Figura 7.1-4. Para mostrar a média da variável dependente
(y) na plotagem, clique na caixa que aparece na linha mean e na coluna Y, como é
ilustrado na figura. Então, uma linha horizontal, correspondente ao valor médio, será
inserida na plotagem. Você também pode plotar outras estatísticas; elas são mostradas
na figura. Você pode salvar as estatísticas no espaço de trabalho como uma estrutura
clicando no botão Save to Workspace. Será aberta uma caixa de diálogo que solici-
tará um nome para a estrutura de dados x e outro nome para a estrutura de dados y.

7.2 A distribuição normal


O lançamento de um dado é um exemplo de um processo cujos resultados possíveis são
um conjunto limitado de números, a saber, os inteiros de 1 a 6. Para tais processos, a
probabilidade é uma função de uma variável de valores discretos, isto é, uma variável
que pode assumir um número limitado de valores. Por exemplo, a Tabela 7.2-1 fornece as
alturas medidas de 100 homens de 20 anos de idade. As alturas foram arredondadas para
a meia polegada mais próxima, portanto, a altura é uma variável de valores discretos.
Capítulo 7 ■ Estatística, probabilidade e interpolação 301

FIGURA 7.1-4 A ferramenta Data Statistics.

TABELA 7.2-1 Dados de altura de homens com 20 anos de idade


Altura (in) Frequência Altura (in) Frequência
64 1 70 9
64,5 0 70,5 8
65 0 71 7
65,5 0 71,5 5
66 2 72 4
66,5 4 72,5 4
67 5 73 3
67,5 4 73,5 1
68 8 74 1
68,5 11 74,5 0
69 12 75 1
69,5 10

Histograma de frequência normalizado


Você pode plotar os dados como um histograma utilizando as frequências absolutas
ou relativas. Entretanto, outro histograma útil é composto por dados escalonados de
maneira que a área total sob os seus retângulos seja igual a 1. Esse histograma de
302 Introdução ao MATLAB para Engenheiros

frequência normalizado é o histograma de frequência absoluta dividido pela sua área


total. A área de cada retângulo no histograma de frequência absoluta é igual à largura
da barra multiplicada pela frequência absoluta associada àquela barra. Uma vez que
todas as barras apresentam a mesma largura, a área total é igual à largura da barra
multiplicada pela soma das frequências absolutas. O seguinte arquivo M produz o
histograma normalizado mostrado na Figura 7.2-1:
% Dados de frequência absoluta.
y_abs=[1,0,0,0,2,4,5,4,8,11,12,10,9,8,7,5,4,4,3,1,1,0,1];
binwidth = 0.5;
% Calcule os dados de frequência normalizados.
area = binwidth*sum(y_abs);
y_scaled = y_abs/area;
% Defina as barras.
bins = 64:binwidth:75;
% Plote o histograma normalizado.
bar(bins,y_scaled),...
ylabel(’Frequência Normalizada’),xlabel(’Altura (in)’)
Uma vez que a área total sob o histograma normalizado é igual a 1, a fração
de área correspondente à faixa de alturas é igual à probabilidade de que um homem
de 20 anos selecionado aleatoriamente tenha uma altura naquela faixa. Por exemplo,

0,25

0,2
Frequência normalizada

0,15

0,1

0,05

0
62 64 66 68 70 72 74 76
Altura (in)
FIGURA 7.2-1 Histograma de dados de altura normalizado.
Capítulo 7 ■ Estatística, probabilidade e interpolação 303

as alturas dos retângulos do histograma normalizado correspondentes à faixa de 67


a 69 in são 0,1, 0,08, 0,16, 0,22 e 0,24. Uma vez que a largura da barra é 0,5, a área
total correspondente a esses retângulos é (0,1 + 0,08 + 0,16 + 0,22 + 0,24)(0,5) = 0,4.
Portanto, 40% das alturas se encontram entre 67 e 69 in.
Você pode utilizar a função cumsum para calcular áreas sob o histograma
de frequências normalizado, o que equivale a calcular probabilidades. Se x for um
vetor, cumsum(x) retorna um vetor do mesmo tamanho que x, cujos elementos
são as somas dos elementos anteriores. Por exemplo, se x = [2, 5, 3, 8],
cumsum(x) = [2, 7, 10, 18]. Se A for uma matriz, cumsum(A) calcula a
soma acumulada de cada linha. O resultado é uma matriz do mesmo tamanho que A.
Após rodar o script anterior, o último elemento de cumsum(y_
scaled)*binwidth é 1, que é a área sob o histograma de frequência normaliza-
do. Para calcular a probabilidade de uma altura estar situada entre 67 e 69 in (isto é,
acima do sexto valor e até o décimo primeiro valor), digite
>>prob = cumsum(y_scaled)*binwidth;
>>prob67_69 = prob(11)-prob(6)
O resultado é prob67_69 = 0.4000, o que está de acordo com o nosso
cálculo anterior de 40%.

Aproximação contínua do histograma normalizado


Para processos que tenham um número infinito de possíveis resultados, a probabili-
dade é uma função de uma variável contínua e é plotada como uma curva e não como
retângulos. Ela se baseia no mesmo conceito de um histograma normalizado, isto é, a
FUNÇÃO
área total sob a curva é igual a 1, e a fração de área indica a probabilidade de ocorrên-
NORMAL OU cia de uma faixa específica de resultados. Uma função de probabilidade que descreve
GAUSSIANA
muitos processos é a função normal ou Gaussiana, que é mostrada na Figura 7.2-2.

1/√2␲

2
0,6065/√2␲

x
   
FIGURA 7.2-2 A forma básica da curva da distribuição normal.
304 Introdução ao MATLAB para Engenheiros

Essa função também é conhecida como a curva em forma de sino. Os resul-


NORMALMENTE
DISTRIBUÍDA
tados que podem ser descritos por essa função são ditos normalmente distribuídos.
A função de probabilidade normal é uma função de dois parâmetros; um parâmetro,
DESVIO PADRÃO , é a média dos resultados, e o outro parâmetro, , é o desvio padrão. A média 
indica onde se situa o pico da curva, e é o valor mais provável de ocorrer. A largura
VARIÂNCIA
da curva (ou espalhamento) é descrita pelo parâmetro . Às vezes, o termo variância
é utilizado para descrever o espalhamento da curva. A variância é o quadrado do
desvio padrão .
A função de probabilidade normal é descrita pela seguinte equação:

(7.2-1)
É possível mostrar que aproximadamente 68% da área se encontra entre os limi-
tes  -  … x …  + . Consequentemente, se a variável for normalmente distribuída,
há 68% de chance de uma amostra selecionada aleatoriamente situar-se dentro dos li-
mites de um desvio padrão em torno da média. Além disso, aproximadamente 96% da
área se encontra entre os limites  - 2 … x …  + 2, e 99,7% (praticamente 100%)
da área se encontra entre os limites  - 3 … x …  + 3.
As funções mean(x), var(x) e std(x) calculam a média, a variância e o
desvio padrão dos elementos do vetor x.

EXEMPLO 7.2-1 Média e desvio padrão de alturas

A análise estatística de dados de proporção humana é necessária em muitas aplicações


de engenharia. Por exemplo, projetistas de submarinos tripulados precisam saber quão
pequenos podem ser os comprimentos dos beliches sem eliminar um percentual muito
grande de potenciais tripulantes. Utilize o MATLAB para estimar a média e o desvio pa-
drão para os dados de altura dados na Tabela 7.2-1.
■ Solução
O arquivo de script é dado a seguir. Os dados fornecidos na Tabela 7.2-1 são de frequência
absoluta e estão armazenados nos vetor y_abs. Uma largura de barra de 1/2 in é utilizada
porque as alturas foram arredondadas para a meia polegada mais próxima. O vetor bins
contém as alturas em incrementos de 1/2 in.
Para calcular a média e o desvio padrão, é preciso reconstruir os dados de altura
originais (brutos) a partir dos dados de frequência absoluta. Note que, para alguns valores
de altura, a frequência absoluta é igual a zero. Por exemplo, nenhum dos 100 homens
tem uma altura de 65 in. Assim, para reconstruir os dados brutos, comece com um vetor
vazio y_raw e preencha-o com os dados obtidos a partir das frequências absolutas. O
laço for verifica se a frequência absoluta de uma barra em particular é diferente de zero.
Se for diferente de zero, o número apropriado de valores de dados é acrescentado ao ve-
tor y_raw. Se a frequência de uma barra em particular for igual a zero, o vetor y_raw é
mantido inalterado.
Capítulo 7 ■ Estatística, probabilidade e interpolação 305

Quando você rodar esse programa, descobrirá que a média é  = 69,6 in, e que o
desvio padrão é  = 1,96 in.

Se você precisar calcular as probabilidades com base na distribuição normal,


pode utilizar a função erf. A função erf(x) retorna a área à esquerda do valor t
= x e sob a curva 2e-t 
2
. Essa área, que é uma função de x, é conhecida como
FUNÇÃO a função erro e é escrita como erf(x). A probabilidade de que uma variável alea-
ERRO tória x seja menor que ou igual a b é escrita como P(x … b) se os resultados forem
normalmente distribuídos. Essa probabilidade pode ser calculada a partir da função
erro da seguinte maneira:

(7.2-2)
A probabilidade de que uma variável aleatória x não seja menor do que a e não seja maior
do que b é escrita como P(a … x … b). Ela pode ser calculada da seguinte maneira:

(7.2-3)

EXEMPLO 7.2-2 Estimação da distribuição de alturas

Utilize os resultados do Exemplo 7.2-1 para estimar quantos homens de 20 anos não são
maiores do que 68 in. Quantos se encontram dentro dos limites de 3 in em torno da média?
306 Introdução ao MATLAB para Engenheiros

■ Solução
No Exemplo 7.2-1 a média e o desvio padrão foram calculados:  = 69,6 in e  = 1,96
in. Na Tabela 7.2-1, note que poucos pontos do conjunto de dados correspondem a alturas
menores do que 68 in. Todavia, se considerarmos que as alturas são normalmente distri-
buídas, podemos utilizar a Equação (7.2-2) para estimar quantos homens são menores do
que 68 in. Utilize (7.2-2) com b = 68 in, isto é,

Para determinar quantos homens se encontram dentro dos limites de 3 in em torno da mé-
dia, utilize a Equação (7.2-3) com a =  - 3 = 66,3 e b =  + 3 = 72,3, isto é,

No MATLAB essas expressões são calculadas pelo seguinte arquivo de script:


mu = 69.3;
s = 1.96;
% Quantos homens são menores do que 68 in?
b1 = 68;
P1 = (1+erf((b1-mu)/(s*sqrt(2))))/2
% Quantos homens estão dentro dos limites de 3 in em torno
% da média?
a2 = 66.3;
b2 = 72.3;
P2 = (erf((b2-mu)/(s*sqrt(2)))-erf((a2-mu)/(s*sqrt(2))))/2
Ao rodar esse programa, você obterá os resultados P1 = 0.2536 e P2 = 0.8741.
Desse modo, estima-se que 25% dos homens com 20 anos de idade são menores do que 68
in, e que 87% estão entre 66,3 in e 72,3 in.

Teste seus conhecimentos


T7.2-1 Suponha que 10 novas medições de altura são obtidas, de modo que os se-
guintes números devem ser acrescentados à Tabela 7.2-1:

Altura (in) Dados adicionais


64.5 1
65 2
66 1
67.5 2
70 2
73 1
74 1

(a) Plote o histograma de frequências normalizado. (b) Encontre a média e


o desvio padrão. (c) Utilize a média e o desvio padrão para estimar quantos
Capítulo 7 ■ Estatística, probabilidade e interpolação 307

homens com 20 anos de idade não são maiores do que 69 in. (d) Estime
quantos homens estão entre 68 e 72 in.
(Respostas: (b) média = 69,4 in, desvio padrão = 2,14 in; (c) 43%; (d) 63%.)

Somas e diferenças de variáveis aleatórias


É possível provar que a média da soma (ou diferença) de duas variáveis aleatórias inde-
pendentes normalmente distribuídas é igual à soma (ou diferença) das suas médias, mas
a variância é sempre a soma das duas variâncias. Isto é, se x e y forem normalmente
distribuídas com médias x e y e variâncias e , se u = x + y e y = x - y, então
(7.2-4)

(7.2-5)

(7.2-6)

Essas propriedades são aplicadas em alguns dos problemas no final do capítulo.

7.3 Geração de números aleatórios


Nós muitas vezes não temos uma distribuição de probabilidade simples para descre-
ver a distribuição de resultados em muitas aplicações de engenharia. Por exemplo, a
probabilidade de que um circuito formado por muitos componentes falhe é uma fun-
ção do número e da idade dos componentes, mas muitas vezes não somos capazes de
obter uma função que descreva a probabilidade de falhas. Nesses casos, costumamos
recorrer a simulações para fazer previsões. O programa de simulação é executado
diversas vezes utilizando um conjunto aleatório de números para representar a falha
de um ou mais componentes, e os resultados são utilizados para estimar a probabi-
lidade desejada.

Números uniformemente distribuídos


Em uma sequência de números aleatórios uniformemente distribuídos, todos os
valores dentro de um determinado intervalo são igualmente prováveis de ocorrer.
A função rand do MATLAB gera números aleatórios uniformemente distribuí-
dos ao longo do intervalo [0, 1]. Digite rand para obter um único número no
intervalo [0, 1]. Digite rand novamente para gerar um número diferente, uma vez
que o algoritmo do MATLAB utilizado para a função rand requer um “estado”
para ser inicializado. O MATLAB obtém esse estado a partir do relógio da CPU
do computador. Desse modo, toda vez que a função rand for utilizada, um resul-
tado diferente será obtido. Por exemplo,
308 Introdução ao MATLAB para Engenheiros

Digite rand(n) para obter uma matriz n * n de número aleatórios uniforme-


mente distribuídos no intervalo [0, 1]. Digite rand(m,n) para obter uma matriz
m * n de números aleatórios. Por exemplo, para criar um vetor y 1 * 100 contendo
100 valores aleatórios no intervalo [0, 1], digite y = rand(1,100). Isso é equiva-
lente a utilizar a função rand 100 vezes. Ainda que haja uma simples chamada para
a função rand, o seu cálculo tem o efeito de utilizar um diferente estado para obter
cada um dos 100 números de modo que eles sejam aleatórios.
Utilize Y = rand(m,n,p,...) para gerar um arranjo multidimensional
Y com elementos aleatórios. O comando rand(size(A)) produz um arranjo de
números aleatórios com as mesmas dimensões de A.
Por exemplo, o seguinte script realiza uma escolha aleatória entre duas alterna-
tivas igualmente prováveis:
if rand < 0.5
disp(’cara’)
else
disp(’coroa’)
end
Para comparar os resultados de duas ou mais simulações, algumas vezes
você precisará gerar a mesma sequência de números aleatórios toda vez que a
simulação for rodada. Para gerar a mesma sequência, você deve utilizar o mes-
mo estado novamente. O estado corrente s do gerador de números uniforme-
mente distribuídos pode ser obtido digitando-se s = rand(’twister’).
Esse comando retorna um vetor que contém o estado corrente do gerador. Para
definir o estado do gerador como s, digite rand(’twister’,s). O comando
rand(’twister’,0) redefine o gerador com o seu estado inicial. O comando
rand(’twister’,j), para o inteiro j, redefine o gerador com o estado j.
O comando rand(’twister’,sum(100*clock)) redefine o gerador com
um estado diferente toda vez que ele for executado. A Tabela 7.3-1 resume essas
funções.
O nome ’twister’ é referente ao algoritmo específico utilizado pelo MAT-
LAB para gerar números aleatórios. No MATLAB Versão 4, ’seed’ era utilizado
em vez de ’twister’. Nas Versões 5 a 7.3, ’state’ era utilizado. Nas Versões
7.4 e nas mais recentes, ’twister’ é utilizado. A sessão seguinte mostra como
obter a mesma sequência toda vez que a função rand for chamada:
Capítulo 7 ■ Estatística, probabilidade e interpolação 309

TABELA 7.3-1 Funções de números aleatórios


Comando Descrição
rand Gera um único número aleatório uniformemente distribuído entre
0 e 1.
rand(n) Gera uma matriz n * n contendo números aleatórios uniformemente
distribuídos entre 0 e 1.
rand(m,n) Gera uma matriz m * n contendo números aleatórios uniformemente
distribuídos entre 0 e 1.
s = rand(’state’) Retorna um vetor s contendo o estado corrente do gerador
uniformemente distribuído.
rand(’twister’,s) Define como s o estado do gerador uniformemente distribuído.
rand(’twister’,0) Redefine o gerador uniformemente distribuído com o seu estado
inicial.
rand(’twister’,j) Redefine o gerador uniformemente distribuído com o estado j.
rand(’twister’,sum(100*clock)) Redefine o gerador uniformemente distribuído com um estado
diferente toda vez que ele for executado.
randn Gera um único número aleatório normalmente distribuído com
média 0 e desvio padrão 1.
randn(n) Gera uma matriz n * n contendo números aleatórios normalmente
distribuídos com média 0 e desvio padrão 1.
randn(m,n) Gera uma matriz m * n contendo números aleatórios normalmente
distribuídos com média 0 e desvio padrão 1.
s = randn(’state’) Igual a rand(’state’), mas para o gerador normalmente
distribuído.
randn(’state’,s) Igual a rand(’state’,s), mas para o gerador normalmente
distribuído.
randn(’state’,0) Igual a rand(’state’,0), mas para o gerador normalmente
distribuído.
randn(’state’,j) Igual a rand(’state’,j), mas para o gerador normalmente
distribuído.
randn(’state’,sum(100*clock)) Igual a rand(’state’,sum(100*clock)), mas para o
gerador normalmente distribuído.
randperm(n) Gera uma permutação aleatória dos inteiros de 1 a n.

Você não precisa começar com o estado inicial para gerar a mesma sequência. Para
mostrar isso, dê continuidade à sessão acima da seguinte maneira:
310 Introdução ao MATLAB para Engenheiros

Você pode utilizar a função rand para gerar números aleatórios em um inter-
valo diferente de [0, 1]. Por exemplo, para gerar valores no intervalo [2, 10], gere um
número aleatório entre 0 e 1, multiplique-o por 8 (a diferença entre os limites superior
e inferior) e adicione o limite inferior (2). O resultado é um valor que é uniformemen-
te distribuído no intervalo [2, 10]. A fórmula geral para produzir um número aleatório
uniformemente distribuído y no intervalo [a, b] é

y = (b - a)x + a (7.3-1)
em que x é um número aleatório uniformemente distribuído no intervalo [0, 1]. Por
exemplo, para gerar um vetor y contendo 1000 números aleatórios uniformemente
distribuídos no intervalo [2, 10], você deve digitar y = 8*rand(1,1000) + 2.
Você pode verificar os resultados com as funções mean, min e max. Você deve obter
valores próximos de 6, 2 e 10, respectivamente.
Você pode utilizar a função rand para gerar resultados aleatórios de jogos que
envolvam dados, por exemplo, mas você deve utilizá-la para criar inteiros. Uma ma-
neira mais fácil é utilizar a função randperm(n), a qual gera uma permutação alea-
tória de inteiros de 1 a n. Por exemplo, randperm(6) pode gerar o vetor [3 2 6
4 1 5], ou alguma outra permutação dos números de 1 a 6. Note que randperm
chama a função rand e, portanto, altera o estado do gerador.
Com twister você controla o estado interno do fluxo de números aleatórios
utilizado por rand e randn. Tendo começado com o MATLAB Versão 7.7, a utili-
zação de twister ainda é suportada para compatibilidade com versões anteriores,
mas vai ser interrompida futuramente. Para as Versões 7.7 e outras mais recentes,
você pode gerar o fluxo de números aleatórios utilizando Randstream, que é um
tópico avançado. Veja a documentação do MATLAB.

Números aleatórios normalmente distribuídos


Em uma sequência de números aleatórios normalmente distribuídos, os valores pró-
ximos da média são mais prováveis de ocorrer. Observe que os resultados de muitos
processos podem ser descritos pela distribuição normal. Apesar de uma variável alea-
tória uniformemente distribuída ter os limites superior e inferior definidos, não ocorre
o mesmo com uma variável aleatória normalmente distribuída.
A função randn do MATLAB gera um único número aleatório que é normal-
mente distribuído com média igual a 0 e desvio padrão igual a 1. Digite randn(n)
para obter uma matriz n * n de tais números. Digite randn(m,n) para obter uma
matriz m * n de números aleatórios.
As funções para recuperar e especificar o estado do gerador de números alea-
tórios normalmente distribuídos são idênticas àquelas para o gerador uniformemente
distribuído, exceto pelo fato de que randn(...) substitui rand(...) na sintaxe
e ’state’ é utilizado no lugar de ’twister’. Essas funções são resumidas na
Tabela 7.3-1.
Você pode gerar uma sequência de números normalmente distribuídos com
média  e desvio padrão  a partir de um sequência normalmente distribuída com
Capítulo 7 ■ Estatística, probabilidade e interpolação 311

média 0 e desvio padrão 1. Para tanto, multiplique os valores por  e adicione  a


cada resultado. Assim, se x for um número aleatório com média 0 e desvio padrão 1,
utilize a seguinte equação para gerar um novo número aleatório y com desvio padrão
 e média :

y = x +  (7.3-2)
Por exemplo, para gerar um vetor y que contenha 2000 números aleatórios nor-
malmente distribuídos com média igual a 5 e desvio padrão igual a 3, digite
y = 3*randn(1,2000) + 5. Você pode verificar os resultados com as funções
mean e std. Você deve obter resultados próximos de 5 e 3, respectivamente.

Teste seus conhecimentos


T7.3-1 Utilize o MATLAB para gerar um vetor y que contenha 1800 número alea-
tórios normalmente distribuídos com média igual a 7 e desvio padrão igual
a 10. Verifique seus resultados com as funções mean e std. Por que você
não pode utilizar as funções min e max para verificar seus resultados?

Funções de variáveis aleatórias Se y e x forem linearmente relacionadas de acordo


com

y = bx + c (7.3-3)
e se x for normalmente distribuída com média x e desvio padrão x, é possível mos-
trar que a média e o desvio padrão de y são dados por

y = bx + c (7.3-4)

y = |b|x (7.3-5)
Todavia, é fácil ver que as médias e os desvios padrão não se combinam de maneira
direta quando as variáveis são relacionadas por uma função não linear. Por exemplo, se
x for normalmente distribuída com média igual a zero, e se y = x2, é fácil ver que a mé-
dia de y não é igual a 0, mas é positiva. Além disso, y não é normalmente distribuída.
Alguns métodos avançados estão disponíveis para derivar uma fórmula para
a média e para a variância de y = f(x), mas, para nossos propósitos, a maneira mais
simples é utilizar uma simulação de números aleatórios.
Foi mostrado na seção anterior que a média da soma (ou diferença) de duas
variáveis aleatórias independentes normalmente distribuídas é igual à soma (ou di-
ferença) das duas médias, mas a variância é sempre a soma das duas variâncias. En-
tretanto, se z for uma função não linear de x e y, então a média e o desvio padrão de
z não podem ser encontrados com uma fórmula simples. Na verdade, z não será nem
mesmo normalmente distribuída. Esse resultado é ilustrado pelo exemplo a seguir.
312 Introdução ao MATLAB para Engenheiros

Lâmina

y


FIGURA 7.3-1 Dimensões de um corte triangular.

EXEMPLO 7.3-1 Análise estatística e tolerâncias de fabricação

Suponha que você deva cortar um pedaço triangular do canto de uma lâmina quadrada
medindo as distâncias x e y em relação ao canto (ver Figura 7.3-1). O valor desejado de x
é 10 in, e o valor desejado de  é 20°. Portanto, y = 3,64 in. Sabe-se que as medições de x
e y são normalmente distribuídas com médias iguais a 10 e 3,64, respectivamente, e com
desvio padrão igual a 0,05 in. Determine o desvio padrão de  e plote o histograma de
frequência relativa para .
■ Solução
A partir da Figura 7.3-1, vemos que o ângulo  é determinado por  = tan-1 (y/x). Pode-
mos encontrar a distribuição estatística de  criando variáveis aleatórias x e y que tenham
médias iguais a 10 e 3,64, respectivamente, e desvio padrão igual a 0,05. A variável alea-

0,14

0,12

0,1
Frequência relativa

0,08

0,06

0,04

0,02

0
18,5 19 19,5 20 20,5 21 21,5
Theta (graus)
FIGURA 7.3-2 Histograma normalizado para o ângulo .
Capítulo 7 ■ Estatística, probabilidade e interpolação 313

tória  é então encontrada calculando-se  = tan-1 (y/x) para cada par aleatório (x,y). O
seguinte arquivo de script mostra esse procedimento:
s = 0.05; % desvio padrão de x e y
n = 8000; % número de simulações aleatórias
x = 10 + s*randn(1,n);
y = 3.64 + s*randn(1,n);
theta = (180/pi)*atan(y./x);
mean_theta = mean(theta)
sigma_theta = std(theta)
xp = 19:0.1:21;
z = hist(theta,xp);
yp = z/n;
bar(xp,yp),xlabel(’Theta (graus)’),...
ylabel(’Frequência Relativa’)
A escolha de 8000 simulações foi um compromisso entre a precisão e a quantidade
de tempo necessária para realizar os cálculos. Você dever tentar diferentes valores
de n e comparar os resultados. O resultado produziu uma média de 19,9993° para 
com um desvio padrão de 0,2730°. O histograma é mostrado na Figura 7.3-2. Ape-
sar da semelhança visual com uma distribuição normal, os valores de  não são nor-
malmente distribuídos. A partir do histograma é possível calcular que aproximada-
mente 65% dos valores de  se encontram entre 19,8 e 20,2. Essa faixa corresponde
a um desvio padrão de 0,2°, não 0,273°, como foi calculado a partir da simulação.
Desse modo, a curva não é uma distribuição normal.
Esse exemplo mostra que a interação de duas ou mais variáveis normalmente dis-
tribuídas não produz um resultado que é normalmente distribuído. Em geral, o resultado
é normalmente distribuído se, e somente se, ele for uma combinação linear das variáveis.

7.4 Interporlação
Dados pareados podem representar uma relação de causa e efeito, ou uma relação
entrada-saída, como a corrente que passa por um resistor devido à aplicação de uma
tensão, ou uma história temporal, como a temperatura de um objeto em função do
tempo. Dados pareados também podem representar um perfil, como o perfil de uma
estrada (que mostra a altura da estrada ao longo do seu comprimento). Em algumas
aplicações é desejável estimar um valor de variável entre dois pontos do conjunto de
dados. Esse processo é chamado de interpolação. Em outros casos, podemos estimar
o valor de uma variável fora da faixa dos dados fornecidos. Esse processo é chamado
de extrapolação. É mais fácil realizar interpolação e extrapolação quando utilizamos
plotagens dos dados. Tais plotagens, que podem até utilizar eixos logarítmicos, fre-
quentemente auxiliam na descoberta da descrição funcional dos dados.
Suponha que tenhamos as seguintes medições de temperatura, obtidas uma a cada
hora, começando a partir das 7h. As medições às 8h e às 10h. foram perdidas por algu-
ma razão, possivelmente por causa de mal funcionamento do equipamento.
Hora 7h 9h 11h 12 h (meio-dia)
Temperatura (°F) 49 57 71 75
314 Introdução ao MATLAB para Engenheiros

Medições de temperatura em um único local


80

75

70
Temperatura (graus F)

65

60

55

50

45
7 7,5 8 8,5 9 9,5 10 10,5 11 11,5 12
Tempo (horas)
FIGURA 7.4-1 Uma plotagem de dados de temperatura em função do tempo.

Uma plotagem desses dados é mostrada na Figura 7.4-1 com os pontos conecta-
dos por linhas tracejadas. Se precisarmos estimar a temperatura às 10h, podemos ler o
valor da linha tracejada que conecta os pontos correspondentes às 9h e às 11h. Desse
modo, a partir da plotagem, estimamos que a temperatura às 8h é de 53°F e que a tem-
peratura às 10h é de 64°F. Acabamos de realizar uma interpolação linear para obter
uma estimativa dos dados que foram perdidos. A interpolação linear é assim chamada
porque ela é equivalente a conectar os pontos com uma função linear (uma linha reta).
É claro que não temos razão para acreditar que a temperatura segue as linhas
retas na plotagem, e a nossa estimativa de 64°F provavelmente está incorreta, mas ela
pode estar próxima o suficiente do valor correto para ser útil. Utilizar linhas retas para
conectar os pontos é a forma mais simples de interpolação. Outra função deveria ser
utilizada se tivéssemos uma boa razão para tanto. Mais adiante nesta seção, utilizare-
mos funções polinomiais para realizar a interpolação.
A interpolação linear no MATLAB é obtida com as funções interp1 e in-
terp2. Suponha que x seja um vetor que contém os dados da variável independente
e que y é o vetor que contém os dados da variável dependente. Se x_int for um
vetor que contém o valor ou os valores da variável independente para os quais dese-
jamos estimar a variável dependente, então o comando interp1(x,y,x_int)
produz um vetor do mesmo tamanho que x_int, o qual contém os valores interpo-
lados de y que correspondem a x_int. Por exemplo, a sessão a seguir produz uma
estimativa de temperaturas às 8h e às 10h. a partir dos dados anteriores. Os vetores x
e y contêm os tempos e as temperaturas, respectivamente.
Capítulo 7 ■ Estatística, probabilidade e interpolação 315

Você deve ter em mente duas restrições quando utilizar a função interp1. Os
valores da variável independente no vetor x devem estar em ordem crescente, e os
valores no vetor de interpolação x_int devem estar dentro da faixa dos valores em
x. Desse modo, não podemos utilizar a função interp1 para estimar a temperatura
às 6h, por exemplo.
A função interp1 pode ser utilizada para interpolação em uma tabela de va-
lores definindo-se y como uma matriz, e não como um vetor. Por exemplo, suponha
que agora nós temos medições de temperatura em três locais e que as medições às 8h
e às 10h. foram perdidas em todos eles. Os dados são os seguintes:

Temperatura (°F)
Hora Local 1 Local 2 Local 3
7h 49 52 54
9h 57 60 61
11h 71 73 75
12 horas (meio-dia) 75 79 81

Definimos x como antes, mas agora definimos y como uma matriz cujas três colunas
contêm a segunda, a terceira e a quarta colunas da tabela anterior. A sessão a seguir
produz uma estimativa das temperaturas às 8h e às 10h. em cada local.

Assim, as temperaturas estimadas às 8h em cada local são 53, 56 e 57,5°F, respec-


tivamente. Às 10h, as temperaturas estimadas são 64, 65,5 e 68°F. A partir desse
exemplo, vemos que se o primeiro argumento x na função interp1(x,y,x_int)
for um vetor e o segundo argumento y for uma matriz, então a função interpola entre
as linhas de y e calcula uma matriz que tenha o mesmo número de colunas que y e o
número de linhas igual ao número de valores em x_int.
316 Introdução ao MATLAB para Engenheiros

Note que não precisamos definir dois vetores separados x e y. Em vez disso,
podemos definir uma única matriz que contenha toda a tabela. Por exemplo, definido
a matriz temp como sendo a tabela anterior, a sessão será a seguinte:

Interpolação bidimensional
Agora suponha que nós temos medições de temperatura em quatro locais às 7
A.M. Esses locais são os vértices de um retângulo com 1 mi de largura e 2 mi
de comprimento. Atribuindo ao primeiro local a origem (0, 0) de um sistema de
coordenadas, as coordenadas dos outros locais são (1, 0), (1, 2) e (0, 2); veja a
Figura 7.4-2. As medições de temperatura são mostradas na figura. A tempera-
tura é uma função de duas variáveis, as coordenadas x e y. Há no MATLAB a
função interp2 que interpola funções de duas variáveis. Se a função for escrita
como z = f(x, y), e quisermos estimar o valor de z para x = xi e y = yi, a sintaxe é
interp2(x,y,z,x_i,y_i).
Suponha que queiramos estimar a temperatura no ponto cujas coordenadas são
(0,6, 1,5). Insira as coordenadas x no vetor x e as coordenadas y no vetor y. Em segui-
da, insira as temperaturas em uma matriz z de modo que cada linha corresponda a um
valor de y e cada coluna corresponda a um valor de x. A sessão que faz isso é a seguinte:

(0,0) (1,0)
x
49° 54°

(0,6, 1,5)

53° 57°

(0,2) (1,2)

y
FIGURA 7.4-2 Medições de temperatura em quatro locais.
Capítulo 7 ■ Estatística, probabilidade e interpolação 317

Desse modo, a temperatura estimada é 54,55°F.


A sintaxe das funções interp1 e interp2 é resumida na Tabela 7.4-1. O
MATLAB também fornece a função interpn para a interpolação de arranjos mul-
tidimensionais.

TABELA 7.4-1 Funções de interpolação linear


Comando Descrição
y_int=interp1(x,y,x_int) Utilizada para interpolar linearmente uma função de
uma variável: y = f(x). Retorna um vetor linearmente
interpolado y_int nos valores especificados x_
int, utilizando os dados armazenados em x e y.
z_int=interp2(x,y,z,x_int,y_int) Utilizada para interpolar linearmente uma função
de duas variáveis: y = f(x, y). Retorna um vetor
linearmente interpolado z_int nos valores
especificados x_int e y_int, utilizando os dados
armazenados em x, y e z.

Interpolação com splines cúbicas


Polinômios de ordem mais alta podem exibir comportamento indesejado entre os pontos
do conjunto de dados, o que os torna inadequados para realizar uma interpolação. Um
procedimento alternativo largamente utilizado é a realização de um ajuste utilizando um
polinômio de ordem mais baixa entre cada par de pontos de dados adjacentes. Esse méto-
do é chamado de interpolação por splines, e recebe esse nome por causa das estrias utili-
zadas por ilustradores para desenhar uma curva suave ao longo de um conjunto de pontos.
A interpolação por splines obtém um ajuste exato que também é suave. O pro-
cedimento mais comum utiliza polinômios cúbicos, chamados de splines cúbicas, e
é chamado, portanto, de interpolação por splines cúbicas. Se os dados forem forne-
cidos como n pares de valores (x, y), então n - 1 polinômios cúbicos são utilizados.
Cada um tem a forma

yi(x) = ai(x - xi)3 + bi(x - xi)2 + ci(x - xi) + di


para xi … x … xi+1 e i = 1, 2, . . ., n - 1. Os coeficientes ai, bi, ci e di para cada polinômio
são determinados de modo que três condições sejam satisfeitas para cada polinômio:
1. O polinômio deve passar exatamente pelos pontos em xi e xi+1.
2. As inclinações de polinômios adjacentes devem ser iguais no seu ponto em
comum.
3. As curvaturas de polinômios adjacentes devem ser iguais no seu ponto em comum.
318 Introdução ao MATLAB para Engenheiros

Por exemplo, um conjunto de splines cúbicas para os dados de temperatura forneci-


dos anteriormente é apresentado a seguir (y representa os valores de temperatura, e x
representa os instantes de tempo em horas). Os dados são repetidos aqui.

x 7 9 11 12
y 49 57 71 75

Veremos brevemente como utilizar o MATLAB para obter esses polinômios. Para 7
… x … 9,

y1(x) = -0,35(x - 7)3 + 2,85(x - 7)2 - 0,3(x - 7) + 49


Para 9 … x … 11,
y2(x) = -0,35(x - 9)3 + 0,75(x - 9)2 + 6,9(x - 9) + 57
Para 11 … x … 12,
y3(x) = -0,35(x - 11)3 - 1,35(x - 11)2 + 5,7(x - 11) + 71
O MATLAB fornece o comando spline para a obtenção de uma interpolação por
splines cúbicas. Sua sintaxe é y_int = spline(x,y,x_int), em que x e y são
vetores que contêm os dados e x_int é um vetor que contém os valores da variável inde-
pendente x para os quais desejamos estimar a variável dependente y. O resultado y_int
é um vetor de mesmo tamanho que o vetor x_int, o qual contêm os valores interpolados
de y correspondentes a x_int. O ajuste por splines pode ser plotado utilizando-se os
vetores x_int e y_int. Por exemplo, a seguinte sessão produz e plota um ajuste por
splines cúbicas aos dados anteriores, utilizando um incremento de 0,01 nos valores de x:
>>x = [7,9,11,12];
>>y = [49,57,71,75];
>>x_int = 7:0.01:12;
>>y_int = spline(x,y,x_int);
>>plot(x,y,’o’,x,y,’— —’,x_int,y_int),...
xlabel(’Tempo (horas)’),ylabel(’Temperatura (graus F)’), ...
title(’Medições em um Único Local’), ...
axis([7 12 45 80])
A plotagem é mostrada na Figura 7.4-3. As linhas tracejadas representam a in-
terpolação linear, e a curva sólida representa a spline cúbica. Se avaliarmos o polinô-
mio spline em x = 8, obtemos y(8) = 51,2°F. Essa estimativa é diferente da estimativa
de 53°F obtida a partir da interpolação linear. É impossível dizer qual estimativa é
mais precisa sem um conhecimento melhor da dinâmica de temperatura.
Podemos obter uma estimativa mais rapidamente utilizando a seguinte variação
da função interp1:
y_est = interp1(x,y,x_est,’spline’)
Nessa forma, a função retorna um vetor coluna y_est que contém os valores estima-
dos de y que correspondem aos valores de x especificados no vetor x_est, utilizando
interpolação por splines cúbicas.
Capítulo 7 ■ Estatística, probabilidade e interpolação 319

Medições em um Único Local


80

75

70
Temperatura (graus F)

65

60

55

50

45
7 7,5 8 8,5 9 9,5 10 10,5 11 11,5 12
Tempo (horas)
FIGURA 7.4-3 Interpolação linear e interpolação por splines cúbicas de dados de temperatura.

Em algumas aplicações é útil conhecer os coeficientes polinomiais, mas não


podemos obter os coeficientes da spline a partir da função interp1. Todavia, pode-
mos utilizar a forma
[breaks, coeffs, m, n] = unmkpp(spline(x,y))
para obter os coeficientes dos polinômios cúbicos. O vetor breaks contém os va-
lores de x, e a matriz coeffs é uma matriz m * n que contêm os coeficientes dos
polinômios. Os escalares m e n representam as dimensões da matriz coeffs; m é o
número de polinômios, e n é o número de coeficientes para cada polinômio (se pos-
sível, o MATLAB ajustará um polinômio de ordem mais baixa, de maneira que pode
haver menos do que quatro coeficientes). Por exemplo, utilizando os mesmos dados,
a seguinte sessão produz os coeficientes dos polinômios dados anteriormente:
320 Introdução ao MATLAB para Engenheiros

A primeira linha da matriz coeffs contém os coeficientes do primeiro poli-


nômio, e assim por diante. Essas funções são resumidas na Tabela 7.4-2. A interface
Basic Fitting, que está disponível no menu Tools da janela Figure, pode ser utilizada
para a interpolação por splines cúbicas. Veja na Seção 6.3 as instruções de como uti-
lizar essa interface.
Como outro exemplo de interpolação, considere 10 pontos igualmente espaça-
dos gerados pela função y = 1/(3 - 3x + x2) ao longo da faixa 0 … x … 4. O gráfico
superior na Figura 7.4-4 mostra os resultados de se ajustar um polinômio cúbico e
um polinômio de oitava ordem aos dados. Claramente, o polinômio cúbico não é ade-
quado para a interpolação. Conforme aumentamos a ordem do polinômio ajustado,
descobrimos que o polinômio não é capaz de passar por todos os pontos se a ordem
for menor de que 7. Contudo, há dois problemas com o polinômio de oitava ordem:
não devemos utilizá-lo para interpolar ao longo do intervalo 0 < x < 0,5, e seus coe-
ficientes devem ser armazenados com uma precisão alta caso venhamos a utilizá-lo
para realizar a interpolação. O gráfico inferior na Figura 7.4-4 mostra os resultados de
se ajustar uma spline cúbica, que é claramente uma melhor escolha neste caso.

Interpolação com polinômios de hermite


A função pchip utiliza polinômios de Hermite contínuos por partes para interpolação.
Sua sintaxe é idêntica à da função spline. Com pchip as curvaturas nos pontos do
conjunto de dados são calculadas para preservar a “forma” dos dados e para “respeitar”
a monotonicidade. Isto é, a função ajustada será monotônica nos intervalos em que os
dados são monotônicos e terá um extremo local nos intervalos em que os dados apre-
sentam um extremo local. As diferenças entre as duas funções são as seguintes:

TABELA 7.4-2 Funções de interpolação polinomial


Comando Descrição
y_est = interp1(x,y,x_est, method) Retorna um vetor coluna y_est que contém os valores
estimados de y que correspondem aos valores de x
especificados no vetor x_est, utilizando a interpolação
especificada por method. As opções para method são
‘nearest’, ‘linear’, ‘spline’, ‘pchip’ e ‘cubic’.
y_int = spline(x,y,x_int) Calcula uma interpolação por splines cúbicas em que x e y
são vetores que contêm os dados e x_int é um vetor que
contém os valores da variável independente x para os quais
desejamos estimar a variável dependente y. O resultado
y_int é um vetor que tem o mesmo tamanho que o vetor x_
int e que contém os valores de y correspondentes a x_int.
y_int = pchip(x,y,x_int) Similar a spline, mas utiliza polinômios de Hermite
cúbicos na interpolação a fim de preservar a forma e respeitar
a monotonicidade.
[breaks, coeffs, m, n] = Calcula os coeficientes dos polinômios cúbicos para os dados
unmkpp(spline(x,y)) em x e y. O vetor breaks contém os valores de x, e a matriz
coeffs é uma matriz m * n que contém os coeficientes dos
polinômios. Os escalares m e n representam as dimensões da
matriz coeffs; m é o número de polinômios e n é o número
de coeficientes para cada polinômio.
Capítulo 7 ■ Estatística, probabilidade e interpolação 321

1,4
dados
1,2 cúbica
1 oitava ordem

0,8
y

0,6

0,4

0,2

0
0 0,5 1 1,5 2 2,5 3 3,5 4
x

1,4
dados
1,2 spline
1

0,8
y

0,6

0,4

0,2

0
0 0,5 1 1,5 2 2,5 3 3,5 4
x

FIGURA 7.4-4 Gráfico superior: interpolação com um polinômio cúbico e com um polinômio
de oitava ordem. Gráfico inferior: interpolação com uma spline cúbica.

■ As derivadas de segunda ordem são contínuas com spline, mas podem ser
descontínuas com pchip. Portanto, spline pode gerar uma curva mais suave.
■ Assim, a função spline é mais precisa se os dados forem “mais suaves”.
■ Não há sobressinais e há pouca oscilação nas funções produzidas por pchip,
mesmo se os dados não forem suaves.
Considere os dados x = [0, 1, 2, 3, 4, 5] e y = [0, -10, 60, 40, 41, 47]. O gráfico
superior na Figura 7.4-5 mostra os resultados de se ajustar um polinômio de quinta
ordem e uma spline cúbica aos dados. Claramente, o polinômio de quinta ordem é
menos adequado para a interpolação por causa das grandes excursões que ele realiza,
especialmente ao longo das faixas 0 < x < 1 e 4 < x < 5. Essas excursões são frequen-
temente vistas quando se utilizam polinômios de alta ordem. Aqui, a spline cúbica é
mais útil. O gráfico inferior na Figura 7.4-5 compara os resultados de um ajuste por
spline cúbica com um ajuste por parte com polinômios de Hermite contínuos (utili-
zando pchip), que é claramente uma melhor escolha aqui.
O MATLAB fornece muitas outras funções para suportar interpolação de dados
tridimensionais. Veja griddata, griddata3, griddatan, interp3 e in-
terpn no Sistema de Ajuda do MATLAB.
322 Introdução ao MATLAB para Engenheiros

80

60

40

20
y

0
dados
20 quinta ordem
spline
40

60
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
x

80

60

40

20
y

0 dados
pchip
20 spline

40
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
x

FIGURA 7.4-5 Gráfico superior: interpolação com um polinômio de quinta ordem e com uma
spline cúbica. Gráfico inferior: interpolação por partes com polinômios de Hermite contínuos
(pchip) e com uma spline cúbica.

7.5 Resumo
Este capítulo introduziu funções do MATLAB bastante utilizadas e importantes em
estatística e análise de dados. A Seção 7.1 apresenta uma introdução à estatística
básica e probabilidade, incluindo histogramas, que são plotagens especializadas para
exibir resultados estatísticos. A distribuição normal, que forma a base de muitos mé-
todos estatísticos, é abordada na Seção 7.2. A Seção 7.3 aborda geradores de números
aleatórios e sua utilização em programas de simulação. A Seção 7.4 aborda métodos
de interpolação, incluindo interpolação linear e interpolação por splines.
Agora que você finalizou este capítulo, você deve ser capaz de utilizar o MAT-
LAB para:
■ Resolver problemas básicos de estatística e probabilidade.
■ Criar simulações que incorporem processos aleatórios.
■ Aplicar interpolação a dados.
Capítulo 7 ■ Estatística, probabilidade e interpolação 323

Termos-chave
Barras, 296 Histograma, 295
Desvio padrão, 304 Média, 295
Frequência absoluta, 297 Mediana, 295
Frequência relativa, 297 Moda, 295
Função erro, 305 Normalmente distribuído, 304
Função gaussiana, 303 Splines cúbicas, 317
Função normal ou gaussiana, 303 Uniformemente distribuído, 307
Histograma de frequência normalizado, 301 Variância, 304

Problemas
Respostas aos problemas marcados com um asterisco são dadas no final do livro.

Seção 7.1
1. A lista seguinte fornece a distância percorrida em milhas por galão para 22
carros do mesmo modelo. Plote o histograma de frequência absoluta e o histo-
grama de frequência relativa.

2. Trinta peças de estrutura de madeira com dimensões iguais foram submetidas a


uma força lateral crescente até quebrarem. A força necessária para quebrá-las,
medida em libras, é dada na lista a seguir. Plote o histograma de frequência ab-
soluta. Experimente barras com largura de 50, 100 e 200 lb. Qual delas resulta
no histograma mais significativo? Tente encontrar um valor melhor para a lar-
gura da barra.

3. A lista a seguir fornece a força de ruptura medida em newtons para uma amos-
tra de 60 pedaços de um determinado tipo de corda. Plote o histograma de fre-
quência absoluta. Experimente barras com largura de 10, 30 e 50 N. Qual delas
resulta no histograma mais significativo? Tente encontrar um valor melhor para
a largura da barra.
324 Introdução ao MATLAB para Engenheiros

Seção 7.2
4. Para os dados fornecidos no Problema 1:
a. Plote o histograma de frequência normalizado.
b. Calcule a média e o desvio padrão e utilize-os para estimar os limites in-
ferior e superior de distância percorrida correspondentes a 68% de carros
desse modelo. Compare esses limites com os limites dos dados.
5. Para os dados fornecidos no Problema 2:
a. Plote o histograma de frequência normalizado.
b. Calcule a média e o desvio padrão e utilize-os para estimar os limites infe-
rior e superior de força de ruptura correspondentes a 68 e 96% de tais peças
de madeira. Compare esses limites com os limites dos dados.
6. Para os dados fornecidos no Problema 3:
a. Plote o histograma de frequência normalizado.
b. Calcule a média e o desvio padrão e utilize-os para estimar os limites infe-
rior e superior de resistência correspondentes a 68 e 96% de pedaços desse
tipo de corda. Compare esses limites com os limites dos dados.
7.* A análise de dados de resistência à ruptura de um determinado tecido mostra que
eles são normalmente distribuídos com média igual a 300 lb e variância igual a 9.
a. Estime a porcentagem de amostras de tecido que terá uma resistência à rup-
tura não menor do que 294 lb.
b. Estime a porcentagem de amostras de tecido que terá uma resistência à rup-
tura não menor do que 297 lb e não maior do que 303 lb.
8. Dados de registro de serviço mostram que o tempo para reparar uma determi-
nada máquina é normalmente distribuído com uma média de 65 min e um des-
vio padrão de 5 min. Estime com que frequência serão necessários mais do que
75 min para reparar uma máquina.
9. Medições de um número de conectores mostram que o diâmetro primitivo da
rosca é normalmente distribuído com média de 8,007 mm e desvio padrão de
0,005 mm. As especificações de projeto requerem que o diâmetro primitivo
seja de 8 ± 0,01 mm. Estime a porcentagem de conectores que se encontra den-
tro dessa faixa de tolerância.
10. Em um determinado produto, deseja-se que um eixo seja inserido em um
rolamento. Medições mostram que o diâmetro d1 do orifício cilíndrico no ro-
lamento é normalmente distribuído com média igual a 3 cm e variância igual
a 0,0064. O diâmetro d2 do eixo é normalmente distribuído com média igual a
2,96 cm e variância igual a 0,0036.
a. Calcule a média e a variância da folga c = d1 - d2.
b. Encontre a probabilidade de que um determinado eixo não se ajuste ao rola-
mento. (Dica: encontre a probabilidade de a folga ser negativa.)
11.* Um palete de transporte suporta 10 caixas. Cada caixa contém 300 peças de
diferentes tipos. O peso da peça é normalmente distribuído com média igual a
1 lb e desvio padrão igual a 0,2 lb.
a. Calcule a média e o desvio padrão do peso do palete.
b. Calcule a probabilidade de que o peso do palete exceda 3015 lb.
Capítulo 7 ■ Estatística, probabilidade e interpolação 325

12. Um determinado produto é montado concatenando-se três componentes em


série. Os comprimentos são L1, L2 e L3. Cada componente é fabricado em uma
máquina diferente, portanto, as variações aleatórias nos seus comprimentos são
independentes entre si. Os comprimentos são normalmente distribuídos com mé-
dias de 1, 2 e 1,5 ft e variâncias de 0,00014, 0,0002 e 0,0003, respectivamente.
a. Calcule a média e a variância do comprimento do produto montado.
b. Estime a porcentagem de produtos montados que não serão menores do que
4,48 e não serão maiores de que 4,52 ft de comprimento.

Seção 7.3
13. Utilize um gerador de números aleatórios para produzir 1000 números unifor-
memente distribuídos com média igual a 10, valor mínimo igual a 2 e valor má-
ximo igual a 18. Obtenha a média e o histograma desses números e discuta se
eles realmente parecem ser uniformemente distribuídos com a média desejada.
14. Utilize um gerador de números aleatórios para 1000 números normalmente
distribuídos com média igual a 20 e variância igual a 4. Obtenha a média, a va-
riância e o histograma desses números e discuta se eles realmente parecem ser
normalmente distribuídos com a média e a variância desejadas.
15. A média da soma (ou da diferença) de duas variáveis aleatórias independentes
é igual à soma (ou à diferença) de suas médias, mas a variância é sempre a
soma das duas variâncias. Utilize a geração de números aleatórios para veri-
ficar essa afirmação no caso de z = x + y, em que x e y são variáveis aleatórias
independentes e normalmente distribuídas. A média e a variância de x são
x = 8 e . A média e a variância de y são y = 15 e . Encontre a média e a
variância de z por simulação e compare os resultados com a previsão teórica.
Faça isso para 100, 1000 e 5000 amostras.
16. Suponha que z = xy, em que x e y são variáveis independentes e normalmente
distribuídas. A média e a variância de x são x = 10 e . A média e a variância
de y são y = 15 e . Encontre a média e a variância de z por simulação. É
verdade que z = x y? É verdade que ? Faça isso para 100, 1000
e 5000 amostras.
17. Suponha que y = x2, em que x é uma variável aleatória normalmente distribuída
com média e variância x = 0 e = 4. Encontre a média e a variância de y por
simulação. É verdade que ? É verdade que ? Faça isso para
100, 1000 e 5000 amostras.
18.* Suponha que você tenha analisado o comportamento do preço de determinadas
ações plotando o histograma de frequência normalizado do preço ao longo dos
meses. Suponha que o histograma indique que o preço é normalmente distribu-
ído com média igual a $100 e desvio padrão igual a $5. Escreva um programa
no MATLAB para simular os efeitos de se comprar 50 ações quando o preço
estiver acima de $105. Analise o resultado dessa estratégia ao longo de 250
dias (o número aproximado de dias úteis em um ano). Defina o lucro como a
renda anual obtida a partir da venda de ações mais o valor das ações que você
possui no final do ano, menos o custo anual da compra de ações. Calcule o lu-
cro anual médio esperado, o lucro anual mínimo esperado, o lucro anual máxi-
326 Introdução ao MATLAB para Engenheiros

mo esperado e o desvio padrão do lucro anual. As taxas de corretagem são de 6


centavos por ação comprada ou vendida com um mínimo de $40 por transação.
Suponha que você faça apenas uma transação por dia.
19. Suponha que os dados mostrem que os preços de determinadas ações são nor-
malmente distribuídos com média igual a $150 e variância igual a 100. Crie
uma simulação para comparar os resultados das duas estratégias seguintes ao
longo de 150 dias. Você começa o ano com 100 ações. Com a primeira estraté-
gia, todo dia que o preço estiver abaixo de $140 você compra 100 ações, e todo
dia que o preço estiver acima de $160 você vende todas as suas ações. Com a
segunda estratégia, todo dia que o preço estiver abaixo de $150 você compra
100 ações, e todo dia que o preço estiver acima de $160 você vende todas as
suas ações. As taxas de corretagem são de 5 centavos por ação negociada com
um mínimo de $35 por transação.
20. Escreva um arquivo de script para simular 100 realizações de um jogo em que você
lança duas moedas. Você ganha o jogo se obtiver duas caras, perde se obtiver duas
coroas, e joga novamente se você obtiver uma cara e uma coroa. Crie três funções
definidas pelo usuário para utilizar no script. A função flip simula o lançamento
de uma moeda, com o estado s do gerador de números aleatórios como argumento
de entrada, e o novo estado s e o resultado do lançamento (0 para coroa e 1 para
cara) como as saídas. A função flips simula o lançamento das duas moedas e
chama a função flip. A entrada de flips é o estado s, e as saídas são o novo es-
tado s e o resultado (0 para duas coroas, 1 para uma cara e uma coroa e 2 para duas
caras). A função match simula um turno do jogo. Sua entrada é o estado s, e suas
saídas são o resultado (1 para vitória, 0 para derrota) e o novo estado s. O script
deve redefinir o gerador de números aleatórios com o seu estado inicial, calcular o
estado s e passar esse estado para as funções definidas pelo usuário.
21. Escreva um arquivo de script para um jogo simples de adivinhação de núme-
ros. O script deve gerar um inteiro aleatório na faixa 1, 2, 3, . . ., 14, 15. Ele
deve permitir que o jogador tente adivinhar repetidas vezes o número, e deve
indicar se o jogador ganhou ou dar a ele uma dica após cada tentativa de adivi-
nhação errada. As respostas e dicas são as seguintes:
■ “Você ganhou” e, em seguida, o jogo é finalizado.
■ “Muito próximo”, se a diferença entre o palpite e o número correto for igual a ±1.
■ “Chegando perto”, se a diferença entre o palpite e o número correto for igual
a ±2 ou ±3.
■ “Não está próximo”, se a diferença entre o palpite e o número correto for
maior que 3 ou menor que -3.

Seção 7.4
22.* A interpolação é útil quando um ou mais pontos de um conjunto de dados não
forem fornecidos. Essa situação normalmente ocorre com medidas ambientais,
como a temperatura, por causa da dificuldade de se fazer medidas continua-
mente. A tabela seguinte de temperatura versus tempo não apresenta as leituras
às 5 e às 9 horas. Utilize a interpolação linear com o auxílio do MATLAB para
estimar a temperatura naqueles instantes.
Capítulo 7 ■ Estatística, probabilidade e interpolação 327

Tempo (horas, P.M.) 1 2 3 4 5 6 7 8 9 10 11 12


Temperatura (°C) 10 9 18 24 ? 21 20 18 ? 15 13 11

23. A tabela seguinte fornece dados de temperatura em °C como uma função do


dia da semana em um local específico. Os dados que não foram fornecidos es-
tão indicados na tabela por um ponto de interrogação (?). Utilize a interpolação
linear com o auxílio do MATLAB para estimar a temperatura nos pontos que
não foram fornecidos.

Dia
Hora Seg Ter Qua Qui Sex
1 17 15 12 16 16
2 13 ? 8 11 12
3 14 14 9 ? 15
4 17 15 14 15 19
5 23 18 17 20 24

24. Máquinas controladas por computador são utilizadas para cortar e para moldar
metais e outros materiais durante a fabricação de produtos. Essas máquinas
normalmente utilizam splines cúbicas para especificar o percurso a ser cortado
ou o contorno da parte a ser moldada. As coordenadas a seguir especificam a
forma de um para-lama dianteiro de carro. Ajuste uma série de splines cúbicas
a essas coordenadas, e plote as splines juntamente com os pontos dados.

x (ft) 0 0,25 0,75 1,25 1,5 1,75 1,875 2 2,125 2,25


y (ft) 1,2 1,18 1,1 1 0,92 0,8 0,7 0,55 0,35 0

25. Os dados a seguir são os valores medidos de temperatura T da água que flui de
uma torneira de água quente após ser aberta no instante t = 0.

t (s) T (°F) t (s) T (°F)


0 72,5 6 109,3
1 78,1 7 110,2
2 86,4 8 110,5
3 92,3 9 109,9
4 110,6 10 110,2
5 111,5

a. Plote os dados, conectando-os primeiramente com linhas retas e em seguida


com uma spline cúbica.
b. Estime os valores de temperatura nos seguintes instantes de tempo, utili-
zando interpolação linear e, em seguida, interpolação por splines cúbicas:
t = 0,6, 2,5, 4,7, 8,9.
c. Utilize tanto a interpolação linear quanto a interpolação por splines cúbicas
para estimar o tempo necessário para que a temperatura se iguale aos se-
guintes valores: T = 75, 85, 90, 105.
Foto: © Stocktrek/age fotostock/RF

Engenharia no
Século XXI…
Engenharia internacional

O
final da Guerra Fria resultou em uma maior cooperação internacional. Um
exemplo vivo disso é a cooperação entre as agências espaciais russa e ame-
ricana. Na primeira missão conjunta, o ônibus espacial Atlantis, dos Estados
Unidos, aportou na estação espacial russa Mir. Agora, a Rússia, os Estados Unidos e
muitos outros países estão colaborando em um projeto espacial mais ambicioso: a Es-
tação Espacial Internacional (ISS)†. O lançamento do primeiro elemento da estação,
um bloco de carga construído pelos russos, ocorreu em 1998. A primeira tripulação
permanente chegou em 2000. A estação terá uma tripulação de sete pessoas, irá pesar
mais de 1 000 000 lb, e terá 290 ft de comprimento e 365 ft de largura. Para montá-la,
serão necessários 28 voos de ônibus espaciais norte-americanos e 41 voos russos ao
longo de 10 anos.
A nova era de cooperação internacional resultou em uma maior integração das
economias nacionais, produzindo assim uma economia global. Por exemplo, muitos
componentes para carros montados nos Estados Unidos são fornecidos por empre-
sas de outros países. No século XXI, a melhoria das comunicações e das redes de
computadores permitirá que equipes de engenheiros em diferentes países trabalhem
simultaneamente em diferentes aspectos do projeto de um produto, empregando um
banco de dados de projeto comum. A fim de se preparar para o futuro na engenharia
internacional, os estudantes precisam se familiarizar com outras culturas e línguas
tanto quanto precisam ser proficientes em projetos assistidos por computador.
O MATLAB está disponível em versões internacionais e tem sido largamente
utilizado na Europa há muitos anos. Dessa maneira, os engenheiros familiarizados
com o MATLAB já possuem um ponto de partida na preparação para uma carreira em
engenharia internacional. ■

† N. de R. T.: ISS é a sigla de International Space Station.


8
Equações algébricas
lineares

Equações algébricas lineares como


5x - 2y = 13
7x + 3y = 24
ocorrem em muitas aplicações de engenharia. Por exemplo, engenheiros eletricistas
as utilizam para prever a potência requerida em circuitos; engenheiros civis, mecâ-
nicos e aeroespaciais as utilizam para projetar estruturas e máquinas; engenheiros
químicos as utilizam para calcular balanços de materiais em processos químicos; e
engenheiros industriais as aplicam para projetar programações e operações. Os exem-
plos e os problemas neste capítulo exploram algumas dessas aplicações.
Equações algébricas lineares podem ser resolvidas “à mão” utilizando lápis e pa-
pel, com o auxílio de uma calculadora, ou utilizando um software como o MATLAB.
A escolha depende das circunstâncias. Para equações com apenas duas variáveis des-
conhecidas, a solução à mão é fácil e adequada. Algumas calculadoras podem resolver
conjuntos de equações que possuem muitas variáveis. Entretanto, o maior poder e a
maior flexibilidade são obtidos utilizando-se um software. Por exemplo, o MATLAB
pode obter e plotar soluções de equações conforme variamos um ou mais parâmetros.
Métodos sistemáticos de solução foram desenvolvidos para conjuntos de equa-
ções lineares. Na Seção 8.1, introduzimos um pouco da notação matricial que é ne-
cessária para que se utilize o MATLAB e que também é útil para expressar os mé-
todos de solução de maneira compacta. As condições para existência e unicidade de
soluções são introduzidas em seguida. Métodos que utilizam o MATLAB são tratados
em quatro seções. A Seção 8.2 aborda o método da divisão à esquerda para resolver
conjuntos de equações que apresentam solução única. A Seção 8.3 aborda o caso em
330 Introdução ao MATLAB para Engenheiros

que o conjunto de equações não contém informação suficiente para que sejam de-
terminadas todas as variáveis desconhecidas. Esse é o caso subdeterminado. O caso
sobredeterminado ocorre quando o conjunto de equações apresenta mais equações
independentes do que incógnitas (Seção 8.4). Um programa de solução geral é apre-
sentado na Seção 8.5.

8.1 Métodos matriciais para equações lineares


Conjuntos de equações algébricas lineares podem ser expressos como uma única
equação, utilizando-se notação matricial. Essa forma padrão e compacta é útil para
expressar soluções e para desenvolver aplicações de software com um número arbi-
trário de variáveis. Nessa aplicação, todo vetor é considerado como sendo um vetor
coluna, a menos que o contrário seja especificado.
A notação matricial nos permite representar múltiplas equações como uma úni-
ca equação matricial. Por exemplo, considere o seguinte conjunto.
2x1 + 9x2 = 5
3x1 - 4x2 = 7
Esse conjunto pode ser expresso na forma matriz-vetor da seguinte maneira:

a qual pode ser representada na seguinte forma compacta:


Ax = b (8.1-1)
em que definimos as seguintes matrizes e vetores:

Em geral, o conjunto de m equações em n incógnitas pode ser expresso na forma da


Equação (8.1-1), em que A é m * n, x é n * 1 e b é m * 1.

Matriz inversa
A solução da equação escalar ax = b é x = b/a, se a ⬆ 0. A operação de divisão da álge-
bra escalar tem uma operação análoga na álgebra matricial. Por exemplo, para resolver
a equação matricial (8.1-1) para x, devemos, de alguma maneira, “dividir” b por A. O
procedimento para fazer isso é desenvolvido a partir do conceito de matriz inversa. A
inversa de uma matriz A é indicada por A-1 e satisfaz a seguinte propriedade:
A-1A = AA-1 = I
em que I é a matriz identidade. Utilizando essa propriedade, multiplicamos à esquer-
da ambos os lados da Equação (8.1-1) por A-1 para obter A-1Ax = A-1b. Uma vez
que A-1Ax = Ix = x, obtemos a solução
x = A-1b (8.1-2)
Capítulo 8 ■ Equações algébricas lineares 331

A inversa de uma matriz A é definida apenas se A for quadrada e não sin-


MATRIZ gular. Uma matriz é singular se o seu determinante |A| for igual a zero. Se A for
SINGULAR singular, então uma única solução para a Equação (8.1-1) não existe. As funções
do MATLAB inv(A) e det(A) calculam a inversa e o determinante da matriz
A. Se a função inv(A) for aplicada a uma matriz singular, o MATLAB sinalizará
um alerta.
CONJUNTO Um conjunto de equações mal-condicionado é um conjunto que está próximo
MAL- de ser singular. O status de mal-condicionado depende da precisão com que os cál-
-CONDICIONADO
culos da solução são realizados. Quando a precisão numérica interna utilizada pelo
MATLAB for insuficiente para a obtenção de uma solução, ele exibirá uma mensa-
gem de alerta informando que a matriz está próxima de ser singular e que os resulta-
dos podem ser imprecisos.
Para uma matriz A 2 * 2

em que det(A) = ad - bc. Assim, A é singular se ad - bc = 0.

EXEMPLO 8.1-1 O método da matriz inversa

Resolva as seguintes equações utilizando a matriz inversa.


2x1 + 9x2 = 5
3x1 - 4x2 = 7
■ Solução
A matriz A e o vetor b são

A sessão é
>>A = [2,9;3,-4]; b = [5;7];
>>x = inv(A)*b
x =
2.3714
0.0286
A solução é x1 = 2,3714 e x2 = 0,0286. O MATLAB não sinalizou um alerta, portanto, a
solução é única.

A forma x = A-1b é raramente aplicada na prática para a obtenção de soluções


numéricas para conjuntos de muitas equações, uma vez que o cálculo da matriz in-
versa resulta em maior imprecisão numérica do que o método da divisão à esquerda,
a ser introduzido em breve.
332 Introdução ao MATLAB para Engenheiros

Teste seus conhecimentos


T8.1-1 Para que valores de c o seguinte conjunto de equações (a) terá uma solução
única e (b) terá um número infinito de soluções? Encontre a relação entre x1
e x2 para essas soluções.
6x1 + cx2 = 0
2x1 + 4x2 = 0
(Respostas: (a) c ⬆ 12, x1 = x2 = 0; (b) c = 12, x1 = - 2x2)
T8.1-2 Utilize o método da matriz inversa para resolver o seguinte conjunto:
3x1 - 4x2 = 5
6x1 - 10x2 = 2
(Resposta: x1 = 7, x2 = 4)
T8.1-3 Utilize o método da matriz inversa para resolver o seguinte conjunto:
3x1 - 4x2 = 5
6x1 - 8x2 = 2
(Resposta: Não há solução.)

Existência e unicidade de soluções


O método da matriz inversa irá nos alertar se uma única solução não existir, mas ele
não nos diz se não há solução ou se há um número infinito de soluções. Além disso,
o método é limitado a casos em que a matriz A é quadrada, isto é, a casos em que o
número de equações é igual ao número de incógnitas. Por essa razão, introduziremos
um método que nos permite determinar facilmente se um conjunto de equações tem
POSTO DE uma solução e se ela é única. O método requer o conceito de posto de uma matriz.
UMA MATRIZ Considere o determinante 3 * 3

(8.1-3)

Se eliminarmos uma linha e uma coluna no determinante, ficamos com um deter-


minante 2 * 2. Dependendo de qual linha e qual coluna escolhermos para eliminar,
SUB- há nove determinantes 2 * 2 possíveis de ser obtidos. Esses são chamados de sub-
DETERMINANTE determinantes. Por exemplo, se eliminarmos a segunda linha e a terceira coluna,
obteremos:
Capítulo 8 ■ Equações algébricas lineares 333

Subdeterminantes são utilizados para definir o posto de uma matriz. A definição


de posto de uma matriz é dada a seguir:
Definição de posto de uma matriz. Uma matriz A m * n tem posto r
Ú 1 se e somente se |A| contiver um determinante r * r não nulo e todo
subdeterminante quadrado com r + 1 ou mais linhas for igual a zero.
Por exemplo, o posto de A na Equação (8.1-3) é igual a 2 porque |A| = 0, en-
quanto que |A| contém pelo menos um determinante 2 * 2 não nulo. Para determinar o
posto de uma matriz A, digite rank(A). Se A for n * n, seu posto é n se det(A) ⬆ 0.
Podemos utilizar o teste a seguir para determinar se uma solução existe para Ax =
MATRIZ b e se ela é única. O teste requer que nós primeiro formemos a matriz aumentada [A b].
AUMENTADA
Existência e unicidade de soluções. O conjunto Ax = b com m equa-
ções e n incógnitas tem soluções se e somente se (1) rank(A) = rank([A
b]). Seja r = rank(A). Se a condição (1) for satisfeita e se r = n, então a
solução é única. Se a condição (1) for satisfeita, mas r 6 n, há um núme-
ro infinito de soluções, e r variáveis desconhecidas podem ser expressas
como uma combinação linear das outras n - r variáveis desconhecidas,
cujos valores são arbitrários.
Caso homogêneo. O conjunto homogêneo Ax = 0 é um caso especial
em que b = 0. Para esse caso, rank(A) = rank([A b]) sempre, e assim
o conjunto sempre terá a solução trivial x = 0. Uma solução não nula,
em que pelo menos uma incógnita é não nula, existe se e somente se
rank(A) 6 n. Se m 6 n, o conjunto homogêneo sempre terá uma solu-
ção não nula.
Esse teste implica que se A for quadrada e de dimensão n * n, então rank([A b])
= rank(A), e uma única solução existirá para qualquer b se rank(A) = n.

8.2 O método da divisão à esquerda


O MATLAB fornece o método da divisão à esquerda para resolver o conjunto de
equações Ax = b. Esse método é baseado na eliminação de Gauss. Para utilizar o mé-
todo da divisão à esquerda a fim de obter x, você deve digitar x = A\b. Se |A| = 0 ou
se o número de equações não for igual ao número de incógnitas, então você precisará
utilizar outros métodos a serem apresentados posteriormente.

EXEMPLO 8.2-1 Método da divisão à esquerda com três incógnitas

Utilize o método da divisão à esquerda para resolver o seguinte conjunto:


334 Introdução ao MATLAB para Engenheiros

■ Solução
As matrizes A e b são

A sessão é
>>A = [3,2,-9;-9,-5,2;6,7,3];
>>rank(A)
ans =
3
Uma vez que A é 3 * 3 e rank(A) = 3, que é o número de incógnitas, uma solução única
existe. Ela é obtida continuando-se a sessão da seguinte maneira:
>>b = [-65;16;5];
>>x = A\b
x =
2.0000
-4.0000
7.0000
Essa resposta fornece o vetor x, que corresponde à solução x1 = 2, x2 = -4 , x3 = 7.

Para a solução x = A-1b, o vetor x é proporcional ao vetor b. Podemos utilizar


essa propriedade de linearidade para obter uma solução algébrica geralmente mais
útil em casos em que os lados direitos sejam multiplicados pelo mesmo escalar. Por
exemplo, suponha que a equação matricial seja Ay = bc, em que c é um escalar. A
solução é y = A-1bc = xc. Assim, se obtivermos a solução para Ax = b, a solução para
Ay = bc é dada por y = xc.

EXEMPLO 8.2-2 Cálculo de tensão em cabos

Uma massa m é suspensa por três cabos fixados em três pontos B, C e D, como mos-
trado na Figura 8.2-1. Sejam T1, T2 e T3 as tensões em três cabos AB, AC e AD, res-
pectivamente. Se a massa m for estacionária, a soma das componentes de tensão nas
direções x, y e z devem ser iguais a zero cada. Isso resulta nas seguintes três equações:

Determine T1, T2 e T3 em termos do peso mg.


Capítulo 8 ■ Equações algébricas lineares 335

1m 3m
3m B

4m

C D

5m
z 1m
y x

FIGURA 8.2-1 Uma massa suspensa por três cabos.

■ Solução
Se considerarmos mg = 1, as equações terão a forma AT = b, em que

O arquivo de script para resolver esse sistema é


% File cable.m
s34 = sqrt(34); s35 = sqrt(35); s42 = sqrt(42);
A1 = [1/s35, -3/s34, 1/s42];
A2 = [3/s35, 0, -4/s42];
A3 = [5/s35, 5/s34, 5/s42];
A = [A1; A2; A3];
b = [0; 0; 1];
rank(A)
rank([A, b])
T = A\b
Quando esse arquivo é executado digitando-se cable, verificamos que rank(A) =
rank([A b]) = 3 e obtemos os valores T1 = 0,5071, T2 = 0,2915 e T3 = 0,4166. Uma vez
que A é 3 * 3 e rank(A) = 3, que é o número de incógnitas, a solução é única. Utilizando
a propriedade de linearidade, multiplicamos esses resultados por mg e obtemos a solução
geral T1 = 0,5071 mg, T2 = 0,2915 mg e T3 = 0,4166 mg.
336 Introdução ao MATLAB para Engenheiros

Equações lineares são úteis em muitas áreas da engenharia. Circuitos elétricos


são uma fonte comum de modelos de equações lineares. O projetista do circuito deve
ser capaz de resolvê-los para prever as correntes elétricas existentes no circuito. Essa
informação é muitas vezes necessária para se determinar os requerimentos da fonte
de alimentação, dentre outras coisas.

EXEMPLO 8.2-3 Uma rede de resistências elétricas

O circuito mostrado na Figura 8.2-2 apresenta cinco resistências e duas fontes de tensão.
Assumindo-se que as direções positivas de fluxo de corrente são as indicadas na figura, a
lei de Kirchhoff das tensões aplicadas a cada malha no circuito resulta em:

A conservação das cargas aplicada em cada nó do circuito resulta em:


i1 = i2 + i4
i2 = i3 + i5
Você pode utilizar essas duas equações para eliminar i4 e i5 das primeiras três equações.
O resultado é:

Dessa forma, temos três equações nas três variáveis i1, i2 e i3.
Escreva um arquivo de script no MATLAB que utilize os valores dados das tensões
aplicadas v1 e v2 e das cinco resistências para encontrar as correntes i1, i2 e i3. Utilize o

R1 R2 R3
i1 i2 i3

i4 i5

⫹ ⫹
v1 R4 R5 v2

⫺ ⫺

FIGURA 8.2-2 Uma rede de resistências elétricas.


Capítulo 8 ■ Equações algébricas lineares 337

programa para encontrar as correntes no caso em que R1 = 5, R2 = 100, R3 = 200, R4 = 150


e R5 = 250 kæ, e v1 = 100 e v2 = 50 V. (Note que 1 kæ = 1.000 æ.)
■ Solução
Uma vez que o número de equações e o número de incógnitas são iguais, haverá uma úni-
ca solução se |A| ⬆ 0; além disso, o método da divisão à esquerda gerará uma mensagem
de erro se |A| = 0. O seguinte arquivo de script, cujo nome é resistencia.m, utiliza o
método da divisão à esquerda para resolver as três equações para i1, i2 e i3:
% Arquivo resistencia.m
% Resolve para as correntes i_1, i_2, i_3
R = [5,100,200,150,250]*1000;
v1 = 100; v2 = 50;
A1 = [R(1) + R(4), -R(4), 0];
A2 = [-R(4), R(2) + R(4) + R(5), -R(5)];
A3 = [0, R(5), -(R(3) + R(5))];
A = [A1; A2; A3];
b=[v1; 0; v2];
current = A\b;
disp(’As correntes são:’)
disp(current)
Os vetores linha A1, A2 e A3 foram definidos para que se evitasse a digitação da expres-
são longa para A em uma linha. Esse script é executado a partir do prompt de comando da
seguinte maneira:
>>resistencia
As correntes são:
1.0e-003*
0.9544
0.3195
0.0664
Como o MATLAB não gerou uma mensagem de erro, a solução é única. As
correntes são i1 = 0,9544, i2 = 0,3195 e i3 = 0,0664 mA, em que 1 mA = 1 miliampere
= 0,001 A.

EXEMPLO 8.2-4 Produção de etanol

Engenheiros de indústrias alimentícias e químicas utilizam fermentação em muitos pro-


cessos. A seguinte equação descreve a fermentação da levedura de panificação:

As variáveis a, b, ..., f representam as massas dos produtos envolvidos na reação. Nes-


sa fórmula, C6H1206 representa a glicose, C6H10N03 representa a levedura e C2H60
representa o etanol. Essa reação produz etanol, além de água e dióxido de carbono.
338 Introdução ao MATLAB para Engenheiros

Queremos determinar a quantidade de etanol f produzido. O número de átomos de C,


O, N e H à esquerda e à direita da equação devem estar balanceados. Isso resulta em
quatro equações:

O fermentador está equipado com um sensor de oxigênio e um sensor de dióxido de car-


bono. Eles nos permitem calcular o coeficiente respiratório R:

Assim, a quinta equação é Rb - e = 0. A produção de levedura Y (gramas de fermen-


to produzido por gramas de glicose consumida) está relacionada com a da seguinte
maneira:

em que 144 é o peso molecular da levedura e 180 é o peso molecular da glicose. Por
meio da medição da produção de levedura Y, podemos calcular a da seguinte maneira:
a = 144/180Y. Esta é a sexta equação.
Escreva uma função definida pelo usuário que calcula f, a quantidade de etanol pro-
duzido, com R e Y sendo argumentos da função. Teste sua função para dois casos em que
Y medido é igual a 0,5: (a) R = 1,1 e (b) R = 1,05.
■ Solução
Primeiro note que há apenas quatro incógnitas, porque a terceira equação diz que c = 1,
e a sexta equação resulta diretamente em a = 144/180Y. Para escrever essas equações em
formato matricial, sejam x1 = b, x2 = d, x3 = e x4 = f. Desse modo, as equações podem ser
escritas da seguinte maneira:

Em formato matricial, elas se tornam


Capítulo 8 ■ Equações algébricas lineares 339

A função é mostrada a seguir:


function E = ethanol(R,Y)
% Calcula o etanol produzido pela reação de levedura.
A = [0,0,-1,-2;2,-1,-2,-1;...
0,-2,0,-6;R,0,-1,0];
b = [6-6*(144./(180*Y));3-6*(144./(180*Y));...
7-12*(144./(180*Y));0];
x = A\b;
E = x(4);
A sessão é a seguinte:

O valor negativo para E no segundo caso indica que o etanol está sendo mais consumido
do que produzido.

Teste seus conhecimentos


T8.2-1 Utilize o método da divisão à esquerda para resolver o seguinte conjunto.

5x1 - 3x2 = 21
7x1 - 2x2 = 36

(Respostas: x1 = 6, x2 = 3)

8.3 Sistemas subdeterminados


Um sistema subdeterminado não contém informação suficiente para que se determinem
todas as variáveis desconhecidas, normalmente (mas não sempre) porque ele apresenta
menos equações do que incógnitas. Assim, um número infinito de soluções pode existir,
com uma ou mais das incógnitas dependentes das outras incógnitas. O método da divisão
à esquerda funciona para matrizes A que sejam quadradas ou não. Entretanto, se A não
for quadrada, o método da divisão à esquerda pode gerar respostas que podem ser mal-
-interpretadas. Mostraremos como interpretar os resultados do MATLAB corretamente.
Quando há menos equações do que incógnitas, o método da divisão à esquerda
pode gerar uma solução com algumas das incógnitas iguais a zero, mas esta não é a so-
lução geral. Um número infinito de soluções pode existir mesmo quando o número de
equações é igual ao número de incógnitas. Isso pode ocorrer quando |A| = 0. Para tais
sistemas, o método da divisão à esquerda gera uma mensagem de erro alertando que a
340 Introdução ao MATLAB para Engenheiros

MÉTODO DA matriz A é singular. Nesses casos, o método da pseudoinversa x = pinv(A)*b gera


PSEUDOINVERSA uma solução, a solução de norma mínima. Nos casos em que há um número infinito de
soluções, a função rref pode ser utilizada para expressar algumas das incógnitas em
SOLUÇÃO DE
NORMA MÍNIMA
termos das incógnitas remanescentes, cujos valores são arbitrários.
Um conjunto de equações pode ser subdeterminado mesmo que o número de
equações e o número de incógnitas sejam iguais. Isso pode acontecer se algumas das
equações não forem independentes. Determinar à mão se todas as equações são inde-
pendentes pode não ser fácil, especialmente se o conjunto contiver muitas equações,
mas isso é facilmente feito no MATLAB.

EXEMPLO 8.3-1 Um conjunto subdeterminado com três equações e três incógnitas

Mostre que o seguinte conjunto não tem uma solução única. Quantas das incógnitas serão
indeterminadas? Interprete os resultados dados pelo método da divisão à esquerda.

■ Solução
Uma sessão do MATLAB para verificar o posto é a seguinte:

Uma vez que o posto de A e o posto de [A b] são iguais, existe uma solução. Todavia, uma
vez que o número de incógnitas é 3 e o posto de A é igual a 2, uma das incógnitas será in-
determinada. Existe um número infinito de soluções, e podemos resolver para apenas duas
das três incógnitas em termos da terceira incógnita. O conjunto é subdeterminado porque
há menos do que três equações independentes; a terceira equação pode ser obtida a partir
das duas primeiras. Para verificar isso, some as duas primeiras equações e será obtida a
equação - 2x1 - 6x2 + 8x3 = 0, que é equivalente à terceira equação.
Note que também poderíamos dizer que a matriz A é singular porque o posto é me-
nor do que 3. Se utilizarmos o método da divisão à esquerda, o MATLAB não produzirá
uma resposta e retornará uma mensagem alertando que o problema é singular.
Capítulo 8 ■ Equações algébricas lineares 341

A função pinv e a norma euclidiana


A função pinv (que representa “pseudoinversa”) pode ser utilizada para se obter a so-
lução de um conjunto subdeterminado. Para resolver o conjunto de equações Ax = b
utilizando a função pinv, você deve digitar x = pinv(A)*b. A função pinv gera
uma solução com valor mínimo de norma euclidiana, que é a magnitude do vetor solu-
ção x. A magnitude de um vetor v no espaço tridimensional, tendo componentes x, y e
z, é . Ela pode ser calculada utilizando-se a multiplicação matricial e a
transposição da seguinte maneira:

A generalização dessa fórmula para um vetor n-dimensional v resulta na magnitude


do vetor e é a norma euclidiana N. Dessa forma,

(8.3-1)
A função do MATALB norm(v) calcula a norma euclidiana.

EXEMPLO 8.3-2 Um problema estaticamente indeterminado

Determine as forças em três apoios igualmente espaçados que suportam uma luminária.
Os apoios estão separados por uma distância de 5 ft. A luminária pesa 400 lb, e o seu cen-
tro de massa se encontra a quatro pés a partir da extremidade direita. Obtenha a solução
utilizando o método da divisão à esquerda do MATLAB e o método da pseudoinversa.
■ Solução
A Figura 8.3-1 mostra a luminária e o diagrama de corpo livre, em que T1, T2 e T3 são as
forças de tensão nos apoios. Para que a luminária esteja em equilíbrio, as forças verticais
devem se cancelar, e o momento total em torno de um ponto fixo arbitrário – digamos, a
extremidade direita – deve ser igual a zero. Essas condições produzem as duas equações
T1 + T2 + T3 - 400 = 0
400(4) - 10T1 - 5T2 = 0
ou
T1 + T2 + T3 = 400 (8.3-2)
10T1 + 5T2 + 0T3 = 1600 (8.3-3)
Uma vez que há mais incógnitas do que equações, o conjunto é subdeterminado. Assim,
não podemos determinar um conjunto único de valores para as forças. Esse problema,
quando as equações da estática não fornecem informação suficiente, é chamado de estati-
camente indeterminado. Essas equações podem ser escritas no formato matricial AT = b
da seguinte maneira:
342 Introdução ao MATLAB para Engenheiros

5 ft 5 ft

400 lb

(a) 4 ft

T1 T2 T3

400
(b)
FIGURA 8.3-1 Uma luminária e seu diagrama de corpo livre.

A sessão do MATLAB é:
Capítulo 8 ■ Equações algébricas lineares 343

O método da divisão à esquerda corresponde a T1 = 160, T2 = 0 e T3 = 240. Isso ilustra


como o operador de divisão à esquerda do MATLAB produz uma solução com uma ou
mais variáveis iguais a zero para sistemas subdeterminados que tenham mais incógnitas
do que equações.
Uma vez que ambos os postos de A e [A b] são iguais a 2, uma solução existe, mas
não é única. Como o número de incógnitas é 3, isto é, 1 a mais do que o posto de A, existe
um número infinito de soluções, e podemos resolver o problema para apenas duas incóg-
nitas em termos da terceira.
A solução da pseudoinversa consiste em T1 = 93,3333, T2 = 133,333 e T3 =
173,3333. Essa é a solução de norma mínima para valores reais das variáveis. A solução
de norma mínima consiste nos valores reais de T1, T2 e T3 que minimizam

Para entender o que o MATLAB está fazendo, note que podemos resolver as Equa-
ções (8.3-2) e (8.3-3) para obter T1 e T2 em termos de T3 como T1 = T3 - 80 e
T2 = 480 - 2T3. Assim, a norma euclidiana pode ser expressa como:

O valor real de T3 que minimiza N pode ser encontrado plotando-se N versus T3, ou uti-
lizando-se cálculo. A resposta é T3 = 173,3333, a mesma solução de norma mínima dada
pelo método da pseudoinversa.

Quando houver um número infinito de soluções, precisamos decidir se as so-


luções dadas pelo método da divisão à esquerda e pelo método da pseudoinversa são
úteis em aplicações. Isso deve ser feito no contexto da aplicação específica.

Teste seus conhecimentos


T8.3-1 Encontre duas soluções para o seguinte conjunto:
x1 + 3x2 + 2x3 = 2
x1 + x 2 + x 3 = 4
(Resposta: solução de norma mínima: x1 = 4,33, x2 = - 1,67, x3 = 1,34; solu-
ção da divisão à esquerda: x1 = 5, x2 = - 1, x3 = 0.)

A forma escalonada reduzida


Podemos expressar algumas das incógnitas em um conjunto subdeterminado como
funções das incógnitas remanescentes. No Exemplo 8.3-2, escrevemos as soluções
para duas das incógnitas em termos da terceira: T1 = T3 - 80 e T2 = 480 - 2T3. Essas
duas equações são equivalentes a:
T1 - T3 = -80 T2 + 2T3 = 480
344 Introdução ao MATLAB para Engenheiros

Em formato matricial,

A matriz aumentada [A b] para o conjunto acima é

Note que as primeiras duas colunas formam uma matriz identidade 2 * 2. Isso indica
que as equações correspondentes podem ser resolvidas diretamente para T1 e T2 em
termos de T3.
Nós sempre podemos reduzir um sistema escalonado para essa forma multi-
plicando as equações do conjunto por valores apropriados e somando as equações
resultantes para eliminar uma incógnita. A função rref do MATLAB realiza um
procedimento para reduzir um conjunto de equações a essa forma, que é chamada
de forma escalonada reduzida. Sua sintaxe é rref([A b]). Sua saída é a matriz
aumentada [C d] que corresponde à equação Cx = d. Esse conjunto está na forma
escalonada reduzida.

EXEMPLO 8.3-3 Três equações e três incógnitas (continuação)

O conjunto de equações subdeterminado a seguir foi analisado no Exemplo 8.3-1. Foi


mostrado que existe um número infinito de soluções. Utilize a função rref para obter as
soluções.

■ Solução
A sessão do MATLAB é:

A resposta corresponde à matriz aumentada [C d], em que


Capítulo 8 ■ Equações algébricas lineares 345

Essa matriz corresponde à equação matricial Cx = d, ou

Elas podem ser facilmente resolvidas para x1 e x2 em termos de x3 da seguinte maneira: x1


= 0,1x3 - 1,2, x2 = 1,3x3 + 0,4. Essa é a solução geral para o problema, em que x3 é uma
variável arbitrária.

Suplementando sistemas subdeterminados


Muitas vezes as equações lineares que descrevem a aplicação são indeterminadas por-
que não foi especificada informação suficiente para se determinar valores únicos das
incógnitas. Nesses casos, podemos incluir informação adicional, objetivos ou restrições
para encontrar uma solução única. Podemos utilizar o comando rref para reduzir o
número de incógnitas no problema, como é ilustrado nos próximos dois exemplos.

EXEMPLO 8.3-4 Planejamento de produção

A tabela a seguir mostra quantas horas os reatores A e B precisam para que cada um pro-
duza uma tonelada dos produtos químicos 1, 2 e 3. Os dois reatores estão disponíveis por
40 e 30 horas por semana, respectivamente. Determine quantas toneladas de cada produto
pode ser produzida por semana.

Horas Produto 1 Produto 2 Produto 3


Reator A 5 3 3
Reator B 3 3 4

■ Solução
Sejam x, y e z o número de toneladas de cada produto 1, 2 e 3 que podem ser produzidas em
uma semana. Utilizando os dados para o reator A, a equação para o seu uso em uma semana é
5x + 3y + 3z = 40
Os dados para o reator B resultam em
3x + 3y + 4z = 30
Esse sistema é subdeterminado. As matrizes para a equação Ax = b são

Nesse caso, rank(A) = rank([A b]) = 2, que é menor do que o número de incógnitas. As-
sim, existe um número infinito de soluções, e podemos determinar duas das variáveis em
termos da terceira.
346 Introdução ao MATLAB para Engenheiros

Utilizando o comando rref([A b]), em que A = [5,3,3;3,3,4] e b =


[40;30], obtemos a seguinte matriz aumentada na forma escalonada reduzida:

Essa matriz produz o sistema reduzido


x - 0,5z = 5
y + 1,8333z = 5
que pode ser facilmente resolvido da seguinte maneira:
x = 5 + 0,5z (8.3-4)
y = 5 - 1,8333z (8.3-5)
em que z é arbitrário. Entretanto, z não pode ser completamente arbitrário se a solução ti-
ver que ser significativa. Por exemplo, valores negativos das variáveis não têm significado
nesse caso; assim, podemos requerer que x Ú 0, y Ú 0 e z Ú 0. A Equação (8.3-4) mostra
que x Ú 0 se z Ú -10. A partir da Equação (8.3-5), y Ú 0 implica que z … 5/1,8333 = 2,727.
Assim, as soluções válidas são aquelas dadas pelas Equações (8.3-4) e (8.3-5), em que 0
… z … 2,737 t. A escolha de z dentro dessa faixa deve se feita com base em algum outro
critério, como o lucro.
Por exemplo, suponha que possamos lucrar $400, $600 e $100 por tonelada para os
produtos 1, 2 e 3, respectivamente. Assim, nosso lucro total P é:

Dessa forma, para maximizar o lucro, devemos escolher o menor valor possível para z,
isto é, z = 0. Essa escolha resulta em x = y = 5 t.
Entretanto, se os lucros para cada produto forem $3000, $600 e $100, o lucro total
será P = 18 000 + 500z. Assim, devemos escolher o maior valor possível para z, isto é,
z = 2,727 t. A partir das Equações (8.3-4) e (8.3-5), obtemos x = 6,36 e y = 0 t.

EXEMPLO 8.3-5 Engenharia de tráfego

Um engenheiro de tráfego deseja saber se as medições do fluxo de tráfego que entra


e sai de uma rede viária são suficientes para prever o fluxo de tráfego em cada rua da
rede. Por exemplo, considere a rede de ruas de mão única mostrada na Figura 8.3-2. Os
números mostrados são os fluxos de tráfego medidos em veículos por hora. Considere
que não há veículos estacionados em nenhum lugar dentro da rede. Se possível, calcule
os fluxos de tráfego f1, f2, f3 e f4. Se não for possível, sugira como obter a informação
necessária.
■ Solução
O fluxo de entrada e o fluxo de saída na interseção 1 devem ser iguais. Isso resulta em
100 + 200 = f1 + f4
Capítulo 8 ■ Equações algébricas lineares 347

200 300

f1
100 200
1 2

f4 f2

4 3
300 400
f3

500 600

FIGURA 8.3-2 Uma rede de ruas de mão única.

Similarmente, para as outras interseções, temos:

Colocando-as na forma matricial Ax = b, obtemos:

Primeiramente, verifique os postos de A e [A b