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] utilizando a função rank do MAT-


LAB. O posto de ambas é igual a 3, ao passo que o número de incógnitas é igual a 4,
portanto, podemos determinar três das incógnitas em termos da quarta incógnita. Desse
modo, não podemos determinar todos os fluxos de tráfego a partir das medições dadas.
Utilizando a função rref([A b]), obtemos a seguinte matriz aumentada na for-
ma escalonada reduzida:

a qual corresponde ao seguinte sistema reduzido:


f1 + f4 = 300
f2 - f4 = 200
f3 + f4 = 800
348 Introdução ao MATLAB para Engenheiros

Essas equações podem ser facilmente resolvidas da seguinte maneira: f1 = 300 - f4, f2 =
200 + f4 e f3 = 800 - f4. Se pudéssemos medir o fluxo em uma das ruas, digamos f4, então
poderíamos calcular os outros fluxos. Portanto, recomendamos que o engenheiro provi-
dencie esta medição adicional.

Teste seus conhecimentos


T8.3-2 Utilize rref, pinv e o método da divisão à esquerda para resolver o se-
guinte conjunto:

(Resposta: Há um número infinito de soluções. O resultado obtido com a


função rref é x1 = 0,2258 - 0,3721x3, x2 = 1,0645 - 0,9767x3, com x3 arbi-
trário. A função pinv resulta em x1 = 0,0571, x2 = 0,5249 e x3 = 0,5340. O
método da divisão à esquerda gera uma mensagem de erro.)
T8.3-3 Utilize rref, pinv e o método da divisão à esquerda para resolver o se-
guinte conjunto:

(Resposta: Há um número infinito de soluções. O resultado obtido com a


função rref é x1 = 0,2727x3 + 5,2727, x2 = -1,3636x3 - 2,2626, com x3 ar-
bitrário. A solução obtida com o método da divisão à esquerda é x1 = 4,8000,
x2 = 0 e x3 = -1,7333. O resultado obtido com o método da pseudoinversa é
x1 = 4,8394, x2 = -0,1972 e x3 = -1,5887.)

8.4 Sistemas sobredeterminados


Um sistema sobredeterminado é um conjunto de equações que apresenta mais equa-
ções do que incógnitas. Alguns sistemas sobredeterminados apresentam soluções
exatas, e elas podem ser obtidas com o método da divisão à esquerda x = A\b. Para
outros sistemas sobredeterminados, não existe uma solução exata; em alguns desses
casos, o método da divisão à esquerda não produz uma resposta, enquanto que em ou-
tros casos ele gera uma resposta que satisfaz o conjunto de equações apenas no senti-
do de “mínimos quadrados”. Mostraremos o que isso significa no próximo exemplo.
Quando o MATLAB gera uma resposta para um sistema sobredeterminado, ele não
nos diz se a resposta é a solução exata. Precisamos determinar essa informação por
nós mesmos, e mostraremos agora como fazer isso.
Capítulo 8 ■ Equações algébricas lineares 349

EXEMPLO 8.4-1 O método de mínimos quadrados

Suponha que tenhamos o seguinte conjunto de dados formado por três pontos, e deseja-
mos encontrar a linha reta y = c1x + c2 que melhor se ajusta aos dados em algum sentido:

x y
0 2
5 6
10 11

(a) Encontre os coeficientes c1 e c2 utilizando o critério de mínimos quadrados. (b) Encon-


tre os coeficientes utilizando o método da divisão à esquerda para resolver as três equa-
ções (uma para cada ponto do conjunto de dados) para as duas incógnitas c1 e c2. Compare
com a resposta da parte (a).
■ Solução
(a) Uma vez que os dois pontos definem uma linha reta, a não ser que sejamos extre-
mamente sortudos, os nossos três pontos não ficarão sobre a mesma reta. Um critério
MÉTODO DE
comum para se obter a linha reta que melhor se ajusta aos dados é o critério de mínimos
MÍNIMOS quadrados. De acordo com esse critério, a reta que minimiza J, a soma dos quadrados das
QUADRADOS diferenças verticais entre a linha e os pontos do conjunto de dados, é o “melhor” ajuste.
Neste caso, J é

Se você conhece cálculo, sabe que os valores de c1 e c2 que minimizam J são encontrados
igualando-se as derivadas parciais 0J/0c1 e 0J/0c2 a zero.

A solução é c1 = 0,9 e c2 = 11/6. A melhor reta no sentido de mínimos quadrados é y =


0,9x + 11/6.
(b) Avaliar a equação y = c1x + c2 em cada um dos pontos do conjunto de dados
resulta nas três seguintes equações, que formam um conjunto sobredeterminado, uma vez
que há mais equações do que incógnitas:
0c1 + c2 = 2 (8.4-1)
5c1 + c2 = 6 (8.4-2)
10c1 + c2 = 11 (8.4-3)
350 Introdução ao MATLAB para Engenheiros

Essas equações podem ser escritas na forma matricial Ax = b da seguinte maneira:

em que

Para utilizar a divisão à esquerda, a sessão no MATLAB é:

Esse resultado para x está de acordo com a solução por mínimos quadrados obtida an-
teriormente: c1 = 0,9, c2 = 11/6 = 1,8333. O posto de A é 2, mas o posto de [A b] é 3,
portanto, não há uma solução exata para c1 e c2. Note que A*x produz os valores de y
gerados pela reta y = 0,9x + 1,8333 para x = 0, 5, 10. Esses valores são diferentes dos
valores no lado direito das três equações originais (8.4-1), (8.4-2) e (8.4-3). Isso não
era algo inesperado, porque a solução de mínimos quadrados não é uma solução exata
das equações.

Alguns sistemas sobredeterminados apresentam uma solução exata. O método


da divisão à esquerda algumas vezes gera uma resposta para sistemas sobredetermi-
nados, mas ele não indica se a resposta é a solução exata. Precisamos verificar os
postos de A e [A b] para saber se a resposta é a solução exata. O próximo exemplo
ilustra esta situação.
Capítulo 8 ■ Equações algébricas lineares 351

EXEMPLO 8.4-2 Um conjunto sobredeterminado

Resolva o seguinte conjunto de equações e discuta a solução para dois casos: c = 9 e


c = 10.
x 1 + x2 = 1
x1 + 2x2 = 3
x1 + 5x2 = c
■ Solução
A matriz de coeficientes e a matriz aumentada para esse problema são:

Realizando os cálculos no MATLAB, descobrimos que, para c = 9, rank(A) =


rank([A b]) = 2. Assim, o sistema apresenta uma solução, e uma vez que o número de
incógnitas (2) é igual ao posto de A, há uma única solução. O método da divisão à es-
querda A\b gera essa solução, que é x1 = -1 e x2 = 2.
Para c = 10, descobrimos que rank(A) = 2, mas rank([A b]) = 3. Uma vez que
rank(A) ⬆ rank([A b]), não há solução. Entretanto, o método da divisão à esquerda A\b
resulta em x1 = -1,3846 e x2 = 2,2692, que não é uma solução exata! Isso pode ser veri-
ficado substituindo-se esses valores no conjunto de equações original. Essa resposta é a
solução para o conjunto de equações no sentido de mínimos quadrados. Isto é, esses valo-
res são os valores de x1 e x2 que minimizam J, a soma dos quadrados das diferenças entre
o lado esquerdo e lado direito das equações.
J = (x1 + x2 - 1)2 + (x1 + 2x2 - 3)2 + (x1 + 5x2 - 10)2

Para interpretar corretamente as respostas do MATLAB no caso de sistemas


sobredeterminados, primeiro verifique os postos de A e [A b] para ver se existe uma
solução exata; se não existe, então sabemos que a resposta da divisão à esquerda é
uma solução de mínimos quadrados. Na Seção 8.5, desenvolvemos um programa ge-
ral para verificar os postos e resolver um conjunto geral de equações lineares.

Teste seus conhecimentos


T8.4-1 Resolva o seguinte conjunto:

(Resposta: Há uma única solução: x1 = 2,2143, x2 = 0,0714, que é dada pelo


método da divisão à esquerda.)
352 Introdução ao MATLAB para Engenheiros

T8.4-2 Mostre por que não há solução para o seguinte conjunto:

8.5 Um programa de solução geral


Neste capítulo, você viu que o conjunto de equações algébricas lineares 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, existe um número infinito de soluções; além
disso, r variáveis desconhecidas podem ser expressas como combinações lineares
das outras n - r variáveis desconhecidas, cujos valores são arbitrários. Nesse caso,
podemos utilizar o comando rref para encontrar as relações entre as variáveis. O
pseudocódigo na Tabela 8.5-1 pode ser utilizado para se esboçar um programa que
resolva equações antes de escrevê-lo.
Um fluxograma condensado é mostrado na Figura 8.5-1. A partir dele ou do
pseudocódigo, podemos desenvolver o arquivo de script mostrado na Tabela 8.5-2.
O programa utiliza os arranjos dados A e b para verificar as condições de posto; o
método da divisão à esquerda para obter a solução, se existir uma solução única; e
o método rref se houver um número infinito de soluções. Note que o número de
incógnitas é igual ao número de colunas em A, que é dado por size_A (2), o
segundo elemento em size_A. Note também que o posto de A não pode exceder o
número de colunas em A.

Teste seus conhecimentos


T8.5-1 Digite o arquivo de script lineq.m dado na Tabela 8.5-2 e rode-o para os
casos a seguir. Verifique suas respostas à mão.
a. A =[1,-1;1,1], b = [3;5]
b. A =[1,-1;2,-2], b = [3;6]
c. A =[1,-1;2,-2], b = [3;5]

TABELA 8.5-1 Pseudocódigo para o solucionador de equações lineares


Se o posto de A for igual ao posto de [A b], então:
Determine se o posto de A é igual ao número de incógnitas. Em caso afirmativo, há uma única
solução, que pode ser calculada utilizando-se a divisão à esquerda. Exiba os resultados e pare.
Se não for, há um número infinito de soluções, que podem ser encontradas a partir da matriz
aumentada. Exiba os resultados e pare.
Caso contrário (se o posto de A não for igual ao posto de [A b]), não há soluções. Exiba essa
mensagem e pare.
Capítulo 8 ■ Equações algébricas lineares 353

TABELA 8.5-2 Programa do MATLAB para resolver equações lineares


% Arquivo de script lineq.m
% Resolve o conjunto Ax = b, dados A e b.
% Verifique os postos de A e [A b].
if rank(A) == rank([A b])
% Os postos são iguais.
size_A = size(A);
% O posto de A é igual ao número de incógnitas?
if rank(A) == size_A(2)
% Sim. O posto de A é igual ao número de incógnitas.
disp(’Há uma única solução, que é:’)
x = A\b % Resolva utilizando a divisão à esquerda.
else
% O posto de A não é igual ao número de incógnitas.
disp(’Há um número infinito de soluções.’)
disp(’A matriz aumentada do sistema reduzido é:’)
rref([A b]) % Calcule a matriz aumentada.
end
else
% Os postos de A e [A b] não são iguais.
disp(’Não há soluções.’)
end

A, b

Não
rank (A) ⫽ rank([A b])
?

Sim

Não Exiba a mensagem:


rank (A) ⫽ # de não há soluções
incógnitas?

Sim

Existe um # infinito de soluções


Existe uma solução única.
Calcule a matriz aumentada
Calcule-a com A\b
utilizando o comando rref

Exiba a resposta Exiba a resposta

Pare
FIGURA 8.5-1 Fluxograma que ilustra um programa para resolver equações lineares.
354 Introdução ao MATLAB para Engenheiros

8.6 Resumo
Se o número de equações no conjunto for igual ao número de incógnitas, o MATLAB
fornece duas maneiras de se resolver a equação Ax = b: o método da matriz inversa,
x = inv(A)*b, e o método da divisão à esquerda, x = A\b. Se o MATLAB não
gerar uma mensagem de erro quando você utilizar um desses dois métodos, então o
conjunto de equações tem uma única solução. Você sempre pode verificar a solução
x digitando Ax para ver se o resultado é igual a b. Se você receber uma mensagem
de erro, o conjunto é subdeterminado (mesmo que o número de equações e o número
de incógnitas sejam iguais), portanto, ou ele não tem solução, ou ele tem mais do que
uma solução.
Para conjuntos subdeterminados, o MATLAB proporciona três maneiras de se
lidar com o conjunto de equações Ax = b (note que o método da matriz inversa nunca
funcionará com tais conjuntos):
1. O método da divisão à esquerda (o qual gera uma solução específica, mas não a
solução geral).
2. O método da pseudoinversa. Resolva para x digitando x = pinv(A)*b. Esse
método gera a solução de norma mínima.
3. O método da forma escalonada reduzida. Esse método utiliza o comando rref
para a obtenção de uma solução geral para algumas das incógnitas em termos
das outras incógnitas.
Os quatro métodos são resumidos na Tabela 8.6-1. Você deve ser capaz de de-
terminar se existe uma única solução, se existe um número infinito de soluções, ou
se não há soluções. Você pode fazer isso aplicando o teste de existência e unicidade
dado na página 333.
Alguns sistemas sobredeterminados apresentam soluções exatas, e elas podem
ser obtidas com o método da divisão à esquerda, mas ele não indica se a solução é
exata. Para determinar isso, primeiro verifique os postos de A e [A b] para ver se uma
solução existe; se não existir, então sabemos que a solução da divisão à esquerda é
uma resposta de mínimos quadrados.

TABELA 8.6-1 Funções matriciais e comandos para a resolução de equações lineares


Função Descrição
det(A) Calcula o determinante do arranjo A.
inv(A) Calcula a inversa da matriz A.
pinv(A) Calcula a pseudoinversa da matriz A.
rank(A) Calcula o posto da matriz A.
rref([A b]) Calcula a forma escalonada reduzida correspondente à matriz aumentada [A b].
x = inv(A)*b Resolve a equação matricial Ax = b utilizando a matriz inversa.
x = A\b Resolve a equação matricial Ax = b utilizando a divisão à esquerda.
Capítulo 8 ■ Equações algébricas lineares 355

Termos-chave
Eliminação de Gauss, 333 Método da pseudoinversa, 340
Equações homogêneas, 333 Método de mínimos quadrados, 349
Equações mal-condicionadas, 331 Norma euclidiana, 341
Estaticamente indeterminado, 341 Posto de uma matriz, 332
Forma escalonada reduzida, 343 Sistema sobredeterminado, 348
Matriz aumentada, 333 Sistema subdeterminado, 339
Matriz inversa, 330 Solução de norma mínima, 340
Matriz singular, 331 Subdeterminante, 332
Método da divisão à esquerda, 333

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

Seção 8.1
1. Resolva os seguintes problemas utilizando inversão de matriz. Verifique suas
soluções calculando A-1A.

a.

b.

c.

d.

2.* a. Resolva a seguinte equação matricial para C:

A(BC + A) = B
b. Avalie a solução obtida no item a para o caso
356 Introdução ao MATLAB para Engenheiros

3. Utilize o MATLAB para resolver os seguinte problemas:


a.

b.

c.

d.

Seção 8.2
4. O circuito mostrado na Figura P4 apresenta cinco resistências e uma tensão
aplicada. A lei de Kirchhoff das tensões aplicada a cada malha no circuito re-
sulta em:

i1

R2 R1

⫹ i2 R3

v
i3
⫺ i4

R4
R5

i5

i6

FIGURA P4
Capítulo 8 ■ Equações algébricas lineares 357

A conservação da carga aplicada a cada nó do circuito resulta em:


i6 = i1 + i2
i2 + i3 = i4
i1 = i3 + i5
i4 + i5 = i6
a. Escreva um arquivo de script do MATLAB que utiliza os valores dados da
tensão aplicada v e das cinco resistências para determinar os seis valores de
corrente.
b. Utilize o programa desenvolvido no item a para encontrar as correntes
no caso em que R1 = 1, R2 = 5, R3 = 2, R4 = 10, R5 = 5 kæ, e v = 100 V.
(1 kæ = 1000 æ.)
5.* a. Utilize o MATLAB para resolver as seguintes equações para x, y e z como
funções do parâmetro c:

b. Exiba em uma mesma plotagem as soluções para x, y e z versus c, para


-10 … c … 10.
6. A vazão de fluido em uma rede de tubulação pode ser analisada de maneira si-
milar àquela utilizada em uma rede de resistências elétricas. A Figura P6 mostra
uma rede com três tubos. As vazões volumétricas nos tubos são q1, q2 e q3. As
pressões nas extremidades dos tubos são pa, pb e pc. A pressão na junção é p1. Sob
determinadas condições, a relação pressão-vazão em um tubo tem a mesma forma
que a relação tensão-corrente em um resistor. Assim, para os três tubos, nós temos

em que Ri são as resistências dos tubos. A partir da conservação da massa,


q1 = q2 + q3.
a. Escreva estas equações em uma forma matricial Ax = b adequada para a
solução para as três vazões q1, q2 e q3 e a pressão p1, dados os valores de
pressão pa, pb e pc e os valores de resistência R1, R2 e R3. Encontre as ex-
pressões para A e b.
358 Introdução ao MATLAB para Engenheiros

pb

q2
R2

R1
pa q1 p1

R3
q3

pc

(a)

pb

R2

R1
p1
pa

R3

pc

(b)
FIGURA P6

b. Utilize o MATLAB para resolver as equações matriciais obtidas no item a para


o caso em que pa = 4320 lb/ft2, pb = 3600 lb/ft2 e pc = 2880 lb/ft2. Esses valores
correspondem a 30, 25 3 20 psi, respectivamente (1 psi = 1 lb/in2, e a pressão
atmosférica é 14,7 psi). Utilize os valores de resistência R1 = 10 000, R2 =
14 000 lb s/ft5. Esses valores correspondem a óleo combustível escoando atra-
vés de tubos com 2 ft de comprimento, com diâmetro de 2 e 1,4 in, respectiva-
mente. As unidades das respostas são ft3/s para as vazões e lb/ft2 para a pressão.
Capítulo 8 ■ Equações algébricas lineares 359

Mão

L2 ␪2

L1 Motor do cotovelo
␪1
x
Motor da base
(a)

Trajetória
Final da mão

Início

(b)
FIGURA P7

7. A Figura P7 ilustra um manipulador robótico que possui dois “elos” conecta-


dos por duas “articulações” – uma articulação de ombro (ou base articulada)
e uma articulação de cotovelo. Há um motor em cada articulação. Os ângulos
das articulações são ␪1 e ␪2. As coordenadas (x, y) da mão do manipulador são
dadas por

em que L1 e L2 são os comprimentos dos elos.


Polinômios são utilizados para controlar o movimento de robôs. Se o manipu-
lador partir do repouso com velocidade e aceleração nulas, os seguintes poli-
nômios podem ser utilizados para gerar os comandos a serem enviados para os
controladores dos motores das articulações:
␪1(t) = ␪1(0) + a1t3 + a2t4 + a3t5
␪2(t) = ␪2(0) + b1t3 + b2t4 + b3t5
360 Introdução ao MATLAB para Engenheiros

em que ␪1(0) e ␪2(0) são os valores iniciais em t = 0. Os ângulos ␪1(tf) e


␪2(tf) são os ângulos das articulações correspondentes as destino desejado
do manipulador no tempo tf. Os valores de ␪1(0), ␪2(0), ␪1(tf) e ␪2(tf) podem
ser encontrados a partir da trigonometria, se os valores inicial e final das co-
ordenadas (x,y) da mão forem especificados.
a. Escreva uma equação matricial que possa ser resolvida para os coeficientes
a1, a2 e a3, dados os valores de ␪1(0), ␪1(tf) e tf. Obtenha uma equação simi-
lar para os coeficientes b1, b2 e b3.
b. Utilize o MATLAB para encontrar os coeficientes dos polinômios dados os
valores tf = 2 s, ␪1(0) = -19°, ␪2(0) = 44°, ␪1(tf) = 43° e ␪2(tf)= 151°. (Esses
valores correspondem a uma localização inicial da mão em x = 6,5, y = 0 ft e a
uma localização final em x = 0, y = 2 ft para L1 = 4 e L2 = 3 ft.)
c. Utilize os resultados da parte b para plotar a trajetória da mão.
8.* Engenheiros devem ser capazes de prever a taxa de perda de calor através das
paredes de um edifício para determinar os requisitos do sistema de aquecimen-
to. Eles fazem isso utilizando o conceito de resistência térmica R, que relacio-
na o fluxo de calor q através de um material com a diferença de temperatura
¢T ao longo do material: q = ¢T/R. Essa relação é igual à relação tensão-cor-
rente para um resistor elétrico: i = v/R. Portanto, o fluxo de calor exerce o pa-
pel da corrente elétrica, e a diferença de temperatura exerce o papel da tensão.
A unidade do SI para q é o watt (W), que é igual a 1 joule/segundo (J/s).
A parede mostrada na Figura P8 consiste em quatro camadas: uma camada
mais interna de gesso/ripa com espessura de 10 mm, uma camada de isolamen-
to de fibra de vidro com espessura de 125 mm, uma camada de madeira com

Ripa Isolamento Madeira Tijolo

Ar interno Ar externo

Ti T1 T2 T3 To

(a)

Ti T1 T2 T3 To

R1 R2 R3 R4

(b)
FIGURA P8
Capítulo 8 ■ Equações algébricas lineares 361

espessura de 60 mm e uma camada externa de tijolo com espessura de 50 mm.


Se considerarmos que as temperaturas interna e externa Ti e To são mantidas
constantes por algum tempo, então a energia calórica armazenada nas camadas
é constante, e assim o fluxo de calor através de cada camada é o mesmo. Apli-
cando a conservação da energia, as seguintes equações são obtidas:

A resistência térmica de um material sólido é dada por R = D/k, em que D é a


espessura do material e k é a condutividade térmica do material. Para os ma-
teriais dados, as resistências para 1 m2 de área de parede são R1 = 0,036,
R2 = 4,01, R3 = 0,408 e R4 = 0,038 K/W.
Suponha que Ti = 20°C e To = -10°C. Encontre as outras três temperaturas e a
taxa de perda de calor q, em watts. Calcule a taxa de perda de calor se a área da
parede for igual a 10 m2.
9. O conceito de resistência térmica descrito no Problema 8 pode ser utilizado
para encontrar a distribuição de temperatura na placa quadrada plana mostrada
na Figura P9(a).

Ta T1 T2

T3 T4 Tb

(a)

T1 T2
Ta

R R

R R

R R

T3 Tb
T4

(b)
FIGURA P9
362 Introdução ao MATLAB para Engenheiros

As bordas da placa são isoladas de maneira que não haja perda de calor, exceto
em dois pontos em que a temperatura pode assumir o valores Ta e Tb, respecti-
vamente. A temperatura varia ao longo da placa, portanto não há um ponto úni-
co capaz de descrever a temperatura da placa. Uma maneira de estimar a distri-
buição de temperatura é imaginar que a placa consista em quatro subquadrados
e calcular a temperatura em cada subquadrado. Seja R a resistência térmica do
material entre os centros dos subquadrados adjacentes. Desse modo, podemos
pensar sobre o problema como sendo a rede de resistências elétricas mostrada
na parte (b) da figura. Seja qij o fluxo de calor entre os pontos cujas tempera-
turas são Ti e Tj. Se Ta e Tb se mantiverem constantes por algum tempo, então
a energia calórica armazenada em cada subquadrado também será constante, e
o fluxo de calor entre cada subquadrado será constante. Sob essas condições,
a conservação de energia diz que o fluxo de calor que entra no subquadrado é
igual ao fluxo de calor que sai dele. Aplicando esse princípio a cada subqua-
drado, obtemos as seguintes equações:

Ao substituirmos q = (Ti - Tj)/R, verificamos que R pode ser cancelado de to-


das as equações, e elas podem ser rearranjadas da seguinte maneira:

Essas equações nos dizem que a temperatura de cada subquadrado é a média


das temperaturas nos quadrados adjacentes!
Resolva essas equações para o caso em que Ta = 150°C e Tb = 20°C.
10. Utilize o princípio de média desenvolvido no Problema 9 para encontrar a
distribuição de temperatura da placa mostrada na Figura P10, utilizando o grid
3 * 3 e os valores dados Ta = 150°C e Tb = 20°C.
Capítulo 8 ■ Equações algébricas lineares 363

Ta T1 T2 T3

T4 T5 T6

T7 T8 T9 Tb

FIGURA P10

Seção 8.3
11.* Resolva as seguintes equações:

12. A tabela a seguir mostra quantas horas de processo são necessárias para que
os reatores A e B produzam uma tonelada de cada um dos produtos químicos
1, 2 e 3. Os dois reatores são disponíveis por 35 e 40 horas por semana, res-
pectivamente.

Horas Produto 1 Produto 2 Produto 3


Reator A 6 2 10
Reator B 3 5 2

Sejam x, y e z o número de toneladas de cada um dos produtos 1, 2 e 3 que po-


dem ser produzidos em uma semana.
a. Utilize os dados na tabela para escrever duas equações em termos de x, y e
z. Determine se existe uma única solução. Se não, utilize o MATLAB para
encontrar as relações entre x, y e z.
b. Note que valores negativos de x, y e z não têm significado nesse caso. En-
contre as faixas de valores possíveis para x, y e z.
c. Suponha que os lucros sejam de $200, $300 e $100 para cada produto 1, 2 e
3, respectivamente. Encontre os valores de x, y e z que maximizam o lucro.
d. Suponha que os lucros sejam de $200, $500 e $100 para cada produto 1, 2 e
3, respectivamente. Encontre os valores de x, y e z que maximizam o lucro.
364 Introdução ao MATLAB para Engenheiros

200 300 100

1 f1 2 f2 3
100 500

f3 f4 f5

4 5 6
300 200
f6 f7

100 200 400

FIGURA P13

13. Veja a Figura P13. Suponha que os veículos não param dentro da rede. Um
engenheiro de tráfego deseja saber se os fluxos de tráfego f1, f2, ..., f7 (em veí-
culos por hora) podem ser calculados a partir dos fluxos medidos mostrados na
figura. Se não, então determine quantos sensores de tráfego a mais precisam
ser instalados e obtenha as expressões para os outros fluxos de tráfego em ter-
mos das quantidades medidas.

Seção 8.4
14.* Utilize o MATLAB para resolver o seguinte problema:

15.* Utilize o MATLAB para resolver o seguinte problema:

16. a. Utilize o MATLAB para encontrar os coeficientes do polinômio quadráti-


co y = ax2 + bx + c que passa pelos três pontos (x, y) = (1, 4), (4, 73), (5,
120).
b. Utilize o MATLAB para encontrar os coeficientes do polinômio quadrático
y = ax3 + bx2 + cx + d que passa pelos três pontos dados no item a.
Capítulo 8 ■ Equações algébricas lineares 365

17. Utilize o programa em MATLAB dado na Tabela 8.5-2 para resolver os seguin-
tes problemas:
a. Problema 3d
b. Problema 11
c. Problema 14
d. Problema 15
Foto: Donovan Reese/Getty Images/RF

Engenharia no
Século XXI…
Reconstruindo a infraestrutura

D
urante a Grande Depressão, muitas obras públicas de melhoria da infraes-
trutura nacional foram empreendidas para estimular a economia dos Estados
Unidos e gerar emprego. Esses projetos incluíram estradas, pontes, sistemas
de abastecimento de água e redes de distribuição de energia elétrica. Após a Segunda
Guerra Mundial, um surto semelhante culminou na construção do sistema de rodo-
vias interestadual. Ao entrarmos no século XXI, boa parte da infraestrutura já tem de
30 a 70 anos e está literalmente em ruínas ou ultrapassada. Uma pesquisa mostrou
que mais de 25% das pontes dos Estados Unidos estão em condições precárias e pre-
cisam ser reparadas ou substituídas.
A reconstrução da infraestrutura exige métodos de engenharia diferentes
daqueles do passado, porque os custos de trabalho e material são muito maiores e as
questões ambientais e sociais têm mais importância do que antes. Os engenheiros de
infraestrutura devem explorar novos materiais, tecnologias de inspeção, técnicas de
construção e máquinas que poupem trabalho.
Além disso, alguns componentes de infraestrutura, como as redes de comuni-
cação, devem ser substituídos porque estão ultrapassados, não oferecem capacidade
suficiente e não conseguem tirar proveito das novas tecnologias. Um exemplo é a in-
fraestrutura de informação, que inclui as instalações físicas para transmitir, armaze-
nar, processar e exibir voz, dados e imagens. Novas tecnologias de comunicação e de
redes de computadores serão necessárias para tais melhorias. Muitos dos toolboxes
do MATLAB fornecem suporte avançado para esse trabalho, incluindo os toolboxes
de Finanças, Comunicações, Processamento de Imagens, Processamento de Sinais,
Equações Diferenciais Parciais e Wavelets. ■
9
Métodos numéricos
para cálculo e equações
diferenciais

Este capítulo aborda métodos numéricos para o cálculo de integrais e de derivadas e


para a resolução de equações diferenciais ordinárias. Algumas integrais não podem
ser avaliadas analiticamente, é preciso calculá-las numericamente com um método
aproximado (Seção 9.1). Além disso, muitas vezes precisamos utilizar dados para
estimar taxas de variação, e para isso faz-se necessária uma estimativa numérica da
derivada (Seção 9.2). Finalmente, muitas equações diferenciais não podem ser resol-
vidas analiticamente, portanto, precisamos ser capazes de resolvê-las utilizando téc-
nicas numéricas apropriadas. A Seção 9.3 aborda equações diferenciais de primeira
ordem, e a Seção 9.4 estende os métodos para equações de ordem superior. Métodos
mais poderosos estão disponíveis para equações lineares. A Seção 9.5 trata desses
métodos.

9.1 Integração numérica


A integral de uma função f(x) para a … x … b pode ser interpretada como a área entre
a curva f(x) e o eixo x, delimitada pelos valores x = a e x = b. Se utilizarmos A para
representar essa área, então podemos escrever A como:

(9.1-1)
368 Introdução ao MATLAB para Engenheiros

INTEGRAL Uma integral é chamada de integral definida se ela tiver limites de integração espe-
DEFINIDA cificados. Integrais indefinidas não têm limites de integração especificados. Integrais
impróprias podem assumir um valor infinito, dependendo dos seus limites de integra-
INTEGRAL ção. Por exemplo, a seguinte integral pode ser encontrada na maioria das tabelas de
INDEFINIDA
integrais:
INTEGRAL
IMPRÓPRIA

Entretanto, ela é uma integral imprópria se os limites de integração incluírem o ponto


x = 1. Assim, mesmo que uma integral possa ser encontrada em uma tabela de inte-
SINGULARIDADES grais, você deve examinar o integrando para verificar a existência de singularidades,
que são pontos nos quais o integrando não é definido. O mesmo alerta se aplica quan-
do você estiver utilizando métodos numéricos para avaliar integrais.

Integração trapezoidal
A maneira mais simples de encontrar a área sob a curva é dividindo-a em retângu-
los (Figura 9.1-1a). Se as larguras dos retângulos forem suficientemente pequenas,
a soma de suas áreas produzirá o valor aproximado da integral. Um método mais
sofisticado é a utilização de elementos trapezoidais (Figura 9.1-1b). Cada trapézio
é chamado de um painel. Não é necessário utilizar painéis de mesma largura; para
aumentar a precisão do método, você pode utilizar painéis mais estreitos em regiões
onde a função varia rapidamente. Quando as larguras são ajustadas de acordo com o
comportamento da função, o método é adaptativo. O MATLAB implementa a inte-
gração trapezoidal com a função trapz. Sua sintaxe é trapz(x,y), em que y é
o arranjo que contém os valores da função nos pontos contidos no arranjo x. Se você

y y
Retangular Trapezoidal

y ⫽ f(x) y ⫽ f(x)

x x
a b a b

(a) (b)
FIGURA 9.1-1 Ilustração da integração numérica retangular (a) e trapezoidal (b).
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 369

deseja calcular a integral de uma única função, então y é um vetor. Para integrar mais
do que uma função, insira os seus valores em uma matriz y; trapz(x,y) calculará
a integral para cada coluna de y.
Você não pode especificar diretamente uma função a ser integrada com o co-
mando trapz; primeiro você deve calcular e armazenar os valores da função em um
arranjo. Posteriormente discutiremos outras duas funções de integração, as funções
quad e quadl, as quais aceitam funções diretamente. Entretanto, elas não são ca-
pazes de manipular arranjos de valores. Desse modo, as funções se complementam
entre si. A função trapz é resumida na Tabela 9.1-1.
Como um exemplo simples da utilização da função trapz, calculemos a in-
tegral

(9.1-2)

cuja resposta exata é A = 2. Para investigar o efeito da largura do painel, utilizemos


primeiramente 10 painéis com larguras iguais de ␲/10. O arquivo de script é:
x = linspace(0,pi,10);
y = sin(x);
A = trapz(x,y)

TABELA 9.1-1 Sintaxe básica de funções de integração numérica


Comando Descrição
dblquad(fun,a,b,c,d) Calcula a integral dupla da função f(x,y) entre os limites a … x …
b e c … y … d. A entrada fun especifica a função que calcula o
integrando. Ela deve aceitar como argumento um vetor x e um
escalar y, e deve retornar um vetor como resultado.
polyint(p,C) Calcula a integral do polinômio p utilizando uma constante de
integração C opcional especificada pelo usuário.
quad(fun,a,b) Utiliza uma regra de Simpson adaptativa para calcular a
integral da função fun entre os limites a e b. A entrada fun,
que representa o integrando f(x), é um handle para a função
integrando. Ela deve aceitar como argumento um vetor x e
retornar um vetor y.
quadl(fun,a,b) Utiliza a integração de Lobatto. A sintaxe é idêntica à da
função quad.
trapz(x,y) Utiliza a integração trapezoidal para calcular a integral de y
com relação a x, em que y é o arranjo que contém os valores
da função nos pontos contidos no arranjo x.
triplequad(fun,a,b,c,d,e,f) Calcula a integral tripla da função f(x,y,z) entre os limites
a … x … b, c … y … d e e … z … f. A entrada fun especifica
a função que calcula o integrando. Ela deve aceitar como
argumento um vetor x, um escalar y e um escalar z, e deve
retornar um vetor como resultado.
370 Introdução ao MATLAB para Engenheiros

A resposta é A = 1,9797, que implica um erro relativo de 100(2 - 1,9797)/2 = 1%.


Agora, tentemos 100 painéis de mesma largura; substitua o arranjo x por
x = linspace(0,pi,100). A resposta é A = 1,9998, e o erro relativo é de
100(2 - 1,9998)/2 = 0,01%. Se examinarmos a plotagem do integrando sen x,veremos
que a função varia mais rapidamente perto de x = 0 e x = ␲ do que perto de x = ␲/2.
Dessa maneira, poderíamos atingir a mesma precisão utilizando uma quantidade me-
nor de painéis, porém considerando painéis mais estreitos perto de x = 0 e x = ␲.
Normalmente utilizamos a função trapz quando o integrando é dado como
uma tabela de valores. De outro modo, se o integrando for dado como uma função,
devemos utilizar as funções quad ou quadl, que serão introduzidas em breve.

EXEMPLO 9.1-1 Velocidade a partir de um acelerômetro

Um acelerômetro é utilizado em aeronaves, foguetes e outros veículos para estimar a velo-


cidade e o deslocamento do próprio veículo. O acelerômetro integra o sinal de aceleração
para produzir uma estimativa da velocidade, e integra a estimativa da velocidade para
produzir uma estimativa do deslocamento. Suponha que o veículo comece sua trajetória a
partir do repouso em t = 0, e sua aceleração medida é dada na seguinte tabela:

Tempo (s) 0 1 2 3 4 5 6 7 8 9 10
Aceleração (m/s2) 0 2 4 7 11 17 24 32 41 48 51

(a) Estime a velocidade v após 10 s.


(b) Estime a velocidade nos instantes t = 1, 2, ..., 10 s.
■ Solução
(a) A velocidade inicial é zero, portanto, y(0) = 0. A relação entre a velocidade e a acele-
ração a(t) é:

O arquivo de script é mostrado abaixo:


t = 0:10;
a = [0,2,4,7,11,17,24,32,41,48,51];
v10 = trapz(t,a)
A resposta para a velocidade após 10 s é v10, que é igual a 211,5 m/s.
(b) O seguinte arquivo de script utiliza o fato de que a velocidade pode ser expressa
como

em que y(t1) = 0:
t = 0:10;
a = [0,2,4,7,11,17,24,32,41,48,51];
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 371

v(1) = 0;
for k = 1:10
v(k+1) = trapz(t(k:k+1), a(k:k+1))+v(k);
end
disp([t’,v’])
As respostas são dadas na seguinte tabela:

Tempo (s) 0 1 2 3 4 5 6 7 8 9 10
Velocidade (m/s) 0 1 4 9,5 18,5 32,5 53 81 117 162 211,5

Teste seus conhecimentos


T9.1-1 Modifique o arquivo de script dado no item (b) do Exemplo 9.1-1 para es-
timar os deslocamentos nos instantes t = 1, 2, ..., 10 s. (Resposta parcial: O
deslocamento após 10 s é de 584,25 m).

Funções de quadratura
Outra abordagem à integração numérica é a regra de Simpson, que divide a faixa do
integrando b - a em um número par de seções e utiliza uma função quadrática dife-
rente para representar o integrando em cada painel. Uma função quadrática é carac-
terizada por três parâmetros, e a regra de Simpson calcula esses parâmetros exigindo
que ela passe por três pontos da função correspondentes a dois painéis adjacentes.
Para obter uma melhor precisão, podemos utilizar polinômios de grau maior do que 2.
A função quad do MATLAB implementa uma versão adaptativa da regra de
Simpson. A função quadl é baseada em um método de integração de Lobatto adap-
tativo, em que a letra “l” em quadl representa Lobatto. O termo quad é uma abre-
viação de quadratura, que é um termo antigo para o processo de medição de áreas.
Alguns autores fazem distinção entre os termos quadratura e integração, reservando
para integração o significado de integração numérica de equações diferenciais ordi-
nárias. Nós não faremos essa distinção.
A função quad(fun,a,b) calcula a integral da função fun entre os limi-
tes a e b. A entrada fun, que representa o integrando f(x), pode ser um handle da
função integrando (o método preferido) ou o nome da função como uma string de
caracteres (isto é, entre aspas simples). A função y = f(x) deve aceitar como argu-
mento um vetor x e retornar o vetor y. A sintaxe básica de quadl é idêntica e está
resumida na Tabela 9.1-1.
Para ilustrar, calculemos a integral dada na Equação (9.1-2). A sessão consiste
em um comando: A = quad(@sin,0,pi) ou A = quad(’sin’,0,pi). A
resposta dada pelo MATLAB é A = 2.0000, que é correta até a quarta casa deci-
mal. Podemos utilizar quadl da mesma maneira.
Uma vez que as funções quad e quadl chamam a função integrando utilizan-
do argumentos que são vetores, você sempre deve utilizar operações de arranjo ao
definir a função. O exemplo a seguir mostra como isto é feito.
372 Introdução ao MATLAB para Engenheiros

EXEMPLO 9.1-2 Avaliação da integral cosseno de Fresnel

Algumas integrais aparentemente simples não apresentam solução em uma forma fecha-
da. Um exemplo é a integral cosseno de Fresnel:

(9.1-3)

(a) Demonstre duas maneiras de calcular a integral quando o limite superior é

(b) Demonstre a utilização de funções aninhadas para calcular a integral mais geral

(9.1-4)

para n = 2 e para n = 3.
■ Solução
(a) O integrando cos x2 obviamente não contém nenhuma singularidade que possa causar
problemas para a função de integração. Demonstraremos duas maneiras de utilizar a fun-
ção quad.
1. Com um arquivo de função: Defina o integrando com uma função definida pelo
usuário, como é mostrado pelo seguinte arquivo de função:

function c2 = cossq(x)
c2 = cos(x.^2);
A função quad é chamada da seguinte maneira: A = quad(@cossq,0,sqrt(2*pi)).
O resultado é A = 0,6119.
2. Com uma função anônima (funções anônimas são discutidas na Seção 3.3): A ses-
são é:

As duas linhas podem ser combinadas em uma única linha da seguinte maneira:
A = quad(@(x)cos(x.^2),0,sqrt(2*pi))
A vantagem de se utilizar uma função anônima é o fato de que você não precisa
criar e salvar um arquivo de função. Entretanto, para funções integrando complicadas, é
preferível utilizar um arquivo de função.
(b) Uma vez que a função quad exige que a função integrando tenha apenas um argumen-
to, o seguinte código não funcionará:
>>cossq = @(x)cos(x.^n);
>>n = 2;
>>A = quad(cossq,0,sqrt(2*pi))
??? Undefined function or variable ’n’.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 373

Em vez disso, passaremos o parâmetro com uma função aninhada (funções aninha-
das são discutidas na Seção 3.3). Primeiro, crie e salve a seguinte função:

A sessão para n = 2 e n = 3 é a seguinte:

As funções quad têm alguns argumentos opcionais para analisar e ajustar a eficiência e a
precisão dos algoritmos. Digite help quad para mais detalhes.

Teste seus conhecimentos


T9.1-2 Utilize as funções quad e quadl para calcular a integral

e compare as repostas com aquela obtida a partir da solução em forma fecha-


da, que é A = 0,9163.

Integração polinomial
Há no MATLAB a função polyint para o cálculo da integral de polinômios. A sin-
taxe q = polyint(p, C) retorna um polinômio q que representa a integral do po-
linômio p com uma constante de integração C especificada pelo usuário. Os elementos
do vetor p são os coeficientes do polinômio, arranjados em ordem decrescente de
potência. A sintaxe polyint(p) considera que a constante de integração C é zero.
Por exemplo, a integral de 12x 3 + 9x 2 + 8x + 5 é obtida a partir de
q = polyint([12,9,8,5], 10). A resposta é q = [3, 3, 4, 5, 10], que
corresponde a 3x 4 + 3x 3 + 4x 2 + 5x + 10. Uma vez que as integrais polinomiais
podem ser obtidas a partir de uma fórmula simbólica, a função polyint não é
uma operação de integração numérica.
374 Introdução ao MATLAB para Engenheiros

Integrais duplas
A função dblquad calcula integrais duplas. Considere a seguinte integral:

A sintaxe básica é
A = dblquad(fun, a, b, c, d)
em que fun é o handle de uma função do usuário que define o integrando f(x,y). A
função deve aceitar um vetor x e um escalar y, e deve retornar um vetor, portanto, as
operações apropriadas de arranjos devem ser utilizadas. A sintaxe estendida permite
ao usuário ajustar a precisão e utilizar quadl ou uma rotina de quadratura definida
pelo usuário. Veja o Sistema de Ajuda do MATLAB para mais detalhes. Por exemplo,
para utilizar uma função anônima a fim de calcular a integral

você deve digitar:


>>fun = @(x,y)x.*y^2;
>>A = dblquad(fun, 1, 3, 0, 1)
A resposta é A = 1,3333.
A integral acima é calculada sobre uma região retangular especificada por
1 … x … 3, 0 … y … 1. Algumas integrais duplas são especificadas sobre uma região
que não é retangular. Esses problemas podem ser resolvidos utilizando-se uma trans-
formação de variáveis. Você também pode utilizar uma região retangular que envolve
a região que não é retangular e forçar o integrando a ser zero fora desta última, uti-
lizando operadores relacionais do MATLAB, por exemplo. Veja o Problema 15. O
exemplo a seguir ilustra a primeira abordagem.

EXEMPLO 9.1-3 Integral dupla sobre uma região não retangular

Calcule a integral

ao longo da região R limitada pelas linhas


x - y = ;1 2x + y = ;2
■ Solução
Devemos converter a integral em outra que é especificada sobre uma região retangular.
Para fazer isso, sejam u = x - y e v = 2x + y. Assim, utilizando o Jacobiano, obtemos:
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 375

Assim, a região R é especificada como uma região retangular em termos de u e y. Seus


limites são dados por u = ±1 e y = ±2, e a integral assume o seguinte formato:

A sessão do MATLAB é:
>>fun = @(u,v)u.^4*v^2;
>>A = (1/3)*dblquad(fun, -1, 1, -2, 2)
A resposta é A = 0,7111.

Integrais triplas
A função triplequad calcula integrais triplas. Considere a seguinte integral:

A sintaxe básica é:
A = triplequad(fun, a, b, c, d, e, f)
em que fun é o handle de uma função do usuário que define o integrando f(x,y,z).
A função deve aceitar um vetor x, um escalar y e um escalar z, e deve retornar um
vetor, portanto, as operações apropriadas de arranjos devem ser utilizadas. A sintaxe
estendida permite ao usuário ajustar a precisão e utilizar quadl ou uma rotina de
quadratura definida pelo usuário. Veja o Sistema de Ajuda do MATLAB para mais
detalhes. Por exemplo, para utilizar uma função anônima a fim de calcular a integral

você deve digitar:


>>fun = @(x,y,z)(x*y-y^2)/z;
>>A = triplequad(fun, 1, 3, 0, 2, 1, 2)
A resposta é A = 1,8484.

9.2 Diferenciação numérica


A derivada de uma função pode ser interpretada graficamente como a sua inclinação.
Essa interpretação conduz a vários métodos para calcular a derivada de um conjunto
de dados. A Figura 9.2-1 mostra três pontos que representam a função y(x). Lem-
bre-se de que a definição de derivada é:

(9.2-1)
376 Introdução ao MATLAB para Engenheiros

Inclinação verdadeira

y3
y ⫽ f(x)
y2

B
y1 C
A

⌬x ⌬x

x1 x2 x3

FIGURA 9.2-1 Ilustração de métodos para estimar a derivada dy/dx.

O sucesso da diferenciação numérica depende fortemente de dois fatores: o espaça-


mento entre os pontos do conjunto de dados e o espalhamento presente nos dados
devido a erros de medição. Quanto maior o espaçamento, mais difícil é estimar a de-
rivada. Nesse caso, assumimos que o espaçamento entre as medições é regular; isto é,
x3 - x2 = x2 - x1 = ¢x. Suponha que queiramos estimar a derivada dy/dx no ponto x2.
A resposta correta é a inclinação da linha reta tangente ao ponto (x2, y2); mas não te-
mos um segundo ponto naquela reta, portanto, não podemos encontrar sua inclinação.
Assim, devemos estimar a inclinação utilizando pontos próximos. Uma estimativa
pode ser obtida a partir da reta A na figura. Sua inclinação é:

(9.2-2)

DIFERENÇA Essa estimativa da derivada é chamada de fórmula da diferença para trás, e é, na ver-
PARA TRÁS dade, uma melhor estimativa da derivada em x = x1 + (¢x)/2 do que em x = x2. Outra
estimativa pode ser obtida a partir da reta B. Sua curvatura é:

(9.2-3)

DIFERENÇA Essa estimativa é chamada de fórmula da diferença para a frente, e é uma melhor
PARA A FRENTE estimativa da derivada em x = x2 + (¢x)/2 do que em x = x2. Examinando a plotagem,
você pode pensar que a média dessas duas inclinações poderia fornecer uma melhor
estimativa da derivada em x = x2, uma vez que a média tende a cancelar os efeitos de
erro de medição. A média de mA e mB é

(9.2-4)
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 377

Essa é a inclinação da reta C, que conecta o primeiro e o terceiro ponto do conjunto


DIFERENÇA de dados. Essa estimativa da derivada é chamada de fórmula da diferença central.
CENTRAL
A função diff
Há no MATLAB a função diff, que pode ser utilizada para calcular estimativas de
derivada. Sua sintaxe é d = diff(x), em que x é um vetor de valores, e o resul-
tado é um vetor d contendo as diferenças entre elementos adjacentes em x. Isto é,
se x tiver n elementos, d terá n - 1 elementos, em que d = [x(2) – x(1), x(3) – x(2),
..., x(n) – x(n – 1)]. Por exemplo, se x = [5, 7, 12, -20], então diff(x)
retorna o vetor [2, 5, - 32]. A derivada dy/dx pode ser estimada a partir de
diff(y)./diff(x).
O seguinte arquivo de script implementa os métodos da diferença para trás e da
diferença central para dados artificiais gerados a partir de um sinal senoidal que é me-
dido 51 vezes durante um semiciclo. O erro de medição é uniformemente distribuído
entre -0,025 e 0,025.
x = 0:pi/50:pi;
n = length(x);
% Função de geração de dados com erro aleatório de +/–0.025.
y = sin(x)+.05*(rand(1,51)–0.5);
% Estimativa de dy/dx via diferença para trás.
d1 = diff(y)./diff(x);
subplot(2,1,1)
plot(x(2:n),d1,x(2:n),d1,’o’)
% Estimativa de dy/dx via diferença central.
d2 = (y(3:n)–y(1:n–2))./(x(3:n)–x(1:n–2));
subplot(2,1,2)
plot(x(2:n–1),d2,x(2:n–1),d2,’o’)

Teste seus conhecimentos


T9.2-1 Modifique o programa anterior para estimar a derivada utilizando o método
da diferença para a frente. Plote os resultados e compare-os com os resulta-
dos obtidos com os métodos da diferença para trás e da diferença central.

Derivadas de polinômios
Há no MATLAB a função polyder para calcular a derivada de um polinômio. Sua
sintaxe apresenta várias formas. A forma básica é d = polyder(p), em que p
é um vetor cujos elementos são os coeficientes do polinômio, arranjados em ordem
decrescente de potência. A saída d é um vetor que contém os coeficientes da derivada
do polinômio.
A segunda forma da sintaxe é d = polyder(p1,p2). Essa forma calcula a
derivada do produto de dois polinômios p1 e p2. A terceira forma é [num, den] =
378 Introdução ao MATLAB para Engenheiros

polyder(p2,p1). Essa forma calcula a derivada do quociente p2/p1. O vetor de


coeficientes do numerador da derivada é dado por num. O denominador é dado por
den.
Aqui estão alguns exemplos da utilização de polyder. Sendo p1 = 5x + 2 e p2
= 10x2 + 4x - 3, então,

Esses resultados podem ser obtidos com o seguinte programa:


p1 = [5, 2];p2 = [10, 4, -3];
% Derivada de p2.
der2 = polyder(p2)
% Derivada de p1*p2.
prod = polyder(p1,p2)
% Derivada de p2/p1.
[num, den] = polyder(p2,p1)
Os resultados são der2 = [20, 4], prod = [150, 80, -7], num = [50,
40, 23] e den = [25, 20, 4].
Uma vez que as derivadas de polinômios podem ser obtidas a partir de uma fór-
mula simbólica, a função polyder não é uma operação de diferenciação numérica.

Gradientes
O gradiente §f de uma função f(x, y) é um vetor que aponta para a direção de valores
crescentes de f(x, y). Ele é definido por

em que i e j são vetores unitários nas direções x e y, respectivamente. O conceito pode


ser estendido para funções de três ou mais variáveis.
No MATLAB, o gradiente de um conjunto de dados que representa uma fun-
ção bidimensional f(x,y) pode ser calculado com a função gradient. Sua sintaxe
é [df_dx, df_dy] = gradient(f, dx, dy), em que df_dx e df_dy
representam 0f/0x e 0f/0y, e dx e dy são os espaçamentos nos valores de x e y associa-
dos com os valores numéricos de f. A sintaxe pode ser estendida para incluir funções
de três ou mais variáveis.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 379

0
y

⫺1

⫺2
⫺2 ⫺1,5 ⫺1 ⫺0,5 0 0,5 1 1,5 2
x

0,5

0
f

⫺0,5
2
1 2
0 1
⫺1 0
⫺1
⫺2 ⫺2
y x

FIGURA 9.2-2 Plotagens do gradiente, das curvas de contorno e da superfície da função f(x, y)
2 + y2)2
= xe-(x + y2.

O programa a seguir plota as curvas de contorno e o gradiente (indicado pelas


setas) para a função

As plotagens são mostradas na Figura 9.2-2. As setas apontam na direção de cresci-


mento de f.
[x,y] = meshgrid(–2:0.25:2);
f = x.*exp(–((x–y.^2).^2+y.^2));
dx = x(1,2) – x(1,1); dy = y(2,1) – y(1,1);
[df_dx, df_dy] = gradient(f, dx, dy);
subplot(2,1,1)
contour(x,y,f), xlabel(’x’), ylabel(’y’), . . .
hold on, quiver(x,y,df_dx, df_dy), hold off
subplot(2,1,2)
mesh(x,y,f),xlabel(’x’),ylabel(’y’),zlabel(’f’)
380 Introdução ao MATLAB para Engenheiros

TABELA 9.2-1 Funções de diferenciação numérica


Comando Descrição
d = diff(x) Retorna um vetor d que contém as diferenças entre
elementos adjacentes no vetor x.
[df_dx, df_dy] = Calcula o gradiente da função f(x, y), em que df_dx
gradient(f, dx, dy) e df_dy representam 0f/0x e 0f/0y, e dx e dy são os
espaçamentos nos valores de x e y associados com os
valores numéricos de f.
d = polyder(p) Retorna um vetor d que contém os coeficientes da derivada
do polinômio representado pelo vetor p.
d = polyder(p1,p2) Retorna um vetor d que contém os coeficientes do
polinômio que é a derivada do produto dos polinômios
representados por p1 e p2.
[num, den] = polyder(p2,p1) Retorna os vetores num e den que contêm os coeficientes
dos polinômios do numerador e do denominador da
derivada do quociente p2/p1, em que p1 e p2 são
polinômios.

A curvatura é dada pela expressão de derivada de segunda ordem chamada de


LAPLACIANO Laplaciano.

Ela pode ser calculada com a função de12. Veja o Sistema de Ajuda do MATLAB
para mais detalhes.
As funções de diferenciação do MATLAB discutidas aqui são resumidas na
Tabela 9.2-1.

9.3 Equações diferenciais de primeira ordem


Nesta seção, introduziremos métodos numéricos para a resolução de equações dife-
renciais de primeira ordem. Na Seção 9.4, mostraremos como estender as técnicas
para equações de ordem superior.
EQUAÇÃO Uma equação diferencial ordinária (EDO) é uma equação que contém de-
DIFERENCIAL rivadas ordinárias da variável dependente. Uma equação que contenha derivadas
ORDINÁRIA (EDO)
parciais com relação a duas ou mais variáveis independentes é uma equação dife-
rencial parcial (EDP). Métodos de solução para EDPs são um tópico avançado que
PROBLEMA DE não será tratado neste texto. Neste capítulo, nos limitaremos a problemas de valor
VALOR INICIAL inicial (PVIs). Esses são problemas em que as EDOs devem ser resolvidas para
um dado conjunto de valores especificados em um tempo inicial, que normalmente
corresponde a t = 0. Outros tipos de problemas de EDOs são discutidos no final da
Seção 9.6.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 381

Será conveniente utilizar a notação abreviada com “ponto” para derivadas.

RESPOSTA A resposta livre de uma equação diferencial, às vezes chamada de solução ho-
LIVRE mogênea ou de resposta inicial, é a solução para o caso em que não há uma função
forçante. A resposta livre depende das condições iniciais. A resposta forçada é a so-
RESPOSTA lução devido à função forçante quando as condições iniciais são nulas. Para equações
FORÇADA
diferenciais lineares, a resposta completa ou total é a soma das respostas livre e força-
da. EDOs não lineares podem ser reconhecidas pelo fato de a variável dependente ou
suas derivadas aparecerem elevadas a uma potência ou em uma função transcenden-
tal. Por exemplo, as equações = y2 e = cos y são não lineares.
A essência de um método numérico é converter a equação diferencial em uma
equação de diferenças que pode ser programada. Algoritmos numéricos diferem entre
si em parte devido ao resultado do procedimento específico utilizado na obtenção das
equações de diferenças. É importante entender o conceito de “tamanho do passo” e
os seus efeitos na precisão da solução. Para uma introdução simples a essas questões,
consideraremos os métodos numéricos mais simples, o método de Euler e o método
preditor-corretor.

O método de Euler
MÉTODO O método de Euler é o algoritmo mais simples para a solução numérica de uma equa-
DE EULER ção diferencial. Considere as equações

(9.3-1)

em que f(t, y) é uma função conhecida e y0 é a condição inicial, que é o valor dado de
y(t) em t = 0. A partir da definição de derivada,

Se o incremento de tempo ¢t escolhido for suficientemente pequeno, a derivada pode


ser substituída pela expressão aproximada

(9.3-2)

Suponha que a função f(t, y) na Equação (9.3-1) se mantém constante ao longo do in-
tervalo de tempo (t, t + ¢t), e substitua a Equação (9.3-1) pela seguinte aproximação:
382 Introdução ao MATLAB para Engenheiros

ou
y(t + ¢t) = y(t) + f (t, y)¢t (9.3-3)
Quanto menor for ¢t, mais precisas serão nossas duas considerações que conduziram à
Equação (9.3-3). Essa técnica de substituir uma equação diferencial por uma equação
TAMANHO de diferenças é o método de Euler. O incremento ¢t é chamado de tamanho do passo.
DO PASSO A Equação (9.3-3) pode ser escrita na seguinte forma mais conveniente:
y(tk+1) = y(tk) + ¢tf [tk, y(tk)] (9.3-4)
em que tk + 1 = tk + ¢t. Essa equação pode ser aplicada sucessivamente nos instantes
tk se ela for inserida em uma laço for. A precisão do método de Euler às vezes pode
ser melhorada utilizando-se um tamanho de passo menor. Entretanto, passos muito
pequenos requerem muito tempo de execução de programa e podem resultar em um
grande erro acumulado devido a efeitos de arredondamento.

O método preditor-corretor
O método de Euler pode apresentar uma séria deficiência em problemas nos quais as
variáveis mudam rapidamente, uma vez que esse método considera que as variáveis
são constantes ao longo do intervalo de tempo ¢t. Uma maneira de melhorar esse
método é utilizar uma melhor aproximação para o lado direito da Equação (9.3-1).
Suponha que ao invés da aproximação de Euler (9.3-4) nós utilizemos a média do
lado direito da Equação (9.3-1) no intervalo (tk, tk + 1). Isso resulta em

(9.3-5)

em que
fk = f [tk, y(tk)] (9.3-6)
com uma definição similar para fk + 1. A Equação (9.3-5) é equivalente a integrar a
Equação (9.3-1) com a regra trapezoidal.
A dificuldade com a Equação (9.3-5) é que fk + 1 não pode ser avaliada até que y(tk
+ 1) seja conhecido, mas essa é precisamente a quantidade que está sendo procurada.
Uma forma de contornar essa dificuldade é utilizar a fórmula de Euler (9.3-4) para ob-
ter uma estimativa preliminar de y(tk + 1). Essa estimativa é então utilizada para calcular
fk + 1, que será utilizado na Equação (9.3-5) para obter o valor desejado de y(tk + 1).
A notação pode ser modificada para tornar o método mais claro. Sejam h = ¢t e
yk = y(tk), e seja xk + 1 a estimativa de y(tk + 1) obtida a partir da fórmula de Euler (9.3-
4). Então, omitindo a notação tk das outras equações, obtemos a seguinte descrição do
processo de predição-correção:
Preditor de Euler xk+1 = yk + hf (tk, yk) (9.3-7)

Corretor trapezoidal (9.3-8)

MÉTODO Esse algoritmo é às vezes chamado de método de Euler modificado. Entretanto,


DE EULER note que qualquer algoritmo pode ser utilizado como um preditor ou como um
MODIFICADO
corretor. Assim, muitos outros métodos podem ser classificados como métodos de
predição-correção.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 383

Métodos de Runge-Kutta
A representação em série de Taylor forma a base de muitos métodos de resolução de
equações diferenciais, incluindo os métodos de Runge-Kutta. A série de Taylor pode
ser utilizada para representar a solução y(t + h) em termos de y(t) e de suas derivadas
da seguinte maneira:

(9.3-9)

O número de termos mantido na série determina sua precisão. As derivadas neces-


sárias são calculadas a partir da equação diferencial. Se essas derivadas puderem ser
encontradas, a Equação (9.3-9) pode ser utilizada para marchar à frente no tempo.
Na prática, as derivadas de ordem superior podem ser difíceis de calcular, e a série
(9.3-9) é truncada em algum termo. Os métodos de Runge-Kutta foram desenvolvidos
por causa da dificuldade no cálculo das derivadas. Esses métodos utilizam algumas
avaliações da função f(t, y) de uma maneira que aproxima a série de Taylor. O número
de termos na série que é duplicado determina a ordem do método de Runge-Kutta.
Dessa forma, um algoritmo de Runge-Kutta de quarta ordem duplica a série de Taylor
até o termo que envolve h4.

Solucionadores de EDO do MATLAB


Além das muitas variações dos algoritmos preditor-corretor e dos algoritmos de Run-
ge-Kutta que foram desenvolvidas, há algoritmos mais avançados no MATLAB que
utilizam um tamanho de passo variável. Esses algoritmos “adaptativos” utilizam tama-
nhos de passo maiores quando a solução varia mais devagar. Há no MATLAB diversas
funções, chamadas de solucionadores, que implementam o método de Runge-Kutta
e outros métodos com tamanho de passo variável. Dois desses solucionadores são as
funções ode45 e ode15s. A função ode45 utiliza uma combinação dos métodos de
Runge-Kutta de quarta e de quinta ordem. Ele é um solucionador geral, ao passo que
ode15s é adequado para equações mais difíceis, chamadas de equações “duras”. Es-
ses solucionadores são mais do que suficientes para resolver os problemas neste texto.
É recomendado que você tente primeiramente a função ode45. Se a equação se mos-
trar difícil de ser resolvida (o que é indicado pelo longo tempo para a obtenção da solu-
ção, ou por um alerta, ou por uma mensagem de erro), então utilize a função ode15s.
Nesta seção, limitamos nossa abordagem a equações de primeira ordem. A solução
de equações de ordem superior é abordada na Seção 9.4. Quando utilizada para resolver
a equação = f(t, y), a sintaxe básica é (utilizando a função ode45 como exemplo)
[t,y] = ode45(@ydot, tspan, y0)
em que @ydot é o handle do arquivo de função cujas entradas devem ser t e y, e
cuja saída deve ser um vetor coluna que representa dy/dt, isto é, f(t, y). O número de
linhas nesse vetor coluna deve ser igual à ordem da equação. A sintaxe para a função
ode15s é idêntica. O arquivo de função ydot também pode ser especificado por
uma string de caracteres (isto é, com o seu nome entre aspas simples), mas a utiliza-
ção do handle da função é a abordagem preferida atualmente.
O vetor tspan contém o valor inicial e o valor final da variável independente
t, e, opcionalmente, quaisquer valores intermediários de t em que a solução é deseja-
384 Introdução ao MATLAB para Engenheiros

da. Por exemplo, se não forem especificados valores intermediários, tspan é [t0,
tfinal], em que t0 e tfinal são o valor inicial e o valor final do parâmetro
independente t. Como outro exemplo, utilizar tspan = [0, 5, 10] é solicitar ao
MATLAB que encontre a solução em t = 5 e em t = 10. Você pode resolver a equação
para trás no tempo especificando t0 maior do que tfinal.
O parâmetro y0 é o valor inicial y(0). O arquivo de função deve ter t e y como
seus dois primeiros argumentos de entrada, mesmo para equações f(t, y) que não são
funções de t. Você não precisa utilizar operações de arranjo no arquivo de função
porque os solucionadores de EDO chamam o arquivo com valores escalares para os
argumentos. Os solucionadores podem ter um argumento adicional, options, que é
discutido no final da seção.
Consideremos primeiro uma equação cuja solução é conhecida na forma fecha-
da, de modo que tenhamos certeza de que estamos utilizando o método corretamente.

EXEMPLO 9.3-1 Resposta de um circuito RC

O modelo do circuito RC mostrado na Figura 9.3-1 pode ser encontrado a partir da lei das
tensões de Kirchhoff e da conservação da carga. O modelo é RC + y = y(t). Suponha que
o valor de RC seja 0,1 s. Utilize um método numérico para encontrar a resposta livre para
o caso em que a tensão aplicada y é zero e que a tensão inicial do capacitor seja y(0) = 2
V. Compare os resultados com a solução analítica, que é y(t) = 2e-10t.
■ Solução
A equação para o circuito se torna 0,1 + y = 0. Resolva primeiramente para y: = - 10y.
Em seguida, defina e salve o arquivo de função a seguir. Note que a ordem dos argumentos
de entrada deve ser t e y, mesmo que t não apareça no lado direito da equação.
function ydot = RC_circuit(t,y)
% Modelo de um circuito RC sem nenhuma tensão aplicada.
ydot = -10*y;
O tempo inicial é t = 0, então defina t0 como sendo 0. Nesse caso, sabemos a partir da so-
lução analítica que y(t) estará próximo de 0 para t ¢ 0,5 s, portanto, escolhemos tfinal
como sendo 0,5 s. Em outros problemas nós geralmente não temos uma boa estimativa
para tfinal, então devemos tentar alguns valores crescentes de tfinal até que veja-
mos parte suficiente da resposta na plotagem.

R

v C y

FIGURA 9.3-1 Um circuito RC.


Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 385

1,8

1,6

1,4
Tensão no capacitor

1,2

0,8

0,6

0,4

0,2

0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5
Tempo (s)
FIGURA 9.3-2 Resposta livre de um circuito RC.

A função ode45 é chamada da seguinte maneira, e a solução é plotada juntamente


com a solução analítica y_true:
[t, y] = ode45(@RC_circuit, [0, 0.5], 2);
y_true = 2*exp(-10*t);
plot(t,y,’o’,t,y_true), xlabel(’Tempo(s)’),...
ylabel(’Tensão no Capacitor’)
Note que não precisamos gerar um arranjo t para avaliar y_true porque t é gerado pela
função ode45. A plotagem é mostrada na Figura 9.3-2. A solução numérica é marcada
com círculos, e a solução analítica é indicada pela linha sólida. Claramente, a solução nu-
mérica é bastante precisa. Note que o tamanho do passo foi selecionado automaticamente
pela função ode45.

Versões anteriores do MATLAB exigiam que o nome da função, RC_circuit


nesse caso, fosse envolvido por aspas simples, mas isso possivelmente não será per-
mitido em versões futuras. A utilização de handles de função é preferida atualmente,
como @RC_circuit. Como veremos, funcionalidades adicionais estão disponíveis
quando utilizamos os handles de função.

Teste seus conhecimentos


T9.3-1 Utilize o MATLAB para calcular e plotar a solução da seguinte equação:
386 Introdução ao MATLAB para Engenheiros

Quando a equação diferencial é não linear, frequentemente não temos uma solu-
ção analítica a ser utilizada para verificar nossos resultados numéricos. Em tais casos,
podemos utilizar nosso insight físico para nos resguardarmos de resultados grossei-
ramente incorretos. Também podemos investigar a existência de singularidades nas
equações que possam afetar o procedimento numérico. Finalmente, podemos às ve-
zes utilizar uma aproximação para substituir a equação não linear por uma linear que
possa ser resolvida analiticamente. Apesar de a aproximação linear não resultar em
uma resposta exata, ela pode ser utilizada para verificar se nossa resposta numérica é
uma “estimativa razoável”. O exemplo a seguir ilustra essa abordagem.

EXEMPLO 9.3-2 Altura de líquido em um tanque esférico

A Figura 9.3-3 mostra um tanque esférico para armazenamento de água. O tanque é


preenchido por um orifício na parte superior e esvaziado por um orifício na parte inferior.
Se o raio do tanque for r, você pode utilizar integração para mostrar que o volume de água
no tanque como uma função da altura h é dado por

(9.3-10)

O princípio de Torricelli estabelece que a vazão de líquido através do orifício é proporcio-


nal à raiz quadrada da altura h. Estudos posteriores em mecânica dos fluidos identificaram
a relação mais precisamente, e o resultado é que a vazão volumétrica através do orifício
é dada por
(9.3-11)

em que A é a área do orifício, g é a aceleração devido à gravidade, e Cd é um valor determi-


nado experimentalmente que depende em parte do tipo de líquido. Para a água, Cd = 0,6 é um
valor comum. Podemos utilizar o princípio de conservação da massa para obter uma equação
diferencial para a altura h. Aplicado a esse tanque, o princípio diz que a taxa de variação do
volume de líquido no tanque deve ser igual à vazão de escoamento do tanque; isto é,

(9.3-12)

A partir da Equação (9.3-10),

FIGURA 9.3-3 Escoamento de um tanque esférico.


Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 387

Substituindo esse resultado e a Equação (9.3-11) na Equação (9.3-12), obtemos a


equação desejada para h.

(9.3-13)

Utilize o MATLAB para resolver essa equação e determine quanto tempo é neces-
sário para que o tanque seja esvaziado se a altura inicial for de 9 ft. O raio do tanque é r =
5 ft e o diâmetro do orifício na parte inferior é de 1 in. Utilize g = 32,2 ft/s2. Discuta como
verificar a solução.
■ Solução
Com Cd = 0,6, r = 5, g = 32,2 e A = ␲(1/24)2, a Equação (9.3-13) se torna

(9.3-14)

Primeiro podemos verificar a existência de singularidades na expressão acima para dh/


dt. O denominador não se anula a não ser para h = 0 ou h = 10, o que corresponde a um
tanque completamente vazio e a um tanque completamente cheio. Assim, evitaremos sin-
gularidades se 0 6 h 6 10.
Finalmente, podemos utilizar a seguinte aproximação para estimar o tempo de esva-
ziamento: substitua h no lado direito da Equação (9.3-14) pelo seu valor médio, isto é, (9
- 0)/2 = 4,5 ft. Isso resulta em dh/dt = -0,00286, cuja solução é h(t) = h(0) - 0,00286t = 9 -
0,00286t. De acordo com essa equação, o tanque se esvaziará em t = 9/0,00286 = 3147 s = 52
min. Utilizaremos esse valor na “verificação da veracidade” de nossa resposta.
O arquivo de função baseado na Equação (9.3-14) é:
function hdot = height(t,h)
hdot = -(0.0334*sqrt(h))/(10*h-h^2);
O arquivo é chamado da seguinte maneira, utilizando-se o solucionador ode45:
[t, h]=ode45 (@height, [0, 2475], 9);
plot(t,h),xlabel(’Tempo (s)’), ylabel(’Altura (ft)’)
A plotagem resultante é mostrada na Figura 9.3-4. Note como a altura varia mais rapida-
mente quando o tanque está quase completamente cheio ou quase completamente vazio.
Isso era esperado por causa dos efeitos da curvatura do tanque. O tanque se esvazia em
2475 s, ou 41 min. Esse valor não é muito diferente da nossa estimativa grosseira de 52
min, portanto, devemos nos sentir confortáveis aceitando os resultados numéricos. O valor
de 2475 s foi encontrado aumentando-se o tempo final até que a plotagem mostrasse que
a altura se tornou igual a 0.

9.4 Equações diferenciais de ordem superior


Para utilizar os solucionadores de EDO a fim de resolver uma equação de ordem
maior do que 1, você deve primeiro escrever um conjunto de equações de primeira
ordem. Isso é fácil de ser feito. Considere a equação de segunda ordem
(9.4-1)
388 Introdução ao MATLAB para Engenheiros

6
Altura (ft)

0
0 500 1000 1500 2000 2500
Tempo (s)
FIGURA 9.3-4 Gráfico da altura em um tanque esférico.

Resolva-a para a derivada de mais alta ordem:

(9.4-2)

Defina duas novas variáveis x1 e x2 que serão y e a sua derivada . Isto é, defina
x1 = y e x2 = . Isso implica que

FORMA DE Essa forma é às vezes chamada de forma de Cauchy ou forma de variáveis de estado.
CAUCHY OU Agora escreva um arquivo de função que calcule os valores de 1 e 2 e que
FORMA DE
VARIÁVEIS DE
armazene-os em um vetor coluna. Para fazer isso, devemos primeiro ter uma função
ESTADO específica para f(t). Suponhamos que f(t) = sen(t). Então, o arquivo desejado é:
function xdot = example_1(t,x)
% Calcula as derivadas de duas equações
xdot(1) = x(2);
xdot(2) = (1/5)*(sin(t)–4*x(1)-7*x(2));
xdot = [xdot(1); xdot(2)];
Note que xdot(1) representa 1, xdot(2) representa 2, x(1) representa x1 e
x(2) representa x2. Uma vez que você se familiarize com a notação da forma de
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 389

variáveis de estado, você verá que o código anterior poderia ser substituído pela se-
guinte forma mais compacta:
function xdot = example_1(t,x)
% Calcula as derivadas de duas equações
xdot = [x(2); (1/5)*(sin(t)-4*x(1)-7*x(2))];
Suponha que queiramos resolver a Equação (9.4-1) para 0 … t … 6 com as con-
dições iniciais x(0) = 3, (0) = 9. Portanto, a condição inicial para o vetor x é [3,
9]. Para utilizar a função ode45, você deve digitar
[t, x] = ode45(@example_1, [0, 6], [3, 9]);
Cada linha no vetor x corresponde a um valor de tempo retornado no vetor coluna
t. Se você digitar plot(t,x), você obterá uma plotagem de x1 e x2 versus t. Note
que x é uma matriz com duas colunas. A primeira coluna contém os valores de x1 em
vários instantes de tempo gerados pelo solucionador; a segunda coluna contém os
valores de x2. Dessa forma, para plotar apenas x1, digite plot(t,x(:,1)), Para
plotar apenas x2, digite plot(t,x(:,2)).
Quando estamos resolvendo equações não lineares, às vezes é possível verificar
os resultados numéricos utilizando uma aproximação linear. O exemplo a seguir ilus-
tra tal abordagem com uma equação de segunda ordem.

EXEMPLO 9.4-1 O modelo de um pêndulo não linear

O pêndulo mostrado na Figura 9.4-1 consiste em uma massa concentrada m presa na ex-
tremidade de uma haste cuja massa é pequena comparada a m. O comprimento da haste é
L. A equação de movimento para esse pêndulo é:

(9.4-3)

Suponha que L = 1 m e g = 9,81 m/s2. Utilize o MATLAB a fim de resolver essa equação
para ␪(t) em dois casos: ␪(0) = 0,5 rad e ␪(0) = 0,8␲. Em ambos os casos, (0) = 0. Discuta
como verificar a precisão dos resultados.
■ Solução
Se utilizarmos a aproximação sen L 0 para ângulos pequenos, a nova equação é

(9.4-4)

que é linear e cuja solução é

(9.4-5)

se (0) = 0. Assim, a amplitude da oscilação é ␪(0), e o período é


Podemos utilizar essa informação para selecionar um tempo final e para verificar nossos
resultados numéricos.
390 Introdução ao MATLAB para Engenheiros

FIGURA 9.4-1 Um pêndulo.

Primeiro, reescreva a equação do pêndulo (9.4-3) como duas equações de primeira


ordem. Para fazer isso, sejam x1 = ␪ e x2 = . Desse modo,

O arquivo de função a seguir é baseado nas duas últimas equações. Lembre-se de


que a saída xdot deve ser um vetor coluna.
function xdot = pendulum(t,x)
g = 9.81; L = 1;
xdot = [x(2); –(g/L)*sin(x(1))];
Esse arquivo é chamado da maneira a seguir. Os vetores ta e xa contêm os resulta-
dos para o caso em que ␪(0) = 0,5. Em ambos os casos, (0) = 0. Os vetores tb e xb
contêm os resultados para ␪(0) = 0,8␲.
[ta, xa] = ode45(@pendulum, [0,5], [0.5, 0];
[tb, xb] = ode45(@pendulum, [0,5], [0.8*pi, 0];
plot(ta, xa(:,1), tb,xb(:,1)), xlabel (’Tempo (s)’), . . .
ylabel(’Ângulo (rad)’), gtext(’Caso 1’), gtext(’Caso 2’)
Os resultados são mostrados na Figura 9.4-2. A amplitude se mantém constante,
como foi previsto pela análise baseada em ângulo pequeno, e o período para o caso em
que ␪(0) = 0,5 é um pouco maior do que 2 s, o valor previsto pela análise baseada em
ângulo pequeno. Assim, podemos ter confiança no procedimento numérico. Para o caso
em que ␪(0) = 0,8␲, o período da solução numérica está em torno 3,3 s. Isso ilustra uma
propriedade importante de equações diferenciais não lineares. A resposta livre de uma
equação linear tem o mesmo período para quaisquer condições iniciais; entretanto, a for-
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 391

2 Caso 2

1
Ângulo (rad)

Caso 1
⫺1

⫺2

⫺3
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
Tempo (s)
FIGURA 9.4-2 O ângulo do pêndulo como uma função do tempo para duas posições iniciais.

ma e, portanto, o período da resposta livre de uma equação não linear frequentemente


dependem dos valores particulares das condições iniciais.

Nesse exemplo, os valores de g e L foram codificados na função pendulum(t,x).


Agora suponhamos que você queira obter a resposta do pêndulo para diferentes compri-
mentos L ou diferentes acelerações da gravidade g. Você pode utilizar o comando glo-
bal para declarar g e L como variáveis globais, ou pode passar valores de parâmetro na
lista de argumentos da função ode45; todavia, a partir do MATLAB 7, o método prefe-
rido passou a ser a utilização de uma função aninhada. Funções aninhadas são discutidas
na Seção 3.3. O programa a seguir mostra como isso é feito.
392 Introdução ao MATLAB para Engenheiros

Recursos avançados dos solucionadores


A sintaxe preferida e completa de um solucionador de EDO no MATLAB 7, utilizan-
do a função ode45 como exemplo, é
[t, y] = ode45(@ydot, tspan, y0, options)
em que o argumento options é criado com a função odeset.
A função odeset A função odeset cria uma estrutura de opções a ser fornecida
ao solucionador. Sua sintaxe é
options = odeset(’name1’, ’value1’, ’name2’,’value2’,...)
em que name é o nome de uma propriedade e value é o valor atribuído à proprie-
dade.
Um exemplo simples tornará as coisas claras. A propriedade Refine é utiliza-
da para aumentar o número de pontos de saída do solucionador por meio de um fator
inteiro n. Para o ode45, o valor de n é 4 por causa do passo grande do solucionador.
Suponha que queiramos resolver = sen2 t para 0 … t … 4␲ com y(0) = 0. Defina o
seguinte arquivo de função:
function ydot = sinefn(t,y)
ydot = sin(t)^2;
Em seguida, utilize a função odeset para definir o valor de Refine como n = 8,
e chame o solucionador ode45, como é mostrado no código a seguir. Isso produzirá
duas vezes mais pontos, de modo que a sua plotagem resultará em uma curva mais
suave.
options = odeset(’Refine’,8);
[t, y] = ode45(@sinefn, [0, 4*pi], 0, options);
Outra propriedade é Events, que é capaz de assumir dois valores possíveis:
on e off. Ela pode ser utilizada com a finalidade de localizar transições para, a partir
de ou através de zeros de uma função definida pelo usuário. Isso pode ser utilizado
para detectar, na solução da EDO, transições para, a partir de ou através de um deter-
minado valor, como o zero. Essa funcionalidade pode ser utilizada, por exemplo, para
simular uma bola em queda saltando para cima a partir do chão. Veja o Sistema de
Ajuda do MATLAB para outros exemplos.
Há muitas propriedades que podem ser definidas com a função odeset. Para
ver uma lista delas, digite odeset. A Tabela 9.4-1 resume a sintaxe dos soluciona-
dores de EDO utilizando a função ode45 como exemplo.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 393

TABELA 9.4-1 Sintaxe do solucionador de EDO ode45


Comando Descrição
[t, y] = ode45(@ydot, Resolve a equação diferencial vetorial = f(t, y) especificada pelo
tspan, y0, options) arquivo de função cujo handle é @ydot e cujas entradas devem ser
t e y, e cuja saída deve ser um vetor coluna que representa dy/dt;
isto é, f(t, y). O número de linhas nesse vetor coluna deve ser igual à
ordem da equação. O vetor tspan contém o valor inicial e o valor
final da variável independente t, e, opcionalmente, quaisquer valores
intermediários de t em que a solução é desejada. O vetor y0 contém
os valores iniciais. O arquivo de função deve ter dois argumentos de
entrada, t e y, mesmo para equações em que f(t, y) não é uma função
de t. O argumento options é criado com a função odeset. A
sintaxe é idêntica para o solucionador ode15s.
options = odeset Cria uma estrutura options para ser utilizada com o solucionador
(’name1’, ’value1’, de EDO, em que as propriedades nomeadas assumem valores
’name2’, ’value2’, específicos, sendo que name é o nome de uma propriedade e value
...) é o valor a ser atribuído à propriedade. Quaisquer propriedades não
especificadas assumirão valores pré-estabelecidos. Se você digitar
odeset sem argumentos de entrada, será exibida uma lista com
todos os nomes de propriedades e com seus possíveis valores.

9.5 Métodos especiais para equações lineares


Há no MATLAB algumas ferramentas adequadas para serem utilizadas se o modelo
de equação diferencial for linear. Mesmo que haja métodos gerais disponíveis para
se encontrar soluções analíticas de equações diferenciais lineares, às vezes é mais
conveniente utilizar um método numérico para encontrar a solução. Exemplos de tais
situações ocorrem quando a função forçante é uma função complicada ou quando
a ordem da equação diferencial é maior do que 2. Nesses casos, diante da álgebra
envolvida na obtenção da solução analítica, o esforço pode não valer a pena, especial-
mente se o principal objetivo for a obtenção de uma plotagem da solução.

Métodos matriciais
Podemos utilizar operações matriciais para reduzir o número de linhas a serem digi-
tadas no arquivo de função. Por exemplo, a equação a seguir descreve o movimento
de uma massa conectada a uma mola, com atrito viscoso atuando entre a massa e a
superfície. Outra força u(t) também atua sobre a massa.

(9.5-1)
Essa equação pode ser posta na forma de Cauchy fazendo-se x1 = y e x2 = . Isso
resulta em:
394 Introdução ao MATLAB para Engenheiros

Esse resultado pode ser escrito como uma equação matricial da seguinte maneira:

Na forma compacta,
(9.5-2)
em que

O arquivo de função a seguir mostra como utilizar operações matriciais. Nesse


exemplo, m = 1, c = 2, k = 5, e a força aplicada é u(t) = 10.
function xdot = msd(t,x)
% Arquivo de função para massa com mola e amortecimento.
% A posição é a primeira variável, e a velocidade é a
% segunda variável.
u = 10;
m = 1;c = 2;k = 5;
A = [0, 1;-k/m, -c/m];
B = [0; 1/m];
xdot = A*x+B*u;
Note que a saída xdot será um vetor coluna por causa da definição da multiplicação
matriz-vetor. Tentamos diferentes valores de tempo final até que pudéssemos ver a
resposta inteira. Utilizando um tempo final de 5 e condições iniciais x1(0) = 0 e x2(0)
= 0, chamamos o solucionador e plotamos a solução da seguinte maneira:
[t, x] = ode45(@msd, [0,5], [0,0];
plot(t,x(:,1),t,x(:,2))
A Figura 9.5-1 mostra a plotagem editada. Note que poderíamos ter evitado a in-
corporação dos valores dos parâmetros m, c, k e u escrevendo msd como uma
função aninhada, assim como fizemos com as funções pendulum e pendula
na Seção 9.4.

Teste seus conhecimentos


T9.5-1 Plote a posição e a velocidade de uma massa com uma mola e um amor-
tecimento, tendo como valores de parâmetro m = 2, c = 3 e k = 7. A for-
ça aplicada é u = 35, a posição inicial é y(0) = 2 e a velocidade inicial é
(0) = - 3.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 395

2,5
Deslocamento
Deslocamento (m) e velocidade (m/s)

1,5

1
Velocidade
0,5

⫺0,5

⫺1
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
Tempo (s)
FIGURA 9.5-1 Deslocamento e velocidade da massa como uma função do tempo.

Raízes características a partir da função eig


As raízes características de uma equação diferencial linear fornecem informação so-
bre a velocidade da resposta e sobre a frequência de oscilação, se houver alguma.
Há no MATLAB a função eig para calcular as raízes características quando o
modelo é dado na forma de variáveis de estado (9.5-2). Sua sintaxe é eig(A), em
que A é a matriz que aparece na Equação (9.5-2). (O nome da função é uma abrevia-
AUTOVALOR ção de eigenvalue, que é outro nome para a equação característica.) Por exemplo,
considere as equações
(9.5-3)

(9.5-4)
A matriz A para essas equações é

Para encontrar as raízes características, digite


>>A = [-3, 1;-1, -7];
>>r = eig(A)
A resposta assim obtida é r = [-6.7321, -3.2679]. Para encontrar as cons-
tantes de tempo, que são os recíprocos negativos das partes reais das raízes, você
396 Introdução ao MATLAB para Engenheiros

deve digitar tau = -1./real(r). As constantes de tempo são 0,1485 e 0,3060.


Quatro vezes a constante de tempo dominante, ou 4(0,3060) = 1,224, é o tempo ne-
cessário para que a resposta livre se torne aproximadamente zero.

Solucionadores de EDO no toolbox de sistemas de controle


Muitas das funções do toolbox de Sistemas de Controle estão disponíveis na Edição
de Estudante do MATLAB. Algumas delas podem ser utilizadas para resolver equa-
ções diferenciais lineares e invariantes no tempo (coeficientes constantes). Em algu-
mas ocasiões elas são mais convenientes e mais poderosas do que os solucionadores
de EDO discutidos até então, uma vez que soluções gerais podem ser encontradas
para equações lineares e invariantes no tempo. Aqui nós discutiremos algumas dessas
funções. Elas estão resumidas na Tabela 9.5-1. As outras funcionalidades do toolbox
de Sistemas de Controle requerem métodos avançados e não serão abordadas aqui.
Veja [Palm, 2005] para uma abordagem desses métodos.
OBJETO LIT Um objeto LIT descreve uma equação linear e invariante no tempo (ou conjun-
tos de equações), aqui referida como sistema. Um objeto LIT pode ser criado a partir
de diferentes descrições do sistema, pode ser analisado com diversas funções e pode
ser acessado para fornecer descrições alternativas do sistema. Por exemplo, a equação
(9.5-5)
é uma descrição de um sistema específico. Essa descrição é chamada de forma redu-
zida. A seguir, temos uma descrição de modelo em espaço de estados para o mesmo
sistema,

(9.5-6)
em que x1 = x, x2 = , e

(9.5-7)
Ambos os modelos contêm a mesma informação. Entretanto, cada forma tem suas
próprias vantagens, a depender do propósito da análise.
Uma vez que há duas ou mais variáveis de estado em um modelo em espaço de
estados, precisamos conseguir especificar qual variável de estado, ou quais combinações
de variáveis, constituem as saídas da simulação. Por exemplo, o modelo dado pelas equa-
ções (9.5-6) e (9.5-7) pode representar o movimento de uma massa, sendo x1 a posição
e x2 a velocidade da massa. Precisamos especificar se queremos ver uma plotagem da
posição, da velocidade, ou de ambas. Essa especificação da saída, indicada pelo vetor y,
é feita em geral com as matrizes C e D, que devem ser compatíveis com a equação
y = Cx + Du(t) (9.5-8)
em que o vetor u(t) pode representar múltiplas entradas. Para dar continuidade ao
exemplo anterior, se quisermos que a saída seja a posição x = x1, então y = x1, e de-
vemos selecionar C = [1, 0] e D = 0. Assim, nesse caso, a Equação (9.5-8) se reduz
a y = x1.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 397

Para criar um objeto LIT a partir da forma reduzida (9.5-5), utilize a função
tf(right,left), digitando
>>sys1 = tf(1, [2, 3, 5]);
em que o vetor right é o vetor de coeficientes do lado direito da equação, arran-
jados em ordem decrescente de derivada, e left é o vetor de coeficientes do lado
esquerdo da equação, também arranjados em ordem decrescente de derivada. O re-
sultado, sys1, é o objeto LIT que descreve o sistema na forma reduzida, também
chamada de forma de função de transferência. (O nome da função, tf, representa
transfer function, que é uma maneira equivalente de descrever os coeficientes do lado
esquerdo e do lado direito da equação.)
O objeto LIT sys2 em forma de função de transferência para a equação

(9.5-9)

é criado digitando-se
>>sys2 = tf([3, 9, 2], [6, -4, 7, 5]);
Para criar um objeto LIT a partir de um modelo em espaço de estados, você
deve utilizar a função ss(A, B, C, D), em que ss representa state space. Por
exemplo, para criar um objeto LIT na forma de um modelo em espaço de estados para
o sistema descrito pelas Equações (9.5-6) a (9.5-8), você deve digitar:
>>A = [0, 1; -5/2, -3/2]; B = [0; 1/2];
>>C = [1, 0]; D = 0;
>>sys3 = ss(A,B,C,D);
Um objeto LIT definido utilizando-se a função tf pode ser utilizado na obten-
ção de uma descrição equivalente em espaço de estados do sistema. Para criar um
modelo em espaço de estados para o sistema descrito pelo objeto LIT sys1 criado
anteriormente na forma de função de transferência, você deve digitar ss(sys1).
Você verá, então, as matrizes resultantes A, B, C e D na tela. Para extrair e salvar as
matrizes, utilize a função ssdata da seguinte maneira.
>>[A1, B1, C1, D1] = ssdata(sys1);
Os resultados são:

Quando você utilizar a função ssdata para converter uma função de transferência em
um modelo em espaço de estados, note que a saída y será um escalar que é idêntico à va-
riável da solução da forma reduzida; nesse caso, a variável de solução da Equação (9.5-
1) é a variável y. Para interpretar o modelo em espaço de estados, precisamos relacionar
suas variáveis de estado x1 e x2 com y. Os valores das matrizes C1 e D1 nos dizem que a
variável de saída é dada por y = 0,5x2. Dessa forma, vemos que x2 = 2y. A outra variável
de estado x1 se relaciona com x2 por meio da equação 2 = 2x1. Assim, x1 = .
398 Introdução ao MATLAB para Engenheiros

TABELA 9.5-1 Funções de objetos LIT


Comando Descrição
sys = ss(A, B, C, D) Cria um objeto LIT na forma de espaço de estados, em que as
matrizes A, B, C e D correspondem àquelas no modelo = Ax + Bu,
y = Cx + Du.
[A, B, C, D] = ssdata(sys) Extrai as matrizes A, B, C e D que correspondem àquelas no modelo
= Ax + Bu, y = Cx + Du.
sys = tf(right,left) Cria um objeto LIT na forma de função de transferência, em que o
vetor right é o vetor de coeficientes do lado direito da equação,
arranjados em ordem decrescente de derivada, e left é o vetor de
coeficientes do lado esquerdo da equação, também arranjados em
ordem decrescente de derivada.
sys2 = tf(sys1) Cria o modelo de função de transferência sys2 a partir do modelo
em espaço de estados sys1.
sys1 = ss(sys2) Cria o modelo em espaço de estados sys1 a partir do modelo de
função de transferência sys2.
[right,left] = tfdata(sys,’v’) Extrai os coeficientes dos lados direito e esquerdo do modelo em
forma reduzida especificado no modelo de função de transferência
sys. Quando o parâmetro opcional ’v’ for utilizado, os coeficientes
são retornados como vetores, e não como arranjos de células.

Para criar uma descrição em função de transferência do sistema sys3, criado


anteriormente a partir do modelo em espaço de estados, você deve digitar tfsys3 =
tf(sys3). Para extrair e salvar os coeficientes da forma reduzida, utilize a função
tfdata da seguinte maneira:
[right, left] = tfdata(sys3, ’v’)
Para esse exemplo, os vetores retornados são right = 1 e left = [1, 1.5,
2.5]. O parâmetro opcional ’v’ diz ao MATLAB para retornar os coeficientes
como vetores; de outra forma, eles são retornados como arranjos de células. Essas
funções são resumidas na Tabela 9.5-1.

Teste seus conhecimentos


T9.5-2 Obtenha o modelo em espaço de estados para o modelo na forma reduzida

Em seguida, converta o modelo em espaço de estados de volta para a forma re-


duzida, e veja se você consegue recuperar o modelo original na forma reduzida.

Solucionadores de EDO lineares


Há no toolbox de Sistemas de Controle diversos solucionadores para modelos linea-
res. Esses solucionadores são categorizados pelo tipo de função de entrada que eles
podem aceitar: entrada nula, entrada em impulso, entrada em degrau e uma função de
entrada geral. Elas são resumidas na Tabela 9.5-2.
A função initial A função initial calcula e plota a resposta livre de um mo-
delo em espaço de estados. Ela é às vezes chamada de resposta às condições iniciais ou
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 399

TABELA 9.5-2 Sintaxe básica dos solucionadores de EDO para sistemas LIT
Comando Descrição
impulse(sys) Calcula e plota a resposta ao impulso do objeto LIT sys.
initial(sys,x0) Calcula e plota a resposta livre do objeto LIT sys dado na forma de modelo
em espaço de estados, para as condições iniciais especificadas no vetor x0.
lsim(sys,u,t) Calcula e plota a resposta do objeto LIT sys à entrada especificada pelo
vetor u, nos instantes de tempo especificados pelo vetor t.
step(sys) Calcula e plota a resposta ao degrau do objeto LIT sys.
Veja o texto para descrição de sintaxe estendida.

de resposta não dirigida (undriven response) na documentação do MATLAB. A sintaxe


básica é initial(sys,x0), em que sys é o objeto LIT na forma de modelo em
espaço de estados e x0 é o vetor de condições iniciais. O intervalo de tempo e o número
de pontos da solução são escolhidos automaticamente. Por exemplo, para encontrar a
resposta livre do modelo em espaço de estados (9.5-5) a (9.5-8), para x1(0) = 5 e x2(0) = -
2, primeiramente defina-o na forma de modelo em espaço de estados. Isso foi feito antes
para obter o sistema sys3. Em seguida, utilize a função initial da seguinte maneira:
>>initial(sys3, [5, -2])
A plotagem mostrada na Figura 9.5-2 será exibida na tela. Note que o MATLAB ro-
tula a plotagem automaticamente, calcula a resposta em estado estacionário e a exibe
com uma linha pontilhada.

Resultados das condições iniciais


5

3
Amplitude

⫺1
0 1 2 3 4 5 6 7 8
Tempo (s)
FIGURA 9.5-2 Resposta livre do modelo dado pelas Equações (9.5-5) a (9.5-8) para x1(0) = 5 e
x2(0) = -2.
400 Introdução ao MATLAB para Engenheiros

Para especificar o tempo final tF, utilize a sintaxe initial(sys,x0,tF).


Para especificar um vetor de instantes de tempo da forma t = 0:dt:tF, nos quais
a solução deve ser obtida, utilize a sintaxe initial(sys,x0,t).
Quando chamada com os argumentos do lado esquerdo, como [y,t,x] =
initial(sys,x0,...), a função retorna a resposta y, o vetor de tempo t uti-
lizado na simulação e o vetor de estados x avaliado naqueles instantes de tempo. As
colunas das matrizes y e x são as saídas e os estados, respectivamente. O número de
linhas em y e x é igual a length(t). Nenhuma plotagem é produzida. A sintaxe
initial(sys1, sys2, ..., x0,t) plota a resposta livre de múltiplos siste-
mas LIT em uma única janela gráfica. O vetor de tempo t é opcional. Você pode es-
pecificar a cor da linha, o estilo da linha e o marcador para cada sistema, por exemplo,
initial(sys1,’r’,sys2,’y— —’,sys3,’gx’,x0).
A função impulse A função impulse plota a resposta ao impulso unitário para
cada par entrada-saída do sistema, assumindo que as condições iniciais são nulas. (O
impulso unitário é também chamado de função delta de Dirac.) A sintaxe básica é
impulse(sys), em que sys é o objeto LIT. Diferentemente da função initial,
a função impulse pode ser utilizada tanto com um modelo em espaço de estados
quanto com um modelo de função de transferência. O intervalo de tempo e o número
de pontos da solução são escolhidos automaticamente. Por exemplo, a resposta ao
impulso da Equação (9.5-5) é encontrada da seguinte maneira:
>>sys1 = tf(1, [2, 3, 5]);
>>impulse(sys1)
A sintaxe estendida da função impulse é similar àquela da função initial.
A função step A função step plota a resposta ao degrau unitário para cada par
entrada-saída do sistema, assumindo que as condições iniciais são nulas. [A função
degrau unitário u(t) é 0 para t 6 0 e 1 para t 7 0.] A sintaxe básica é step(sys), em
que sys é o objeto LIT. A função step pode ser utilizada tanto com um modelo em
espaço de estados quanto com um modelo de função de transferência. O intervalo de
tempo e o número de pontos da solução são escolhidos automaticamente. A sintaxe
estendida da função step é similar àquela das funções initial e impulse.
Para encontrar a resposta ao degrau unitário, para condições iniciais nulas, do
modelo em espaço de estados (9.5-6) a (9.5-8), e do modelo na forma reduzida

(9.5-10)
a sessão é (considerando que sys3 ainda está disponível no espaço de trabalho):
>>sys4 = tf([5, 1], [5, 7, 5]);
>>step(sys3,’b’,sys4,’— —’)
O resultado é mostrado na Figura 9.5-3. A resposta em estado estacionário é indicada
pela linha horizontal pontilhada. Note como a resposta em estado estacionário e o
tempo para alcançar aquele estado são automaticamente determinados.
A resposta ao degrau pode ser caracterizada pelos seguintes parâmetros:
■ Valor em estado estacionário: O limite da resposta quando t → q.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 401

Resposta ao degrau
0,7

0,6

0,5

0,4
Amplitude

0,3

0,2

0,1

0
0 1 2 3 4 5 6 7 8
Tempo (s)
FIGURA 9.5-3 Resposta ao degrau do modelo dado pelas Equações (9.5-6) a (9.5-8) e do mo-
delo (9.5-10), para condições iniciais nulas.

■ Tempo de assentamento: O tempo para que a resposta alcance e se mantenha


dentro de uma determinada faixa percentual (normalmente 2%) em torno do
valor em estado estacionário.
■ Tempo de subida: O tempo necessário para que a resposta cresça de 10 a 90%
do seu valor em estado estacionário.
■ Resposta de pico: O maior valor da resposta.
■ Tempo de pico: O instante em que a resposta de pico ocorre.
Quando a função step(sys) exibe uma plotagem na tela, você pode utilizá-la para
calcular esses parâmetros clicando com o botão direito do mouse em qualquer lugar
dentro da área da plotagem. Isso abrirá o menu. Escolha Characteristics para obter
um submenu que contém as características da resposta. Quando você selecionar uma
característica específica, por exemplo, “resposta de pico” (peak response), o MAT-
LAB inserirá um ponto grande no pico e exibirá linhas tracejadas indicando o valor
da resposta de pico e do tempo de pico. Mova o cursor sobre esse ponto para ver uma
exibição dos valores. Você pode utilizar outros solucionadores da mesma maneira,
apesar de as opções do menu serem diferentes. Por exemplo, a resposta de pico e o
tempo de assentamento (settling time) estão disponíveis quando você utiliza a função
impulse(sys), mas o tempo de subida (rise time) não aparece como uma opção.
Se, ao invés de escolher Characteristics, você escolher Properties e, em seguida,
selecionar a aba Options, pode mudar os valores pré-especificados de tempo de as-
sentamento e de tempo de subida, que são 2% e 10 a 90%.
402 Introdução ao MATLAB para Engenheiros

Utilizando esse método, descobrimos que a curva sólida na Figura 9.5-3 apre-
senta as seguintes características:
■ Valor em estado estacionário: 0,2
■ Tempo de assentamento de 2%: 5,22
■ Tempo de subida de 10 a 90%: 1,01
■ Resposta de pico: 0,237
■ Tempo de pico: 2,26
Você também pode ler os valores em qualquer parte da curva passando o cursor
sobre o ponto desejado. Você pode mover o cursor ao longo da curva e ler os valores
conforme eles mudam. Utilizando esse método, descobrimos que a curva sólida na
Figura 9.5-3 cruza o valor em estado estacionário de 0,2 pela segunda vez no instante
de tempo t = 3,74.
Você pode suprimir a plotagem gerada pela função step e criar a sua própria
plotagem da seguinte maneira, supondo que sys3 ainda esteja disponível no espaço
de trabalho:
[x,t] = step(sys3);
plot(t,x)
Você pode, então, utilizar as ferramentas do Editor de Plotagem para editar o seu
gráfico. Todavia, com essa abordagem, ao clicar com o botão direito na plotagem
você não conseguirá obter informações sobre as características da resposta ao degrau.
Suponha que a entrada em degrau não seja um degrau unitário, mas que ela seja
0 para t 6 0 e 10 para t 7 0. Há duas maneiras de se obter a solução com o fator 10.
Utilizando sys3 como exemplo, elas são step(10*sys3) e
[x,t] = step(sys3);
plot(t,10*x)
A função lsim A função lsim plota a resposta do sistema a uma entrada arbitrária. A
sintaxe básica para condições iniciais nulas é lsim(sys,u,t), em que sys é o objeto
LIT, t é o vetor de tempo com valores regularmente espaçados, como t = 0:dt:tF,
e u é uma matriz com tantas colunas quantas sejam as entradas cuja i-ésima linha espe-
cifica o valor das entradas no instante de tempo t(i). A fim de especificar condições
iniciais para um modelo em espaço de estados, utilize a sintaxe lsim(sys,u,t,x0).
Desse modo, ela calcula e plota a resposta total (a resposta livre mais a resposta forçada).
Se você clicar com o botão direito na plotagem, será aberto o menu que contém a opção
Characteristics, e a única característica disponível será a resposta de pico.
Quando chamada com os argumentos do lado esquerdo, como [y, t] =
lsim(sys,u,...), a função retorna a saída y e o vetor de tempo t utilizado
para a simulação. As colunas da matriz y são as saídas, e o seu número de linhas
é igual a length(t). Nenhuma plotagem é gerada. A fim de obter a solução do
vetor de estados para modelos em espaço de estados, utilize a sintaxe [y, t, x]
= lsim(sys,u,...). A sintaxe lsim(sys1,sys2,...,u,t,x0) plota as
repostas de múltiplos sistemas LIT em uma única janela gráfica. O vetor de condições
iniciais x0 é necessário apenas se as condições iniciais forem não nulas. Você pode
especificar a cor da linha, o estilo da linha e o marcador para cada sistema, por exem-
plo, lsim(sys1,’r’,sys2,’y--’,sys3,’gx’,u,t).
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 403

R L
c␻
⫹ i

v Ke␻ I


T ⫽ KTi ␻

FIGURA 9.5-4 Um motor dc controlado por armadura.

Veremos um exemplo da função lsim em breve.

Programação de funções forçantes detalhadas


Como um exemplo final de equações de ordem superior, mostraremos agora como pro-
gramar uma função forçante detalhada para ser utilizada com a função lsim. Utiliza-
remos um motor dc como a aplicação. As equações para um motor dc controlado por
armadura (tal como um motor de magneto permanente) mostrado na Figura 9.5-4 estão
a seguir. Elas são obtidas a partir das leis das tensões de Kirchhoff e das leis de Newton
aplicadas a uma massa girante. A corrente do motor é i e a sua velocidade de rotação é ␻.

(9.5-11)

(9.5-12)

L, R e I são a indutância, a resistência e a inércia do motor; KT e Ke são a constante de


torque e a constante de força contraeletromotriz; c é uma constante de amortecimento
viscoso; e v(t) é a tensão aplicada. Essas equações podem ser postas na forma matri-
cial da seguinte maneira, em que x1 = i e x2 = ␻:

EXEMPLO 9.5-1 Perfil trapezoidal para um motor dc

Em muitas aplicações, queremos acelerar o motor até uma velocidade desejada e permitir
que ele gire naquela velocidade por algum tempo antes de desacelerar até parar. Investigue
se uma tensão que tem um perfil trapezoidal será capaz de realizar isso. Utilize os valores
R = 0,6 æ, L = 0,002 H, KT = 0,04 N ⭈ m/A, Ke = 0,04 V ⭈ s/rad, c = 0 e I = 6 * 10-5 kg ⭈
m2. A tensão aplicada em volts é dada por:

Ela é mostrada no gráfico superior da Figura 9.5-5.


404 Introdução ao MATLAB para Engenheiros

10

Tensão (V)
8
6
4
2
0
0 0,1 0,2 0,3 0,4 0,5
t (s)

300
Velocidade (rad/s)

200

100

0
0 0,1 0,2 0,3 0,4 0,5 0,6
t (s)

FIGURA 9.5-5 Entrada de tensão e velocidade resultante de um motor dc.

■ Solução
O programa a seguir primeiro cria o modelo sys a partir das matrizes A, B, C e D. Es-
colhemos C e D para obter a velocidade x2 como a única saída. (Para obter a velocidade
e a corrente como saídas, deveríamos escolher C = [1, 0; 0, 1] e D = [0; 0].)
O programa calcula as constantes de tempo utilizando a função eig e em seguida cria
time, o arranjo de valores de tempo a serem utilizados por lsim. Escolhemos o in-
cremento de tempo 0,0001 como sendo uma fração muito pequena do tempo total 0,6 s.
A função de tensão trapezoidal é então criada com um laço for. Essa é talvez a
maneira mais fácil porque a estrutura if-elseif-else simula as equações que defi-
nem v(t). Considere que as condições iniciais x1(0) e x2(0) são nulas, portanto, elas não
precisam ser especificadas na função lsim.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 405

As constantes de tempo calculadas são 0,0041 e 0,0184 s. A maior constante de tempo


indica que o tempo de resposta do motor é de aproximadamente 4(0,0184) = 0,0736 s. Como
esse tempo é menor do que o tempo necessário para que a tensão aplicada atinja 10 V, o motor
deve ser capaz de seguir o perfil trapezoidal desejado razoavelmente bem. Para ter certeza,
precisamos resolver as equações diferenciais do motor. Os resultados são plotados no gráfico
inferior da Figura 9.5-5. A velocidade do motor segue um perfil trapezoidal, como esperado,
apesar de haver um leve desvio por causa da resistência elétrica e da inércia mecânica.

Visualizador LIT (LTI Viewer) O toolbox de Sistemas de Controle contém o Vi-


sualizador LIT, que auxilia na análise de sistemas LIT. Ele fornece uma interface
interativa com o usuário que permite alternar entre diferentes tipos de plotagens de
resposta e entre diferentes sistemas em análise. O visualizador é chamado digitando-
-se ltiview. Veja o Sistema de Ajuda do MATLAB para mais informações.

Funções de entrada predefinidas


Você sempre pode criar qualquer função complicada para ser utilizada com os solucio-
nadores de EDO ode45 ou lsim definindo um vetor que contém os valores da função
de entrada em instantes de tempo específicos, como foi feito no Exemplo 9.5-1 para o
perfil trapezoidal. Entretanto, há no MATLAB a função gensig que facilita a constru-
ção de funções de entrada periódicas.
A sintaxe [u, t] = gensig(type, period) gera uma entrada
periódica de um tipo específico type e com um período period. Os seguintes
tipos estão disponíveis: onda senoidal (type = ‘sin’), onda quadrada (type =
‘square’), e pulsos periódicos estreitos (type = ‘pulse’). O vetor t contém os ins-
tantes de tempo, e o vetor u contém os valores de entrada correspondentes àqueles
instantes de tempo. Todas as entradas geradas apresentam amplitude unitária. A
sintaxe [u, t] = gensig(type,period,tF,dt) especifica a duração
tF da entrada e o espaçamento dt entre os instantes de tempo.
406 Introdução ao MATLAB para Engenheiros

1,5

1
Resposta

0,5

⫺0,5
0 1 2 3 4 5 6 7 8 9 10
Tempo

FIGURA 9.5-6 Resposta do modelo .

Por exemplo, suponha que uma onda quadrada de período 5 seja aplicada ao
seguinte modelo na forma reduzida:
(9.5-13)
Para encontrar a resposta, considerando condições iniciais nulas, ao longo do
intervalo 0 … t … 10, utilizando um tamanho de passo de 0,01, a sessão é:
>>sys5 = tf(4,[1,2,4]);
>>[u, t] = gensig(’square’,5,10,0.01);
>>[y, t] = lsim (sys5,u,t);plot(t,y,u), . . .
axis([0 10 -0.5 1.5]), . . .
xlabel(’Tempo’),ylabel(’Resposta’)
O resultado é mostrado na Figura 9.5-6.

9.6 Resumo
Este capítulo abordou métodos numéricos para o cálculo de integrais e derivadas e
para a resolução de equações diferenciais ordinárias. Agora que você finalizou o ca-
pítulo, deve ser capaz de:
■ Avaliar numericamente integrais simples, duplas e triplas cujos integrandos se-
jam funções dadas.
■ Avaliar numericamente integrais simples cujos integrandos sejam dados como
valores numéricos.
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 407

■ Estimar numericamente a derivada de um conjunto de dados.


■ Calcular o gradiente e o Laplaciano de uma dada função.
■ Obter em forma fechada a integral e a derivada de uma função polinomial.
■ Utilizar os solucionadores de EDO do MATLAB para resolver equações diferen-
ciais ordinárias de primeira ordem cujas condições iniciais sejam especificadas.
■ Converter equações diferenciais ordinárias de ordem superior em um conjunto
de equações de primeira ordem.
■ Utilizar os solucionadores de EDO do MATLAB para resolver conjuntos de
equações diferenciais ordinárias de primeira ordem cujas condições iniciais se-
jam especificadas.
■ Utilizar o MATLAB para converter um modelo na forma de função de transfe-
rência para a forma de variáveis de estado, e vice-versa.
■ Utilizar os solucionadores lineares do MATLAB para resolver equações dife-
renciais lineares a fim de obter a resposta livre e a resposta forçada para funções
forçantes arbitrárias.
Não abordamos todos os solucionadores de equações diferenciais disponíveis
no MATLAB, mas limitamos nossa abordagem a equações diferenciais ordinárias
cujas condições iniciais sejam especificadas. Há no MATLAB algoritmos para a so-
lução de problemas de valor de contorno (em inglês, a sigla é BVPs), tais como:

Veja no Sistema de Ajuda a função bvp4c. Algumas equações diferenciais são espe-
cificadas implicitamente como f(t, y, ) = 0. O solucionador ode15i pode ser utili-
zado para esses problemas. O MATLAB também pode resolver equações diferenciais
com atraso (em inglês, a sigla é DDEs), tais como:

Veja no Sistema de Ajuda as funções dde23, ddesd e deval. A função pdede


pode resolver equações diferenciais parciais. Veja também pdeval. Além disso, o
MATLAB fornece suporte para a análise e a plotagem da saída do solucionador. Veja
as funções odeplot, odephas2, odephas3 e odeprint.

Termos-chave
Autovalor, 395 Laplaciano, 380
Diferença central, 377 Método de Euler modificado, 382
Diferença para a frente, 376 Método de Euler, 381
Diferença para trás, 376 Método preditor-corretor, 382
EDO, 380 Objeto LIT, 396
Equação diferencial ordinária, 380 Problema de valor inicial (PVI), 380
Forma de Cauchy, 388 Quadratura, 371
Forma de variável de estados, 388 Resposta forçada, 381
Integral definida, 368 Resposta livre, 381
Integral imprópria, 368 Singularidades, 368
Integral indefinida, 368 Tamanho de passo, 382
408 Introdução ao MATLAB para Engenheiros

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

Seção 9.1
1.* Um objeto se move a uma velocidade y(t) = 5 + 7t2 m/s começando da posição
inicial x(2) = 5 m em t = 2 s. Determine sua posição em t = 10 s.
2. A distância total percorrida por um objeto que se move a uma velocidade y(t)
desde o tempo t = a até o tempo t = b é

O valor absoluto |v(t)| é utilizado para levar em consideração a possibilidade de y(t)


ser negativo. Suponha que um objeto comece em t = 0 e se mova com uma veloci-
dade v(t) = cos(␲t) m. Encontre a localização do objeto em t = 1 s se x(0) = 2 m.
3. Um objeto começa com uma velocidade inicial de 3 m/s em t = 0 e se move
com uma aceleração de a(t) = 7t m/s2. Encontre a distância total que o objeto
percorre em 4 s.
4. A equação para a tensão v(t) nos terminais de um capacitor como uma função
do tempo é

em que i(t) é a corrente aplicada e Q0 é a carga inicial. Um determinado capa-


citor inicialmente não possui nenhuma carga. Sua capacitância é C = 10-7 F.
Se uma corrente i(t) = 0,2[1 + sen(0,2t)] A for aplicada ao capacitor, calcule a
tensão y(t) em t = 1,2 s se sua tensão inicial for zero.
5. A aceleração de um determinado objeto é dada por a(t) = 7t sen 5t m/s2. Calcu-
le sua velocidade em t = 10 s se a velocidade inicial for zero.
6. Um determinado objeto se move com a velocidade v(t) dada na tabela abaixo.
Determine a posição do objeto x(t) em t = 10s se x(0) = 3.

Tempo (s) 0 1 2 3 4 5 6 7 8 9 10
Velocidade (m/s) 0 2 5 7 9 12 15 18 22 20 17

7.* Um tanque com paredes laterais na vertical e uma área inferior igual a 100 ft2
é utilizado para armazenar água. O tanque está inicialmente vazio. Para encher
o tanque, água é bombeada pela parte superior a uma taxa dada na tabela a se-
guir. Determine a altura de água h(t) em t = 10 min.

Tempo (min) 0 1 2 3 4 5 6 7 8 9 10
Vazão (ft3/min) 0 80 130 150 150 160 165 170 160 140 120
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 409

8. Um copo de papel em forma de cone (como o tipo fornecido em fontes de


água) tem um raio R e uma altura H. Se a altura da água no copo for h, o volu-
me de água é dado por:

Suponha que as dimensões do copo sejam R = 1,5 in e H = 4 in.


a. Se a vazão da fonte para o copo for de 2 in3/s, quanto tempo será necessário
para encher o copo até a borda?
b. Se a vazão da fonte para o copo for dada por 2(1 - e-2t) in3/s, quanto tempo
será necessário para encher o copo até a borda?
9. Um determinado objeto tem uma massa de 100 kg e sofre a atuação de uma
força f(t) = 500[2 - e-t sen(5␲t)]N. A massa está em repouso em t = 0. Deter-
mine a velocidade do objeto em t = 5 s.
10.* A massa de um foguete decresce conforme o combustível é queimado. A equa-
ção de movimento para um foguete em voo vertical pode ser obtida a partir da
segunda lei de Newton, e é

em que T é a força de impulsão do foguete, e sua massa, como uma função do


tempo, é dada por m(t) = m0(1 - rt/b). A massa inicial do foguete é m0, o tem-
po de queima é b e r é a fração da massa total correspondente ao combustível.
Utilize os valores T = 48 000 N, m0 = 2200 kg, r = 0,8, g = 9,81 m/s2 e b = 40 s.
Determine a velocidade do foguete após a queima de todo o combustível.
11. A equação para a tensão v(t) nos terminais de um capacitor como uma função
do tempo é

em que i(t) é a corrente aplicada e Q0 é a carga inicial. Suponha que C = 10-7 F e


Q0 = 0. Suponha que a corrente aplicada é i(t) = 0,3 + 0,1e-5t sen(25␲t) A. Plote a
tensão v(t) para 0 … t … 7 s.
12. Calcule a integral indefinida de p(x) = 5x2 - 9x + 8.
13. Calcule a integral dupla

14. Calcule a integral dupla


410 Introdução ao MATLAB para Engenheiros

15. Calcule a integral dupla

Note que a região de integração se encontra à direita da linha y = x. Utilize esse


fato e um operador relacional do MATLAB para eliminar valores para os quais
y 7 x.
16. Calcule a integral tripla

Seção 9.2
17. Plote a estimativa da derivada dy/dx dos dados a seguir. Faça isso utilizando a
diferença para a frente, a diferença para trás e a diferença central. Compare os
resultados.

x 0 1 2 3 4 5 6 7 8 9 10
y 0 2 5 7 9 12 15 18 22 20 17

18. Em um máximo relativo da curva y(x), a inclinação dy/dx é zero. Utilize os da-
dos a seguir para estimar os valores de x e y que correspondem a um ponto de
máximo.

x 0 1 2 3 4 5 6 7 8 9 10
y 0 2 5 7 9 10 8 7 6 8 10

19. Compare o desempenho dos métodos da diferença para a frente, da diferença para
trás e da diferença central para estimar a derivada de y(x) = e-x sen(3x). Utilize
101 pontos de x = 0 até x = 4. Utilize um erro aditivo aleatório de ; 0,01.
20. Calcule as expressões para dp2/dx, d(p1p2)/dx e d(p2/p1)/dx para p1 = 5x2 + 7 e
p2 = 5x2 - 6x + 7.
21. Plote as linhas de contorno e o gradiente (indicado por setas) para a função
f (x, y) = -x2 + 2xy + 3y2

Seção 9.3
22. Plote a solução da equação

se f(t) = 0 para t 6 0 e f(t) = 15 para t Ú 0. A condição inicial é y(0) = 7.


Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 411

23. A equação para a tensão y nos terminais do capacitor de um circuito RC é

em que v(t) é a tensão aplicada. Suponha que RC = 0,2 s e que a tensão inicial
no capacitor é de 2 V. Suponha também que a tensão aplicada vai de 0 a 10 V
em t = 0. Plote a tensão y(t) para 0 … t … 1 s.
24. A seguinte equação descreve a temperatura T(t) de um determinado objeto
imerso em um banho líquido de temperatura constante Tb:

Suponha que a temperatura inicial do objeto é T(0) = 70°F e que a temperatura


do banho é Tb = 170°F.
a. Quanto tempo será necessário para que a temperatura do objeto T alcance a
temperatura do banho?
b. Quanto tempo será necessário para que a temperatura do objeto T alcance
168°F?
c. Plote a temperatura do objeto T(t) como uma função do tempo.
25.* A equação de movimento de um trenó propelido a foguete é, a partir da segun-
da lei de Newton,

em que m é a massa do trenó, f é a força de impulso do foguete e c é o coefi-


ciente de resistência do ar. Suponha que m = 1000 kg e c = 500 N · s/m. Supo-
nha também que y(0) = 0 e f = 75 000 N para t Ú 0. Determine a velocidade do
trenó em t = 10 s.
26. A seguinte equação descreve o movimento de uma massa conectada a uma
mola, com atrito viscoso na superfície:

Plote y(t) para y(0) = 10, (0) = 5 se


a. m = 3, c = 18 e k = 102
b. m = 3, c = 39 e k = 120
27. A equação para a tensão y nos terminais de um capacitor de um circuito RC é

em que v(t) é a tensão aplicada. Suponha que RC = 0,2 s e que a tensão inicial
no capacitor é de 2 V. Suponha também que a tensão aplicada é v(t) = 10[2 -
e-t sen(5␲t)] V. Plote a tensão y(t) para 0 … t … 5 s.
412 Introdução ao MATLAB para Engenheiros

28. A equação que descreve a altura de água h em um tanque esférico com um dre-
no na parte inferior é:

Suponha que o raio do tanque seja r = 3 m e que o orifício do dreno circular te-
nha um raio de 2 cm. Presuma que Cd = 0,5 e que a altura de água inicial é h(0)
= 5 m. Utilize g = 9,81 m/s2.
a. Utilize uma aproximação para estimar quanto tempo é necessário para que o
tanque seja esvaziado.
b. Plote a altura de água como uma função do tempo até h(t) = 0.
29. A equação a seguir descreve um determinado processo de diluição, em que y(t)
é a concentração de sal no tanque de água doce ao qual está sendo adicionado
sal de salmoura.

Suponha que y(0) = 0. Plote y(t) para 0 … t … 10.

Seção 9.4
30. A equação a seguir descreve o movimento de uma determinada massa conecta-
da a uma mola, com atrito viscoso na superfície,

em que f(t) é uma força aplicada. Suponha que f(t) = 0 para t 6 0 e f(t) = 10
para t Ú 0.
a. Plote y(t) para y(0) = (0) = 0.
b. Plote y(t) para y(0) = 0 e (0) = 10. Discuta o efeito de uma velocidade ini-
cial não nula.
31. A equação a seguir descreve o movimento de uma determinada massa conecta-
da a uma mola, com atrito viscoso na superfície,

em que f(t) é uma força aplicada. Suponha que f(t) = 0 para t 6 0 e f(t) = 10
para t Ú 0.
a. Plote y(t) para y(0) = (0) = 0.
b. Plote y(t) para y(0) = 0 e (0) = 10. Discuta o efeito de uma velocidade ini-
cial não nula.
32. A equação a seguir descreve o movimento de uma determinada massa conecta-
da a uma mola, sem atrito,
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 413

em que f(t) é uma força aplicada. Suponha que a força aplicada seja senoidal com
uma frequência de ␻ rad/s e uma amplitude de 10 N: f(t) = 10 sen(␻t). Suponha
que as condições iniciais sejam y(0) = (0) = 0. Plote y(t) para 0 … t … 20 s. Faça
isso para os três casos a seguir. Compare os resultados de cada caso.
a. ␻ = 1 rad/s
b. ␻ = 5 rad/s
c. ␻ = 10 rad/s
33. A equação de Van der Pol tem sido utilizada para escrever muitos processos
oscilatórios. A equação é:

Plote y(t) para ␮ = 1 e 0 … t … 20, utilizando as condições iniciais y(0) = 5, (0)


= 0.
34. A equação de movimento para um pêndulo cuja base se move horizontalmente
com uma aceleração a(t) é:

Suponha que g = 9,81 m/s2, L = 1 m e (0) = 0. Plote ␪(t) para 0 … t … 10 s para


os três seguintes casos:
a. A aceleração é constante: a = 5 m/s2 e ␪(0) = 0,5 rad.
b. A aceleração é constante: a = 5 m/s2 e ␪(0) = 3 rad.
c. A aceleração é linear com o tempo: a = 0,5t m/s2 e ␪(0) = 3 rad.
35. A equação de Van der Pol é:

Essa equação é dura para valores grandes do parâmetro µ. Compare o desempe-


nho de ode45 e ode15s para essa equação. Utilize µ = 1000 e 0 … t … 3000,
com condições iniciais y(0) = 2, (0) = 0. Plote y(t) versus t.

Seção 9.5
36. As equações a seguir são para um motor dc controlado por armadura. A corren-
te do motor é i e a sua velocidade rotacional é ␻.

(9.6-1)

(9.6-2)

L, R e I são a indutância, a resistência e a inércia do motor; KT e Ke são a cons-


tante de torque e a constante de força contraeletromotriz; c é uma constante de
amortecimento viscoso; e y(t) é a tensão aplicada.
414 Introdução ao MATLAB para Engenheiros

Utilize os valores R = 0,8 æ, L = 0,003 H, KT = 0,05 N ⭈ m/A, Ke = 0,05 V ⭈ s/rad,


c = 0 e I = 8 * 10-5 kg ⭈ m2.
a. Suponha que a tensão aplicada seja 20 V. Plote a velocidade e a corrente do
motor versus o tempo. Escolha um tempo final suficientemente grande para
mostrar a velocidade do motor tornando-se constante.
b. Suponha que a tensão aplicada seja trapezoidal, como dado abaixo:

Plote a velocidade do motor versus o tempo para 0 … t … 0,3 s. Plote também


a tensão aplicada versus o tempo. Quão bem a velocidade do motor segue o
perfil trapezoidal?
37. Calcule e plote a resposta ao impulso unitário do seguinte modelo:

38. Calcule e plote a resposta ao degrau unitário do seguinte modelo:

39.* Encontre a forma reduzida do seguinte modelo em espaço de estados:

40. O seguinte modelo em espaço de estados descreve o movimento de uma deter-


minada massa conectada a uma mola, com atrito viscoso na superfície, em que
m = 1, c = 2 e k = 5:

a. Utilize a função initial para plotar a posição x1 da massa, se a posição


inicial for 5 e a velocidade inicial for 3.
b. Utilize a função step para plotar a resposta ao degrau da posição e da
velocidade para condições iniciais nulas, em que a magnitude do degrau de
entrada é 10. Compare sua plotagem com aquela mostrada na Figura 9.5-1.
41. Considere a seguinte equação:

a. Plote a resposta livre para as condições iniciais y(0) = 10, (0) = -5.
b. Plote a resposta ao degrau unitário (para condições iniciais nulas).
Capítulo 9 ■ Métodos numéricos para cálculo e equações diferenciais 415

c. A resposta total a uma entrada em degrau é a soma da resposta livre e da


resposta ao degrau. Demonstre esse fato para essa equação plotando a
soma das soluções encontradas nos itens a e b e compare a plotagem com
aquela gerada resolvendo-se a equação para a resposta total com y(0) = 10,
(0) = -5.
42. O modelo para o circuito RC mostrado na Figura P42 é:

Para RC = 0,2 s, plote a tensão de saída v0(t) para o caso em que a tensão apli-
cada é um único pulso quadrado de altura 10 V e duração 0,4 s, começando em
t = 0. A tensão inicial do capacitor é zero.

R

vi C vo

FIGURA P42
Foto: Nick Koudis/Getty Images/RF

Engenharia no
Século XXI…
Sistemas de controle
embarcados

U
m sistema de controle embarcado consiste em um microprocessador e em
um sensor projetados para serem partes constituintes de um produto. As in-
dústrias aeroespacial e automotiva já utilizam sistemas embarcados há algum
tempo, mas com a atual redução dos custos dos componentes, os controladores em-
barcados tornaram-se viáveis para mais consumidores e para aplicações biomédicas.
Por exemplo, os sistemas embarcados podem aumentar significativamente o
desempenho de dispositivos ortopédicos. Um modelo de uma perna artificial já utiliza
sensores para medir em tempo real a velocidade de caminhada, o ângulo da junta do
joelho e a carga devido ao pé e ao tornozelo. Essas medidas são utilizadas pelo con-
trolador para ajustar a resistência hidráulica de um pistão a fim de produzir uma mar-
cha mais estável, natural e eficiente. Os algoritmos do controlador são adaptativos, de
modo que possam ser sintonizados de acordo com as características de um indivíduo
e suas configurações alteradas para acomodar diferentes atividades físicas.
Motores incorporam controladores para melhorar sua eficiência. Controladores
embarcados em novas suspensões ativas utilizam atuadores para melhorar o desem-
penho dos sistemas passivos tradicionais, que consistem apenas em molas e amorte-
cedores. Uma fase do projeto de tais sistemas é o teste de hardware-in-the-loop, na
qual o objeto controlado (o motor ou a suspensão do veículo) é substituído por uma
simulação em tempo real do seu comportamento. Isso permite que o hardware e o
software do sistema embarcado sejam testados mais rapidamente e com menos custos
do que com um protótipo físico, e possivelmente mesmo antes de o protótipo estar
disponível.
O Simulink é utilizado frequentemente para criar o modelo de simulação para
o teste de hardware-in-the-loop. Os toolboxes de Sistemas de Controle e de Proces-
samento de Sinais, e os conjuntos de blocos de DSP e de Pontos Fixos, também são
úteis para essas aplicações. ■
10
Simulink

O Simulink foi construído sobre o MATLAB, portanto você deve ter o MATLAB para
utilizar o Simulink. Ele está incluído na Edição de Estudante do MATLAB e também
está disponível separadamente pela empresa The MathWorks, Inc. O Simulink é am-
plamente utilizado na indústria para modelar sistemas complexos e processos que são
difíceis de ser modelados com um simples conjunto de equações diferenciais.
O Simulink fornece uma interface gráfica com o usuário que utiliza diversos
tipos de elementos, chamados de blocos, na criação da simulação de um sistema di-
nâmico, isto é, de um sistema que pode ser modelado com equações diferenciais ou
equações de diferenças cuja variável independente é o tempo. Por exemplo, um tipo
de bloco é um multiplicador, um outro realiza soma, e há outro que é um integrador. A
interface gráfica do Simulink permite posicionar os blocos, redimensioná-los, rotulá-
-los, especificar seus parâmetros e interconectá-los para descrever sistemas compli-
cados objetivando a sua simulação.
Esse capítulo começa com simulações de sistemas simples que requerem pou-
cos blocos. Gradualmente, ao longo de uma série de exemplos, mais tipos de blocos
serão introduzidos. As aplicações escolhidas exigem apenas um conhecimento básico
de física e, portanto, podem ser apreciadas por leitores de qualquer engenharia ou
disciplina científica. Até o final deste capítulo, você terá visto os tipos de blocos ne-
cessários para simular uma grande variedade de aplicações comuns.

10.1 Diagramas de simulação


Você desenvolve modelos no Simulink construindo um diagrama que mostra os ele-
DIAGRAMA mentos do problema a ser resolvido. Esses diagramas são chamados de diagramas
DE BLOCOS de simulação. Considere a equação = 10f(t). Sua solução pode ser representada
simbolicamente como
418 Introdução ao MATLAB para Engenheiros

que pode ser pensada em dois passos, utilizando-se uma variável intermediária x:

Essa solução pode ser representada graficamente pelo diagrama de simulação mostra-
do na Figura 10.1-1a. As setas representam as variáveis y, x e f. Os blocos represen-
tam os processos de causa e efeito. Assim, o bloco contendo o número 10 representa
o processo x(t) = 10f(t), em que f(t) é a causa (a entrada) e x(t) representa o efeito (a
BLOCO DE saída). Esse tipo de bloco é chamado de multiplicador ou bloco de ganho.
GANHO O bloco contendo o sinal de integral 冕 representa o processo de integração
y(t) = 冕 x(t) dt, em que x(t) é a causa (a entrada) e y(t) representa o efeito (a saída).
BLOCO Esse tipo de bloco é chamado de bloco integrador.
INTEGRADOR Há alguma variação na notação e nos símbolos utilizados em diagramas de si-
mulação. A Figura 10.1-1b mostra uma variação. Em vez de ser representado por uma
caixa, o processo de multiplicação é agora representado por um triângulo como aquele
utilizado para representar um amplificador elétrico, daí o nome bloco de ganho.
Além disso, o símbolo de integração no bloco integrador foi substituído pelo
operador 1/s, que é obtido a partir da notação utilizada para a transformada de La-
place (ver Seção 11.7 para uma discussão dessa transformada). Assim, a equação
= 10f(t) é representada por sy = 10f, e a solução, portanto, é dada pela equação

ou pelas duas equações

SOMADOR Outro elemento utilizado em diagramas de simulação é o somador, que, ape-


sar do seu nome, é utilizado tanto para subtrair quanto para somar variáveis. Duas
versões desse símbolo são mostradas na Figura 10.1-2a. Em cada caso o símbolo
representa a equação z = x - y. Note que um sinal de adição ou subtração é necessário
para cada seta de entrada.

f(t) x(t) y(t) f x y


1
10 ∫ 10 s

(a) (b)
FIGURA 10.1-1 Diagramas de simulação para = 10f(t).

x  z x z f 1 y

 
 s

y y 10

(a) (b)
FIGURA 10.1-2 (a) O elemento somador. (b) Diagrama de simulação para = f(t) - 10y.
Capítulo 10 ■ Simulink 419

O símbolo do somador pode ser utilizado para representar a equação = f(t) - 10y,
a qual pode ser expressa como

ou como

Você deve estudar o diagrama de simulação mostrado na Figura 10.1-2b para confir-
mar que ele representa essa equação. Essa figura é a base para o desenvolvimento de
um modelo no Simulink capaz de resolver essa equação.

10.2 Introdução ao Simulink


NAVEGADOR DE Digite simulink na janela de Comandos para iniciar o Simulink. A janela do Na-
BIBLIOTECAS vegador de Bibliotecas do Simulink (Simulink Library Browser) abrirá. Veja a Figura
10.2-1. Os blocos do Simulink estão localizados nas “bibliotecas”. Essas bibliote-
cas são exibidas abaixo do cabeçalho do Simulink na Figura 10.2-1. Dependendo
de quais outros produtos da MathWorks estiverem instalados, você poderá ver itens

FIGURA 10.2-1 O Navegador de Bibliotecas do Simulink.


420 Introdução ao MATLAB para Engenheiros

adicionais nessa janela, como o toolbox de Sistemas de Controle e o Stateflow. Eles


fornecem blocos adicionais do Simulink, os quais podem ser exibidos clicando-se no
sinal de adição à esquerda do item. Como o Simulink evolui ao longo de novas ver-
sões, algumas bibliotecas são renomeadas e alguns blocos são movidos para biblio-
tecas diferentes, portanto, as bibliotecas aqui especificadas podem mudar em versões
mais novas. A melhor maneira de localizar um bloco, dado o seu nome, é digitá-lo no
painel de busca na parte superior do Navegador de Bibliotecas do Simulink. Quando
você pressionar Enter, o Simulink mostrará a localização do bloco.
Para criar um novo modelo, clique no ícone que se parece com uma folha de
papel em branco, ou selecione New a partir do menu File no navegador. Uma nova
janela Untitled abrirá para que você crie o modelo. Para selecionar um bloco do
Navegador de Bibliotecas, clique duas vezes na biblioteca apropriada, e uma lista
de blocos dentro daquela biblioteca será exibida, como mostrado na Figura 10.2-1.
Essa figura mostra o resultado de se clicar primeiro na biblioteca Continuous e, em
seguida, no bloco Integrator.
Clique no nome do bloco ou no ícone, mantenha o botão do mouse pressiona-
do, arraste o bloco para a nova janela de modelo e solte o botão. Você pode acessar
o sistema de ajuda para aquele bloco clicando duas vezes no seu nome ou no ícone e
selecionando em seguida Help no menu suspenso.
Arquivos de modelo no Simulink apresentam a extensão .mdl. Utilize o menu
File na janela do modelo para Abrir (Open), Fechar (Close) e Salvar (Save) arquivos
de modelo. Para imprimir o diagrama de blocos do modelo, selecione Print no menu
File. Utilize o menu Edit para copiar, cortar e colar blocos. Você também pode utili-
zar o mouse para realizar essas operações. Por exemplo, para deletar um bloco, clique
nele e pressione a tecla Delete.
A melhor maneira de se iniciar no Simulink é por meio de exemplos, os quais
apresentaremos agora.

EXEMPLO 10.2-1 Solução de = 10 sen t no Simulink

Resolva o problema a seguir para 0 … t … 13 utilizando o Simulink:

A solução exata é y(t) = 10(1 - cos t).


■ Solução
Para construir a simulação, execute os passos a seguir. Veja a Figura 10.2-2. A Figura
10.2-3 mostra a janela Model após a conclusão dos passos.
1. Inicie o Simulink e abra uma nova janela de modelo como descrito anteriormente.
2. Selecione e insira na nova janela o bloco Sine Wave a partir da biblioteca Sources. Cli-
que duas vezes sobre ele para abrir a janela Block Parameters, e certifique-se de que a
Amplitude está definida como 1, o Bias como zero, a Frequência como 1, a Fase como
0 e o Tempo de amostragem (Sample time) como 0. Em seguida, clique em OK.
Capítulo 10 ■ Simulink 421

3. Selecione e insira um bloco de ganho (gain block) a partir da biblioteca Math Ope-
rations, clique duas vezes sobre ele e ajuste o valor do Ganho para 10 na janela
Block Parameters. Em seguida, clique em OK. Note que o valor 10 aparecerá no
triângulo. Para tornar esse número mais visível, clique no bloco e arraste um de seus
cantos para expandir o bloco até que todo o texto se torne visível.
4. Selecione e insira o bloco integrador da biblioteca Continuous, clique duas vezes
sobre ele para que apareça a janela Block Parameters e ajuste a Condição Inicial
(Initial Condition) para 0 [porque y(0) = 0]. Em seguida, clique em OK.
5. Selecione e insira o bloco Scope a partir da biblioteca Sinks.
6. Uma vez que os blocos tenham sido inseridos como mostrado na Figura 10.2-2,
conecte a porta de entrada de cada bloco à porta de saída do bloco que o antecede.
Para fazer isso, mova o cursor para uma porta de entrada ou para uma porta de saída;
o cursor assumirá o aspecto de uma cruz. Pressione o botão do mouse e arraste o
cursor para uma porta em outro bloco. Quando você soltar o botão do mouse, o
Simulink conectará as duas portas com uma seta que aponta para a porta de entrada.
Agora o seu modelo deve se parecer com aquele mostrado na Figura 10.2-2.
7. Insira 13 como Tempo de parada (Stop time) à direita do ícone Start Simulation (o
triângulo preto). Veja a Figura 10.2-3. O valor padrão é 10, o qual pode ser deletado
e substituído por 13.
8. Rode a simulação clicando no ícone Start Simulation na barra de ferramentas.
9. Você ouvirá um som de sino quando a simulação chegar ao fim. Então, clique duas
vezes no bloco Scope e clique no ícone com binóculos na janela Scope para habilitar
o dimensionamento automático. Você deve ver um curva oscilatória com amplitude

1
10 s
Sine Wave Gain Integrator Scope
FIGURA 10.2-2 Modelo no Simulink para = 10 sen t.

FIGURA 10.2-3 A janela Model no Simulink mostrando o modelo criado no Exemplo 10.2-1.
422 Introdução ao MATLAB para Engenheiros

FIGURA 10.2-4 A janela Scope após a simulação do modelo no Exemplo 10.2-1.

igual a 10 e período igual a 2 (Figura 10.2-4). A variável independente no bloco


Scope é o tempo t; a entrada para o bloco é a variável dependente y. Isso completa a
simulação.

No submenu Configuration Parameters abaixo do menu Simulation, você pode


selecionar o solucionador de EDO a ser utilizado clicando na aba Solver. O solucio-
nador predefinido é ode45, como indicado no canto direito inferior da janela Model.
Para que dois blocos no Simulink se conectem automaticamente, selecione o
bloco Source, pressione a tecla Ctrl e clique com o botão esquerdo no bloco Destina-
tion. O Simulink também fornece maneiras fáceis de se conectar múltiplos blocos e
linhas; veja o Sistema de Ajuda para mais informações.
Note que cada bloco tem uma janela Block Parameters que é aberta quando
você clica duas vezes sobre ele. A janela contém diversos itens, cujos números e na-
turezas dependem do tipo específico do bloco. Em geral, você pode utilizar os valores
predefinidos desses parâmetros, exceto quando indicarmos explicitamente que eles
devem ser alterados. Você sempre pode clicar em Help dentro da janela Block Para-
meters para obter mais informações.
Quando você clicar em Apply, quaisquer alterações são efetivadas imediata-
mente e a janela permanece aberta. Se você clicar em OK, as alterações são efetiva-
das e a janela é fechada.
Note que a maioria dos blocos apresenta rótulos predefinidos. Você pode editar
o texto associado a um bloco clicando no texto e fazendo as alterações. Você pode
salvar o modelo no Simulink como um arquivo .mdl selecionando Save no menu
File do Simulink. O arquivo do modelo pode ser recarregado posteriormente. Você
também pode imprimir o diagrama clicando em Print no menu File.
Capítulo 10 ■ Simulink 423

O bloco Scope é útil para examinar a solução, mas se você quiser obter uma plo-
tagem rotulada e impressa, pode utilizar o bloco To Workspace, o qual será descrito
no próximo exemplo.

EXEMPLO 10.2-2 Exportando para o espaço de trabalho do MATLAB

Demonstraremos agora como exportar resultados da simulação para o espaço de trabalho


do MATLAB, onde eles podem ser plotados ou analisados com quaisquer das funções do
MATLAB.
■ Solução
Modifique o modelo do Simulink construído no Exemplo 10.2-1 da maneira a seguir. Veja
a Figura 10.2-5.
1. Apague a linha que se conecta ao bloco Scope clicando sobre ela e pressionando a
tecla Delete. Apague o bloco Scope da mesma maneira.
2. Selecione e insira o bloco To Workspace a partir da biblioteca Sinks e o bloco Clock
a partir da biblioteca Sources.
3. Selecione e insira o bloco Mux a partir da biblioteca Signal Routing, clique duas
vezes sobre ele e defina o número de entradas igual a 2. Clique em OK. (O nome
Mux é uma abreviação para multiplexador, que é um dispositivo elétrico que serve
para combinar diversos sinais.)
4. Conecte a porta de entrada superior do bloco Mux à porta de saída do bloco Integra-
tor. Em seguida, utilize a mesma técnica para conectar a porta de entrada inferior do
bloco Mux à porta de saída do bloco Clock. Seu modelo agora deve se parecer com
aquele mostrado na Figura 10.2-5.
5. Clique duas vezes no bloco To Workspace. Você pode especificar qualquer nome de
variável para a saída; o nome predefinido é simout. Mude-o para y. A variável de
saída y terá tantas linhas quantos forem os instantes de tempo da simulação, e tantas
colunas quantas forem as entradas do bloco. A segunda coluna na nossa simulação
será o tempo, por causa da maneira como conectamos o bloco Clock à segunda porta
de entrada do bloco Mux. Especifique o formato Save como Array. Utilize os valores
predefinidos para os outros parâmetros (os quais devem ser inf, 1 e –1 para Limit
data points to last; Decimation e Sample time, respectivamente). Clique em OK.

1
10 s
Sine Wave Gain Integrator

Clock To Workspace

FIGURA 10.2-5 Modelo no Simulink utilizando os blocos Clock e To Workspace.


424 Introdução ao MATLAB para Engenheiros

6. Após rodar a simulação, você pode utilizar os comandos de plotagem do MATLAB


a partir da janela de Comandos para plotar as colunas de y (ou simout em geral).
Para plotar y(t), digite na janela de Comandos do MATLAB

>>plot(y(:,2),y(:,1)),xlabel(’t’),ylabel(’y’)

O Simulink pode ser configurado para inserir a variável tout no espaço de


trabalho do MATLAB automaticamente quando você estiver utilizando o bloco To
Workspace. Isso é feito com o item Data Import/Export abaixo de Configuration
Parameters no menu Simulation. A alternativa é utilizar o bloco Clock para inserir
tout no espaço de trabalho. O bloco Clock possui um parâmetro: Decimation. Se
esse parâmetro for definido como 1, o bloco Clock vai gerar um valor de tempo a cada
instante da simulação; se ele for definido como 10, por exemplo, o bloco vai gerar um
valor de tempo a cada 10 instantes da simulação, e assim por diante.

EXEMPLO 10.2-3 Modelo no Simulink para = -10y + f (t)

Construa um modelo no Simulink para resolver

em que f(t) = 2 sen 4t, para 0 … t … 3.


■ Solução
Para construir a simulação, siga os passos abaixo:
1. Você pode utilizar o modelo mostrado na Figura 10.2-2 rearranjando os blocos
como mostrado na Figura 10.2-6. Você precisará adicionar um bloco Sum.
2. Selecione o bloco Sum a partir da biblioteca Math Operations e insira-o como mos-
trado no diagrama de simulação. Sua configuração predefinida adiciona dois sinais
de entrada. Para alterar isso, clique duas vezes no bloco e, na janela List of Signs,
digite |+-. Os sinais são ordenados no sentido anti-horário a partir de cima. O sím-
bolo | é um espaçador que indica, nesse caso, que a parte superior não deve conter
nenhum sinal.
3. Para reverter a direção do bloco Gain, clique com o botão direito no bloco, selecione
Format no menu e, em seguida, clique em Flip Block.

 1
s
Sine Wave Integrator Scope

10

Gain
FIGURA 10.2-6 Modelo no Simulink para = -10y + f (t).
Capítulo 10 ■ Simulink 425

4. Quando você conectar a porta de entrada negativa do bloco Sum à porta de saída do
bloco Gain, o Simulink tentará desenhar a linha de menor tamanho. Para obter a
aparência padrão mostrada na Figura 10.2-6, primeiro estenda a linha verticalmente
para baixo a partir da porta de entrada do bloco Sum. Solte o botão do mouse e, em
seguida, clique no final da linha e conecte-a ao bloco Gain. O resultado será uma
linha com um ângulo reto. Faça o mesmo para conectar a entrada do bloco Gain à
seta que conecta os blocos Integrator e Scope. Um pequeno ponto aparecerá para in-
dicar que as linhas foram conectadas com sucesso. Esse ponto é chamado de ponto
de partida porque ele assume o valor da variável representada pela seta (nesse caso,
a variável y) e torna aquele valor disponível para outro bloco.
5. Defina o Tempo de parada (Stop time) como 3.
6. Rode a simulação como antes e observe os resultados no bloco Scope.

10.3 Modelos lineares em variáveis de estado


Modelos em variáveis de estado, diferentemente dos modelos de função de transferên-
cia, podem ter mais do que uma entrada e mais do que uma saída. Há no Simulink o
bloco State-Space que representa o modelo linear em espaço de estados = Ax + Bu, y
= Cx + Du (Veja a Seção 9.5 para uma discussão sobre essa forma de modelo). O vetor
u representa as entradas e o vetor y representa as saídas. Assim, quando você estiver
conectando entradas ao bloco State-Space, tenha o cuidado de conectá-las na ordem
apropriada. Um cuidado similar é necessário quando você estiver conectando as saídas
do bloco a outro bloco. O exemplo a seguir ilustra como isso é feito.

EXEMPLO 10.3-1 Modelo no Simulink para um sistema de suspensão de duas massas

Abaixo são apresentadas as equações de movimento do modelo da suspensão de duas


massas mostrado na Figura 10.3-1.

Desenvolva um modelo no Simulink para obter as plotagens de x1 e x2. A entrada y(t) é


uma função degrau unitário, e as condições iniciais são nulas. Utilize os seguintes valores:
m1 = 250 kg, m2 = 40 kg, k1 = 1,5 * 104 N/m, k2 = 1,5 * 105 N/m e c1 = 1917 N  s/m.
■ Solução
As equações de movimento podem ser expressas na forma de variáveis de estado fazendo-
-se z1 = x1, z2 = 1, z3 = x2, z4 = 2. As equações de movimento assumem, portanto, o
seguinte formato:
426 Introdução ao MATLAB para Engenheiros

Corpo
m1
x1
Suspensão

k1 c1

m2 Roda
x2
k2 Estrada

Nível de referência
FIGURA 10.3-1 Modelo de suspensão de duas massas.

Essas equações são expressas em formato matricial da seguinte maneira:

em que

Para simplificar a notação, sejam a1 = k1/m1, a2 = c1/m1, a3 = k1/m2, a4 = c1/m2, a5 = k2/m2 e


a6 = a3 + a5. As matrizes A e B assumem, portanto, o seguinte aspecto:

Em seguida, selecionamos valores apropriados para as matrizes na equação de saída


y = Cz + By(t). Como queremos plotar x1 e x2, que são z1 e z3, devemos utilizar as seguin-
tes matrizes para C e D:

Note que as dimensões de B dizem ao Simulink que há uma entrada. As dimensões de C e


D dizem ao Simulink que há duas saídas.
Capítulo 10 ■ Simulink 427

Abra uma nova janela de modelo e faça o seguinte para criar o modelo mostrado na
Figura 10.3-2:
1. Selecione e insira o bloco Step a partir da biblioteca Sources. Clique duas vezes sobre
ele para abrir a janela Block Parameters e defina o Instante do Degrau (Step Time)
como 0, o Valor Inicial (Initial Value) como 0 e o Valor Final (Final Value) como 1. Não
altere os valores predefinidos dos outros parâmetros nessa janela. Clique em OK. O
Instante do Degrau é o valor de tempo no qual a entrada em degrau começa.
2. Selecione e insira o bloco State-Space a partir da biblioteca Continuous. Abra sua
janela Block Parameters e insira os seguintes valores para as matrizes A, B, C e D:
Para A, insira

[0, 1, 0, 0; -a1,-a2, a1, a2; 0, 0, 0, 1; a3, a4,–a6, –a4]


Para B, insira [0; 0; 0; a5]. Para C, insira [1, 0, 0, 0;0, 0, 1, 0]
e, para D, insira [0; 0]. Em seguida, insira [0; 0; 0; 0] para as condições
iniciais. Clique em OK.
3. Selecione e insira o bloco Scope a partir da biblioteca Sinks.

x'  AxBu
y  CxDu
Step State-Space Scope

FIGURA 10.3-2 Modelo no Simulink contendo o bloco State-Space e o bloco Step.

1,4

1,2 x1

1 x2
Deslocamento (m)

0,8

0,6

0,4

0,2

0
0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1
Tempo (s)
FIGURA 10.3-3 Resposta ao degrau unitário do modelo de suspensão de duas massas.
428 Introdução ao MATLAB para Engenheiros

4. Conecte as portas de entrada e de saída como mostrado na Figura 10.3-2 e salve o


modelo.
5. Na janela do espaço de trabalho, insira os valores de parâmetro e calcule as constan-
tes ai, como mostrado na seguinte sessão:
>>m1 = 250; m2 = 40; k1 = 1.5e+4;
>>k2 = 1.5e+5; c1 =1917;
>>a1 = k1/m1; a2 = c1/m1; a3 = k1/m2;
>>a4 = c1/m2; a5 = k2/m2; a6 = a3 + a5;
6. Experimente com diferentes valores de Tempo de parada (Stop time) até que a janela
Scope mostre que o estado estacionário foi alcançado. Utilizando esse método, um
Tempo de parada de um segundo foi satisfatório. As plotagens tanto de x1 quanto
de x2 aparecerão na janela Scope. O solucionador predefinido ode45 gerou linhas
irregulares para a plotagem de x2, portanto o solucionador ode15s foi utilizado em
seu lugar. Um bloco To Workspace pode ser adicionado para a obtenção da plotagem
no MATLAB. A Figura 10.3-3 foi criada dessa maneira.

10.4 Modelos lineares por partes


Diferentemente dos modelos lineares, soluções na forma fechada não estão disponí-
veis para a maioria das equações diferenciais não lineares e, portanto, devemos resol-
ver tais equações numericamente. Uma equação diferencial ordinária não linear pode
ser reconhecida pelo fato de a variável dependente ou suas derivadas aparecerem
elevadas a uma potência ou em uma função transcendental. Por exemplo, as seguintes
equações são não lineares:

Modelos lineares por partes são, na realidade, não lineares, apesar de pare-
cerem lineares. Eles são compostos por modelos lineares que são válidos quando
determinadas condições são satisfeitas. O efeito de se alternar entre esses modelos
lineares faz com que o modelo completo seja não linear. Um exemplo desse modelo
é uma massa presa a uma mola e deslizando em uma superfície horizontal com atrito
de Coulomb. O modelo é:

Essas duas equações lineares podem ser expressas como uma única equação não linear:

Soluções de modelos que contêm funções lineares por partes são bastante tediosas
de serem programadas. Todavia, há no Simulink blocos internos que representam muitas
das funções geralmente encontradas, como o atrito de Coulomb. Portanto, o Simulink
é especialmente útil para tais aplicações. Um deles é o bloco Saturation na biblioteca
Discontinuities. O bloco implementa a função de saturação mostrada na Figura 10.4-1.
Capítulo 10 ■ Simulink 429

Saída

Limite superior

Inclinação  1

Entrada

Limite inferior

FIGURA 10.4-1 A não linearidade de saturação.

EXEMPLO 10.4-1 Modelo no Simulink de um trenó propelido a foguete

Um trenó propelido a foguete em uma pista é representado na Figura 10.4-2 como uma mas-
sa m com uma força aplicada f que representa o impulso do foguete. O impulso do foguete
inicialmente é horizontal, mas o propulsor acidentalmente gira durante a queima e passa a
descrever um movimento de rotação com uma aceleração angular de = /50 rad/s. Calcule
a velocidade do trenó v para 0 … t … 6 se v(0) = 0. O impulso do foguete é de 4000 N e massa
do trenó é de 450 kg.
A equação de movimento do trenó é:

Para obter (t), note que

m

f

FIGURA 10.4-2 Um trenó propelido a foguete.


430 Introdução ao MATLAB para Engenheiros

Assim, a equação de movimento se torna

ou

A solução é formalmente dada por

Infelizmente, não existe solução em forma fechada para essa integral, que é chama-
da de integral cosseno de Fresnel. O valor dessa integral foi tabulado numericamente, mas
utilizaremos o Simulink para obter a solução.
(a) Crie um modelo no Simulink que resolva esse problema para 0 … t … 10 s.
(b) Agora suponha que o ângulo do propulsor é limitado mecanicamente por um valor
máximo igual a 60°, que é equivalente a 60/180 rad. Crie um modelo no Simulink para
resolver esse problema.
■ Solução
(a) Há várias maneiras de se criar a função de entrada  = (/100)t2. Nesse caso, notamos
que = /50 rad/s e que

Assim, podemos criar (t) integrando a constante = /50 duas vezes. O diagrama de
simulação é mostrado na Figura 10.4-3. Esse diagrama é utilizado para criar o modelo no
Simulink correspondente mostrado na Figura 10.4-4.
Há dois novos blocos nesse modelo. O bloco Constant está na biblioteca Sources.
Após inseri-lo, clique duas vezes sobre ele e digite pi/50 na janela Constant Value.
O bloco Trigonometric está na biblioteca Math Operations. Após inseri-lo, clique
duas vezes sobre ele e selecione cos na janela Function.

¨ 1 ˙ 1  80 ẏ 1 y
s s cos s
9

FIGURA 10.4-3 Diagrama de simulação para y = (80/9) cos(t2/100).


Capítulo 10 ■ Simulink 431

1 1 1
pi/50 cos 80/9
s s s
Constant Integrator Integrator 1 Trigonometric Gain Integrator 2 Scope
Function
FIGURA 10.4-4 Modelo no Simulink para v = (80/9) cos(t2/100).

1
80/9
s
Constant 1 Integrator 3
Scope

1 1 1
pi/50 cos 80/9
s s s
Constant Integrator Integrator 1 Saturation Trigonometric Gain Integrator 2
Function
FIGURA 10.4-5 Modelo no Simulink para y = (80/9) cos(t2/100) com um bloco Saturation.

Defina o Tempo de Parada (Stop Time) como 10, rode a simulação e examine os
resultados na janela Scope.
(b) Modifique o modelo na Figura 10.4-4 da seguinte maneira para obter o mode-
lo mostrado na Figura 10.4-5. Utilize o bloco Saturation na biblioteca Discontinuities
para limitar a faixa de  até 60/180 rad. Após inserir o bloco como mostrado na Figura
10.4-5, clique duas vezes sobre ele e digite 60*pi/180 na janela do Limite Superior
(Upper Limit). Em seguida, digite 0 na janela do Limite Inferior (Lower Limit).
Insira e conecte os elementos restantes como mostrado e rode a simulação. O bloco
Constant e o bloco Integrador que aparecem na parte superior são utilizados para gerar a
solução quando o ângulo do propulsor for  = 0, a fim de verificarmos os nossos resulta-
dos. [A equação de movimento para  = 0 é = 80/9, que resulta em v(t) = 80t/9.]
Se você preferir, pode substituir o bloco Scope por um bloco To Workspace. Assim,
você poderá plotar os resultados no MATLAB. A plotagem resultante é mostrada na Fi-
gura 10.4-6.

O bloco relé (Relay)


O bloco Relay no Simulink é um exemplo de algo que é tedioso de ser programado
no MATLAB, mas que é fácil de ser implementado no Simulink. A Figura 10.4-7a é
um gráfico da lógica de um relé. O relé chaveia a saída entre dois valores específicos,
chamados de On e Off na figura. O Simulink chama esses valores de “Output when
on” e “Output when off”. Quando a saída do relé for On, ela se mantém On até que a
entrada se torne inferior ao valor do parâmetro Switch-off point, chamado de SwOff na
figura, Quando a saída do relé for Off, ela se mantém Off até que a entrada exceda o
valor do parâmetro Switch-on point, chamado de SwOn na figura.
O valor do parâmetro Switch-on point deve ser maior do que ou igual ao valor
do parâmetro Switch-off point. Note que o valor de Off não precisa ser zero. Note tam-
bém que o valor de Off não precisa ser menor do que o valor de On. O caso em que
432 Introdução ao MATLAB para Engenheiros

60

0
50

40 ⬆0
v (t) (m/s)

30

20

10

0
0 1 2 3 4 5 6
t (s)

FIGURA 10.4-6 Resposta da velocidade do trenó para  = 0 e  ⬆ 0.

On Off

Off On
SwOff SwOn SwOff SwOn

(a) (b)
FIGURA 10.4-7 A função relé. (a) O caso em que On 7 Off. (b) O caso em que On < Off.

Off 7 On é mostrado na Figura 10.4-7b. Como veremos no exemplo a seguir, algumas


vezes é necessário utilizar esse caso.

EXEMPLO 10.4-2 Modelo de um motor controlado por relé

O modelo de um motor dc controlado por armadura foi discutido na Seção 9.5. Veja a
Figura 10.4-8. O modelo é
Capítulo 10 ■ Simulink 433

R L
c
 i

v Ke I


T  KTi 

FIGURA 10.4-8 Um motor dc controlado por armadura.

em que o modelo agora inclui um torque Td(t) atuando no eixo de motor devido, por
exemplo, a alguma fonte indesejada como o atrito de Coulomb ou rajadas de vento. Enge-
nheiros de sistemas de controle chamam isso de perturbação. Essas equações podem ser
expressas na forma matricial da seguinte maneira, em que x1 = i e x2 = :

Utilize os valores R = 0,6 Æ, L = 0,002 H, KT = 0,04 N · m/A, Ke = 0,04 V · s/rad,


c = 0,01 N · m · s/rad e I = 6 * 10-5 kg · m2.
Suponha que tenhamos um sensor que mede a velocidade do motor, e que utiliza-
mos o sinal do sensor para ativar um relé que chaveia a tensão aplicada v(t) entre 0 e 100 V
para manter a velocidade entre 250 e 350 rad/s. Isso corresponde à lógica do relé mostrada
na Figura 10.4-7b, com SwOff = 250, SwOn = 350, Off = 100 e On = 0. Investigue quão
bem esse sistema irá funcionar se o torque de perturbação for uma função degrau que
cresce de 0 a 3 N · m, começando em t = 0,05 s. Suponha que o sistema comece a partir do
repouso com (0) = 0 e i(0) = 0.
■ Solução
Para os valores de parâmetros dados,

Para examinar a velocidade  como uma saída, escolhemos C = [0, 1] e D = [0, 0]. Para
criar essa simulação, primeiro obtenha uma nova janela de modelo. Em seguida, faça o
seguinte:
1. Selecione e insira na nova janela o bloco Step a partir da biblioteca Sources. Rotule-
-o como Perturbação em Degrau, do mesmo jeito que aparece na Figura 10.4-9. Cli-
que duas vezes sobre ele para obter a janela Block Parameters e defina o Instante do
Degrau (Step Time) como 0,05, os valores inicial e final (Initial Value e Final Value)
como 0 e 3 e o Tempo de Amostragem (Sample Time) como 0. Clique em OK.
434 Introdução ao MATLAB para Engenheiros

Relay

signal1
x'  AxBu
y  CxDu
signal2

Perturbação Mux State-Space Scope


em degrau
FIGURA 10.4-9 Modelo no Simulink de um motor controlado por relé.

2. Selecione e insira o bloco Relay a partir da biblioteca Discontinuities. Clique duas


vezes sobre ele e defina os pontos de Switch-on e Switch-off como 350 e 250, e de-
fina Output when on e Output when off como 0 e 100. Clique em OK.
3. Selecione e insira o bloco Mux a partir da biblioteca Signal Routing. O bloco Mux
combina dois ou mais sinais em um sinal vetorial. Clique duas vezes sobre ele e
defina a opção Display como signals. Clique em OK. Em seguida, clique no ícone
Mux na janela do modelo e arraste uma de suas quinas para expandir a caixa de
modo que o texto se torne visível.
4. Selecione e insira o bloco State-Space a partir da biblioteca Continuous. Clique
duas vezes sobre ele e insira [-300, -20; 666.7, -166.7] para A, [500,
0; 0. -16667] para B, [0, 1] para C e [0, 0] para D. Em seguida, insira
[0; 0] para as condições iniciais. Clique em OK. Note que as dimensões da ma-
triz B dizem ao Simulink que há duas entradas. As dimensões das matrizes C e D
dizem ao Simulink que há uma saída.
5. Selecione e insira o bloco Scope a partir da biblioteca Sinks.
6. Uma vez que os blocos tenham sido inseridos, conecte as portas de entrada de cada
bloco às portas de saída dos blocos precedentes, como mostrado na figura. É impor-
tante conectar a porta superior do bloco Mux [que corresponde à primeira entrada,
v(t)] à saída do bloco Relay, e conectar a porta inferior do bloco Mux [que corres-
ponde à segunda entrada, Td(t)] à saída do bloco Perturbação em Degrau.
7. Defina o Tempo de parada (Stop time) como 0,1 (que é simplesmente uma estimati-
va de quanto tempo será necessário para que a resposta completa seja visualizada),
rode a simulação e examine a plotagem de (t) na janela Scope. Você deve visua-
lizar algo parecido com a Figura 10.4-10. Se você quiser examinar a corrente i(t),
mude a matriz C para [1, 0] e rode a simulação novamente.
Os resultados mostram que o esquema de controle baseado na lógica do relé man-
tém a velocidade dentro dos limites desejados de 250 e 350 antes de o torque de
perturbação entrar em ação. A velocidade oscila porque quando a tensão aplicada é
zero, a velocidade diminui como um resultado da força contraeletromotriz e do atrito
viscoso. A velocidade se torna inferior a 250 quando o torque de perturbação começa
Capítulo 10 ■ Simulink 435

FIGURA 10.4-10 Exibição na janela Scope da resposta de velocidade de um motor controlado


por relé.

a atuar, uma vez que a tensão aplicada naquele instante é igual a 0. Assim que que a
velocidade se torna inferior a 250, o relé chaveia a tensão para 100, mas nesse caso
é necessário mais tempo para que a velocidade aumente porque o torque do motor
agora deve trabalhar contra a perturbação.
Note que a velocidade se torna constante em vez de oscilatória. Isso se dá porque,
com v = 100, o sistema alcança uma condição de estado estacionário na qual o torque
do motor é igual à soma do torque de perturbação e o torque do atrito viscoso. Assim, a
aceleração é nula.
Uma utilidade prática dessa simulação é determinar por quanto tempo a velocidade
fica abaixo do limite de 250. A simulação mostra que esse tempo é de aproximadamente
0,013 s. Outra utilidade da simulação inclui a descoberta do período de oscilação da ve-
locidade (em torno de 0,013 s) e o valor máximo do torque de perturbação que pode ser
tolerado pelo relé (esse valor está em torno de 3,7 N · m).

10.5 Modelos de função de transferência


A equação de movimento de um sistema massa-mola-amortecedor é
(10.5-1)
Assim como o toolbox de Sistemas de Controle, o Simulink aceita a descrição de um
sistema na forma de função de transferência ou na forma de variáveis de estado. (Ver
Seção 9.5 para uma discussão dessas formas.) Se o sistema massa-mola for subme-
tido a uma função forçante senoidal f(t), é fácil utilizar os comandos do MATLAB
apresentados até agora para resolver a equação e plotar a resposta y(t). Todavia, supo-
ZONA
nha que a força f(t) é criada aplicando-se uma entrada senoidal de tensão a um pistão
MORTA pneumático que apresenta uma não linearidade do tipo zona morta. Isso significa
436 Introdução ao MATLAB para Engenheiros

0,5

0,4

0,3

0,2

0,1

Saída 0

0,1

0,2

0,3

0,4

0,5
1 0,8 0,6 0,4 0,2 0 0,2 0,4 0,6 0,8 1
Entrada

FIGURA 10.5-1 Uma não linearidade do tipo zona morta.

que o pistão não gera uma força até que a entrada de tensão exceda uma determinada
magnitude, e assim o modelo do sistema se torna linear por partes.
Um gráfico de uma não linearidade do tipo zona morta em particular é mostrado
na Figura 10.5-1. Quando a entrada (a variável independente do gráfico) está entre -0,5
e 0,5, a saída é zero. Quando a entrada é maior que ou igual ao limite superior de 0,5, a
saída é igual à entrada menos o limite superior. Quando a entrada é menor que ou igual
ao limite inferior de -0,5, a saída é igual à entrada menos o limite inferior. Nesse exem-
plo, a zona morta é simétrica em torno de 0, mas em geral ela não precisa ser.
Simulações com não linearidades do tipo zona morta são um tanto tediosas de
serem programadas, mas são facilmente implementáveis no Simulink. O exemplo a
seguir ilustra como isso é feito.

EXEMPLO 1.1-1 Resposta com uma zona morta

Crie e rode uma simulação no Simulink do modelo massa-mola-amortecedor (Equação


10.5-1) utilizando os valores de parâmetros m = 1, c = 2 e k = 4. A função forçante é f(t)
= sen 1,4t. O sistema apresenta a não linearidade do tipo zona morta mostrada na Figura
10.5-1.
■ Solução
Para construir a simulação, siga os passos abaixo:
1. Inicie o Simulink e abra uma nova janela Model como descrito anteriormente.
2. Selecione e insira na nova janela o bloco Sine Wave a partir da biblioteca Sources.
Clique duas vezes sobre ele e defina a Amplitude como 1, a Frequência (Frequency)
como 1,4, a Fase (Phase) como 0 e o Tempo de amostragem (Sample time) como 0.
Clique em OK.
Capítulo 10 ■ Simulink 437

3. Selecione e insira o bloco Dead Zone a partir da biblioteca Discontinuities, clique


duas vezes sobre ele e defina o Começo da zona morta (Start of dead zone) como-
0,5 e o Final da zona morta (Enf of dead zone) como 0,5. Clique em OK.
4. Selecione e insira o bloco Transfer Fcn a partir da biblioteca Continuous, clique
duas vezes sobre ele e defina o Numerador como [1] e o Denominador como
[1, 2, 4]. Clique em OK.
5. Selecione e insira o bloco Scope a partir da biblioteca Sinks.
6. Uma vez que os blocos tenham sido inseridos, conecte a porta de entrada de cada
bloco à porta de saída do bloco precedente. Seu modelo agora deve se parecer com
a Figura 10.5-2.
7. Defina o Tempo de parada (Stop time) como 10.
8. Rode a simulação. Você deve ver uma curva oscilatória na exibição do bloco Scope.
É informativo plotar tanto a entrada quanto a saída do bloco Transfer Fcn versus o
tempo no mesmo gráfico. Para fazer isso:
1. Apague a seta que conecta o bloco Scope ao bloco Transfer Fcn. Faça isso clicando
na linha da seta e pressionando, em seguida, a tecla Delete.
2. Selecione e insira o bloco Mux a partir da biblioteca Signal Routing, clique duas vezes
sobre ele e defina o Número de entradas (Number of inputs) como 2. Clique em OK.
3. Conecte a porta de entrada superior do bloco Mux à porta de saída do bloco Transfer
Fcn. Em seguida, utilize a mesma técnica para conectar a porta de entrada inferior
do bloco Mux à seta da porta de saída do bloco Dead Zone. Lembre-se de começar
com a porta de entrada. O Simulink perceberá a seta automaticamente e fará a cone-
xão. Seu modelo agora deve se parecer com a Figura 10.5-3.
4. Defina o Tempo de parada (Stop time) igual a 10, rode a simulação e abra a exibição
do bloco Scope. Você deverá ver o que é mostrado na Figura 10.5-4. Essa plotagem
mostra o efeito da zona morta sobre o sinal senoidal.

1
s22s4
Sine Wave Dead Zone Transfer Fcn Scope
FIGURA 10.5-2 O modelo no Simulink para a resposta com zona morta.

1
s22s4
Sine Wave Dead Zone Transfer Fcn

Scope
FIGURA 10.5-3 Modificação no modelo com zona morta para incluir o bloco Mux.
438 Introdução ao MATLAB para Engenheiros

FIGURA 10.5-4 A resposta do modelo com zona morta.

1
s22s4
Sine Wave Dead Zone Transfer Fcn 1

Mux 1 Scope
1
s 2s4
2

Transfer Fcn 2 simout


Mux 2 To Workspace
Clock
FIGURA 10.5-5 Modificação do modelo com zona morta para exportar variáveis para o espaço
de trabalho do MATLAB.

Você pode trazer os resultados da simulação para o espaço de trabalho do MAT-


LAB utilizando o bloco To Workspace. Por exemplo, suponha que queiramos examinar
os efeitos da zona morta comparando a resposta do sistema com e sem uma zona morta.
Podemos fazer isso com o modelo mostrado na Figura 10.5-5. Para criar esse modelo:
1. Copie o bloco Transfer Fcn clicando com o botão direito sobre ele, pressionando o
botão do mouse e arrastando a cópia do bloco para um novo local. Em seguida, solte
o botão. Copie o bloco Mux da mesma maneira.
2. Clique duas vezes no primeiro bloco Mux e altere o número de entradas para 3.
3. Da maneira usual, selecione e insira o bloco To Workspace a partir da biblioteca Sinks
e, opcionalmente, o bloco Clock a partir da biblioteca Sources. Clique duas vezes sobre
o bloco To Workspace. Você pode especificar qualquer nome de variável que queira
para a saída; o nome predefinido é simout. Altere esse nome para y. A variável de
saída y terá tantas linhas quantos forem os instantes de tempo da simulação e tan-
tas colunas quantas forem as entradas do bloco. A quarta coluna em nossa simulação
será o tempo, por causa da forma como conectamos o bloco Clock ao segundo bloco
Capítulo 10 ■ Simulink 439

Mux. Especifique o Formato para salvar (Save format) como Matrix. Utilize os valores
predefinidos para os outros parâmetros (eles devem ser inf, 1 e –1 para Maximum
number of rows, Decimation e Sample time, respectivamente). Clique em OK.
4. Conecte os blocos como mostrado e rode a simultação.
5. Você pode utilizar os comandos de plotagem do MATLAB a partida da janela de
Comandos para plotar as colunas de y; por exemplo, para plotar a resposta dos dois
sistemas e a saída do bloco Dead Zone versus o tempo, digite

>>plot(y(:,4),y(:,1),y(:,4),y(:,2),y(:,4),y(:,3))

10.6 Modelos em variáveis de estado não lineares


Modelos não lineares não podem ser colocados na forma de função de transferência
ou na forma de variáveis de estado ⴝ Ax ⴙ Bu. Todavia, eles podem ser simulados
no Simulink. O exemplo a seguir mostra como isso pode ser feito.

EXEMPLO 10.6-1 Modelo de um pêndulo não linear

O pêndulo mostrado na Figura 10.6-1 é descrito pela equação


a seguir de movimento não linear, se houver atrito viscoso na
articulação e se houver um momento aplicado M(t) em relação
à articulação L


m
em que I é o momento de inércia em relação à articulação. Crie um
modelo no Simulink para esse sistema no caso em que I = 4, mgL =
g
10, c = 0,8 e M(t) é uma onda quadrada com uma amplitude igual
a 3 e uma frequência igual a 0,5 Hz. Considere que as condições FIGURA 10.6-1
iniciais são (0) = /4 e (0) = 0. Um pêndulo.

■ Solução
Para simular esse modelo no Simulink, defina um conjunto de variáveis que permita rees-
crever a equação original como duas equações de primeira ordem. Sendo  = , o modelo
pode ser escrito como:

Integre ambos os lados de cada equação ao longo do tempo para obter


440 Introdução ao MATLAB para Engenheiros

Signal
Generator
1 1

 0,25 s s
1/I Integrator 1 Integrator 2 Scope

0,8

10*sen(u)

Fcn
FIGURA 10.6-2 Modelo no Simulink da dinâmica do pêndulo não linear.

Introduziremos quatro novos blocos para criar essa simulação. Obtenha uma nova janela
Model e faça o seguinte:
1. Selecione e insira na nova janela o bloco Integrator a partir da biblioteca Continuous
e mude o seu rótulo para Integrator 1, como mostrado na Figura 10.6-2. Você pode
editar o texto associado a um bloco clicando no texto e fazendo as alterações. Clique
duas vezes no bloco para obter a janela Block Parameters e defina a Condição inicial
(Initial condition) como 0 [essa é a condição inicial (0) = 0]. Clique em OK.
2. Copie o bloco Integrator para o local mostrado e altere seu rótulo para Integrator 2.
Defina sua condição inicial como /4 digitando pi/4 na janela Block Parameters.
Essa é a condição inicial (0) = /4.
3. Selecione e insira o bloco Gain a partir da biblioteca Math Operations, clique duas
vezes sobre ele e defina o valor do ganho como 0,25. Clique em OK. Altere o seu
rótulo para 1/I. Em seguida, clique no bloco e arraste um dos cantos para expandir
a caixa, de modo que todo o texto se torne visível.
4. Copie o bloco Gain, altere o seu rótulo para c e insira-o como mostrado na Figura
10.6-2. Clique duas vezes sobre ele e defina o valor do ganho como 0,8. Clique em
OK. Para girar o bloco da esquerda para a direita, clique com o botão direito sobre
ele, selecione Format e, em seguida, Flip.
5. Selecione e insira o bloco Scope a partir da biblioteca Sinks.
6. Para o termo 10 sen , não podemos utilizar o bloco Trig function na biblioteca Math
porque precisamos multiplicar sen  por 10. Portanto, devemos utilizar o bloco Fcn
da biblioteca User-Defined Functions (Fcn representa Function). Selecione e insira
esse bloco como mostrado. Clique duas vezes sobre ele e digite 10*sin(u) no
campo Expression. Esse bloco utiliza a variável u para representar a entrada. Clique
em OK. Em seguida, gire o bloco.
7. Selecione e insira o bloco Sum a partir da biblioteca Math Operations. Clique duas
vezes sobre ele e selecione round para a Forma do ícone (Icon shape). Na janela List
of Signs, digite +--. Clique em OK.
Capítulo 10 ■ Simulink 441

8. Selecione e insira o bloco Signal Generator a partir da biblioteca Sources. Clique duas
vezes sobre ele, selecione square wave para a Forma de onda (Wave form), 3 para a
Amplitude, 0,5 para a Frequência e Hertz para as Unidades (Units). Clique em OK.
9. Uma vez que os blocos tenham sido inseridos, conecte as setas como mostrado na
figura.
10. Defina o Tempo de parada (Stop time) como 10, rode a simulação e examine a plo-
tagem (t) na janela Scope. Isso completa a simulação.

10.7 Subsistemas
Uma desvantagem potencial de uma interface gráfica como o Simulink é que, para si-
mular um sistema complexo, o diagrama pode se tornar bastante grande e, portanto, um
pouco pesado. O Simulink, entretanto, possibilita a criação de blocos de subsistemas,
que exercem um papel análogo àquele dos subprogramas em uma linguagem de progra-
mação. Um bloco de subsistema é na verdade um programa no Simulink representado
por um único bloco. Um bloco de subsistema, uma vez criado, pode ser utilizado em ou-
tros programas no Simulink. Também introduziremos alguns outros blocos nesta seção.
Para ilustrar blocos de subsistemas, utilizaremos um sistema hidráulico simples
cujo modelo é baseado no princípio de conservação da massa, que é muito conhecido
pelos engenheiros. Uma vez que as equações que governam o comportamento desse
sistema são similares às equações de outras aplicações de engenharia, como circuitos
e dispositivos elétricos, as lições aprendidas a partir desse exemplo permitirão a você
utilizar o Simulink para outras aplicações.

Um sistema hidráulico
O fluido de trabalho em um sistema hidráulico é um fluido incompressível tal como a
água ou um óleo à base de silício. (Sistemas pneumáticos operam com fluidos com-
pressíveis, como o ar.) Considere um sistema hidráulico composto por um tanque de
líquido de densidade mássica (Figura 10.7-1). O tanque mostrado em seção trans-
versal na figura é cilíndrico com área da base A. Uma fonte de fluxo despeja líquido
no tanque com uma vazão mássica qmi(t). A massa total no tanque é m = Ah, e a
partir da conservação da massa, temos

(10.7-1)

qmi

pa

h A R pa
qmo

FIGURA 10.7-1 Um sistema hidráulico com uma fonte de fluxo.


442 Introdução ao MATLAB para Engenheiros

uma vez que e A são constantes.


Se a saída for um tubo que descarrega para a pressão atmosférica pa e fornece
uma resistência à vazão que é proporcional à diferença de pressão entre as suas extre-
midades, então a vazão de saída é

em que R é a chamada resistência do fluido. Substituindo essa expressão na Equação


(10.7-1), obtém-se o seguinte modelo:

(10.7-2)

A função de transferência é:

Por outro lado, a saída pode ser uma válvula ou outra restrição que fornece uma
resistência não linear ao fluido. Em tais casos, um modelo comum é a relação de raiz
quadrada com sinal (signed squared root, ou SSR)

em que qmo é a vazão de saída mássica, R é a resistência, ¢p é a diferença de pressão


entre os terminais da resistência, e

Note que podemos expressar a função SSR(u) no MATLAB da seguinte maneira:


sgn(u)*sqrt(abs(u)).
Considere o sistema um pouco diferente mostrado na Figura 10.7-2, o qual
apresenta uma fonte de fluxo q e duas bombas que fornecem líquido com pressões pl

h
A
pl p pr
pa pa
Rl Rr

FIGURA 10.7-2 Um sistema hidráulico com uma fonte de fluxo e duas bombas.
Capítulo 10 ■ Simulink 443

e pr. Suponha que as resistência sejam não lineares e que elas obedecem a relação raiz
quadrada com sinal. Então, o modelo do sistema é

em que A é a área da base e p = gh. As pressões pl e pr são as pressões manométricas


no lado esquerdo e no lado direito. Pressão manométrica é a diferença entre a pressão
absoluta e a pressão atmosférica. Note que a pressão atmosférica pa desaparece do
modelo por causa da utilização da pressão manométrica.
Utilizaremos essa aplicação para introduzir os seguintes elementos do Simulink:
■ Blocos de subsistemas
■ Portas de entrada e de saída
Você pode criar um bloco de subsistema de duas maneiras: arrastando o bloco
Subsystem a partir da biblioteca para a janela Model ou primeiro criando um modelo
no Simulink e, em seguida, “encapsulando-o” com uma caixa delimitadora. Ilustrare-
mos este último método.
Criaremos um bloco de subsistema para o sistema de nível de líquido mostrado
na Figura 10.7-2. Primeiro, construa o modelo no Simulink mostrado na Figura 10.7-
3. Os blocos ovais são Portas de Entrada e de Saída (In 1 e Out 1), que estão disponí-
veis na biblioteca Ports and Subsystems. Note que você pode usar variáveis do MAT-
LAB e expressões quando inserir os ganhos em cada um dos quatro blocos Gain.
Antes de rodar o programa, atribuiremos valores a essas variáveis na janela
de Comandos do MATLAB. Insira os ganhos nos quatro blocos Gain utilizando as
expressões mostradas nos blocos. Você também pode utilizar uma variável como a
condição inicial do bloco Integrator. Chame essa variável de h0.
Os blocos SSR são exemplos do bloco Fcn, que está na biblioteca User-
-Defined Functions. Clique duas vezes no bloco e insira a expressão do MATLAB

1  f(u) 1/R_I Vazão mássica


 3 2
Pressão à de entrada Altura de
SSR
esquerda Resistência à líquido
esquerda
  1/(rho*A) 1 rho*g 1
 s Pressão
Integrator rho*g embaixo
1/(rho*A)


2 f(u) 1/R_r
Pressão à
SSR1
direita Resistência à
direita

FIGURA 10.7-3 Modelo no Simulink do sistema mostrado na Figura 10.7-2.


444 Introdução ao MATLAB para Engenheiros

sgn(u)*sqrt(abs(u)). Note que o bloco Fcn exige que você utilize a variável
u. A saída do bloco Fcn deve ser um escalar, como nesse caso, e você não pode rea-
lizar operações matriciais no bloco Fcn, mas elas não são necessárias aqui. (Uma
alternativa ao bloco Fcn é o bloco MATLAB Fcn que será discutido na Seção 10.9.)
Salve o modelo e dê a ele um nome, por exemplo, Tanque.
Agora, crie uma “caixa delimitadora” que envolva o diagrama. Faça isso situ-
ando o cursor do mouse na parte esquerda superior, pressionando o botão do mouse
e arrastando o cursor até a parte direita inferior, para que todo o diagrama seja en-
volvido pela caixa. Em seguida, escolha Create Subsystem a partir do menu Edit.
O Simulink substituirá o diagrama por um bloco simples que tenha tantas portas de
entrada e de saída quantas forem necessárias, e ele atribuirá nomes predefinidos.
Você pode redimensionar o bloco para tornar os rótulos legíveis. Você pode visuali-
zar ou editar o subsistema clicando duas vezes sobre ele. O resultado é mostrado na
Figura 10.7-4.

1 Pressão à esquerda
Pressão à esquerda Pressão embaixo 1
Pressão
2 Pressão à direita embaixo
Pressão à direita
Altura de líquido 2
3 Vazão mássica de entrada Altura de
Vazão mássica líquido
de entrada subsystem

FIGURA 10.7-4 O bloco Subsystem.

Conectando blocos de subsistemas


Agora, criaremos uma simulação do sistema mostrado na Figura 10.7-5, em que a
vazão mássica de entrada q é uma função degrau. Para fazer isso, crie o modelo no
Simulink mostrado na Figura 10.7-6. Os blocos quadrados são blocos Constant da
biblioteca Sources. Eles representam entradas constantes (mas são diferentes das en-
tradas em degrau).
Os blocos retangulares maiores são dois blocos de subsistema do tipo que aca-
bamos de criar. Para inseri-los no modelo, abra o modelo do subsistema Tanque, se-
lecione Copy a partir do menu Edit e, em seguida, cole-o duas vezes na nova janela

q1

h2
h1 A1 A2

R1 R2

FIGURA 10.7-5 Um sistema hidráulico com dois tanques.


Capítulo 10 ■ Simulink 445

0 Pressão à esquerda
Pressão embaixo
Sem entrada
à esquerda Pressão à direita

Altura de líquido
Vazão mássica de entrada
Entrada de Tanque 1
massa

Scope
Pressão à esquerda
Pressão embaixo

0 Pressão à direita
Atmosfera
Altura de líquido
0 Vazão mássica de entrada
Vazão de entrada 2 Tanque 2
FIGURA 10.7-6 Modelo no Simulink do sistema mostrado na Figura 10.7-5.

de modelo. Conecte as portas de entrada e de saída e edite os rótulos como mostrado.


Em seguida, clique duas vezes no bloco do Subsistema Tanque 1, defina o ganho do
lado esquerdo 1/R_l como 0, o ganho do lado direito 1/R_r como 1/R_l e o
ganho 1/rho*A como 1/rho*A_1. Defina a condição inicial do integrador como
h10. Note que definir o ganho 1/R_l como zero é equivalente a R_l = q, o que
indica que não há entrada no lado esquerdo.
Em seguida, clique duas vezes no bloco do subsistema Tanque 2, defina o ga-
nho do lado esquerdo 1/R_l como 1/R_1, o ganho do lado direito 1/R_r como
1/R_2 e o ganho 1/rho*A como 1/rho*A_2. Defina a condição inicial do inte-
grador como h20. Para o bloco Step, defina o Instante do degrau (Step time) como 0,
o Valor inicial (Initial value) como 0 e o Valor final (Final value) igual à variável q1 e
o Tempo de amostragem (Sample time) como 0. Salve o modelo utilizando um nome
que não seja Tanque.
Antes de você rodar o modelo, atribua valores numéricos às variáveis na janela
de Comandos. Como um exemplo, você pode digitar na janela de Comandos os se-
guintes valores para a água, em unidades usuais nos Estados Unidos:
>>A_1 = 2;A_2 = 5;rho = 1.94;g = 32.2;
>>R_1 = 20;R_2 = 50;q_1 = 0.3;h10 = 1;h20 = 10;
Após selecionar um Tempo de parada (Stop time), você pode rodar a simulação.
O bloco Scope exibirá as plotagens das alturas h1 e h2 versus o tempo.
As Figuras 10.7-7, 10.7-8 e 10.7-9 ilustram alguns sistemas elétricos e mecâ-
nicos que são prováveis candidatos para aplicações de blocos de subsistemas. Na
Figura 10.7-7, o elemento básico para o bloco de subsistema é um circuito RC. Na
Figura 10.7-8, o elemento básico para o bloco de subsistema é uma massa conectada
a dois elementos elásticos.
446 Introdução ao MATLAB para Engenheiros

R1 R2 Rn1 Rn

v1 C1 C2 Cn1 Cn vn

FIGURA 10.7-7 Uma rede de malhas RC.

k1 k2 k3 kn1
m1 m2 mn

FIGURA 10.7-8 Um sistema vibrante.

Torque de
carga

Tensão de   
1 1
K1 KT Velocidade
controle Ls  R Is  c


K2

FIGURA 10.7-9 Um motor dc controlado por armadura.

A Figura 10.7-9 é o diagrama de blocos de um motor dc controlado por arma-


dura, que pode ser convertido em um bloco de subsistema. As entradas para o bloco
seriam a tensão que se origina de um controlador e o torque de carga, e a saída seria
a velocidade do motor. Esse bloco seria útil na simulação de sistemas que contêm
diversos motores, como um manipulador robótico.

10.8 Tempo morto em modelos


ATRASO DE O tempo morto, também chamado de atraso de transporte, é um atraso de tempo
TRANSPORTE entre a ação e o seu efeito. Ele ocorre, por exemplo, quando um fluido é transportado
através de um tubo. Se a velocidade do fluido v for constante e o comprimento do
tubo for L, é necessário um tempo T = L/v para que o fluido se mova de uma extremi-
dade à outra. O tempo T é o tempo morto.
Sejam 1(t) a temperatura do fluido que entra no tubo e 2(t) a temperatura do flui-
do que sai do tubo. Se nenhuma energia calórica for perdida, então 2(t) = 1(t - T). A
partir da propriedade de deslocamento da transformada de Laplace,
Capítulo 10 ■ Simulink 447

∏2(s) = e-Ts∏1(s)
Assim, a função de transferência para um processo de tempo morto é e-Ts.
O tempo morto pode ser descrito como um atraso “puro” de tempo, no qual ne-
nhuma resposta ocorre por um tempo T, em contraposição ao intervalo de tempo as-
sociado com a constante de tempo de uma resposta, para o qual 2(t) = (1 - e-t/
)1(t).
Alguns sistemas apresentam um atraso de tempo inevitável na interação en-
tre os componentes. O atraso muitas vezes é resultado da separação física entre os
componentes e tipicamente ocorre como um atraso entre uma mudança no sinal do
atuador e o seu efeito no sistema que está sendo controlado, ou como um atraso na
medição da saída.
Uma outra fonte de erro, talvez inesperada, é o tempo de computação requerido
por um controlador digital para calcular o algoritmo de controle. Isso pode resultar
em um tempo morto significativo em sistemas que utilizam microprocessadores ba-
ratos e lentos. A presença do tempo morto significa que o sistema não é descrito por
uma equação característica de ordem finita. Na verdade, há um número infinito de
raízes na equação característica para um sistema com tempo morto. Isso pode ser
visto notando-se que o termo e-Ts pode ser expandido em uma série infinita como

O fato de que há um número infinito de raízes na equação característica significa que


a análise de processos com tempo morto é difícil e que, frequentemente, a simulação
é a única maneira prática de se estudar tais processos.
Sistemas que tenham elementos com tempo morto podem ser facilmente si-
mulados no Simulink. O bloco que implementa a função de transferência do tempo
morto e-Ts é o bloco Transport Delay.
Considere o modelo da altura h do líquido em um tanque, tal como aquele mos-
trado na Figura 10.7-1, cuja entrada é uma vazão mássica qi. Suponha que seja neces-
sário um tempo T para que a mudança na vazão de entrada alcance o tanque seguindo
uma mudança na abertura da válvula. Assim, T é um tempo morto. Para valores de
parâmetros específicos, a função de transferência tem a forma

A Figura 10.8-1 mostra um modelo no Simulink para esse sistema. Após inserir o
bloco Transport Delay, defina o atraso igual a 1,25. Defina o Instante do degrau (Step
time) como 0 no bloco Step Function. Nós agora discutiremos os outros blocos no
modelo.

Especificando condições iniciais com funções de transferência


O bloco Transfer Fcn (with initial outputs), assim chamado para ser diferenciado
do bloco Transfer Fcn, nos permite definir o valor inicial da saída do bloco. Essa
característica é um melhoramento útil em relação à análise de função de transferência
tradicional, na qual considera-se que as condições iniciais são nulas.
448 Introdução ao MATLAB para Engenheiros

4
Gain
  2
 5s1
Unit-Step Rate Saturation Transport Transfer Fcn Height
5/4
Command Limiter Delay (with initial
s
outputs)
Transfer Fcn

FIGURA 10.8-1 Modelo no Simulink de um sistema hidráulico com tempo morto.

O bloco Transfer Fcn (with initial outputs) é equivalente a adicionar a resposta


livre à saída do bloco, com todas as variáveis de estado do bloco definidas como iguais
a zero, com exceção da variável de saída. O bloco também permite a você atribuir um
valor inicial à entrada do bloco, mas não utilizaremos essa funcionalidade e, portanto,
deixaremos a Entrada inicial (Initial input) igual a 0 na janela Block Parameters. Defina
a Saída inicial (Initial output) como 0,2 para simular uma altura de líquido inicial de 0,2.

Os blocos Saturation e Rate Limiter


Suponha que a vazão mínima e a vazão máxima disponíveis a partir da válvula de
vazão de entrada sejam 0 e 2. Esses limites podem ser simulados com o bloco Satura-
tion, discutidos na Seção 10.4. Após inserir o bloco como mostrado na Figura 10.8-1,
clique duas vezes sobre ele e digite 2 no campo Limite superior (Upper limit) e 0 e no
campo Limite inferior (Lower limit).
Além de serem limitados por saturação, alguns atuadores apresentam limites na
sua velocidade de reação. Essa limitação pode ser devido a restrições deliberadas inse-
ridas na unidade pelo seu fabricante para evitar danos. Um exemplo é uma válvula de
controle de vazão cuja velocidade de abertura e de fechamento é controlada por um li-
mitador de velocidade (rate limiter). Há no Simulink esse bloco, e ele pode ser utilizado
em série com o bloco Saturation para modelar o comportamento da válvula. Insira o blo-
co Rate Limiter como mostrado na Figura 10.8-1. Defina a Taxa de variação crescente
(Rising slew rate) como 1 e a Taxa de variação decrescente (Falling slew rate) como -1.

Um sistema de controle
O modelo no Simulink mostrado na Figura 10.8-1 é para um tipo específico de sis-
CONTROLADOR tema de controle chamado de controlador PI, cuja resposta f(t) ao erro e(t) é a soma
PI de um termo proporcional ao sinal de erro e de um termo proporcional à integral do
sinal de erro. Isto é,

em que KP e KI são os chamados ganhos proporcional e integral. Nesse caso, o sinal


de erro e(t) é a diferença entre o comando em degrau unitário, representando a altura
desejada, e a altura real. Na notação de transformada, essa expressão se torna
Capítulo 10 ■ Simulink 449

Na Figura 10.8-1, utilizamos os valores KP = 4 e KI = 5/4. Esses valores são


calculados utilizando-se os métodos de teoria de controle. (Para uma discussão so-
bre sistemas de controle, ver, por exemplo, [Palm, 2010].) Agora a simulação está
pronta para ser rodada. Defina o Tempo de parada (Stop time) como 30 e observe o
comportamento da altura de líquido h(t) no bloco Scope. A altura desejada como 1 é
alcançada?

10.9 Simulação de um modelo não linear de suspensão de veículo


Modelos lineares ou linearizados são úteis para prever o comportamento de sistemas
dinâmicos porque técnicas analíticas poderosas estão disponíveis para esse tipo de
modelo, especialmente quando as entradas são funções relativamente simples, tais
como o impulso, o degrau, a rampa e o seno. No entanto, frequentemente, no projeto
de um sistema de engenharia, precisamos lidar com não linearidades no sistema e
com entradas mais complicadas, como funções trapezoidais, e isso muitas vezes deve
ser feito por meio de simulação.
Nessa seção, introduziremos quatro elementos adicionais do Simulink que nos
permitem modelar uma vasta gama de não linearidades e de funções de entrada:
■ Bloco Derivative
■ Bloco Signal Builder
■ Bloco Look-Up Table
■ Bloco MATLAB Fcn
Como exemplo, utilizaremos o modelo de suspensão de uma massa mostrado na
Figura 10.9-1, em que as forças da mola e do amortecedor fs e fd são definidas pelos
modelos não lineares mostrados nas Figuras 10.9-2 e 10.9-3. O modelo do amortece-
dor é assimétrico e representa um amortecedor cuja força durante uma subida é maior
do que durante uma descida (a fim de minimizar a força transmitida ao compartimen-
to do passageiro quando o veículo encontra uma elevação na superfície da estrada). A
elevação é representada pela função trapezoidal y(t) mostrada na Figura 10.9-4. Essa
função corresponde aproximadamente a um veículo que viaja a 30 mi/h ao longo de
uma elevação da superfície da estrada com 0,2 m de altura e 48 m de comprimento.

Corpo
m m
x
k c Suspensão fs fd

Estrada
y
Nível de referência
(a) (b)
FIGURA 10.9-1 Modelo da suspensão de um veículo com uma massa.
450 Introdução ao MATLAB para Engenheiros

Força da mola (N)


4500

0,5 0,3 500


Deflexão
y  x (m)
500 0,3 0,5

4500

FIGURA 10.9-2 Função não linear da mola.

f  200v 0,6

0
Força do amortecedor f (N)

f  800|v |0,6

0
v  dy/dt  dx/dt (m/s)

FIGURA 10.9-3 Função não linear do amortecedor.

y(t) (m)

0,2

0,1 3,0 3,1 t(s)

FIGURA 10.9-4 Perfil da superfície da estrada.


Capítulo 10 ■ Simulink 451

d  
dt

fd

y    x
fs 1 1 1
m s ẋ s


FIGURA 10.9-5 Diagrama de simulação de um modelo de suspensão de veículo.

O modelo do sistema a partir da segunda lei de Newton é

em que m = 400 kg, fs(y - x) é a função não linear da mola mostrada na Figura 10.9-2,
e fd( - ) é a função não linear do amortecedor mostrada na Figura 10.9-3. O diagra-
ma de simulação correspondente é mostrado na Figura 10.9-5.

Os blocos Derivative e Signal Builder


O diagrama de simulação mostra que precisamos calcular . Uma vez que o Simulink
utiliza métodos numéricos e não analíticos, ele calcula derivadas apenas aproximada-
mente utilizando o bloco Derivative. Devemos ter isso em mente quando utilizarmos
entradas que variem rapidamente ou que sejam descontínuas. O bloco Derivative não
é configurável, portanto, apenas insira-o no diagrama do Simulink como mostrado na
Figura 10.9-6.

du/dt 

Derivative
MATLAB
Function


Signal 1  1/400 1 1
 s s
Signal Builder Look-Up 1/m Integrator Integrator 1 Scope
Table
simout
To
Workspace

Clock


Scope 1
FIGURA 10.9-6 Modelo no Simulink de um sistema de suspensão de veículo.
452 Introdução ao MATLAB para Engenheiros

Em seguida, insira o bloco Signal-Builder e clique duas vezes sobre ele. Apa-
recerá uma janela de plotagem na qual você pode inserir pontos para definir a função
de entrada. Siga as direções na janela para criar a função mostrada na Figura 10.9-4.

O bloco Look-Up Table


A função da mola fs é criada com o bloco Look-Up Table. Após inseri-lo como mos-
trado, clique duas vezes sobre ele e digite [-0.5, -0.1, 0, 0.1, 0.5] para o
Vetor de valores de entrada (Vector of input values) e [-4500, -500, 0, 500,
4500] para o Vetor de valores de saída (Vector of output values). Utilize as configu-
rações predefinidas para os parâmetros remanescentes.
Insira os dois integradores como mostrado e certifique-se de que os valores
iniciais são definidos como zero. Em seguida, insira o bloco Gain e defina seu ganho
como 1/400. O bloco To Workspace e o bloco Clock permitirão a você plotar x(t) e
y(t) - x(t) versus t na janela de Comandos do MATLAB.

O bloco MATLAB Fcn


Na Seção 10.7, utilizamos o bloco Fcn para implementar a função raiz quadrada
com sinal. Não podemos utilizar esse bloco para a função do amortecedor mostrada
na Figura 10.9-3 porque precisamos escrever uma função definida pelo usuário para
descrevê-la. Essa função é dada a seguir:
function f = damper(v)
if v <= 0
f = -800*(abs(v)).^(0.6);
else
f = 200*v.^(0.6);
end
Crie e salve esse arquivo de função. Após inserir o bloco MATLAB Fcn, clique
duas vezes sobre ele e insira o nome damper. Certifique-se de que o campo Dimen-
sões da saída (Output dimensions) esteja definido como -1 e de que o Tipo de sinal de
saída (Output signal type) esteja definido como auto.
Os blocos Fcn, MATLAB Fcn, Math Function e S-Function podem ser utilizados
para implementar funções, mas cada um deles tem suas vantagens e suas limitações. O
bloco Fcn pode obter uma expressão, mas sua saída deve ser um escalar, e ele não é ca-
paz de chamar um arquivo de função. O bloco MATLAB Fcn é mais lento do que o bloco
Fcn, mas sua saída pode ser um arranjo, e ele é capaz de chamar um arquivo de função.
O bloco Math Function pode produzir um arranjo de saída, mas ele é limitado a
uma única função do MATLAB e não é capaz de utilizar uma expressão ou de chamar
um arquivo. O bloco S-Function proporciona funcionalidades mais avançadas, como
a possibilidade de utilizar um código em linguagem C.
O modelo Simulink, após ser completado, deve se parecer com aquele apre-
sentado na Figura 10.9-6. Você pode plotar a resposta x(t) na janela de Comandos da
seguinte maneira:
>>x = simout(:,1);
>>t = simout(:,3);
>>plot(t,x),grid,xlabel(’t (s)’),ylabel(’x (m)’)
Capítulo 10 ■ Simulink 453

0,3

0,25

0,2

0,15

0,1
x (m)

0,05

0,05

0,1

0,15

0,2
0 0,5 1 1,5 2 2,5 3 3,5 4 4,5 5
t (s)
FIGURA 10.9-7 Saída do modelo no Simulink mostrado na Figura 10.9-6.

O resultado é mostrado na Figura 10.9-7. O sobressinal máximo é 0,26 - 0,2 =


0,06 m, mas o máximo subsinal é bem maior e igual a -0,168 m.

10.10 Resumo
A janela de modelo no Simulink contém itens de menu que nós não discutimos. To-
davia, os itens que discutimos são os mais importantes para o começo. Também in-
troduzimos apenas alguns dos blocos disponíveis no Simulink. Alguns dos que não
foram abordados lidam com sistemas de tempo discreto (sistemas que são modelados
com equações de diferenças e não com equações diferenciais), sistemas de lógica di-
gital e outros tipos de operações matemáticas. Além disso, alguns blocos apresentam
propriedades adicionais que não mencionamos. No entanto, os exemplos dados aqui
auxiliarão você a começar a explorar as outras funcionalidades do Simulink. Consulte
o sistema de ajuda online para informações sobre esses itens.

Termos-chave
Atraso de transporte, 446 Bloco Rate Limiter, 448
Bloco Derivative, 451 Bloco Relay, 431
Bloco Fcn, 452 Bloco Saturation, 448
Bloco de ganho, 418 Bloco Signal Builder, 451
Bloco integrador, 418 Controlador PI, 448
Bloco Look-Up Table, 452 Diagrama de blocos, 417
454 Introdução ao MATLAB para Engenheiros

Diagramas de simulação, 417 Somador (Summer), 418


Modelos de função de transferência, 435 Subsistemas, 441
Modelos em variáveis de estado, 439 Tempo morto, 446
Modelos lineares por partes, 428 Zona morta, 435
Navegador de Bibliotecas (Library
Browser), 419

Problemas
Seção 10.1
1. Desenhe um diagrama de simulação para a seguinte equação:

2. Desenhe um diagrama de simulação para a seguinte equação:

3. Desenhe um diagrama de simulação para a seguinte equação:

Seção 10.2
4. Crie um modelo no Simulink para plotar a solução da seguinte equação para
0 … t … 6:

5. Um projétil é lançado com uma velocidade de 100 m/s e com um ângulo de


30° em relação à horizontal. Crie um modelo no Simulink para resolver as
equações de movimento do projétil, em que x e y são o deslocamento horizon-
tal e o deslocamento vertical do projétil.

Use o modelo para plotar a trajetória do projétil y versus x


para 0 … t … 10s.
6. A seguinte equação não tem solução analítica, mesmo sendo linear:

A solução aproximada, que é menos precisa para valores grandes de t, é

Crie um modelo no Simulink para resolver esse problema e compare sua solu-
ção com a solução aproximada ao longo da faixa 0 … t … 1.
Capítulo 10 ■ Simulink 455

7. Construa um modelo no Simulink para plotar a solução da seguinte equação


para 0 … t … 10

em que us(t) é uma função degrau unitário (na janela Block Parameters do
bloco Step, defina Instante do degrau (Step time) como 0, Valor inicial (Initial
Value) como 0 e Valor final (Final value) como 1).
8. Um tanque com laterais verticais e área inferior igual a 100 ft2 é utilizado para
armazenar água. Para encher o tanque, a água é bombeada pela parte superior a
uma taxa dada na tabela a seguir. Utilize o Simulink para resolver as equações
desse sistema e plotar a altura de água h(t) para 0 … t … 10 min.

Tempo (min) 0 1 2 3 4 5 6 7 8 9 10
Vazão (ft3/min) 0 80 130 150 150 160 165 170 160 140 120

Seção 10.3
9. Construa um modelo no Simulink para plotar a solução das seguintes equações
para 0 … t … 2

em que f(t) = 3t. Utilize o bloco Ramp na biblioteca Sources.


10. Construa um modelo no Simulink para plotar a solução das seguintes equações
para 0 … t … 3

em que f1(t) é uma função degrau que vale 3 a partir de t = 0 e f2(t) é uma fun-
ção degrau que vale -3 a partir de t = 1.

Seção 10.4
11. Utilize o bloco Saturation para criar um modelo no Simulink que plote a solu-
ção da seguinte equação para 0 … t … 6.

em que
456 Introdução ao MATLAB para Engenheiros

12. Construa um modelo no Simulink do seguinte problema:

A função forçante é

em que g(t) = 10 sen 4t.


13. Se um sistema massa-mola tiver atrito de Coulomb na superfície em vez de
atrito viscoso, sua equação de movimento é

em que é o coeficiente de atrito. Desenvolva um modelo no Simulink para


o caso em que m = 1 kg, k = 5 N/m, = 0,4 e g = 9,8 m/s2. Rode a simulação
para dois casos: (a) a força aplicada f(t) é uma função degrau com magnitude
de 10 N; e (b) a força aplicada é senoidal: f(t) = 10 sen 2,5t. Tanto o bloco Sign
na biblioteca Math Operation quanto o bloco Coulomb and Viscous Friction na
biblioteca Discontinuities podem ser utilizados, mas como não há atrito visco-
so nesse problema, o bloco Sign é mais fácil de ser utilizado.
14. Uma determinada massa, m = 2 kg, se move sobre uma superfície inclinada
com um ângulo = 30° em relação à horizontal. Sua velocidade inicial é
y(0) = 3 m/s na direção de subida da superfície inclinada. Uma força externa
de f1 = 5 N atua sobre ela paralelamente e na direção de subida. O coeficiente
de atrito de Coulomb é = 0,5. Utilize o bloco Sign e crie um modelo no Si-
mulink para resolver as equações de movimento para a velocidade da massa
até que ela atinja o repouso. Utilize o modelo para determinar o instante em
que a massa atinge o repouso.
15. a. Desenvolva um modelo no Simulink de um sistema de controle termostático
no qual o modelo de temperatura é

em que T é a temperatura do ar da sala em °F, Ta é a temperatura do ar ambien-


te (do lado de fora) em °F, o tempo t é medido em horas, q é a entrada do siste-
ma de aquecimento em lb · ft/h, R é a resistência térmica e C é a capacitância
térmica. O termostato chaveia q para o valor qmax sempre que a temperatura fi-
car inferior a 69 °F e chaveia q para q = 0 sempre que a temperatura ficar supe-
rior a 71 °F. O valor de qmax indica a saída de calor do sistema de aquecimento.
Rode a simulação para o caso em que T(0) = 70°F e Ta(t) = 50 + 10 sen (t/12).
Utilize os valores R = 5 * 10-5 °F · h/lb · ft e C = 4 * 104 lb · ft/°F. Plote as tem-
Capítulo 10 ■ Simulink 457

peraturas T e Ta versus o tempo na mesma janela gráfica, para 0 … t … 24 h. Faça


isso para dois casos: qmax = 4 * 105 e qmax = 8 * 105 lb  ft/h. Investigue a eficácia
de cada caso.
b. A integral de q ao longo do tempo é a energia utilizada. Plote 冕 q dt versus t
e determine quanta energia é utilizada em 24 h para o caso em que qmax = 8
* 105.
16. Veja o Problema 15. Utilize a simulação com qmax = 8 * 105 para comparar o
consumo de energia e a frequência de ciclos do termostato para as duas faixas
de temperatura (69°, 71°) e (68°, 72°).
17. Considere o sistema de nível de líquido mostrado na Figura 10.7-1. A equação
que o descreve e que é baseada na conservação da massa é a Equação (10.7-2).
Suponha que a altura h é controlada utilizando-se um relé que chaveia a vazão de
entrada entre os valores 0 e 50 kg/s. A vazão é chaveada para “on” quando a altura
é menor do que 4,5 m e é chaveada para “off” quando a altura atinge 5,5 m. Crie
um modelo no Simulink para essa aplicação utilizando os valores A = 2 m2, R =
400 m-1  s-1, = 1000 kg/m3 e h(0) = 1 m. Obtenha uma plotagem de h(t).

Seção 10.5
18. Utilize o bloco Transfer Function para construir um modelo no Simulink que
plote a solução da seguinte equação para 0 … t … 4:

19. Utilize blocos Transfer Function para construir um modelo no Simulink que
plote a solução das seguintes equações para 0 … t … 2

em que f(t) = 75us(t).


20. Utilize blocos Transfer Function para construir um modelo no Simulink que
plote a solução das seguintes equações para 0 … t … 2

em que f(t) = 50us(t). Na saída do primeiro bloco há uma zona morta para
-1 … x … 1. Isso limita a entrada para o segundo bloco.
21. Utilize blocos Transfer Function para construir um modelo no Simulink que
plote a solução das seguintes equações para 0 … t … 2

em que f(t) = 50us(t). Na saída do primeiro bloco há uma saturação que limita x
a |x| … 1. Isso limita a entrada para o segundo bloco.
458 Introdução ao MATLAB para Engenheiros

Seção 10.6
22. Construa um modelo no Simulink que plote a solução da seguinte equação para
0 … t … 4:

23. Construa um modelo no Simulink que plote a solução da seguinte equação para
0 … t … 3:

24. Construa um modelo no Simulink do seguinte problema:

A função forçante é f(t) = sen 2t. O sistema apresenta uma não linearidade do
tipo zona morta mostrada na Figura 10.5-1.
25. O modelo a seguir descreve uma massa suportada por uma mola não linear e
dura. As unidades estão no SI. Utilize g = 9,81 m/s2.

Crie um modelo no Simulink que plote a solução para 0 … t … 2.


26. Considere o sistema para erguer uma massa mostrado na Figura P26. O mastro
de 70 ft de comprimento pesa 500 lb. O guincho aplica uma força de 380 lb ao
cabo. O mastro é suportado inicialmente a um ângulo de 30°, e o cabo em A
está inicialmente na horizontal. A equação de movimento do mastro é

em que

Crie e rode um modelo no Simulink que plote (t) para (t) … /2 rad.

d
D
A
380 lb

H  20

O 30°
L  40

W  5

FIGURA P26
Capítulo 10 ■ Simulink 459

27. A equação que descreve a altura da água h em um tanque esférico com um dre-
no na parte inferior é:

Suponha que o raio do tanque é r = 3 m e que o orifício do dreno circular


de área A tem raio de 2 cm. Considere que Cd = 0,5 e que a altura de água
inicial é h(0) = 5 m. Utilize g = 9,81 m/s2. Utilize o Simulink para resolver a
equação não linear e plotar a altura da água como uma função do tempo até
que h(t) = 0.
28. Um copo de papel em forma de cone (como o tipo utilizado em fontes de água)
tem um raio R e uma altura H. Se a altura da água no copo for h, o volume de
água é dado por

Suponha que as dimensões do copo sejam R = 1,5 in e H = 4 in.


a. Se a vazão da fonte para o copo for de 2 in3/s, utilize o Simulink para deter-
minar quanto tempo será necessário para encher o copo até a borda.
b. Se a vazão da fonte para o copo for dada por 2(1 - e-2t) in3/s, utilize o Simu-
link para determinar quanto tempo será necessário para encher o copo até a
borda.

Seção 10.7
29. Veja a Figura 10.7-2. Suponha que as resistências obedecem à relação linear,
de modo que a vazão mássica ql que passa pela resistência à esquerda seja
ql = (pl - p)Rl, com uma relação linear similar para a resistência à direita.
a. Crie um bloco de subsistema no Simulink para esse elemento.
b. Utilize o bloco de subsistema para criar um modelo no Simulink do sistema
mostrado na Figura 10.7-5. Suponha que a vazão mássica de entrada seja
uma função degrau.
c. Utilize o modelo no Simulink para obter plotagens de h1(t) e h2(t) para os
seguintes valores de parâmetros: A1 = 2 m2, A2 = 5 m2, R1 = 400 m-1  s-1, R2
= 600 m-1  s-1, = 1000 kg/m3, qmi = 50 kg/s, h1(0) = 1,5 m e h2(0) = 0,5 m.
30. a. Utilize o bloco de subsistema desenvolvido na Seção 10.7 para construir um
modelo no Simulink do sistema mostrado na Figura P30. A vazão mássica
de entrada é uma função degrau.
b. Utilize o modelo no Simulink para obter plotagens de h1(t) e h2(t) para os
seguintes valores de parâmetros: A1 = 3 ft2, A2 = 5 ft2, R1 = 30 ft-1 · s-1, R2 =
40 ft-1 · s-1, = 1,94 slug/ft3, qmi = 0,5 slug/s, h1(0) = 2 ft e h2(0) = 5 ft.
460 Introdução ao MATLAB para Engenheiros

qmi

h1
A1 R1

h2
A2 R2

FIGURA P30

31. Considere a Figura 10.7-7 para o caso em que há três malhas RC com os valo-
res R1 = R3 = 104 æ, R2 = 5 * 104 æ, C1 = C3 = 10-6 F e C2 = 4 * 10-6 F.
a. Desenvolva um bloco de subsistema para uma malha RC.
b. Utilize o bloco de subsistema para construir um modelo no Simulink do sis-
tema completo formado pelas três malhas. Plote v3(t) ao longo de 0 … t … 3
para v1(t) = 12 sen 10t V.
32. Considere a Figura 10.7-8 para o caso em que há três massas. Utilize os valo-
res m1 = m3 = 10 kg, m2 = 30 kg, k1 = k4 = 104 N/m e k2 = k3 = 2 * 104 N/m.
a. Desenvolva um bloco de subsistema para uma massa.
b. Utilize o bloco de subsistema para construir um modelo no Simulink do
sistema completo formado pelas três massas. Plote os deslocamentos das
massas ao longo de 0 … t … 2 s se o deslocamento inicial de m1 for 0,1 m.

Seção 10.8
33. Veja a Figura P30. Suponha que há um tempo morto de 10 s entre a vazão de
saída da parte superior do tanque e a vazão da parte inferior do tanque. Utilize
o bloco de subsistema desenvolvido na Seção 10.7 para criar um modelo no
Simulink desse sistema. Utilizando os parâmetros dados no Problema 30, plote
as alturas h1 e h2 versus o tempo:

Seção 10.9
34. Refaça o modelo da suspensão no Simulink desenvolvido na Seção 10.9, uti-
lizando a relação da mola e a função de entrada mostradas na Figura P34 e a
seguinte relação do amortecedor:
Capítulo 10 ■ Simulink 461

Força da mola (N)


3000
y (t)
(m)

0,3
1300

500
0,25 0,15 Deflexão
0
y  x (m) 0 0,15 4,0 4,15 t (s)
500 0,15 0,25
(b)
1300

3000

(a)
FIGURA P34

Utilize a simulação para plotar a resposta. Avalie o sobressinal e o subsinal.


35. Considere o subsistema mostrado na Figura P35. As equações de movimento
são:

Suponha que m1 = m2 = 1, c1 = 3, c2 = 1, k1 = 1 e k2 = 4.
a. Desenvolva um modelo desse sistema no Simulink. Ao fazer isso, considere
se é melhor utilizar uma representação em espaço de estados ou uma repre-
sentação de função de transferência do modelo.
b. Utilize o modelo no Simulink para plotar a resposta x1(t) para a entrada a
seguir. As condições iniciais são nulas.

c2 c1

m2 k2 m1 k1
f (t)

FIGURA P35
Foto: © Livre de Royalties/CORBIS

Engenharia no
Século XXI…
Desenvolvendo fontes
alternativas de energia

P
arece que agora os Estados Unidos e grande parte do resto do mundo têm re-
conhecido a necessidade de reduzir sua dependência em relação a fontes de
energia não renováveis, tais como o gás natural, o petróleo, o carvão e, talvez,
até mesmo o urânio. As fontes que fornecem esses combustíveis serão um dia exau-
ridas. Além disso, eles têm efeitos prejudiciais ao meio ambiente e, quando importa-
dos, causam grandes desequilíbrios comerciais que prejudicam a economia. Um dos
maiores desafios da engenharia do século XXI será o desenvolvimento de fontes de
energia renováveis.
As fontes de energia renováveis incluem a energia solar (tanto a solar térmica
quanto a solar elétrica), a energia geotérmica, a energia das marés e das ondas e a
energia eólica, bem como o cultivo de plantas que podem ser convertidas em álcool.
Em aplicações de energia solar térmica, a energia proveniente do Sol é utilizada para
aquecer um fluido, o qual pode ser utilizado para aquecer um prédio ou para alimen-
tar um gerador de energia elétrica, como uma turbina a vapor. Em aplicações de ener-
gia solar elétrica, a luz do Sol é convertida diretamente em eletricidade.
A energia geotérmica é obtida a partir do calor do solo ou das saídas de vapor.
No caso da energia das marés, suas correntes são utilizadas para acionar uma turbina
a fim de gerar eletricidade. Com relação à energia das ondas, a mudança no nível da
superfície da água devido às ondas é utilizada para conduzir a água através das turbi-
nas ou de outro dispositivo. Já a energia eólica usa uma turbina de vento para acionar
um gerador.
A dificuldade com a maioria das fontes de energia renováveis é que elas são
difusas, de modo que a energia precisa ser concentrada de alguma forma, e são inter-
mitentes, o que exige um método de armazenamento. Atualmente, a maioria dos sis-
temas de energia renováveis não é muito eficiente; por isso, o desafio da engenharia
do futuro é melhorar sua eficiência. ■
11
MuPAD

O MuPAD é um programa muito grande, com muitos recursos. Neste capítulo, abor-
daremos um subconjunto desses recursos, enfatizando aqueles de maior utilidade
para estudantes iniciantes de engenharia e de ciência. Especificamente, trataremos
do seguinte:
■ MuPAD básico e o Sistema de Ajuda.
■ Álgebra simbólica.
■ Métodos para a solução de equações algébricas e transcendentais.
■ Tópicos selecionados em álgebra linear.
■ Métodos simbólicos para a solução de equações diferenciais ordinárias.
■ Cálculo simbólico.
■ Transformadas de Laplace.
■ As funções especiais da matemática.
Ao final deste capítulo, você deverá ser capaz de utilizar o MATLAB para:
■ Criar expressões simbólicas e manipulá-las algebricamente.
■ Obter soluções simbólicas e numéricas para equações algébricas e transcen-
dentais.
■ Realizar operações simbólicas de álgebra linear, incluindo obtenção de expres-
sões para determinantes, inversas de matrizes, autovetores e autovalores.
■ Realizar diferenciação e integração simbólicas.
■ Avaliar limites e séries simbolicamente.
■ Obter soluções simbólicas para equações diferenciais ordinárias.
■ Obter a aplicar transformadas de Laplace.
■ Resolver equações diferenciais ordinárias em termos de funções especiais ou
séries.
464 Introdução ao MATLAB para Engenheiros

11.1 Introdução ao MuPAD


O MuPAD é um grande pacote com diversos recursos. Neste capítulo, introduziremos
um subconjunto desses recursos, aqueles que são mais úteis para engenheiros e cien-
tistas, e apenas a sua sintaxe básica. A maioria dos comandos no MuPAD tem uma
sintaxe estendida que está documentada no seu Sistema de Ajuda. Você precisará con-
sultar frequentemente esse Sistema de Ajuda, porque as limitações de espaço fazem
com que seja impossível abordar o MuPAD com detalhes em um capítulo.
O MuPAD vem com o toolbox de Matemática Simbólica (Symbolic Math). O
toolbox em si tem a sua própria sintaxe, que difere de alguma maneira daquela do
MuPAD, e seus comandos são inseridos na janela de Comandos ou em arquivos M.
A interface do MuPAD, todavia, é um caderno. Antes do MATLAB Release 2008
(Versão 5.1 do toolbox), o toolbox utilizava uma versão licenciada do Maple. Agora
o Maple foi substituído pelo MuPAD, mas a sintaxe do toolbox permanece a mesma.
Entretanto, o MuPAD se comporta de uma maneira um pouco diferente em relação
ao Maple. Um exemplo disso é a solução de equações transcendentais. Enquanto às
vezes o Maple corretamente apresentava mais do que uma solução, o MuPAD fre-
quentemente fornece apenas uma das possíveis soluções. Assim, usuários que tenham
utilizado o toolbox anterior verão que seus programas antigos podem se comportar de
maneira diferente agora.
Neste capítulo, abordaremos exclusivamente o MuPAD, em virtude das limi-
tações de tamanho de página e porque o MuPAD parece ser o futuro do toolbox de
Matemática Simbólica.

A tela de boas-vindas do MuPAD


No MuPAD você realiza operações em “cadernos”. Assim, você pode organizar
seu trabalho em tópicos. Para iniciar o MuPAD, primeiro inicie o MATLAB; em
seguida, abra um novo caderno digitando mupadwelcome no prompt do MAT-
LAB. Esse comando abrirá a tela mostrada na Figura 11.1-1. Ela permite que você
solicite ajuda na subjanela First Steps. Ao clicar em Getting Started, a janela da
Figura 11.1-2 será mostrada, a qual apresenta uma série de Tópicos de Ajuda. O
painel do lado esquerdo apresenta uma lista de tópicos que podem ser expandidos
ou recolhidos clicando-se nos sinais + ou -. O painel do lado direito contém uma
lista de tópicos menor.
Com relação à tela de boas-vindas mostrada na Figura 11.1-1, quando você
clica em Notebook Interface, aparece a tela mostrada na Figura 11.1-3. Ela dá
acesso a funcionalidades de ajuda específicas da Interface de Caderno (Notebook
Interface).
Você pode iniciar um novo caderno clicando em New Notebook na tela de
boas-vindas, ou você pode abrir um caderno criado anteriormente clicando em Open
Recent File ou Open File para acessar arquivos que não se encontram no diretório
predefinido.
Você pode evitar a tela de boas-vindas digitando mupad no prompt do MAT-
LAB. Esse comando abrirá um novo caderno. Uma vez que o MuPAD esteja aberto,
é possível selecionar um caderno criado anteriormente.
Capítulo 11 ■ MuPAD 465

FIGURA 11.1-1 A tela de boas-vindas do MuPAD.

FIGURA 11.1-2 A tela Getting Started.

A barra de Menus
REGIÕES DE A Figura 11.1-4 mostra um caderno criado anteriormente contendo comandos, saídas
ENTRADA, (os resultados da execução dos comandos) e comentários. Comandos e comentários são
DE TEXTO E
DE SAÍDA
inseridos em entradas e regiões de texto, respectivamente. Os resultados aparecem nas
regiões de saída. Os resultados podem ser expressões matemáticas, números ou gráficos.
466 Introdução ao MATLAB para Engenheiros

FIGURA 11.1-3 A tela Notebook Interface Help.

No arranjo padrão da área de trabalho, a barra de Comandos aparece à direita da


tela. Essa barra será discutida na Sessão 11.2. Você pode configurar a área de trabalho
para exibir a barra de Busca e Substituição (Search and Replace) em vez da barra de
Comandos, mas esta última é normalmente mais útil.

FIGURA 11.1-4 A Interface de Caderno (Notebook Interface) do MuPAD.


Capítulo 11 ■ MuPAD 467

A barra de Menus se encontra na parte superior da interface. Ela contém nove


menus, alguns dos quais não são necessários para cálculos básicos. Os menus File,
Edit e Help são similares àqueles do MATLAB, exceto que o último acessa a tela
First Steps do MuPAD. O menu View permite configurar a tela adicionando ou re-
movendo barras de ferramentas. O menu Navigation permite navegar pelo caderno.
O menu Insert é muito útil porque permite inserir cálculos e comentários (pa-
rágrafos de texto) em qualquer lugar no caderno. Clicando em uma das opções Eva-
luate no menu Notebook, os resultados de quaisquer cálculos recém-inseridos serão
propagados por todo o caderno.
O menu Format permite alterar os tamanhos de fonte e a formatação da página.
O menu Window permite alternar entre cadernos se mais de um estiver aberto.
Você pode fechar um caderno do MuPAD selecionando Close no menu File.
Se você selecionar Exit no menu File, o MuPAD será fechado e você retornará ao
MATLAB.

A barra de ferramentas Padrão


Abaixo da barra de Menus está a barra de ferramentas Padrão (Figura 11.1-5). Ela
contém botões de atalho para operações frequentemente utilizadas cujas funções são
óbvias a partir do nome do botão. Os mais úteis são o botão Calculation, o qual
insere uma nova região de entrada abaixo da posição atual do cursor; o botão Text
Paragraph, o qual insere um parágrafo de texto; e o botão Evaluate, que avalia o
cálculo na região de entrada onde se encontra o cursor.

FIGURA 11.1-5 A barra Padrão.

Inserindo comandos
Você insere comandos nas regiões de entrada do caderno. A Figura 11.1-4 mostra um
caderno com a exibição de alguns comentários, comandos e respostas. As regiões de
entrada e de saída apresentam um colchete à esquerda; as regiões de texto, não. Após
digitar um comando em uma região de entrada em branco, pressione Enter e o Mu-
PAD avaliará o comando. O resultado será exibido no próximo colchete, logo abaixo
da região de entrada. Uma sessão exemplo que calcula cos(3,14) é dada a seguir. O
comando é cos(3.14) e a saída é -0,9999987317. Neste capítulo, exibiremos os
comandos em negrito, e as saídas e comentários em itálico e romano.

Note que a resposta não é exatamente -1 porque 3,14 não é exatamente . Para res-
postas exatas utiliza PI, que é o símbolo do MupAD para :
468 Introdução ao MATLAB para Engenheiros

SÍMBOLS Alguns símbolos reservados geralmente utilizados no MuPAD são PI para , I


RESERVADOS para o número complexo e E para e, a base do logaritmo natural. Você não
deve utilizá-los como identificadores para representar algo diferente do seu signifi-
cado reservado.
Você pode editar entradas anteriores clicando sobre elas e inserindo ou apagando
textos, utilizando as teclas de edição do teclado. Obtenha um resultado atualizado pres-
sionando Enter. Você pode cortar e colar a partir da região de entrada, mas nenhuma
saída pode ser copiada ou editada, porque ela é gráfica. Finalize o comando com um
sinal de ponto e vírgula para suprimir a exibição da saída. Insira mais de um comando
em uma linha separando-os com um sinal de ponto e vírgula ou com uma vírgula.
O MuPAD utiliza os operadores aritméticos padrão (+ - * /) e segue as mesmas
regras de precedência do MATLAB. O MuPAD utiliza nomes de função que são em
sua maioria idênticos àqueles utilizados pelo MATLAB, por exemplo, sin, tan, exp.
Duas exceções que merecem destaque são o logaritmo natural ln, que é ln no Mu-
PAD, e o logaritmo na base 10, log10, que é log no MuPAD. As respostas são exatas
(não são números em ponto flutuante arredondados) quando calculadas com números
inteiros e racionais. Por exemplo:

Utilize E ou exp(1) para a base do logaritmo natural, ainda que o MuPAD exiba
os resultados utilizando a letra minúscula e. Utilize ln(x) para ln x e log(x) para log x.

A função float retorna um resultado em ponto flutuante. Você pode utilizar %


para fazer referência ao resultado anterior. O MuPAD exibe resultados de acordo com
o valor de DIGITS, que define o número de dígitos decimais a serem exibidos. O
valor predefinido é 10.
Atenção! É fácil cometer erros utilizando a função float com o símbolo %, o qual
representa o último resultado calculado, não necessariamente o resultado logo aci-
ma do comando float(%). Por exemplo, se você voltar alguns passos no caderno e
recalcular um comando, ao digitar float(%) em seguida, você avaliará os resultados
daquele comando, mesmo se digitar float(%) como o último comando no caderno.
Capítulo 11 ■ MuPAD 469

Um cálculo aproximado é utilizado se pelo menos um dos números envolvidos


for um valor em ponto flutuante. Por exemplo, alterar 3 em um exemplo anterior para
3,2 implica um resultado em ponto flutuante.

A maioria das funções matemáticas comuns retornará um valor exato se seu


argumento for exato, e retornará um valor em ponto flutuante se seu argumento for
um ponto flutuante. Por exemplo:

Cálculos com número complexos são realizados facilmente utilizando-se I para

As funções Re(p) e Im(p) retornam a parte real e a parte imaginária de um


número complexo p. As funções conjugate(p), abs(p) e arg(p) calculam o complexo
conjugado, o valor absoluto e o ângulo polar do número p. A função rectform con-
verte um número para a forma retangular.

Inserindo textos e cálculos


Você pode inserir um texto com a finalidade de documentação. Um exemplo é mos-
trado na Figura 11.1-4. Para inserir um texto acima de um cálculo, a maneira mais
fácil é posicionar o cursor na região de entrada a ser documentada, clicar no menu
470 Introdução ao MATLAB para Engenheiros

Insert e depois em Text Paragrah Above. Você pode, então, digitar o texto. Pode ser
que você queira inserir um cálculo acima de outro. Para fazer isso, clique no menu
Insert e, em seguida, clique em Calculation Above. Assim, será aberta uma região
de entrada em branco.

11.2 Expressões simbólicas e álgebra


OPERADOR DE Utilize o operador de atribuição := para atribuir uma expressão simbólica a um iden-
ATRIBUIÇÃO tificador de nome r, por exemplo. O identificador r pode ser utilizado como uma
abreviação para a expressão. Por exemplo:

Note que a expressão foi rearranjada na exibição.


É uma boa prática apagar os identificadores ou variáveis, expressões e funções
para evitar conflitos se você for utilizar posteriormente tais identificadores para sig-
nificar algo diferente. Utilize a função delete (p) para apagar p. Também é necessário
remover quaisquer considerações inseridas acerca de um parâmetro se aquele parâ-
metro for utilizado em cálculos posteriores. Exemplos disso são as funções assume e
reassume, que serão discutidas posteriormente.

Expressões versus funções


É importante notar que uma expressão no MuPAD não é o mesmo que uma função.
Por exemplo, considere a expressão:

Nós não podemos avaliar a expressão em um valor específico de x, como x = 3, digi-


tando w (3) ou float (w(3)).
Funções definidas pelo usuário podem ser criadas definindo-se um procedimen-
to. Considere a função f(x) = x2 + 3x + 7. Podemos defini-la como um procedimento
da seguinte maneira:

O símbolo que representa uma seta é obtido digitando-se o hífen (-) seguido pelo si-
nal de maior que (7). Podemos, então, avaliar a função em valores especificados de x:
Capítulo 11 ■ MuPAD 471

FIGURA 11.2-1 Criando uma plotagem.

Você pode plotar expressões ou funções da mesma forma. Por exemplo:

O resultado é mostrado na Figura 11.2-1. Você também poderia ter digitado


plot(y) sem limites, mas o MuPAD selecionaria os limites da plotagem de maneira
que o gráfico ficasse centrado em torno de x = 0. Digitar plot(%) produz o mesmo
resultado.

Manipulando expressões
A Figura 11.2-2 mostra a barra de Comandos. Ela fornece atalhos para que se evite a
digitação de comandos na região de entrada. Quando você clica em um item, aquele
comando é inserido no local do caderno onde se encontra o cursor. A Tabela 11.2-1
lista as operações que estão disponíveis a partir da porção superior da barra de Co-
mandos. Discutiremos esses comandos ao longo do capítulo, e você pode recorrer a
essa tabela quando algum comando em particular for discutido.
As funções a seguir podem ser utilizadas para manipular expressões por meio
do agrupamento de coeficientes de mesma potência, por meio da expansão de potên-
cia e por meio da fatoração de expressões, por exemplo. Você pode digitar as funções
diretamente na região de entrada ou pode selecionar as funções a partir da barra de
Comandos, a qual contém um subconjunto de todas as funções do MuPAD. As se-
guintes opções aparecem quando você seleciona General Math a partir da barra de
Comandos:
472 Introdução ao MATLAB para Engenheiros

FIGURA 11.2-2 A barra de Comandos.

O menu General Math


Expand Simplify
Factor Combine
Normalize Rewrite
Evaluate Solve

Os últimos cinco itens no menu General Math contêm submenus. Discutiremos


a função Solve na Seção 11.3. Quando você clica em qualquer um desses itens, o
MuPAD insere a função correspondente na região de entrada em que se encontra o
cursor. O argumento da função será o marcador de lugar #, o qual você deve deletar
para, em seguida, inserir a expressão apropriada. Em qualquer caso você pode digitar
a função se não quiser utilizar o menu.
Capítulo 11 ■ MuPAD 473

TABELA 11.2-1 Itens na barra de Comandos


Derivatives Limits Sums
Integrals Rewrite Expressions Products
Solve Equations Simplify Evaluate with x = a
Numerical Evaluation and Rounding Equality Tests Assignment
Math Operators Factorials Function Definition
Trig Functions Exponentials and Logs Piecewise Definitions
Reserved Symbols Greek Letters Physical Units
Matrices and Vectors 2D Plot 3D Plot

Expand Quando você seleciona Expand a partir do menu, o MuPAD insere ex-
pand(#) na região de entrada. Apague o marcador de lugar # e digite seu texto. A fun-
ção expand(p) expande a expressão p utilizando um conjunto de regras apropriadas
para a expressão dada. O exemplo a seguir mostra como essa expansão é efetuada por
meio de potências.

Você pode reutilizar símbolos de expressão, como p1, digitando delete(p1) na caixa
de entrada.
O próximo exemplo mostra como essa expansão é efetuada utilizando-se iden-
tidades trigonométricas.

Factor Quando você seleciona Factor a partir do menu, o MuPAD insere factor(#)
na região de entrada. Utilize a função factor(p) para fatorar a expressão p.

A função factorout(p,q) estabelece como fator uma dada expressão q a partir da


expressão p.
474 Introdução ao MATLAB para Engenheiros

Normalize Ao clicar em Normalize, a função normal(#) é inserida na região de


entrada onde se encontra o cursor. A função normal(p) encontra um denominador
comum para expressões racionais.

Além disso, normal cancela fatores comuns no numerador e no denominador:

Evaluate O item Evaluate no menu apresenta duas subopções: Numerically e


Boolean. Ao escolher Numerically, a função float(#) é inserida na região de entrada.
Nós já vimos a função float. Ao escolher Boolean, a função bool(#) é inserida, a qual
avalia uma expressão booleana.

Simplify O item Simplify apresenta oito subopções:

O menu Simplify
General Exponential
Logical Logarithm
Radical Sine
Relational Cosine

Ao escolher General, a função Simplify(#) é inserida. Note a primeira letra


maiúscula. Você também pode digitar a expressão relacionada simplify(p). As funções
simplify e Simplify são similares; Simplify é mais poderosa, mas pode ser mais lenta.
A forma geral dessas funções é simplify(p,<target>), em que <target> res-
tringe as regras de simplificação para as funções-alvo. Por exemplo, ao escolher o
item Logical do submenu, a função simplify(#, logic) é inserida. Outras opções para
<target> são sqrt, relation, exp, ln, sin e cos, que são obtidas selecionando-se os
Capítulo 11 ■ MuPAD 475

itens Radical, Relational, Exponential, Logarithm, Sine e Cosine no menu, res-


pectivamente. Por exemplo:

Às vezes a função alvo não é necessária. Por exemplo:

Combine O item Combine apresenta oito subopções:

O menu Combine
General Power
Arc Tangent SineCosine
Exponential Sine/Cosine Hyp
Logarithm Square Root

Ao escolher General, a função combine(#) é inserida no caderno. A função


combine(p) combina termos de mesma estrutura algébrica na expressão p. A forma geral
da função combine é combine(p <target>). A opção <target> combina diversas chama-
das da(s) função(ões) alvo na expressão p em uma única chamada. Outras funções-alvo
estão disponíveis, mas não estão no menu; são elas a função log e a função gamma.
Por exemplo, ao escolher o item Sin/Cosine do submenu, a função combine(#,
sincos) é inserida. Outras escolhas para <target> são arctan, exp, ln, power, sincos,
sinhcosh e sqrt, as quais são obtidas selecionando-se os itens correspondentes no menu.
Quando o segundo argumento não é especificado, combine agrupa potências
de mesma base:

A função combine combina potências com o mesmo expoente em alguns casos,


mas não sempre:

Com a função alvo sincos, produtos de senos e cossenos são expressos como
somas de senos e cossenos.
476 Introdução ao MATLAB para Engenheiros

Algumas combinações podem requerer que certas considerações sejam feitas.


Por exemplo:

Rewrite A função Rewrite no menu General Math apresenta oito subopções:

O menu Rewrite
Differential Heaviside
Exponential Logarithm
Factorial Sign
Gamma Sine/Cosine

Ao escolher qualquer um desses itens, a função rewrite(#, <target>) é inserida


no caderno. A função rewrite(p, <target>) transforma uma expressão p em uma
forma matematicamente equivalente, tentando expressar p em termos da função alvo
especificada. Por exemplo, ao escolher o item Sine/Cosine do submenu, a função
rewrite(#, sincos) é inserida.

Outras opções para <target> são diff (que é discutida na Seção 11.5), exp, fact,
heaviside, ln, sign e sincos, as quais são obtidas escolhendo-se os itens do menu cor-
respondentes. Muitas outras funções-alvo estão disponíveis, mas não estão no menu;
consulte rewrite no Sistema de Ajuda para ver a lista.
Funções que não estão na barra de ferramentas Há muitas funções úteis que
não estão na barra de ferramentas. Um exemplo é a função collect(p,x). Ela agrupa
coeficientes de mesma potência de x na expressão p.

Se houver mais do que uma variável, você pode especificar aquela a ser agrupada.
Capítulo 11 ■ MuPAD 477

Você pode realizar operações envolvendo mais do que uma expressão. Por
exemplo:

Outra função que não está na barra de Comandos é a função subs. Você pode
substituir a variável x em uma expressão p pela variável y digitando subs(p, x = y).
Por exemplo:

Note que p4 não mudou:

Para obter uma nova variável, você deve dar um nome à expressão:

Os itens remanescentes no menu General Math serão discutidos em seções


posteriores.

Teste seus conhecimentos


T11.2-1 Dadas as expressões E1 = x3 - 15x2 + 75x - 125 e E2 = (x + 5)2 - 20x, utili-
ze o MuPAD para:
(a) Encontrar o produto E1E2 e expressá-lo na sua forma mais simples.
(b) Encontrar o quociente E1/E2 e expressá-lo na sua forma mais simples.
(c) Avaliar a soma E1 + E2 para x = 7,1 na forma simbólica e na forma numé-
rica.
(Respostas: (a) (x - 5)5, (b) x - 5, (c) 13,671/1000 na forma simbólica,
13,6710 na forma numérica.)

11.3 Equações algébricas e transcendentais


O MuPAD pode resolver equações algébricas e transcendentais tanto quanto sistemas
dessas equações. Uma equação transcendental é uma equação que contém uma ou
mais funções transcendentais, tais como sen x, ex ou log x. A função apropriada para
resolver essas equações é a função solve.
478 Introdução ao MATLAB para Engenheiros

A função solve
A função solve(p) resolve uma expressão ou equação simbólica (uma expressão con-
tendo o sinal de igualdade =) representada por p. Se a expressão p não contiver um
sinal de igualdade, o MuPAD considerará que a expressão deve ser igual a 0. Por
exemplo, para resolver a equação 5x+ 25 = 0 utilizando solve(p), digite:

ou

A expressão não precisa ser igualada a zero.

Utilizando a versão solve(p,x), obtemos

ou

Bibliotecas do MuPAD
O MuPAD possui centenas de funções, as quais são organizadas em bibliotecas. A
biblioteca Standard é a mais importante do MuPAD. Nela estão a funções mais fre-
quentemente utilizadas, tais como solve e simplify. Exceto pelas funções da bibliote-
ca Standard, as funções das bibliotecas apresentam um prefixo separado com ::. Por
exemplo, a função solve na biblioteca Standard obtém soluções analíticas, ao passo
que a função solve na biblioteca Numeric é chamada como numeric::solve(p).
As funções das bibliotecas também podem ser chamadas pela sua notação curta
se você primeiro exportá-las com a função use. Uma biblioteca que veremos em bre-
ve é a numeric; ela contém a função polyroots, a qual obtém as raízes de polinômios
numericamente, ao invés de simbolicamente. Podemos chamar essa função digitando
numeric::polyroots. Entretanto, você pode “exportar” essa e as outras funções da
biblioteca para o MuPAD digitando use(numeric). Após a exportação, você pode
digitar polyroots em vez da forma longa numeric::polyroots, por exemplo. Para
evitar confusão em relação a se uma função da biblioteca foi ou não exportada, neste
capítulo nós sempre utilizaremos a forma longa.
Há muitas bibliotecas; você pode obter mais informações sobre elas e suas
funções por meio de buscas no Sistema de Ajuda. Você pode obter uma lista de
Capítulo 11 ■ MuPAD 479

funções em uma biblioteca específica, digamos, a biblioteca numeric, digitando


info(numeric).

Selecionando funções a partir da barra de Comandos


Você pode digitar funções diretamente na região de entrada do caderno, ou pode se-
lecionar funções a partir da barra de Comandos, a qual contém um subconjunto de
todas as funções do MuPAD. As seguintes opções aparecem quando você seleciona
Solve no menu General Math a partir da barra de Comandos:

O menu Solve
Exact Polynomial Diophantine Equation
Numeric Recurrences
Linear System ODE

Ao selecionar Exact, a função solve(#) será inserida na caixa de entrada. Você


pode deletar o símbolo # e inserir a equação a ser resolvida. Em vez de utilizar o
menu, você pode digitar solve(p) ou solve(p,x), em que p representa a equação a ser
resolvida e x é a variável da solução. Para resolver x2 - 4x + 6 =0, digite:

Algumas equações não lineares possuem um número infinito de soluções. O


MuPAD indica isso da seguinte forma, se ele não puder encontrá-las exatamente:

O símbolo significa que a solução completa pode ser obtida a partir das expres-
sões de ambos os lados do símbolo , em que o símbolo k indica que as duas
soluções dadas são verdadeiras para qualquer valor inteiro de k.
Para encontrar todas as raízes de x4 = 1, você deve digitar solve(x^4=1) para
obter x = ±1 e x = ±i. Para encontrar apenas as raízes reais de x4 = 1, você pode res-
tringir os resultados utilizando a opção Type::Real da seguinte maneira:

Certifique-se de digitar unassume(x): em seguida se você pretende utilizar x


posteriormente como outra variável. Há outras opções, como Type::Positive, dispo-
níveis para ser utilizadas com assume e solve. Veremos um pouco disso posterior-
mente; veja o Sistema de Ajuda para mais detalhes.
Você não precisa utilizar a função assume. Por exemplo, há um número infinito
de soluções para a equação e2x + 3ex = 54, e o MuPAD pode encontrá-las utilizando
solve. Suponha, todavia, que você esteja interessado apenas nas soluções reais. Então,
480 Introdução ao MATLAB para Engenheiros

você pode utilizar a opção Real da seguinte maneira para obter a única solução real,
x = ln 6:

Você deve sempre ser cuidadoso na interpretação dos resultados. Por exemplo,
a equação x4 - 5x2 + 6x - 2 = 0 é de quarta ordem e, portanto, possui quatro raízes,
mas o MuPAD apresenta apenas três raízes e não indica que a raiz x = 1 é repetida.

Você pode evitar esse problema utilizando a opção Multiple, da seguinte maneira:

O resultado [1, 2] indica que a raiz x = 1 é repetida duas vezes.


Você pode especificar o intervalo dentro do qual você deseja encontrar uma so-
lução. Por exemplo, a equação cos(x/5) = 0 possui um número infinito de soluções,
as quais podem ser encontradas utilizando-se a função solve. No entanto, se você
desejar encontrar as soluções no intervalo -10 … x … 10, digite:

O MuPAD não é capaz de encontrar uma solução exata sempre. Nesses casos, o
MuPAD simplesmente exibe o comando. Você pode utilizar a função float para forçar
o MuPAD a produzir uma solução numérica. Por exemplo:

Você também pode resolver desigualdades. Por exemplo, a desigualdade


x2 + 3x 7 4 tem as soluções nos intervalos -q 6 x 6 -4 e 1 6 x 6 q.

Você pode instruir o MuPAD a fazer considerações acerca do problema. Por


exemplo, a equação quadrática ax2 + bx + c = 0 apresenta os seguintes tipos de solu-
ções, dependendo dos valores dos coeficientes:

1. se a ⬆ 0

2. se a = 0 e b ⬆ 0
Capítulo 11 ■ MuPAD 481

3. Não há solução se a = b = 0, mas c ⬆ 0.


4. Há um número infinito de soluções se a = b = c = 0.
Você pode eliminar os últimos três casos dizendo ao MuPAD para considerar que
a ⬆ 0 da seguinte maneira:

que é equivalente à solução dada anteriormente. Você pode dar menos atenção às con-
siderações acerca de a para soluções posteriores digitando unassume(a): na caixa de
entrada. Não se esqueça de apagar as variáveis se você pretende reutilizar seus nomes.
Os nomes x e y são muito utilizados, portanto, você deve apagá-los antes de continuar.

Numeric
Ao selecionar Numeric a partir do menu solve, a função numeric::solve(#) é inserida
na caixa de entrada. Os resultados são retornados como números em ponto flutuante.

Note que o MuPAD pode não conseguir resolver alguma equação não linear
dada. Nesse caso, você deve utilizar o solucionador numérico. Porém, em contraste
com as equações polinomiais, o solucionador numérico calcula no máximo uma solu-
ção de uma equação não polinomial.

Às vezes, podemos direcionar a busca por uma solução. Suponha que estejamos inte-
ressados apenas em uma solução na faixa 0 … x … 10. A sessão é:

Conjuntos de equações
A função solve é capaz de resolver conjuntos de equações. As soluções podem ser
expressas como um conjunto de substituições ou como vetores. Por exemplo, para
resolver o conjunto x + 2y =1, 3x + 7y = 5, você deve digitar:

ou
482 Introdução ao MATLAB para Engenheiros

Considere outro exemplo:

Nesse caso, há dois parâmetros simbólicos a e b, por isso precisamos especi-


ficar os símbolos que representam as variáveis a serem encontradas (no caso, x e y).
A solução é incorreta se a = - 1, e a opção IgnoreSpecialCases diz ao MuPAD para
ignorar essa possibilidade.
A função solve também é capaz de lidar com conjuntos de equações não linea-
res. Por exemplo:

Teste seus conhecimentos


T11.3-1 Utilize o MuPAD para resolver a equação = x. (Resposta:
x=
T11.3-2 Utilize o MuPAD para resolver o conjunto de equações
x + 6y = a, 2x - 3y = 9 em termos do parâmetro a. (Resposta:
x = (a + 18)/5, y = (2a - 9)/15)

Eis uma aplicação um pouco mais complicada.

EXEMPLO 11.3-1 Interseção de dois círculos

Desejamos encontrar os pontos de interseção entre dois círculos. O primeiro círculo tem
um raio igual a 2 e está centrado em x = 3, y = 5. O segundo círculo tem um raio igual a b
e está centrado em x = 5, y = 3. Veja a Figura 11.3-1.
(a) Encontre as coordenadas (x, y) dos pontos de interseção em termos do parâmetro b.
(b) Avalie a solução para o caso em que

2
5

3 b

x
3 5
FIGURA 11.3-1 Pontos de interseção entre dois círculos.
Capítulo 11 ■ MuPAD 483

■ Solução
(a) Os pontos de interseção são encontrados a partir das soluções das duas equações para
os círculos. Essas equações são
(x - 3)2 + (y - 5)2 = 4
para o primeiro círculo, e
(x - 5)2 + (y - 3)2 = b2
A sessão para resolver essas equações é a seguinte:

Essas são as coordenadas x e y dos dois pontos de interseção.


(b) Continue a sessão acima substituindo b = na expressão para x.

Há dois pares de coordenadas para os dois pontos de interseção se

Teste seus conhecimentos


T11.3-3 Encontre as coordenadas x e y dos dois pontos de interseção no Exemplo
11.3-1 utilizando (Resposta: x = 4,986, y = 5,236; x = 2,764,
y = 3,014)
T11.3-4 Obtenha a solução exata para x a partir das seguintes equações:

(Resposta:
484 Introdução ao MATLAB para Engenheiros

EXEMPLO 11.3-2 Posicionando um manipulador robótico

A Figura 11.3-2 mostra um manipulador robótico com duas articulações e dois elos. Os
ângulos de rotação dos motores das articulações são 1 e 2. A partir da trigonometria,
podemos derivar as seguintes expressões para as coordenadas (x, y) da mão.
x = L1 cos 1 + L2 cos(1 + 2)
y = L1 sen 1 + L2 sen(1 + 2)
Suponha que os tamanhos dos elos sejam L1 = 4 ft e L2 = 3 ft.
Calcule os ângulos dos motores necessários para posicionar a mão em x = 6 ft,
y = 2 ft.
■ Solução
Substituindo os valores dados de L1, L2, x e y nas equações acima, obtemos:
6 = 4 cos 1 + 3 cos(1 + 2)
2 = 4 sen 1 + 3 sen(1 + 2)
A sessão a seguir resolve essas equações. As variáveis th1 e th2 representam 1 e 2.

Assim, a solução em graus é 1 = -3,2981o e 2 = 51,3178o.


y

Mão

L2 2

L1
Motor do cotovelo
1
x
Base motor
FIGURA 11.3-2 Um manipulador robótico com duas articulações e dois elos.

Ao selecionar Linear System a partir do menu Solve, a função linsolve(#) é


inserida na caixa de entrada. Essa função resolve conjuntos de equações lineares nu-
mericamente em vez de simbolicamente.
Capítulo 11 ■ MuPAD 485

Equações diofantinas polinomiais


O próximo item no menu Solve é Polynomial Diophantine Equation, que insere a
função solvelib::pdioe(#, #) na caixa de entrada. As soluções dessas equações estão
restritas a polinômios. Um tipo importante dessa classe tem a forma
au + by = c
em que a, b e c são funções polinomiais de x, e u e v são as incógnitas. Esse tipo de
equação pode ser resolvido com a função solve::pdioe(a,b,c,x), por exemplo:
(x2 + 1)u + (x3 + 1)y = 2x
A solução é encontrada da seguinte maneira:

Assim, uma solução é u = -x2 + x + 1 e v = x - 1. Equações diofantinas po-


linomiais não apresentam uma única solução. Quaisquer múltiplos wab podem ser
utilizados para transformar u e v em outra solução u1, v1, em que u1 = u + wb e
y1 = y - wa. Por exemplo, a escolha w = -1 conduz à solução u1 = - x3 - x2 + x, y1
= x2 + x.

Relações de recorrência
Um exemplo de uma relação de recorrência, às vezes chamada de equação de dife-
renças, é:
y(n + 2) - 2y(n + 1) + y(n) = 5
Essas equações podem ser resolvidas utilizando-se o item Recurrences no menu Sol-
ve. Por exemplo, com as condições iniciais dadas y(0) = 0, y(1) = 1:

Assim, a solução é:

O último item do menu Solve é ODE, que é um solucionador de equações dife-


renciais ordinárias. Ele será discutido na Seção 11.6.

Problemas de otimização
Há outros solucionadores que lidam com conjuntos de desigualdades lineares, em vez
de lidar com equações lineares. Uma classe desse tipo de problema é a programação
486 Introdução ao MATLAB para Engenheiros

linear. Em um problema de programação linear, você precisa encontrar os valores de


um conjunto de n variáveis x1, x2, ..., xn necessários para maximizar ou minimizar uma
função J(x1, x2, ..., xn) sujeita a um conjunto de igualdades ou desigualdades que são
funções lineares das variáveis x1, x2, ..., xn. Esses problemas têm encontrado uma ampla
gama de aplicações na indústria, incluindo otimização de horários de voo e de muitos
tipos de problemas de produção. Eles podem ser resolvidos utilizando-se as funções na
biblioteca linopt.
Um exemplo desse problema é apresentado a seguir. Suponha que queiramos
encontrar os valores de x, y e z que maximizem a função
J = -x + y + 2z
sujeita às restrições
3x + 4y - 3z … 20
6x - 4y - 3z = 10
7x + 4y + 11z … 30
No MuPAD, devemos digitar:

A resposta fornece os valores de x, y e z que maximizam a função J sujeita a três


restrições. O máximo valor possível de J é 20/87.
Às vezes precisamos especificar restrições que não são imediatamente óbvias. Por
exemplo, o Exemplo 8.3-4, Planejamento da Produção, apresenta as equações de restrição
5x + 3y + 3z = 40
3x + 3y + 4z = 30
em que x, y e z são o número de toneladas de cada produto a serem produzidas por
semana. O lucro a ser maximizado é:
P = 400x + 600y + 100z
Sem restrições adicionais, o solucionador pode fornecer valores fisicamente irreais.
Nesse caso, x, y e z não podem ser negativos, portanto, devemos acionar essas três
restrições adicionais. A sessão é:
Capítulo 11 ■ MuPAD 487

O lucro máximo é de $5000.


Funções podem ser minimizadas com a função linopt::minimize(J). A biblio-
teca linopt contém muito mais funções que são úteis para problemas de programação
linear.

11.4 Álgebra linear


A biblioteca linalg contém mais de 40 funções que lidam com álgebra linear.
Digite info(linalg) para ver a lista. Nesta seção, utilizaremos apenas algumas de-
las. Um lembrete: funções de bibliotecas também podem ser chamadas pela sua
notação curta se você exportá-las primeiro utilizando a função use, por exemplo,
use(linalg). Após a exportação, você pode digitar charpoly em vez da forma lon-
ga linalg::charpoly, por exemplo. Para evitar confusão sobre se alguma função já
foi exportada ou não, utilizaremos sempre a forma longa.

Operações matriciais
Em álgebra linear, lida-se com matrizes. A maneira mais fácil de se criar uma matriz
é por meio da função matrix, que está na biblioteca Standard. Por exemplo:

Note que o MuPAD envolve as matrizes com um par de parênteses, ao passo que
colchetes são utilizados no MATLAB e na maior parte da literatura técnica. Você pode
adicionar, subtrair, multiplicar ou dividir matrizes utilizando operadores aritméticos pa-
drão. Adicionar (ou subtrair) um escalar tem o efeito de adicioná-lo a (ou de subtraí-lo
de) todos os elementos da diagonal em um arranjo. Note que isso é diferente em relação
ao MATLAB, em que o escalar é adicionado a (ou subtraído de) todos os elementos.

O determinante e o posto são calculados da seguinte maneira:


488 Introdução ao MATLAB para Engenheiros

Os elementos de uma matriz podem ser acessados por meio do operador [ ]:

Você pode multiplicar matrizes:

Você pode criar matrizes simbólicas:

Crie uma matriz diagonal da seguinte maneira:

Considere a matriz de rotação R(a) para o sistema de coordenadas rotacionado


de um ângulo a:

Uma propriedade de rotações de coordenadas diz que se nós rotacionarmos o sistema


de coordenadas duas vezes de um mesmo ângulo para produzir um terceiro sistema
de coordenadas, o resultado será o mesmo que o de uma única rotação de duas vezes
o ângulo. Assim, R(a) R(a) deve ser igual a R(2a). Verifiquemos isso com o MuPAD
da seguinte maneira:

que é o mesmo que R(2a):

Para avaliar uma matriz simbólica numericamente, utilize as funções float e subs:
Capítulo 11 ■ MuPAD 489

Note que essa operação não alterou a matriz simbólica R.


Uma rotação na direção negativa é representada por R(-a), que é igual à inversa
de R(a). A inversa de uma matriz pode ser encontrada a partir do seu recíproco 1/A
ou a partir da função inverse, que se encontra na biblioteca Standard. Você obterá a
mensagem FAIL se a matriz não for invertível.

Isso é igual a R(-a), como pode ser verificado digitando-se simplify(subs(R,a = - a)).

Polinômio característico, autovalores e autovetores


A função linalg::charpoly(A, x) calcula o polinômio característico da matriz A. Uti-
lizando a matriz A criada anteriormente, temos:

Os autovalores são as raízes do polinômio característico e podem ser encontra-


dos da seguinte maneira:

Se você não precisa do polinômio característico, pode calcular os autovalores


de A diretamente com a função linalg::eigenvalues(A). Essa função fornece a solu-
ção exata para os autovalores. Isso pode não ser possível para matrizes grandes; nesse
caso, você pode utilizar a função numeric::eigenvalues(A).
A função linalg::eigenvectors(A) calcula os autovalores e os autovetores da
matriz. Essa função retorna uma lista de sublistas; cada sublista consiste em um auto-
valor de A, sua multiplicidade algébrica e um vetor base, que é um autovetor normali-
zado de tal maneira que o seu último elemento seja 1. Se um vetor base não puder ser
calculado, aparecerá a mensagem FAIL. Por exemplo:

Solução matricial de equações lineares


A função linalg::matlinsolve(A, b) calcula a solução geral da equação Ax = b, em
que A é uma matriz m * n, b é um vetor m * 1 e a solução x é um vetor n * 1. Consi-
dere o seguinte conjunto:
2x + y = 11
3x - 5y = -16
490 Introdução ao MATLAB para Engenheiros

Ele pode ser resolvido da seguinte maneira:

Esse conjunto tem uma solução única x = 3, y = 5, enquanto o conjunto


2x + 3y = 14
4x + 6y = 10
não tem solução. Isso é indicado por um resultado igual a um par de colchetes vazio.

Para esse conjunto de equações, o posto de A é igual a 1, que é menor que o posto da
matriz [A, b], a qual é criada digitando-se A.b. Desse modo, não há solução. Esses
postos podem ser calculados da seguinte maneira:

Veja o Capítulo 8 para uma discussão da existência e da unicidade de soluções de


equações algébricas lineares.
Agora considere o seguinte conjunto, que tem a mesma matriz A mas um núme-
ro infinito de soluções, x = 7 - 3y/2:
2x + 3y = 14
4x + 6y = 28
A sessão no MuPAD é:
Capítulo 11 ■ MuPAD 491

Uma vez que o posto de A é igual ao posto de [A,b], mas é menor que o número de
equações, há um número infinito de soluções. O MuPAD expressa esse fato indireta-
mente na forma vetorial. O primeiro vetor na solução, (7, 0), diz que a solução do con-
junto é y = 0 e x = 7. O segundo vetor (-3/2, 1) envolvido por colchetes pode ser visto
como um autovetor que expressa a inclinação de x versus y na solução x = 7 - 3y/2.
Conjuntos de equações podem ser resolvidos simbolicamente. Considere o
conjunto:
2x + ay = 1
3x - 6y = 3
Ele pode ser resolvido da seguinte maneira:

Utilize a função numeric::matlinsolve para resolver um sistema linear nume-


ricamente.

Teste seus conhecimentos


T11.4-1 Considere três rotações de coordenadas sucessivas utilizando o mesmo
ângulo a. Mostre que o produto RRR da matriz de rotação R(a) é igual a
R(3a).
T11.4-2 Encontre o polinômio característico e as raízes da seguinte matriz:

(Respostas: s2 + 7s + 10 + 3k e s = (-7 ± )/2)


T11.4-3 Utilize a inversão de matriz e a função matlinsolve para resolver o seguinte
conjunto:

(Resposta: x = 5, y = 3)

11.5 Cálculo
No Capítulo 9, discutimos técnicas para a realização de diferenciação numérica e de
integração numérica; esta seção aborda a diferenciação e a integração de expressões
simbólicas para a obtenção de resultados em forma fechada para derivadas e integrais.
492 Introdução ao MATLAB para Engenheiros

Diferenciação
A função diff(f,x) é utilizada para se obter a derivada ordinária simbólica da expres-
são f em relação a x. Apesar de essa função ter o mesmo nome da função utilizada
para se calcular diferenças numéricas (ver Capítulo 9), o MuPAD utiliza a forma
simbólica. O operador diferencial D(f), abreviado como f’, calcula a derivada da fun-
ção univariada f. O operador D é utilizado para funções, não expressões. Nós não o
utilizaremos aqui.
Por exemplo, as derivadas

são obtidas com a seguinte sessão:

Quando houver mais do que uma variável, a função diff calculará a derivada
parcial. Por exemplo, se
f(x, y) = sen(xy)
então

A sessão correspondente é:
Capítulo 11 ■ MuPAD 493

Derivadas de ordem superior podem ser obtidas pela aplicação sucessiva do


comando diff. Por exemplo:

Uma forma mais compacta é:

A segunda derivada parcial mista pode ser calculada da seguinte maneira:

Problemas max-min
A derivada pode ser utilizada para se encontrar o máximo ou o mínimo de uma fun-
ção contínua, digamos f(x), ao longo de um intervalo a … x … b. O máximo local ou
o mínimo local (que não ocorra em um dos extremos x = a ou x = b) pode ocorrer
apenas em um ponto crítico, que é um ponto em que df/dx = 0 ou df/dx não existe.
Se d2f/dx2 7 0, o ponto é um mínimo relativo; se d2f/dx2 6 0, o ponto é um máximo
relativo. Se d2f/dx2 = 0, o ponto não é um máximo nem um mínimo, mas é um ponto
de inflexão. Se existirem múltiplos candidatos, você deve avaliar a função em cada
ponto para determinar o máximo global e o mínimo global.

EXEMPLO 11.5-1 Sobrepujando o Green Monster

O ‘Green Monster’ é uma parede de 37 ft de altura no campo esquerdo do Fenway Park,


em Boston. A parede se estende por 310 ft do home plate até a linha do campo esquerdo.
Supondo que o batedor acerte a bola 4 ft acima do solo, e desprezando a resistência do ar,
determine a velocidade mínima que o batedor deve imprimir à bola a fim de atirá-la para
além do Green Monster. Além disso, encontre o ângulo em que a bola deve ser atingida
(ver Figura 11.5-1).
■ Solução
As equações de movimento para um projétil arremessado com uma velocidade y0 e com
um ângulo  em relação à horizontal são

em que x = 0, y = 0 é a localização da bola quando ela é atingida. Como não estamos inte-
ressados no tempo da trajetória nesse problema, podemos eliminar t e obter uma equação
para y em termos de x. Para fazer isso, resolva a equação x para t e substitua-a na equação
y para obter
494 Introdução ao MATLAB para Engenheiros

100

90

80

70

60
Altura y (ft)

50

40

30
Green
20 Monster

10

0
0 50 100 150 200 250 300 350
Distância x (ft)
FIGURA 11.5-1 A trajetória de uma bola de baseball que supera o Green Monster.

(Você poder utilizar o MuPAD para realizar essa álgebra, se desejar. Utilizaremos o Mu-
PAD para realizar a tarefa mais difícil a seguir.)
Uma vez que a bola é atingida 4 ft acima do solo, a bola deve subir 37 - 4 = 33 ft
para superar a parede. Seja h a altura relativa da parede (33 ft), e d a distância até a parede
(310 ft). Utilize g = 32,2 ft/s2. Quando x = d, y = h. Assim, a equação anterior se transfor-
ma em

que pode ser facilmente resolvida para y02:

Uma vez que y0 7 0, minimizar y02 é equivalente a minimizar y0. Note também que gd2/2 é
um fator multiplicativo na expressão para y02. Assim, o valor de minimização de  é inde-
pendente de g e pode ser encontrando minimizando-se esta função:

A sessão para fazer isso é mostrada a seguir. A variável th representa o ângulo  do vetor
velocidade da bola em relação à horizontal. O primeiro passo é calcular a derivada df/d e
resolver a equação df/d = 0 para . Sabemos que  deve ser menor do que /2 L 1,57 rad.
Capítulo 11 ■ MuPAD 495

Portanto, a solução candidata é  = 0,8384 rad, ou algo em torno de 48°. Para verificar que
essa solução é um mínimo, e não um máximo ou um ponto de inflexão, podemos verificar a
derivada segunda d2f/d2. Se essa derivada for positiva, a solução representa um mínimo. Para
verificar isso e para encontrar a velocidade desejada, continue a sessão da seguinte maneira:

Desse modo, a derivada segunda é positiva, e a solução representa o mínimo. Para


encontrar a velocidade desejada, continue a sessão da seguinte maneira:

Assim, a velocidade mínima desejada é de 105 ft/s, ou algo em torno de 72 mph. Um


golpe com essa velocidade na bola sobrepujará a parede apenas se o ângulo for de apro-
ximadamente 48°.

Teste seus conhecimentos


T11.5-1 Dado que y = senh(3x) cosh(5x), utilize o MuPAD para encontrar dy/dx em
x = 0,2. (Resposta: 9,2288)
T11.5-2 Dado que z =5 cos(2x) ln(4y), utilize o MuPAD para encontrar 0z/0y. (Res-
posta: 5 cos(2x)/y)

Integração
A função int(f,x) é utilizar para se integrar uma expressão simbólica f em relação a x.
É possível que a integral não exista em uma forma fechada, ou que o MuPAD não seja
capaz de encontrá-la mesmo que ela exista. Por exemplo, você pode obter as seguin-
tes integrais com a sessão mostrada a seguir:
496 Introdução ao MATLAB para Engenheiros

Se não tivéssemos forçado o MuPAD a considerar que n ⬆ -1, ele também nos teria
dado a segunda solução, ln x.
Integrais definidas podem ser calculadas definindo-se os limites após o inte-
grando. Por exemplo, a integral

é calculada da seguinte maneira:

A sessão a seguir apresenta um exemplo para o qual nenhuma integral pode ser
encontrada. As integrais indefinidas existem, mas a integral definida não existe se os
limites de integração incluírem a singularidade em x = 1. A integral é:

A sessão é:

Teste seus conhecimentos


T11.5-3 Dado que y = x sen(3x), utilize o MuPAD para encontrar ∫ ydx. (Resposta:
(sen(3x) - 3x cos(3x))/9)
T11.5-4 Dado que z = 6y2 tan(8x), utilize o MuPAD para encontrar ∫ zdy. (Resposta:
2y3 tan(8x))
Capítulo 11 ■ MuPAD 497

T11.5-5 Utilize o MuPAD para avaliar:

(Resposta: 0,6672)

Série de Taylor
A função taylor(f,x=a,n) produz os primeiros n - 1 termos da série de Taylor para a
função definida na expressão f, avaliada no ponto x = a. O parâmetro n é opcional. Se
o parâmetro a for omitido, a função retorna a série avaliada em x = 0. Alguns exem-
plos comuns de séries de Taylor são:

em que a = 0 em ambos os exemplos.


Aqui estão alguns exemplos:

Uma aproximação linear para ex em torno do ponto x = 2 é encontrada da se-


guinte maneira:

A última expressão corresponde a


ex L e2 [1 + (x - 2)] para x L 2
498 Introdução ao MATLAB para Engenheiros

Somatórios
A função sum(f,k ⴝ a..b) retorna a soma da expressão f conforme a variável simbó-
lica varia de a até b. Seguem alguns exemplos. Os somatórios

são dados por

Limites
A função limit(f, x ⴝ a) retorna o limite

Por exemplo, os limites

são encontrados a partir de:


Capítulo 11 ■ MuPAD 499

As formas limit(f, x = a, Left) e limit(f, x = a, Right) especificam a direção do


limite. Por exemplo,

são dados por

Teste seus conhecimentos


T11.5-6 Utilize o MupAD para encontrar os três primeiros termos não nulos da sé-
rie de Taylor para cos x.
(Resposta: 1 - x2/2 + x4/24)
T11.5.7 Utilize o MuPAD para encontrar uma fórmula para o somatório

(Resposta: m4/4 - m3/2 + m2/4)


T11.5-8 Utilize o MuPAD para avaliar

(Resposta: 0)
T11.5-9 Utilize o MuPAD para avaliar

(Resposta: 2/75)

11.6 Equações diferenciais ordinárias


Os métodos de se obter a solução de problemas em diferenciação, integração e equa-
ções diferenciais foram abordados no Capítulo 9. Entretanto, é preferível que se ob-
tenha uma solução analítica sempre que possível, já que ela é mais geral e, portanto,
mais útil para o projeto de dispositivos ou processos em engenharia.
500 Introdução ao MATLAB para Engenheiros

O MuPAD fornece as funções ode e solve para a solução de equações diferen-


ciais em forma fechada. Essas funções são diferentes dos solucionadores numéricos
de EDOs do MATLAB (tais como ode45 e o solucionador simbólico dsolve no
toolbox de Matemática Simbólica).
A sintaxe das funções ode e solve do MuPAD varia um pouco se elas forem utili-
zadas para resolver equações únicas ou conjuntos de equações, e se as condições de con-
torno forem especificadas. O MuPAD também fornece a função numeric::solve para a
resolução numérica de equações diferenciais, mas não abordaremos esse tópico porque
os solucionadores do tipo ode no MATLAB são suficientes para os nossos propósitos.

Resolvendo uma única equação diferencial


A função ode do MuPAD é utilizada para descrever a equação e suas condições de con-
torno, se houver, mas ela não resolve a equação. A função solve é então utilizada para
resolver o problema. As constantes arbitrárias na solução são indicadas por C1, C2, e
assim por diante. O número dessas constantes é igual à ordem da equação. Derivadas
são indicadas por plicas, qualquer que seja a variável independente. Por exemplo:

e assim por diante.


Por exemplo, a equação

(11.6-1)

tem a solução
y(t) = 6 + C1e-2t
A solução pode ser encontrada com a sessão a seguir. Damos à equação o nome ar-
bitrário eqn e dizemos ao MuPAD que a variável independente é t e que a variável
dependente é y(t). Se o sinal de dois pontos não for utilizado após o comando, o Mu-
PAD exibirá a equação.

Esta é a solução correta, apesar de ser expressa em uma forma menos convencional.
Suponha que a condição inicial seja y(0) = 5. A solução é encontrada da seguin-
te maneira:

Note como as chaves são utilizadas para agrupar a equação e a condição inicial.
Capítulo 11 ■ MuPAD 501

Você não precisa utilizar t como a variável independente ou y como a variável


dependente. Poderíamos simplesmente expressar a Equação (11.-6-1) da seguinte
maneira:

A sessão do MuPAD seria:

Pode haver constantes simbólicas na equação e nas condições de contorno, en-


tretanto, quanto mais complicada for a equação, mais complicada será a solução, ao
ponto de não ser nem útil. Aqui está um exemplo de segunda ordem:

A sessão é:

A solução é y(t) = C1e-ct + C2ect.


Com as condições iniciais y(0) = 1, y’(0) = 0, a sessão é:

A solução dada pelo MuPAD é y(t) = 1 se c = 0 e

se c ⬆ 0.
Aqui está um exemplo com uma função forçante:

A sessão é:
502 Introdução ao MATLAB para Engenheiros

A solução é:

Condições de contorno gerais também podem ser especificadas. Por exemplo,


considere o problema:

A sessão para encontrar a solução e plotá-la é:

Desse modo, a solução é:

Se uma plotagem da solução for requerida, então é melhor utilizar a poderosa função
plot do MATLAB.
Equações de ordem superior também podem ser resolvidas. Considere, por
exemplo,

com as condições iniciais y(0) = 1 e

A sessão é:

A solução é:
Capítulo 11 ■ MuPAD 503

Resolvendo conjuntos de equações


Conjuntos de equações podem ser resolvidos com a função solve. Utilize um par de
colchetes para indicar os conjuntos de equações e outro par de colchetes para indicar
as variáveis dependentes. Por exemplo, considere o conjunto:

A sessão no MuPAD é:

Assim, a solução é:
y(t) = -C1e3t cos 4t - C2e3t sen 4t
x(t) = C2e3t cos 4t - C1e3t sen 4t
Note que o MuPAD primeiro exibe a solução para a segunda variável y(t).
Conjuntos de equações com condições de contorno especificadas podem ser
resolvidos da maneira a seguir. Por exemplo, considere o conjunto de equações dado,
com as condições iniciais x(0) = 0, y(0) = 1. A sessão é:

Note que quando as condições de contorno são especificadas, chaves são utilizadas
em vez de colchetes para agrupar as equações e as condições de contorno.

Resolvendo equações não lineares


O MuPAD pode solucionar algumas equações diferenciais não lineares. Por exemplo,
o problema

(11.6-2)

pode ser resolvido com a seguinte sessão:


504 Introdução ao MATLAB para Engenheiros

Desse modo, a solução é:

Nem todas as equações não lineares podem ser resolvidas em uma forma fecha-
da. Um exemplo é a seguinte equação, que é a equação de movimento de um pêndulo:
L’’+ g sen  = 0. Se você tentar resolver essa equação no MuPAD, o resultado será
expresso em termos de integrais que precisarão ser avaliadas numericamente.

Teste seus conhecimentos


T11.6-1 Utilize o MuPAD para resolver o problema

para a 7 0. Verifique a resposta à mão ou com o MuPAD. (Resposta:

11.7 Transformadas de Laplace


A transformada de Laplace [y(t)] de uma função y(t) é definida como

(11.7-1)

e pode ser obtida no MuPAD digitando-se transform::laplace(y,t,s), em que y é a


função de t. O resultado é uma função de s. O comando laplace está na biblioteca
Transform, que também contém a transformada de Fourier e a transformada z.
Aqui está uma sessão do MuPAD com alguns exemplos. As funções são t3, e-bt
e sen bt.

A transformada de Laplace inversa -1[Y(s)] é aquela função do tempo y(t)


cuja transformada é Y(s), isto é, y(t) = -1[Y(s)]. Transformadas inversas podem ser
Capítulo 11 ■ MuPAD 505

encontradas utilizando-se a função transform::invlaplace(Y,s,t). Note a ordem in-


vertida de s e t. Por exemplo:

Dependendo de quais cálculos precederam o comando no caderno, você pode


obter respostas diferentes, mas ainda assim corretas. Por exemplo, algumas vezes,
mas não sempre, você obterá uma resposta não reduzida como a seguinte:

Isso ocorre porque o MuPAD considera a possibilidade de b ser negativo. Note


que o MuPAD não reduz a b. Se b 7 0, você pode evitar isso digitando:

Uma vez que a transformada é uma integral, ela apresenta as propriedades das
integrais. Em particular, ela apresenta a propriedade de linearidade, a qual estabelece
que, se a e b não forem funções de t, então:
(11.7-2)
As transformadas das derivadas são úteis na solução de equações diferenciais.
Aplicando a integração por partes à definição da transformada, obtemos:

(11.7-3)
Esse procedimento pode ser estendido para derivadas de ordem superior. Por exem-
plo, o resultado para a derivada segunda é:

(11.7-4)

O resultado geral para a derivada de qualquer ordem é:

(11.7-5)

em que

(11.7-6)
506 Introdução ao MATLAB para Engenheiros

Aplicação a equações diferenciais


As propriedades de diferenciação e de linearidade podem ser utilizadas para se resol-
ver equações como:
(11.7-7)
A aplicação da transformada produz:

(11.7-8)

A resposta livre é dada por:

A resposta forçada é dada por:

(11.7-9)

Ela não pode ser avaliada até que V(s) seja especificado.
Suponha que v(t) seja uma função degrau unitário, a qual é também chamada
de função de Heaviside. No MuPAD ela é chamada pelo comando heaviside(t). Por
exemplo:

Assim, a transformada da função degrau unitário é 1/s, ou seja, V(s) = 1/s. Desse
modo, a equação (11.7-9) se torna:

Para encontrar a transformada inversa, que é y(t), insira:

que pode ser expressa como b(1 - e-t/a). Essa é a resposta forçada a uma entrada em
degrau unitário.
Considere o seguinte modelo de segunda ordem:
(11.7-10)
A aplicação da transformada a essa equação resulta em:
Capítulo 11 ■ MuPAD 507

Resolvendo para X(s), temos:

A resposta livre é obtida a partir de:

Suponha que as condições iniciais sejam x(0) = 2 e (0) = 3. Então, a resposta livre é
obtida a partir de:

(11.7-11)

Ela pode ser encontrada no MuPAD digitando-se:

Portanto, a resposta livre é:


x(t) = 2e-t + 5te-t
A resposta forçada é obtida a partir de:

Se f(t) for uma função degrau unitário, F(s) = 1/s, e a resposta forçada é:

Para encontrar a resposta forçada, insira:

Portanto, a resposta forçada é:


x(t) = 1 - te-t - e-t (11.7-12)
Derivadas de entradas
Dois sistemas mecânicos similares são mostrados na Figura 11.7-1. Em ambos os
casos a entrada é um deslocamento y(t). Suas equações de movimento são:
(11.7-13)

(11.7-14)
508 Introdução ao MATLAB para Engenheiros

y x x

k y
k c
m m

c
(a) (b)
FIGURA 11.7-1 Dois sistemas mecânicos. O modelo para (a) contém a derivada da entrada y(t);
o modelo para (b) não contém essa derivada.

A única diferença entre esses sistemas é que o sistema na Figura 11.7-1a é descrito
por uma equação de movimento que contém a derivada da função de entrada y(t).
Ambos os sistemas são exemplos da equação diferencial mais geral
(11.7-15)
Agora, demonstraremos como utilizar a transformada de Laplace para encon-
trar a resposta ao degrau de equações diferenciais que contêm derivadas da entrada.
Suponha que as condições iniciais sejam nulas. Então, a aplicação da transformada à
Equação (11.7-15) resulta em:

(11.7-16)

Comparemos a resposta ao degrau unitário da Equação (11.7-16) para os dois


casos utilizando os valores m = 1, c = 2 e k = d = 1, com condições iniciais nulas. Os
dois casos são g = 0 e g = 5.
Com Y(s) = 1/s, a Equação (11.7-16) se torna:

(11-7-17)

A resposta para o caso g = 0 foi encontrada anteriormente na Equação (11.7-14). A


resposta para g = 5 é encontrada digitando-se

ou
x(t) = 4te-t - e-t + 1
As duas respostas estão plotadas na Figura 11.7-2. O efeito de se diferenciar a
entrada é um aumento no valor de pico da resposta.
Capítulo 11 ■ MuPAD 509

2,5

g5
2

1,5
x

g0
0,5

0
0 1 2 3 4 5 6 7
t
FIGURA 11.7-2 A resposta ao degrau do modelo para g = 0 e g = 5.

Expansões em frações parciais são úteis para lidar com transformadas de Lapla-
ce inversas e também em outras aplicações. A função partfrac(f,x) cria a expansão
em frações parciais da expressão f(s) em termos de sua variável s.

Teste seus conhecimentos


T11.7-1 Encontre a transformada de Laplace das funções 1 - e-at e cos bt. Utilize a
função ilaplace para verificar suas respostas.
T11.7-2 Utilize a transformada de Laplace para resolver o problema
, em que u(t) é a função degrau unitário e
y(0) = 5, (0) = 1. (Resposta: y(t) = - 1,6e-3t + 4,6e-t + 2)

11.8 Funções especiais


Equações diferenciais que não apresentam solução em forma fechada podem ser resol-
vidas em termos de funções especiais. Muitas dessas equações diferenciais ordinárias
510 Introdução ao MATLAB para Engenheiros

surgem na solução de equações diferenciais parciais. Exemplos incluem os polinô-


mios de Chebyshev de primeiro tipo T(n,x), os polinômios de Hermite Hn(x) e alguns
tipos de funções de Bessel. Outros exemplos são as funções de Airy Ai(x) e Bi(x), que
são as duas soluções independentes para a equação de Airy y- xy = 0. A Tabela 11.8-1
lista algumas das funções especiais disponíveis no MuPAD.
Considere um caso específico da equação de Legendre (1-x2)y-xy+ 6y = 0
com as condições iniciais y(0) = 1, y(0) = 0. Ela pode ser resolvida no MuPAD com
a seguinte sessão:

O resultado é um polinômio finito de grau 2.


A equação de Airy y-xy = 0 com as mesmas condições iniciais pode ser resol-
vida com a seguinte sessão:

em que (x) é outra função especial chamada de função gama. A função gama é ava-
liada digitando-se gamma(x). A Tabela 11.8-2 mostra que a função float é utilizada
para avaliar funções especiais numericamente. Por exemplo:

TABELA 11.8-1 Chamadas de funções especiais no MuPAD


Nome e símbolo Chamada da função
Airy, Ai(x) airy Ai(x)
Airy, Bi(x) airy Bi(x)
Chebyshev de primeiro tipo, T(n, x) chebyshev1 (n, x)
Gamma, Γ(x) gamma(x)
Hermite, Hn(x) hermite (n,x)
Bessel I, In(x) besselI(n,x)
Bessel J, Jn(x) besselJ(n,x)
Bessel K, Kn(x) besselK(n,x)
Bessel Y, Yn(x) besselY (n,x)
Laguerre, L(n, a, x) laguerreL(n,a,x)
Legendre, Pn(x) legendre(n,x)
Capítulo 11 ■ MuPAD 511

TABELA 11.8-2 Avaliação de funções especiais no MuPAD


Resultado Código
Séries finitas simbólicas orthpoly::
Séries infinitas simbólicas series
Resultado numérico float

Se uma solução explícita na forma de uma série for preferida, você pode utili-
zar a opção series. Utilizando a equação de Legendre (1-x2)y-2xy+ 12y = 0 como
um exemplo, se ela for resolvida com a função solve, mesmo com condições ini-
ciais simples como y(0) = 1 e y’(0) = 0, o resultado será uma expressão complicada
que é detalhada demais para ser exibida aqui (tente obtê-la você mesmo). Entretanto,
mesmo com condições iniciais arbitrárias, a solução em forma de série não é muito
complicada. A sessão é:

Para avaliar uma função especial simbolicamente como uma série finita, utilize
a opção orthpoly:: ou a função series. O pacote orthpoly fornece alguns polinômios
ortogonais padrão. Chame o pacote de funções utilizando o nome do pacote orthpoly
e o nome da função. Por exemplo, o polinômio de Legendre de quinta ordem é obtido
da seguinte maneira:

Para avaliar simbolicamente uma função especial que consiste em uma série
infinita, utilize a função series. Por exemplo:
512 Introdução ao MATLAB para Engenheiros

Você pode plotar funções especiais como quaisquer outra funções. Por exemplo:

Você pode plotar a solução de uma equação diferencial seguindo esse exemplo
baseado na equação de Airy:

A função op remove as chaves que envolvem a solução obtida pela função solve.

Teste seus conhecimentos


T11.8-1 Resolva a equação de Legendre para as condições iniciais dadas:
(1 - x2)y– - 2xy¿ + 6y = 0 y(0) = 12 y¿(0) = 0
2
(Resposta: y(x) = 12 - 36x )
T11.8-2 Avalie a solução da equação de Airy em x = 3 para as condições iniciais da-
das:
y– - xy = 0 y(0) = 1 y¿(0) = 5
(Resposta: y(3) = 89,6423632)

11.9 Resumo
Este capítulo abordou um subconjunto de recursos do MuPAD. Agora que você fina-
lizou o capítulo, você deve ser capaz de utilizar o MuPAD para:
■ Criar expressões simbólicas e manipulá-las algebricamente.
■ Obter soluções simbólicas para equações algébricas e transcendentais.
■ Realizar diferenciação simbólica e integração simbólica.
■ Avaliar limites e séries simbolicamente.
■ Obter soluções simbólicas para equações diferenciais ordinárias.
■ Obter e aplicar transformadas de Laplace.
■ Realizar operações simbólicas de álgebra linear, incluindo a obtenção de ex-
pressões para determinantes, matrizes inversas, autovetores e autovalores.
■ Avaliar funções especiais da matemática.

Termos-chave
Biblioteca do MuPAD, 478 Região de saída, 465
Operador de atribuição, 470 Região de texto, 465
Região de entrada, 465 Símbolos reservados, 468
Capítulo 11 ■ MuPAD 513

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

Seção 11.2
1. Utilize o MuPAD para provar as seguintes identidades:
a. sen2x + cos2 x = 1
b. sen(x + y) = sen x cosy + cosx seny
c. sen2x = 2 sen x cosx
d. cosh2x - senh2 x = 1
2.* Dois polinômios na variável x são representados pelo vetor de coeficientes
p1 =[6,2,7,-3] e p2 = [10,-5,8].
a. Utilize o MuPAD para encontrar o produto desses dois polinômios e expres-
se-o na sua forma mais simples.
b. Utilize o MuPAD para encontrar o valor numérico do produto se x = 2.
3.* A equação de um círculo de raio r centrado em x = 0, y = 0 é

x2 + y2 = r2
Utilize funções do MuPAD para encontrar a equação de um círculo de raio r
centrado no ponto x = a, y = b. Rearranje a equação na forma Ax2 + Bx + Cxy
+ Dy + Ey2 = F e encontre as expressões para os coeficientes em termos de a,
b e r.

Seção 11.3
4.* A lei dos cossenos para um triângulo estabelece que a2 = b2 + c2 - 2bc cos A,
em que a é o comprimento do lado oposto ao ângulo A, e b e c são os compri-
mentos dos outros lados.
a. Utilize o MuPAD para resolver esta equação para b.
b. Suponha que A = 60o, a = 5 m, c = 2 m. Determine b.
5. Utilize o MuPAD para resolver a equação polinomial x3 + 8x2 + ax + 10 = 0
para x em termos do parâmetro a, e avalie sua solução para o caso a = 17. Uti-
lize o MuPAD para verificar sua resposta.
6.* A equação para uma elipse centrada na origem dos eixos de coordenadas carte-
sianas (x, y) é

em que a e b são constantes que determinam a forma da elipse.


a. Em termos do parâmetro b, utilize o MuPAD para encontrar os pontos de
interseção de duas elipses descritas por
514 Introdução ao MATLAB para Engenheiros

b. Avalie a solução obtida no item a para o caso b = 2.


7. A equação

descreve as coordenadas polares de uma órbita com a origem no Sol. Se  = 0,


a órbita é circular; se 0 6  6 1, a órbita é elíptica. Os planetas descrevem ór-
bitas que são aproximadamente circulares; cometas descrevem órbitas que são
bastante alongadas com  muito próximo de 1. É de interesse óbvio determinar
se a órbita de um cometa ou de um asteroide interceptará a órbita de um plane-
ta. Para cada um dos dois casos seguintes, utilize o MuPAD para determinar se
as órbitas A e B se interceptam. Se sim, determine as coordenadas polares dos
pontos de interseção. A unidade de distância é a UA, em que 1 UA é a distância
média entre a Terra e o Sol.
a. Órbita A: p = 1,  = 0,01. Órbita B: p = 0,1,  = 0,9.
b. Órbita A: p = 1,  = 0,01. Órbita B: p = 1,1,  = 0,5.

Seção 11.4
8. Mostre que R-1(a)R(a) = I, em que I é a matriz identidade e R(a) é a matriz de
rotação. Essa equação mostra que a transformação de coordenadas inversa leva
você de volta ao sistema de coordenadas original.
9. Mostre que R-1(a) = R(-a). Essa equação mostra que uma rotação de um ân-
gulo negativo é equivalente a uma transformação inversa.
10. Encontre o polinômio característico e as raízes da seguinte matriz:

11.* Utilize o método da inversão matricial e o método da divisão matricial para so-
lucionar o seguinte conjunto para x e y em termos de c:

12. As correntes i1, i2 e i3 no circuito mostrado na Figura P12 são descritas pelo
seguinte conjunto de equações se todas as resistências forem iguais a R:
Capítulo 11 ■ MuPAD 515

Nesse caso, v1 e v2 são as tensões aplicadas; as outras duas correntes podem ser
encontrada a partir de i4 = i1 - i2 e i5 = i2 - i3.
a. Utilize tanto o método da inversão matricial quanto o método da divisão ma-
tricial para resolver esse sistema para as correntes em termos da resistência
R e das tensões v1 e v2.
b. Encontre os valores numéricos para as correntes se R = 1000 Æ, v1 = 100 V
e v2 = 25 V.

R1 R2 R3
i1 i2 i3

i4 i5


v1 R4 R5 v2

FIGURA P12

13. As equações para o motor dc controlado por armadura mostrado na Figura P13
são apresentadas abaixo. A corrente do motor é i e sua velocidade de rotação é .

em que L, R e I são a indutância, a resistência e a inércia do motor; KT e Ke são


a constante de torque e a constante de força contra-eletromotriz; c é uma cons-
tante de amortecimento viscoso; e v(t) é a tensão aplicada.
a. Encontre o polinômio característico.

R L
c
i

v Ke I

T KTi

FIGURA P13
516 Introdução ao MATLAB para Engenheiros

b. Utilize os valores R = 0,8 Æ, L = 0,003 H, KT = 0,05 N m/A, Ke = 0,05 V s/rad e


I = 8 * 10-5 kg m2. A constante de amortecimento c muitas vezes é difícil de ser
determinada com precisão. Considerando esses valores, encontre as expressões
para as duas raízes características em termos de c.
c. Utilizando os valores de parâmetros no item b, determine as raízes para os
seguintes valores de c (em N m s): c = 0, c = 0, 01 c = 0,1 e c = 0,2. Para
cada caso, utilize as raízes para estimar quanto tempo será necessário para
que a velocidade do motor se torne constante; discuta também se a velocida-
de oscilará antes de se tornar constante.
14. Resolva a seguinte relação de recorrência para as condições inicias dadas:
y(n + 2) - 0,3y(n + 1) + 0,02y(n) = 10 y(0) = 2 y(1) = 0
15. Resolva o seguinte problema de otimização: minimize

J = x + 3y + 2z
sujeito às restrições

Seção 11.5
16. Utilize o MuPAD para encontrar todos os valores de x em que o gráfico
y = 3x - 2x apresenta uma linha tangente horizontal.
17.* Utilize o MuPAD para determinar todos os mínimos locais e máximos locais e
todos os pontos de inflexão em que dy/dx = 0 da seguinte função:

18. A área da superfície de uma esfera de raio r é S = 4r2. Seu volume é


V = 4r3/3.
a. Utilize o MuPAD para encontrar a expressão para dS/dV.
b. Um balão esférico expande conforme ar é bombeado para dentro dele. Qual
é a taxa de aumento na área da superfície em relação ao volume quando o
volume é igual a 30 in3?
19. Utilize o MuPAD para encontrar o ponto na linha y = 2 - x/3 que é mais próxi-
mo do ponto x = -3, y = 1.
20. Um determinado círculo está centrado na origem e tem raio igual a 5. Utilize
o MuPAD para encontrar a equação da linha que é tangente ao círculo no
ponto x = 3, y = 4.
21. O navio A está viajando para o norte a uma velocidade de 6 mi/h, e o navio
B está viajando para o oeste a uma velocidade de 12 mi/h. Quando o navio A
estava exatamente em frente ao navio B, eles estavam 6 mi distantes entre si.
Utilize o MuPAD para determinar quão perto os navios ficam um do outro.
Capítulo 11 ■ MuPAD 517

22. Suponha que você tenha um fio de comprimento L. Você corta um comprimen-
to x para fazer um quadrado e utiliza o comprimento remanescente L - x para
fazer um círculo. Utilize o MuPAD para encontrar o comprimento x que maxi-
miza a soma das áreas do quadrado e do círculo.
23.* Uma determinada lâmpada esférica de rua emite luz em todas as direções. Ela
está montada sobre um poste de altura h (ver Figura P23). O brilho B no ponto
P é diretamente proporcional a sen  e inversamente proporcional ao quadrado
da distância d entre a luz e o ponto. Assim,

em que c é uma constante. Utilize o MuPAD para determinar a altura h que


maximiza o brilho no ponto P, que está a 30 ft da base do poste.

Luz

d
h

 P

30 ft
FIGURA P23

24*. Um determinado objeto tem massa m = 100 kg e sofre a ação de uma força f(t)
= 500[2 - e-t sen(5t)] N. A massa está em repouso no instante t = 0. Utilize
o MuPAD para calcular a velocidade v do objeto no instante t = 5 s. A equação
de movimento é m = f(t).
25. A massa de um foguete decresce conforme seu combustível é queimado. A
equação de movimento para um foguete em voo vertical pode ser obtida a par-
tir das leis de Newton e é

em que T é a impulsão do foguete, e sua massa, como uma função do tempo, é


dada por m(t) = m0(1 - rt/b). A massa inicial do foguete é m0, o tempo de quei-
ma é b e r é a fração da massa total que corresponde ao combustível. Utilize os
valores T = 48 000 N, m0 = 2200kg, r = 0,8, g = 9,81 m/s2 e b = 40 s.
a. Utilize o MuPAD para calcular a velocidade do foguete como uma função
do tempo pata t … b.
b. Utilize o MuPAD para calcular a velocidade do foguete após a queima com-
pleta do combustível.
518 Introdução ao MATLAB para Engenheiros

26. A equação para a tensão v(t) entre os terminais de um capacitor como uma fun-
ção do tempo é

em que i(t) é a corrente aplicada e Q0 á a carga inicial. Suponha que


C = 10-6 F e que Q0 = 0. Se a corrente aplicada for i(t) = [0,01 + 0,3e-5t
sen(25t)]10-3 A, utilize o MuPAD para obter a tensão v(t).
27. A potência P dissipada como calor em um resistor R como uma função da cor-
rente i(t) que passa por ele é P = i2R. A energia E(t) perdida como uma função
do tempo é a integral da potência em relação ao tempo. Assim,

Se a corrente for medida em amperes, a potência estará em watts e a energia


em joules (1 W = 1 J/s). Suponha que uma corrente i(t) = 0,2[1 + sen(0,2t)] A é
aplicada ao resistor.
a. Determine a energia E(t) dissipada como uma função do tempo.
b. Determine a energia dissipada em 1 minuto se R = 1000 Æ.
28. O circuito RLC mostrado na Figura P28 pode ser utilizado como um filtro de
banda estreita. Se a tensão de entrada vi(t) consistir em uma soma de tensões
que variam senoidalmente com diferentes frequências, o filtro de banda estreita
permitirá que passem apenas aquelas tensões cujas frequências estejam dentro
de uma faixa estreita. O coeficiente de ganho M de um circuito é a razão entre
a amplitude da tensão de saída vo(t) e a amplitude da tensão de entrada vi(t).
Ele é uma função da frequência angular æ da função de entrada. Fórmulas para
M são derivadas em cursos elementares de circuitos elétricos. Para esse circuito
em particular, M é dado por:

C L

vi R vo

FIGURA P28

A frequência em que M é um máximo é a frequência do sinal de portadora de-


sejada. Determine essa frequência como uma função de R, C e L.
Capítulo 11 ■ MuPAD 519

29. A forma de um cabo suspenso sem nenhuma outra carga além do seu próprio
peso é uma curva catenária. Um cabo de uma ponte em particular é descrito
pela catenária y(x) = 10 cosh[(x - 20)/10] para 0 … x … 50, em que x e y são as
coordenadas horizontal e vertical medidas em pés. (Ver Figura P29). Deseja-se
pendurar uma folha plástica desde o cabo até o chão para proteger os transeun-
tes enquanto a ponte está sendo pintada novamente. Utilize o MuPAD para
determinar quantos pés quadrados de folha são necessários. Considere que a
parte inferior da folha esteja localizada ao longo do eixo x em y = 0.

Cabo

Folha plástica
x
Ponte coberta
FIGURA P29

30. A forma de um cabo suspenso sem nenhuma outra carga além do seu próprio
peso é uma curva catenária. Um cabo de uma ponte em particular é descrito
pela catenária y(x) = 10 cosh[(x - 20)/10] para 0 … x … 50, em que x e y são as
coordenadas horizontal e vertical medidas em pés.
O comprimento L de uma curva descrita por y(x) para a … x … b pode ser
encontrado a partir da seguinte integral:

Determine o comprimento do cabo.


31. Utilize os primeiros cinco termos não nulos na série de Taylor para eix, sen x e
cos x em torno de x = 0 para demonstrar a validade da fórmula de Euler eix =
cos x + i sen x.
32. Encontre a série de Taylor para ex sen x em torno de x = 0 de duas maneiras:
a. Multiplicando as séries de Taylor para ex e sen x.
b. Utilizando a função taylor diretamente sobre ex sen x.
33. Integrais que não podem ser avaliadas em uma forma fechada podem, algumas
vezes, ser avaliadas aproximadamente utilizando-se uma representação em
série para o integrando. Por exemplo, a seguinte integral é utilizada para alguns
cálculos de probabilidades (ver Seção 7.2):
520 Introdução ao MATLAB para Engenheiros

2
a. Obtenha a série de Taylor para e-x em torno de x = 0 e integre os primeiros seis
termos não nulos para encontrar I. Utilize o sétimo termo para estimar o erro.
b. Compare sua resposta com aquela obtida com a função erf(t) do MuPAD,
definida como:

34.* Utilize o MuPAD para calcular os seguintes limites:

a.

b.

c.

35. Utilize o MuPAD para calcular os seguintes limites:


a.

b.

c.

d.

e.

f.

36. Utilize o MuPAD para calcular os seguintes limites:

a.

b.

37. Encontre a expressão para a soma da série geométrica

para r ⬆ 1.
Capítulo 11 ■ MuPAD 521

38. Uma determinada bola de borracha quica no chão e sobe até uma altura igual à
metade de sua altura original.
a. Se a bola cair inicialmente a partir de uma altura h e continuar quicando,
encontre a expressão para a distância total percorrida pela bola após ela se
chocar contra o chão pela n-ésima vez.
b. Se a bola cair inicialmente a partir de uma altura de 10 ft, que distância a
bola terá percorrido após quicar no chão pela oitava vez?

Seção 11.6
39. A equação para a tensão y nos terminais do capacitor de um circuito RC é

em que v(t) é a tensão aplicada. Suponha que RC = 0,2 s e que a tensão no ca-
pacitor seja inicialmente igual a 2 V. Se a tensão aplicada variar de 0 para 10 V
em t = 0, utilize o MuPAD para determinar a tensão y(t).
40. A seguinte equação descreve a temperatura T(t) de um determinado objeto
imerso em um banho líquido de temperatura Tb(t):

Suponha que a temperatura do objeto seja inicialmente T(0) = 70oF e que a


temperatura do banho seja 170oF. Utilize o MuPAD para responder as seguin-
tes questões:
a. Determine T(t).
b. Determine quanto tempo será necessário para que a temperatura do objeto T
atinja o valor de 168oF.
41.* Essa equação descreve o movimento de uma massa conectada a uma mola com
atrito viscoso na superfície

em que f(t) é uma força aplicada. A posição e a velocidade da massa em t = 0 são


indicadas por x0 e y0. Utilize o MuPAD para resolver as a seguintes questões:
a. Qual é a resposta livre em termos de x0 e v0 se m = 3, c = 18 e k = 102?
b. Qual é a resposta livre em termos de x0 e v0 se m = 3, c = 39 e k = 120?
42. A equação para a tensão y nos terminais do capacitor de um circuito RC é

em que v(t) é a tensão aplicada. Suponha que RC = 0,2 s e que a tensão no ca-
pacitor seja inicialmente igual a 2 V. Se a tensão aplicada for y(t) = 10[2 - e-t
sen(5t)], utilize o MuPAD para obter a tensão y(t).
522 Introdução ao MATLAB para Engenheiros

43. A seguinte equação descreve um determinado processo de diluição, em que


y(t) é a concentração de sal em um tanque de água doce ao qual é adicionado
salmoura:

Suponha que y(0) = 0. Utilize o MuPAD para obter y(t).


44. Esta equação descreve o movimento de uma determinada massa conectada a
uma mola com atrito viscoso na superfície

em que f(t) é uma força aplicada. Suponha que f(t) = 0 para t 6 0 e f(t) = 10
para t Ú 0.
a. Utilize o MuPAD para obter y(t) se
b. Utilize o MuPAD para obter y(t) se y(0) = 0 e
45. Esta equação descreve o movimento de uma determinada massa conectada a
uma mola com atrito viscoso na superfície

em que f(t) é uma força aplicada. Suponha que f(t) = 0 para t 6 0 e f(t) = 10
para t Ú 0.
a. Utilize o MuPAD para obter y(t) se
b. Utilize o MuPAD para obter y(t) se y(0) = 0 e
46. As equações para um motor dc controlado por armadura são apresentadas abai-
xo. A corrente do motor é i e sua velocidade rotacional é æ.

L, R e I são a resistência, a indutância e a inércia do motor; KT e Ke são a cons-


tante de torque e a constante de força contraeletromotriz; c é uma constante de
atrito viscoso; e v(t) é a tensão aplicada.
Utilize os valores R = 0,8 Æ, L = 0,003 H, KT = 0,05 N m/A, Ke = 0,05
V s/rad, c = 0 e I = 8 * 10-5 kg m2.
Suponha que a tensão aplicada seja igual a 20 V. Utilize o MuPAD para
obter a velocidade do motor e a corrente versus o tempo com condições iniciais
nulas. Escolha um tempo final suficientemente grande para mostrar a velocida-
de do motor se tornando constante.
Capítulo 11 ■ MuPAD 523

Seção 11.7
47. O circuito RLC descrito no Problema 28 e mostrado na Figura P28 se comporta
de acordo com o seguinte modelo de equação diferencial:

Utilize o método da transformada de Laplace para resolver a equação para v0(t)


considerando uma entrada em degrau unitário e condições iniciais nulas, em
que C = 10-5 F e L = 5 * 10-3 H. Para o primeiro caso (um filtro de banda lar-
ga), R = 1000 Æ. Para o segundo caso (um filtro de banda estreita), R = 10 Æ.
Compare as respostas ao degrau dos dois casos.
48. O modelo de equação diferencial para um determinado sistema de controle de
velocidade de um veículo é

em que a velocidade real é v, a velocidade desejada é yd(t), e Kp e KI são cons-


tantes chamadas de ganhos de controle. Utilize o método da transformada de
Laplace para encontrar a resposta ao degrau unitário [isto é, yd(t) é uma função
degrau unitário]. Utilize condições iniciais nulas. Compare as respostas para os
três casos.
a. Kp = 9, KI = 50
b. Kp = 9, KI = 25
c. Kp = 54, KI = 250
49. O modelo de equação diferencial de um determinado sistema de controle de
posição para uma ferramenta de corte em metal é

em que a posição real é x; a posição desejada é xd(t); e Kp, KI e KD são cons-


tantes chamadas de ganhos de controle. Utilize o método da transformada de
Laplace para encontrar a resposta ao degrau unitário [isto é, xd(t) é uma função
degrau unitário]. Utilize condições iniciais nulas. Compare as respostas para os
três casos.
a. Kp = 30, KI = KD = 0
b. Kp = 27, KI = 17,18, KD = 0
c. Kp = 36, KI = 38,1, KD = 8,52
50*. O modelo de equação diferencial para o torque de motor m(t) necessário para
um determinado sistema de controle de velocidade é
524 Introdução ao MATLAB para Engenheiros

em que a velocidade desejada é vd(t) e K é uma constante chamada de ganho de


controle.
a. Utilize o método da transformada de Laplace para encontrar a resposta ao
degrau unitário [isto é, vd(t) é uma função degrau unitário]. Utilize condi-
ções iniciais nulas.
b. Utilize a manipulação simbólica no MuPAD para encontrar o valor de pico
do torque em termos do ganho K.

Seção 11.8
51. Resolva a equação de Legendre para as condições iniciais dadas:
(1 - x2)y– - 2xy¿ + 6y = 0 y(0) = 5 y¿(0) = 0
52. Avalie a solução da equação de Airy em x = 2 para as condições iniciais dadas:

y– - xy = 0 y(0) = 0 y(0) = 1
53. Obtenha uma solução em série para a seguinte equação de Legendre conside-
rando as condições iniciais dadas:
(1 - x2) y– - 2xy¿ + 6y = 0 y(0) = a y¿(0) = b
APÊNDICE A
Guia para comandos
e funções

Operadores e caracteres especiais


Item Descrição Páginas
+ Mais; operador de adição. 8
- Menos; operador de subtração. 8
* Operador de multiplicação escalar e matricial. 8
.* Operador de multiplicação de arranjo. 66
^ Operador de exponenciação escalar e matricial. 8
.^ Operador de exponenciação de arranjo. 66
\ Operador de divisão à esquerda. 8, 66
/ Operador de divisão à direita. 8, 66
.\ Operador de divisão à esquerda de arranjo. 66
./ Operador de divisão à direita de arranjo. 66
: Dois pontos; gera elementos igualmente espaçados e representa uma linha ou 12, 57
uma coluna inteira.
() Parênteses; encerram argumentos de funções e índices de arranjos; alteram a 9, 117
precedência.
[] Colchetes; encerram elementos de arranjos. 19, 55
{} Chaves; encerram elementos de células. 91
... Reticências; operador de continuação de linha. 12
, Vírgula; separa sentenças e elementos em uma linha de um arranjo. 12
; Ponto e vírgula; separa colunas em um arranjo, e suprime a exibição. 12, 55
% Sinal de porcentagem; indica um comentário e especifica formatação. 27, 549
‘ Sinal de citação e operador de transposição. 55, 57
.‘ Operador de transposição não conjugada. 57
= Operador de atribuição (substituição). 10
@ Cria um function handle. 124
526 Apêndice A ■ Guia para comandos e funções

Operadores lógicos e relacionais


Item Descrição Páginas
== Operador relacional: igual a. 155
~= Operador relacional: não é igual a. 155
< Operador relacional: menor que. 155
<= Operador relacional: menor que ou igual a. 155
> Operador relacional: maior que. 155
>= Operador relacional: maior que ou igual a. 155
& Operador lógico: AND. 158
&& Curto circuito AND. 158
| Operador lógico: OR. 158
|| Curto circuito OR. 158
~ Operador lógico: NOT. 158

Variáveis especiais e constantes


Item Descrição Páginas
ans Resposta mais recente. 14
eps Precisão de ponto flutuante. 14
i,j A unidade imaginária . 14
Inf Infinito. 14
NaN Resultado numérico indefinido (não é um número). 14
pi O número π. 14

Comandos para gerenciar uma sessão


Item Descrição Páginas
clc Limpa a janela de comandos. 12
clear Remove variáveis da memória. 12
doc Exibe documentação. 38
exist Verifica a existência de um arquivo ou variável. 12
global Declara uma variável como global. 124
help Exibe texto de ajuda na janela de comandos. 38
helpwin Exibe texto de ajuda no Navegador de Ajuda. 38
lookfor Busca referências de ajuda para uma determinada palavra-chave. 38
quit Fecha o MATLAB. 12
who Lista as variáveis atuais. 12
whos Lista as variáveis atuais (exibição longa). 12
Apêndice A ■ Guia para comandos e funções 527

Comandos do sistema e comandos de arquivos


Item Descrição Páginas
cd Muda o diretório atual. 23
date Exibe a data atual. 122
dir Lista todas os arquivos no diretório atual. 23
load Carrega variáveis no espaço de trabalho a partir de um arquivo. 21
path Exibe o caminho de busca. 23
pwd Exibe o diretório atual. 23
save Salva as variáveis do espaço de trabalho em um arquivo. 21
type Exibe o conteúdo de um arquivo. 38
what Lista todos os arquivos do MATLAB. 23
wklread Lê arquivos de planilha do tipo .wkl. 138
xlsread Lê arquivos de planilha do tipo .xls. 135

Comandos de entrada/saída
Item Descrição Páginas
disp Exibe o conteúdo de um arranjo ou de uma string. 31
format Controla o formato de exibição na tela. 14, 31
fprintf Realiza escrita formatada na tela ou em um arquivo. 549
input Exibe o prompt e espera por uma entrada. 31, 171
menu Exibe um menu de opções. 31
; Suprime a impressão na tela. 12

Formatos de exibição numérica


Item Descrição Páginas
format short Quatro dígitos decimais (padrão). 14, 31
format long Dezesseis dígitos decimais. 14, 31
format short e Cinco dígitos mais um expoente. 14, 31
format long e Dezesseis dígitos mais um expoente. 14, 31
format bank Dois dígitos decimais. 14, 31
format + Positivo, negativo ou zero. 14, 31
format rat Aproximação racional. 14, 31
format compact Suprime algumas quebras de linha. 14, 31
format loose Redefine para um modo de exibição menos compacto. 14, 31
528 Apêndice A ■ Guia para comandos e funções

Funções de arranjos
Item Descrição Páginas
cat Concatena arranjos. 64
find Encontra os índices de elementos não nulos. 60, 161
length Calcula o número de elementos. 19
linspace Cria um vetor regularmente espaçado. 60
logspace Cria um vetor logaritmicamente espaçado. 60
max Retorna o maior elemento. 60
min Retorna o menor elemento. 60
size Calcula o tamanho do arranjo. 60
sort Ordena cada coluna. 60, 296
sum Soma cada coluna. 60

Matrizes especiais
Item Descrição Páginas
eye Cria uma matriz identidade. 83
ones Cria um arranjo de 1s. 83
zeros Cria um arranjo de 0s. 83

Funções matriciais para a solução de equações lineares


Item Descrição Páginas
det Calcula o determinante de uma matriz. 333
inv Calcula a inversa de uma matriz. 333
pinv Calcula a pseudoinversa de uma matriz. 342
rank Calcula o posto de uma matriz. 335
rref Calcula a forma escalonada reduzida. 345

Funções exponenciais e logarítmicas


Item Descrição Páginas
exp(x) Exponencial; ex. 21, 114
log(x) Logaritmo natural; ln x. 114
log10(x) Logaritmo comum (base 10); log x = log 10 x. 114
sqrt(x) Raiz quadrada; . 114

Funções complexas
Item Descrição Páginas
abs(x) Valor absoluto; |x|. 114
angle(x) Ângulo de um número complexo x. 114
conj(x) Complexo conjugado de x. 114
imag(x) Parte imaginária de um número complexo x. 114
real(x) Parte real de um número complexo x. 114
Apêndice A ■ Guia para comandos e funções 529

Funções numéricas
Item Descrição Páginas
ceil Arredonda para o inteiro mais próximo em direção a ∞. 114
fix Arredonda para o inteiro mais próximo em direção ao zero. 114
floor Arredonda para o inteiro mais próximo em direção a –∞. 114
round Arredonda para o inteiro mais próximo. 114
sign Função sinal. 114

Funções trigonométricas
Item Descrição Páginas
acos(x) Cosseno inverso; arccos x = cos –1 x. 21, 118
acot(x) Cotangente inversa; arccot x = cot –1 x. 118
acsc(x) Cossecante inversa; arccsc x = csc –1 x. 118
asec(x) Secante inversa; arcsec x = sec –1 x. 118
asin(x) Seno inverso; arcsen x = sen –1 x. 21, 118
atan(x) Tangente inversa; arctan x = tan –1 x. 21, 118
atan2(y,x) Tangente inversa nos quatro quadrantes. 118
cos(x) Cosseno; cos x. 118
cot(x) Cotangente; cot x. 118
csc(x) Cossecante; csc x. 118
sec(x) Secante; sec x. 118
sin(x) Seno; sen x. 118
tan(x) Tangente; tan x. 118

Funções hiperbólicas
Item Descrição Páginas
acosh(x) Cosseno hiperbólico inverso; cosh –1 x. 119
acoth(x) Cotangente hiperbólica inversa; coth –1 x. 119
acsch(x) Cossecante hiperbólica inversa; csch –1 x. 119
asech(x) Secante hiperbólica inversa; sech –1 x. 119
asinh(x) Seno hiperbólico inverso; senh –1 x. 119
atanh(x) Tangente hiperbólica inversa; tanh –1 x. 119
cosh(x) Cosseno hiperbólico; cosh x. 119
coth(x) Cotangente hiperbólica; coth x. 119
csch(x) Cossecante hiperbólica; csch x. 119
sech(x) Secante hiperbólica; sech x. 119
sinh(x) Seno hiperbólico; senh x. 119
tanh(x) Tangente hiperbólica; tanh x. 119

Funções polinomiais
Item Descrição Páginas
conv Calcula o produto de dois polinômios. 86
deconv Calcula a razão de dois polinômios. 86
eig Calcula os autovalores de uma matriz. 397
poly Calcula o polinômio a partir das raízes. 86
polyfit Ajusta um polinômio a um conjunto de dados. 273
polyval Avalia um polinômio. 225
roots Calcula as raízes de um polinômio. 86
530 Apêndice A ■ Guia para comandos e funções

Funções lógicas
Item Descrição Páginas
any Verdadeiro se algum dos elementos for diferente de zero. 161
all Verdadeiro se todos os elementos forem diferentes de zero. 161
find Encontra os índices dos elementos diferentes de zero. 161
finite Verdadeiro se os elementos forem finitos. 161
ischar Verdadeiro se os elementos forem um arranjo de caracteres. 161
isinf Verdadeiro se os elementos forem infinitos. 161
isempty Verdadeiro se a matriz for vazia. 161
isnan Verdadeiro se os elementos forem indefinidos. 161
isreal Verdadeiro se os elementos forem reais. 161
isnumeric Verdadeiro se os elementos forem valores numéricos. 161
logical Converte um arranjo numérico em um arranjo lógico. 161
xor OU exclusivo (exclusive OR). 161

Funções matemáticas diversas


Item Descrição Páginas
cross Calcula produtos vetoriais. 85
dot Calcula produtos escalares. 85
function Cria uma função definida pelo usuário. 119
nargin Número de argumentos de entrada de uma função. 170
nargout Número de argumentos de saída de uma função. 170

Funções de células e de estruturas


Item Descrição Páginas
cell Cria um arranjo de células. 90
fieldnames Retorna os nomes dos campos em um arranjo de estruturas. 94
isfield Identifica um campo de um arranjo de estruturas. 94
isstruct Identifica um arranjo de estruturas. 94
rmfield Remove um campo de um arranjo de estruturas. 94
struct Cria um arranjo de estruturas. 93

Comandos básicos de plotagens xy


Item Descrição Páginas
axis Define limites e outras propriedades dos eixos. 222, 225
cla Limpa os eixos. 539
fplot Plotagem inteligente de funções. 223, 225
ginput Lê as coordenadas da posição do cursor. 25
grid Exibe linhas de grid. 225
plot Gera uma plotagem xy. 23, 232
print Imprime uma plotagem ou salva uma plotagem em um arquivo. 225
title Insere texto na parte superior da plotagem. 225
xlabel Adiciona um rótulo de texto ao eixo x. 225
ylabel Adiciona um rótulo de texto ao eixo y. 225
Apêndice A ■ Guia para comandos e funções 531

Comandos para melhoramento de plotagens


Item Descrição Páginas
colormap Define o mapa de cores da figura atual. 539
gtext Permite a inserção de um rótulo por meio do mouse. 232
hold Congela a plotagem atual. 232
legend Insere uma legenda por meio do mouse. 230
subplot Cria plotagens em subjanelas. 232
text Insere uma string em uma figura. 230

Funções de plotagens especializadas


Item Descrição Páginas
bar Cria um gráfico de barras. 235, 295
loglog Cria uma plotagem log-log. 235
plotyy Permite plotagens nos eixos da esquerda e da direita. 235
polar Cria uma plotagem polar. 235
semilogx Cria uma plotagem semilogarítmica (abscissa logarítmica). 235
semilogy Cria uma plotagem semilogarítmica (ordenada logarítmica). 235
stairs Cria uma plotagem com degraus. 235
stem Cria uma plotagem com hastes. 235

Funções de plotagens tridimensionais


Item Descrição Páginas
contour Cria uma plotagem de contorno. 248
mesh Cria uma plotagem com uma malha de superfície tridimensional. 248
meshc O mesmo que mesh, mas com uma plotagem de contorno por baixo. 248
meshgrid Cria um grid retangular. 247
meshz O mesmo que mesh, mas com linhas verticais por baixo. 249
plot3 Cria plotagens tridimensionais com linhas e pontos. 246
shading Especifica um tipo de sombreamento. 539
surf Cria uma plotagem com uma malha de superfície tridimensional sombreada. 248
surfc O mesmo que surf, mas com uma plotagem de contorno por baixo. 248
sur O mesmo que surf, mas com iluminação. 539
view Define o ângulo de visão. 539
waterfall O mesmo que mesh, mas com linhas de malha em uma direção. 250
zlabel Adiciona um rótulo de texto ao eixo z. 249
532 Apêndice A ■ Guia para comandos e funções

Controle de fluxo de programa


Item Descrição Páginas
break Finaliza a execução de um laço. 176
case Proporciona caminhos de execução alternativos dentro de uma estrutura 188
switch.
continue Passa o controle para a próxima iteração de um laço for ou while. 276
else Delineia blocos de sentenças alternativos. 166
elseif Executa sentenças condicionalmente. 168
end Finaliza sentenças for, while e if. 166
for Repete sentenças um número específico de vezes. 172
if Executa sentenças condicionalmente. 165
otherwise Proporciona o controle opcional dentro de uma estrutura switch. 188
switch Direciona a execução do programa comparando a entrada com as 188
expressões case.
while Repete sentenças um número indefinido de vezes. 183

Funções de otimização e para encontrar raízes


Item Descrição Páginas
fminbnd Encontra o mínimo de uma função de uma variável. 128
fminsearch Encontra o mínimo de uma função multivariável. 128
fzero Encontra o zero de uma função. 128

Funções de histogramas
Item Descrição Páginas
bar Cria um gráfico de barras. 235, 295
hist Agrega os dados em barras (bins). 300

Funções estatísticas
Item Descrição Páginas
cumsum Calcula a soma acumulada ao longo de uma linha. 303
erf Calcula a função erf(x). 305
mean Calcula a média. 296
median Calcula a mediana. 296
std Calcula o desvio padrão. 304

Funções de números aleatórios


Item Descrição Páginas
rand Gera números aleatórios uniformemente distribuídos entre 0 e 1; define 309
e recupera o estado.
randn Gera números aleatórios normalmente distribuídos; define e recupera 309
o estado.
randperm Gera permutações aleatórias de inteiros. 309
Apêndice A ■ Guia para comandos e funções 533

Funções polinomiais
Item Descrição Páginas
poly Calcula os coeficientes de um polinômio a partir de suas raízes. 86
polyfit Ajusta um polinômio a um conjunto de dados. 273
polyval Avalia um polinômio e gera estimativas de erro. 273
roots Calcula as raízes de um polinômio a partir de seus coeficientes. 86

Funções de interpolação
Item Descrição Páginas
interp1 Interpolação por splines lineares e cúbicas de uma função de uma 320
variável.
interp2 Interpolação linear de uma função de duas variáveis. 317
spline Interpolação por splines cúbicas. 320
unmkpp Calcula os coeficientes de polinômios de splines cúbicas. 320

Funções de integração numérica


Item Descrição Páginas
dblquad Integração numérica de uma integral dupla. 372
polyint Integração de um polinômio. 371
quad Integração numérica com a regra de Simpson adaptativa. 371
quad1 Integração numérica com a quadratura de Lobatto. 371
trapz Integração numérica com a regra trapezoidal. 371
triplequad Integração numérica de uma integral tripla. 371

Funções de diferenciação numérica


Item Descrição Páginas
del2 Calcula o Laplaciano a partir de um conjunto de dados. 382
diff(x) Calcula as diferenças entre elementos adjacentes em um vetor x. 329, 382
gradient Calcula o gradiente a partir de um conjunto de dados. 382
polyder Diferencia um polinômio, um produto de polinômios ou um quociente 382
de polinômios.

Solucionadores de EDOs
Item Descrição Páginas
ode45 Solucionador de ordem média, não rígido. 385, 395
ode15s Solucionador de ordem variável, rígido. 385, 395
odeset Cria estrutura de opções de integração para solucionadores de EDOs. 395
534 Apêndice A ■ Guia para comandos e funções

Funções de objetos LIT


Item Descrição Páginas
ss Cria um objeto LIT na forma de espaço de estados. 400
ssdata Extrai matrizes do espaço de estados a partir de um objeto LIT. 400
tf Cria um objeto LIT na forma de função de transferência. 400
tfdata Extrai os coeficientes da equação a partir de um objeto LIT. 400

Solucionadores de EDOs LIT


Item Descrição Páginas
impulse Calcula e plota a resposta ao impulso de um objeto LIT. 401
initial Calcula e plota a resposta livre de um objeto LIT. 401
lsim Calcula e plota a resposta de um objeto LIT a uma entrada geral. 401
step Calcula e plota a resposta ao degrau de um objeto LIT. 401

Funções de entrada predefinidas


Item Descrição Páginas
gensig Gera três tipos de sinal periódico: onda senoidal, onda quadrada e 408
pulsos periódicos estreitos.

Manipulando funções no MuPAD


Item Descrição Páginas
collect Agrupa termos com a mesma potência. 478
combine Combina termos da mesma estrutura algébrica. 477
delete Apaga o valor de um identificador. 472
expand Expande uma expressão. 475
factor Fatora um polinômio em polinômios irredutíveis. 475
normal Retorna à forma normal de uma expressão racional. 476
rewrite Transforma uma expressão em termos de uma função alvo. 478
simplify Simplifica uma expressão. 476

Solução de equações algébricas e diferenciais não lineares no MuPAD


Item Descrição Páginas
assume Especifica restrições na variável de solução. 472, 478
ode Especifica uma equação diferencial e suas condições de contorno. 502
polyroots Calcula numericamente todas as raízes de um polinômio. 480
solve Resolve equações algébricas e diferenciais não lineares. 480
unassume Remove restrições impostas pela função assume. 478

Avaliação numérica no MuPAD


Item Descrição Páginas
DIGITS Especifica o número de dígitos exibidos. 471
float Avalia o resultado de um número em ponto flutuante. 471
Apêndice A ■ Guia para comandos e funções 535

Operações matriciais no MuPAD


Item Descrição Páginas
charpoly Encontra o polinômio característico de uma matriz. 489
det Encontra o determinante de uma matriz. 489
eigenvalues Encontra os autovalores de uma matriz. 491
eigenvectors Encontra os autovetores de uma matriz. 491
matlinsolve Resolve a equação matricial Ax = b. 491
matrix Cria uma matriz. 489
rank Encontra o posto de uma matriz. 489

Cálculo simbólico no MuPAD


Item Descrição Páginas
diff Encontra a primeira derivada de uma expressão. 494
int Encontra a integral simples de uma expressão. 497
limit Encontra o limite de uma expressão. 500
sum Encontra a soma de termos em uma expressão. 500
taylor Encontra a expansão em série de Taylor de uma expressão. 499

Transformadas de Laplace no MuPAD


Item Descrição Páginas
invlaplace Encontra a transformada de Laplace inversa de uma expressão. 507
laplace Encontra a transformada de Laplace de uma expressão. 506

Funções de animação
Item Descrição Páginas
drawnow Inicia a plotagem imediata. 541
getframe Captura a figura atual em um quadro (frame). 538
movie Exibe os quadros. 538
moviein Inicializa a memória de quadros de filme. 540
pause Pausa a exibição. 541

Funções de som
Item Descrição Páginas
sound Executa um vetor como um som. 546
soundsc Escalona os dados e executa-os como um som. 547
wavplay Executa um som gravado. 547
wavread Lê um arquivo Microsoft WAVE. 547
wavrecord Grava som a partir de um dispositivo de entrada. 548
wavwrite Escreve um arquivo Microsoft WAVE. 548
APÊNDICE B
Animação e som no MATLAB

B1. Animação
A animação pode ser utilizada para exibir o comportamento de um objeto ao longo
do tempo. Alguns dos arquivos de demonstração do MATLAB são arquivos M que
executam uma animação. Após terminar esta seção, a qual apresenta exemplos sim-
ples, você pode estudar os arquivos de demonstração, que são mais avançados. Dois
métodos podem ser utilizados para criar animações no MATLAB: o primeiro utiliza a
função movie; o segundo, a propriedade Erase-Mode.

Criando filmes no MATLAB


O comando getframe captura a figura atual e cria um quadro simples para o filme.
A função getframe é normalmente utilizada em um laço for para construir um
arranjo de quadros de filme. A função movie executa os quadros depois de eles se-
rem capturados.
Para criar um filme, utilize um arquivo de script da seguinte forma:

Por exemplo, o seguinte arquivo de script cria 20 quadros da função te–t/b no intervalo
0 ≤ t ≤ 100 para cada um dos 20 valores do parâmetro b para b = 1 até b = 20:
% Programa movie1.m
% Anima a função t*exp(-t/b).
t = 0:0.05:100;
for b = 1:20
plot(t,t.*exp(-t/b)),axis([0 100 0 10]),xlabel(’t’);
M(:,b) = getframe;
end
Apêndice B ■ Animação e som no MATLAB 537

A linha M(:,b) = getframe; captura e salva a figura atual como uma


coluna da matriz M. Uma vez que esse arquivo seja rodado, os quadros podem ser
visualizados digitando-se movie(M). A animação mostra como a localização e a
altura do pico da função variam conforme o parâmetro b cresce.

Rotacionando uma superfície 3D


O exemplo a seguir rotaciona uma superfície tridimensional por meio da alteração do
ponto de visão. Os dados são gerados utilizando-se a função interna peaks.
% Programa movie2.m
% Rotaciona uma superfície 3D.
[X,Y,Z] = peaks(50); % Crie os dados.
surfl(X,Y,Z) % Plote a superfície.
axis([-3 3 -3 3 -5 5])% Mantenha a mesma escala para cada quadro.
axis vis3d off % Defina os eixos 3D e desabilite os tick
% marks, e assim por diante.
shading interp % Utilize sombreamento interpolado.
colormap(winter) % Especifique um mapa de cores.
for k = 1:30 % Rotacione o ponto de visão e capture cada quadro.
view(-37.5+0.5*(k-1),30)
M(k) = getframe;
end
cla % Limpe os eixos.
movie(M) % Execute o filme.

A função colormap(map) define o mapa de cores da figura atual como


map. Digite help graph3d para ver as opções de mapas de cores para map. A
opção winter fornece sombreamento verde e azul. A função view especifica o
ponto de visão do gráfico 3D. A sintaxe view(az,el) define o ângulo de visão
a partir do qual o observador vê a plotagem 3D atual, em que az é o azimute ou a
rotação horizontal e el é a elevação vertical (ambos em graus). O azimute revolu-
ciona em torno do eixo z, com valores positivos indicando rotação no sentido anti-
-horário do ponto de visão. Valores positivos de elevação correspondem a mover
o ponto de visão para acima do objeto; valores negativos movem o ponto de visão
para abaixo do objeto. A opção az = –37.5, el = 30 é o ponto de visão 3D
predefinido.

Sintaxe estendida da função movie


A função movie(M) executa o filme no arranjo M uma vez, em que M deve ser um
arranjo de quadros de filme (normalmente capturados com a função getframe). A
função movie(M,n) executa o filme n vezes. Se n for negativo, cada “execução”
ocorrerá uma vez para frente e uma vez para trás. Se n for um vetor, o primeiro ele-
mento é o número de vezes que o filme será executado, e os elementos remanescentes
são uma lista de quadros a serem exibidos no filme. Por exemplo, se M tiver quatro
quadros, então n = [10 4 4 2 1] executará o filme 10 vezes, sendo que o fil-
me constitui-se do quadro 4 seguido, novamente, pelo quadro 4, o qual por sua vez é
seguido pela quadro 2 e, finalmente, pelo quadro 1.
538 Apêndice B ■ Animação e som no MATLAB

A função movie(M,n,fps) executa o filme a uma frequência de fps qua-


dros por segundo. Se fps for omitido, o valor predefinido é 12 quadros por segundo.
Computadores que não são capazes de atingir o valor fps especificado executarão
o filme tão rápido quanto eles forem capazes. A função movie(h, ...) executa
o filme no objeto h, em que h é um handle para uma figura ou para um conjunto de
eixos. Handles são discutidos na Seção 2.2.
A função movie(h,M,n,fps,loc) especifica a localização para se execu-
tar o filme em relação ao canto esquerdo inferior do objeto em pixels, independente
do valor da propriedade Unit do objeto, em que loc = [x y nao_utiliza-
do nao_utilizado] é um vetor posição de quatro elementos, do qual apenas as
coordenadas x e y são utilizadas, mas todos os quatro elementos são necessários. O
filme é executado com a largura e a altura nas quais ele foi gravado.
Note que, para que o código seja compatível com as versões do MATLAB ante-
riores ao Release 11 (5.3), a função moviein(n) deve ser utilizada para inicializar
a memória de quadros de filme para n quadros. Para fazer isso, insira a linha M =
moviein(n); antes do laço for que gera as plotagens.
A desvantagem da função movie é que ela pode requerer muita memória se
muitos quadros ou imagens complexas forem armazenados.

Animação com a propriedade erasemode


Uma forma de sintaxe estendida para a função plot é
plot(...,’PropertyName’,’PropertyValue’,...)
Essa forma define a propriedade de plotagem especificada por PropertyNa-
me como sendo igual aos valores especificados por PropertyValue para todos os
objetos-linha criados pela função plot. O nome dessa propriedade é EraseMode.
Ela controla a técnica que o MATLAB utiliza para desenhar e apagar objetos-linha e
é útil na criação de sequências animadas. Os valores permitidos para a propriedade
EraseMode são os seguintes:
■ normal Este é o valor predefinido para a propriedade EraseMode. Ao digitar
plot(...,’EraseMode’,’normal’)
toda a figura, incluindo eixos, rótulos e títulos, é apagada e redesenhada uti-
lizando-se apenas o novo conjunto de pontos. Ao redesenhar a exibição, uma
análise tridimensional é realizada para garantir que todos os objetos sejam re-
construídos corretamente. Assim, esse modo produz a imagem com maior acu-
rácia; no entanto, ele é o modo mais lento. Os outros modos são mais rápidos,
mas não realizam uma reconstrução completa; eles são, portanto, de menor acu-
rácia. Esse método pode causar interrupções entre quadros, uma vez que tudo é
apagado e redesenhado. Ele é, portanto, inadequado para animação.
■ none Quando o valor da propriedade EraseMode é definido como none, os
objetos na figura existente não são apagados, e a nova plotagem é sobreposta a
ela. Esse modo é, portanto, mais rápido porque ele não remove os pontos exis-
tentes, e é útil para a criação de um “rastro” na tela.
Apêndice B ■ Animação e som no MATLAB 539

■ xor Quando o valor da propriedade EraseMode é definido como xor, os ob-


jetos são desenhados e apagados por meio da operação lógica OR com a cor do
plano de fundo. Isso produz uma animação suave. Esse modo não destrói outros
objetos gráficos abaixo daqueles que estão sendo apagados e não altera a cor
desses mesmos objetos que se encontram por baixo. Todavia, a cor do objeto
depende da cor do plano de fundo.
■ background Quando o valor da propriedade EraseMode é definido como
background, o resultado é o mesmo que o obtido com o valor xor, exceto
pelo fato de que os objetos que se encontram por detrás dos objetos apagados
são destruídos. Os objetos são apagados porque são desenhados com a mesma
cor do plano de fundo dos eixos ou na cor do plano de fundo da figura se a pro-
priedade Color dos eixos estiver definida como none. Isso danifica objetos
que se encontram por trás da linha apagada, mas as linhas são sempre coloridas
adequadamente.
O comando drawnow faz com que os comandos gráficos anteriores sejam exe-
cutados imediatamente. Se o comando drawnow não fosse utilizado, o MATLAB
completaria todas as outras operações antes de realizar quaisquer operações gráficas
e exibiria apenas o último quadro da animação.
A velocidade da animação depende da velocidade intrínseca do computador,
bem como do que está sendo plotado e de como a plotagem está sendo feita. Símbo-
los como o, * ou + serão plotados mais lentamente do que uma linha. O número de
pontos sendo plotados também afeta a velocidade da animação. A animação pode ser
retardada utilizando-se a função pause(n), a qual pausa a execução do programa
por n segundos.

Utilização de handles de objetos


Uma expressão da forma
p = plot(...)
atribui os resultados da função plot à variável p, que é um identificador da figura
chamado de handle de figura. Ele armazena a figura e a disponibiliza para utilização
futura. Qualquer nome de variável válido pode ser atribuído a um handle. O handle
de figura é um tipo específico de handle de objeto. Handles podem ser atribuídos a
outros tipos de objetos. Por exemplo, mais adiante nós criaremos um handle com a
função text.
A função set pode ser utilizada com o handle para alterar as propriedades do
objeto. Essa função apresenta o formato geral
set(object handle, ’PropertyName’, ’PropertyValue’, ...)
Se o objeto for uma figura inteira, seu handle também conterá as especificações
para a cor e o tipo da linha, o tamanho do marcador e o valor da propriedade Era-
seMode. Duas das propriedades da figura especificam os dados a serem plotados.
Seus nomes são XData e YData. O exemplo a seguir mostra como utilizar essas
propriedades.
540 Apêndice B ■ Animação e som no MATLAB

Animação de uma função


Considere a função te–t/b, que foi utilizada no primeiro exemplo de filme. Essa função
pode ser animada variando-se o parâmetro b com o seguinte programa:
% Programa animate1.m
% Animação da função t*exp(-t/b).
t = 0:0.05:100;
b = 1;
p = plot(t,t.*exp(-t/b),’EraseMode’,’xor’);...
axis([0 100 0 10]),xlabel(’t’);
for b = 2:20
set(p,’XData’,t,’YData’,t.*exp(-t/b)),...
axis([0 100 0 10]),xlabel(’t’);
drawnow
pause(0.1)
end
Nesse programa, a função te–t/b é primeiramente avaliada e plotada ao longo da
faixa 0 ≤ t ≤ 100 para b = 1, e o handle da figura é atribuído à variável p. Isso esta-
belece o formato de plotagem para todas as operações seguintes, por exemplo, o tipo
da linha e a cor, os rótulos e a escala dos eixos. A função te–t/b é avaliada em seguida
e plotada ao longo da faixa 0 ≤ t ≤ 100 para b = 2, 3, 4, ... no laço for, e a plotagem
anterior é apagada. Cada chamada da função set no laço for faz como que o pró-
ximo conjunto de pontos seja plotado. O valor da propriedade EraseMode especifica
como plotar os pontos existentes na figura (isto é, como atualizar a tela), conforme
cada novo conjunto de pontos é adicionado. Você deve investigar o que acontece se o
valor da propriedade EraseMode for definido como none, e não como xor.

Animação do movimento de um projétil


O programa a seguir ilustra como funções definidas pelo usuário e subplotagens
podem ser utilizadas em animações. São equações de movimento para um projétil
lançado com uma velocidade s0 e com um ângulo θ acima da horizontal, em que x
e y são as coordenadas horizontal e vertical, g é a aceleração devido à gravidade e
t é o tempo.

Definindo-se y = 0 na segunda expressão, podemos resolver para t e obter a seguinte


expressão para o tempo máximo de voo do projétil tmáx:
Apêndice B ■ Animação e som no MATLAB 541

A expressão para y(t) pode ser diferenciada para se obter a expressão para a veloci-
dade vertical:

A distância máxima xmáx pode ser calculada a partir de x(tmáx), a altura máxima ymáx
pode ser calculada a partir de y(tmáx/2) e a velocidade vertical máxima ocorre em t = 0.
As seguintes funções são baseadas nessas expressões, em que s0 é a velocidade
de lançamento s0 e th é o ângulo de lançamento θ:
function x = xcoord(t,s0,th);
% Calcula a coordenada horizontal do projétil.
x = s0*cos(th)*t;

function y = ycoord(t,s0,th,g);
% Calcula a coordenada vertical do projétil.
y = -g*t.^2/2+s0*sin(th)*t;

function v = vertvel(t,s0,th,g);
% Calcula a velocidade vertical do projétil.
v = -g*t+s0*sin(th);
O programa a seguir utiliza essas funções para realizar uma animação do mo-
vimento do projétil na primeira subplotagem, enquanto exibe simultaneamente a
velocidade vertical na segunda subplotagem, para os valores θ = 45o, s0 = 105 ft/s e
g = 32,2 ft/s2. Note que os valores de xmax, ymax e vmax são calculados e utiliza-
dos para definir as escalas dos eixos. Os handles das figuras são h1 e h2.
% Programa animate2.m
% Animação do movimento de um projétil.
% Utiliza as funções xcoord, ycoord e vertvel.
th = 45*(pi/180);
g = 32.2; s0 = 105;
%
tmax = 2*s0*sin(th)/g;
xmax = xcoord(tmax,s0,th);
ymax = ycoord(tmax/2,s0,th,g);
vmax = vertvel(0,s0,th,g);
w = linspace(0,tmax,500);
%
subplot(2,1,1)
plot(xcoord(w,s0,th),ycoord(w,s0,th,g)),hold,
h1 = plot(xcoord(w,s0,th),ycoord(w,s0,th,g),’o’,’EraseMode’,’xor’)
axis([0 xmax 0 1.1*ymax]),xlabel(’x’), ylabel(’y’)
subplot(2,1,2)
542 Apêndice B ■ Animação e som no MATLAB

plot(xcoord(w,s0,th),vertvel(w,s0,th,g)),hold,
h2 = plot(xcoord(w,s0,th),vertvel(w,s0,th,g),’s’,’EraseMode’,’xor’);
axis([0 xmax 0 1.1*vmax]),xlabel(’x’),...
ylabel(’Velocidade Vertical’)
for t = 0:0.01:tmax
set(h1,’XData’,xcoord(t,s0,th),’YData’,ycoord(t,s0,th,g))
set(h2,’XData’,xcoord(t,s0,th),’YData’,vertvel(t,s0,th,g))
drawnow
pause(0.005)
end
hold
Você deve experimentar com diferentes valores do argumento da função pause.

Animação com arranjos


Até aqui, vimos como a função a ser animada deve ser avaliada na função set com
uma expressão ou com uma função. Um terceiro método é calcular os pontos a serem
plotados antecipadamente e armazená-los em arranjos. O programa a seguir mostra
como isso é feito, utilizando a aplicação do projétil. Os pontos plotados são armaze-
nados nos arranjos x e y.
% Programa animate3.m
% Animação de um projétil utilizando arranjos.
th = 70*(pi/180);
g = 32.2; s0=100;
tmax = 2*s0*sin(th)/g;
xmax = xcoord(tmax,s0,th);
ymax = ycoord(tmax/2,s0,th,g);
%
w = linspace(0,tmax,500);
x = xcoord(w,s0,th);y = ycoord(w,s0,th,g);
plot(x,y),hold,
h1 = plot(x,y,’o’,’EraseMode’,’xor’);
axis([0 xmax 0 1.1*ymax]),xlabel(’x’),ylabel(’y’)
%
kmax = length(w);
for k =1:kmax
set(h1,’XData’,x(k),’YData’,y(k))
drawnow
pause(0.001)
end
hold
Apêndice B ■ Animação e som no MATLAB 543

Exibindo o tempo decorrido


Pode ser útil exibir o tempo decorrido durante uma animação. Para fazer isso, modifi-
que o programa animate3.m como mostrado a seguir. As novas linhas são indica-
das em negrito; a linha que anteriormente estava abaixo da linha h1 = plot(...
foi apagada.
% Programa animate4.m
% Semelhanete a animate3.m, mas com a exibição do tempo
% decorrido.
th = 70*(pi/180);
g = 32.2; s0 = 100;
%
tmax = 2*s0*sin(th)/g;
xmax = xcoord(tmax,s0,th);
ymax = ycoord(tmax/2,s0,th,g);
%
t = linspace(0,tmax,500);
x = xcoord(t,s0,th);y = ycoord(t,s0,th,g);
plot(x,y),hold,
h1 = plot(x,y, ’o’,’EraseMode’,’xor’);
text(10,10,’Tempo = ’)
time = text(30,10,’0’,’EraseMode’,’background’)
axis([0 xmax 0 1.1*ymax]),xlabel(’x’),ylabel(’y’)
%
kmax = length(t);
for k = 1:kmax
set(h1,’XData’,x(k),’YData’,y(k))
t_string = num2str(t(k));
set(time,’String’,t_string)
drawnow
pause(0.001)
end
hold
As primeiras novas linhas criam um rótulo para a exibição de tempo utilizando
a sentença text, a qual escreve o rótulo uma vez. O programa não deve escrever
naquele local novamente. A segunda nova sentença cria o handle time para o rótulo
de texto e cria a string para o primeiro valor de tempo, que é 0. Utilizando o valor
background para EraseMode, a sentença especifica que a exibição existente da
variável de tempo será apagada quando o próximo valor for exibido. Note que o valor
numérico de t(k) deve ser convertido em uma string utilizando-se a função nu-
m2str antes de ele ser exibido. Na última linha nova, na qual a função set utiliza o
handle time, o nome da propriedade é ’String’, que não é uma variável, mas uma
propriedade associada a objetos de texto. A variável a ser atualizada é t_string.
544 Apêndice B ■ Animação e som no MATLAB

B.2 Som
Há no MATLAB várias funções para criação, gravação e execução de sons no compu-
tador. Esta seção apresenta uma breve introdução a essas funções.

Um modelo de som
O som é a flutuação da pressão de ar como uma função do tempo t. Se o som for um
tom puro, a pressão p(t) oscilará senoidalmente em uma única frequência, isto é,
p(t) = A sen(2␲ ft + ␾)
em que A é a amplitude da pressão (o ‘volume’), f é a frequência de som em ciclos por
segundo (Hz) e φ é o deslocamento de fase em radianos. O período da onda sonora é
P = 1/f.
Uma vez que o som é uma variável analógica (isto é, apresenta um número
infinito de valores), ele pode ser convertido a um conjunto finito de números antes de
ser armazenado e utilizado em um computador digital. Esse processo de conversão
envolve a amostragem do sinal sonoro em valores discretos e a quantização dos nú-
meros de modo que eles possam ser representados na forma binária. A quantização
é uma questão a ser considerada quando você estiver utilizando um microfone e um
conversor analógico-digital para capturar um som real, mas nós não discutiremos isso
aqui porque produziremos apenas sons simulados em software.
Você utiliza um processo similar à amostragem sempre que plota uma fun-
ção no MATLAB. Para plotar a função, você deve avaliá-la em pontos suficientes
para produzir uma plotagem suave. Assim, para plotar uma onda senoidal, devemos
“amostrar” ou avaliar a função em vários instantes ao longo de uma janela de tempo.
A frequência na qual avaliamos a função é a frequência de amostragem. Desse modo,
se utilizarmos um passo de tempo de 0,1 s, nossa frequência de amostragem é 10 Hz.
Se a onda senoidal tiver um período de 1 s, então estaremos “amostrando” a função
10 vezes a cada período. Assim vemos que, quanto maior for a frequência de amostra-
gem, melhor será a nossa representação da função.

Criando som no MATLAB


A função do MATLAB sound(sound_vector,sf) executa o sinal no vetor
sound_vector, criado com a frequência de amostragem sf, no alto-falante do
computador. Sua utilização é demonstrada com a seguinte função definida pelo usuá-
rio, a qual executa um tom simples:
function playtone(freq,sf,amplitude,duration)
% Executa um tom simples.
% freq = frequência do tom (em Hz).
% sf = frequência de amostragem (em Hz).
% amplitude = amplitude do som (adimensional).
% duration = duração do som (em segundos).
t = 0:1/sf:duration;
sound_vector = amplitude*sin(2*pi*freq*t);
sound(sound_vector,sf)
Apêndice B ■ Animação e som no MATLAB 545

Teste essa função com os seguintes valores: freq = 1000, sf = 10000,


amplitude = 1 e duration = 10. A função sound trunca ou “corta” quais-
quer valores em sound_vector que estejam fora da faixa de –1 a +1. Experi-
mente utilizar amplitude = 0.1 e amplitude = 5 para perceber o efeito
sobre o volume do som.
É claro que sons reais contêm mais do que um tom. Você pode criar um som
que tenha dois tons somando dois vetores criados a partir de funções seno que te-
nham diferentes frequências e amplitudes. Apenas se certifique de que elas tenham
sido amostradas com a mesma frequência, que elas tenham o mesmo número de
amostras e que a sua soma se encontra dentro da faixa de –1 a +1. Você pode exe-
cutar dois sons diferentes em sequência concatenando-os em um vetor linha, como
sound([sound_vector_1, sound_vector_2],sf). Você pode executar
dois sons diferentes simultaneamente em estéreo concatenando-os em um vetor colu-
na, como sound([sound_vector_1’, sound_vector_2’],sf).
Há no MATLAB alguns arquivos de som. Por exemplo, carregue o arquivo
MAT chirp.mat e execute o som da seguinte maneira:
>>load chirp
>>sound(y,Fs)
Note que o vetor de som foi armazenado no arquivo MAT como o arranjo y e que a
frequência de amostragem foi armazenada como a variável Fs. Você também pode
testar o arquivo gong.mat.
Uma outra função também relacionada com sons é soundsc(sound_
vector,sf). Essa função redimensiona o sinal em sound_vector na faixa de
–1 a +1, de modo que ele seja tocado tão alto quanto possível sem cortes.

Lendo e executando arquivos de som


A função do MATLAB wavread(’filename’) lê um arquivo Microsoft WAVE
que tenha extensão .wav. A sintaxe é
[sound_vector, sf, bits] = wavread(’filename’)
em que sf é a frequência de amostragem utilizada para criar o arquivo e bits é o
número de bits por amostra utilizado para codificar os dados. Para executar o arquivo,
utilize a função wavplay da seguinte maneira:
>>wavplay(sound_vector, sf)
A maioria dos computadores possuem arquivos WAVE que executam sons de
sinos, bips, badalos, etc., para sinalizar quando determinadas ações ocorrem. Por
exemplo, para carregar e executar o arquivo WAVE chimes.wav localizado em C:\
windows\media em alguns PCs, você deve digitar:
>>[sound_vector, sf] = wavread(’c:\windows\media\chimes.wav’);
>>wavplay(sound_vector, sf)
546 Apêndice B ■ Animação e som no MATLAB

Você também pode executar esse som utilizando o comando de som, como
sound(y,sf), mas a função wavplay apresenta mais recursos do que a função
sound. Veja o Sistema de Ajuda do MATLAB para informações sobre a sintaxe es-
tendida da função wavplay.

Gravando e escrevendo arquivos de som


Você pode utilizar o MATLAB para gravar sons e escrever dados de som em um
arquivo WAVE. A função wavrecord grava o som a partir de um dispositivo de
entrada de áudio de um PC. Sua sintaxe básica é
sound_vector = wavrecord(n,sf)
em que n é o número de amostras e sf é a frequência de amostragem. O valor padrão
é 11 025 Hz. Por exemplo, para gravar 5 s de áudio a partir do canal 1 com uma taxa
de amostragem de 11 025 Hz, fale no dispositivo de áudio enquanto o seguinte pro-
grama é executado:
>>sf = 11025;
>>sound_vector = wavrecord(5*sf, sf);
Execute o som digitando wavplay(sound_vector,sf).
Você pode utilizar a função wavwrite para escrever o som armazena-
do no vetor sound_vector em um arquivo Microsoft WAVE. Uma sintaxe é
wavwrite(sound_vector, sf, ’filename’), em que a frequência de
amostragem é sf Hz e presume-se que os dados estejam codificados com 16 bits. A
função corta quaisquer valores de amplitude fora da faixa de –1 a +1.
APÊNDICE C
Saída formatada
no MATLAB

Os comandos disp e format proporcionam maneiras simples de se controlar a


saída na tela. No entanto, alguns usuários podem exigir um maior controle sobre a
exibição na tela. Além disso, alguns usuários podem querer escrever saídas formata-
das em um arquivo de dados. A função fprintf oferece essa recurso. Sua sintaxe é
count = fprintf(fid, format, A, ...), que formata os dados na parte
real da matriz A (e em quaisquer argumentos matriciais adicionais) sob o controle da
string de formatação especificada em format, e escreve os dados no arquivo asso-
ciado com o identificador de arquivo fid. Uma contagem do número de bytes escri-
tos é retornada na variável count. O argumento fid é um inteiro identificador de
arquivo obtido a partir de fopen. (Ele também pode ser 1 para saída padrão – a tela –
ou 2 para erro padrão. Veja fopen para mais informações.) A omissão de fid da lis-
ta de argumentos faz com que a saída apareça na tela, e isso é o mesmo que escrever
na saída padrão (fid = 1). A string format especifica a notação, o alinhamento,
os algarismos significativos, a largura do campo e outros aspectos da saída formatada.
Ela pode conter caracteres alfanuméricos ordinários, juntamente com caracteres de
escape, especificadores de conversão e outros caracteres, organizados como mostrado
nos exemplos a seguir. A Tabela C.1 resume a sintaxe básica de fprintf. Consulte
o Sistema de Ajuda do MATLAB para mais detalhes.
Suponha que a variável Velocidade tenha o valor 63,2. Para exibir esse valor
utilizando três algarismos com um algarismo à direita do ponto decimal, juntamente
com a mensagem, a sessão é:
>>fprintf(’A velocidade é: %3.1f\n’,Velocidade)
A velocidade é: 63.2
Nesse caso, o “campo largura” é 3, uma vez que há três algarismos em 63,2. Você
pode querer especificar um campo suficientemente grande para permitir espaços em
branco ou para acomodar um valor numérico inesperadamente grande. O sinal % diz
548 Apêndice C ■ Saída formatada no MATLAB

TABELA C.1 Formatos de exibição com a função fprintf


Sintaxe Descrição
fprintf(’format’, A, ...) Exibe os elementos do arranjo A, e quaisquer argumentos de
arranjo adicionais, de acordo com o formato especificado na
string ’format’.
Estrutura ’format’ %[–][number1.number2]C, em que number1
especifica a largura de campo mínima, number2 especifica o
número de algarismos à direita do ponto decimal, e C contém
códigos de controle e códigos de formatação. Itens entre
colchetes são opcionais. [–] especifica o texto justificado à
esquerda.

Códigos de controle Códigos de formatação


Código Descrição Código Descrição
\n Começa uma nova linha. %e Formatação científica com e minúsculo.
\r Começando uma nova linha. %E Formatação científica com E maiúsculo.
\b Backspace. %f Formato decimal.
\t Tab. %g %e ou %f, o que for menor.
’’ Apóstrofo.
\\ Barra invertida.

ao MATLAB para interpretar o texto seguinte como códigos. O código \n diz ao


MATLAB para iniciar uma nova linha após exibir o número.
A saída pode ter mais do que uma coluna, e cada coluna pode ter a sua própria
formatação. Por exemplo:

Note que a função fprintf exibe a transposta da matriz y.


Códigos de formatação podem ser inseridos dentro do texto. Por exemplo, note
como o ponto após o código %6.3f aparece na saída ao final do texto exibido.
>>fprintf(’The first circumference is %6.3f.\n’,circum(1))
The first circumference is 14.137.
Um apóstrofo em textos exibidos exige duas aspas simples. Por exemplo:
>>fprintf(’The second circle’’s radius %15.3e is large.\n’,r(2))
The second circle’s radius 2.225e+001 is large.
Apêndice C ■ Saída formatada no MATLAB 549

Um sinal de menos no código de formatação faz com que a saída fique justificada à
esquerda dentro do seu campo. Compare a seguinte saída com o exemplo anterior:
>>fprintf(’The second circle’’s radius %-15.3e is large.\n’,r(2))
The second circle’s radius 2.225e+001 is large.
Códigos de controle podem ser inseridos dentro da string de formatação. O seguinte
exemplo utiliza o comando de tabulação (\t):
>>fprintf(’The radii are:%4.2f \t %4.2f \t %4.2f\n’,r)
The radii are: 2.25 22.25 42.25
A função disp às vezes exibe mais dígitos do que o necessário. Podemos me-
lhorar a exibição utilizando a função fprintf em vez de disp. Considere o pro-
grama:
p = 8.85; A = 20/100^2;
d = 4/1000; n = [2:5];
C = ((n - 1).*p*A/d);
table (:,1) = n’;
table (:,2) = C’;
disp (table)
A função disp exibe o número de casas decimais especificado pelo comando
format (4 é o valor predefinido).
Se substituirmos a linha disp(table) pelas três linhas seguintes:
E=’’;
fprintf(’No.Plates Capacitance (F) X e12 %s\n’,E)
fprintf(’%2.0f \t \t \t %4.2f\n’,table’)
obteremos a seguinte exibição:

A matriz vazia E é utilizada porque a sintaxe da sentença fprintf requer que a


variável seja especificada. Uma vez que o primeiro fprintf é necessário para exi-
bir o título da tabela apenas, precisamos enganar o MATLAB fornecendo a ele uma
variável cujo valor não será exibido.
Note que o comando fprintf trunca os resultados em vez de arredondá-los.
Note também que precisamos utilizar a operação de transposição para trocar as linhas
pelas colunas na matriz table a fim de exibi-la adequadamente.
550 Apêndice C ■ Saída formatada no MATLAB

Apenas a parte real de números complexos será exibida com o comando


fprintf. Por exemplo:
>>z = -4+9i;
>>fprintf(’Complex number: %2.2f \n’,z)
Complex number: -4.00
Em vez disso, você pode exibir um número complexo como um vetor linha. Por
exemplo, se w = - 4 + 9i,
>>w = [-4,9];
>>fprintf(’Real part is %2.0f. Imaginary part is %2.0f. \n’,w)
Real part is -4. Imaginary part is 9.
APÊNDICE D
Referências

[Brown, 1994] Brown, T. L.; H. E. LeMay, Jr.; and B. E. Bursten. Chemistry: The
Central Science. 6th ed. Upper Saddle River, NJ: Prentice-Hall, 1994.
[Eide, 2008] Eide, A. R.; R. D. Jenison; L. L. Northup; and S. Mickelson.
Introduction to Engineering Problem Solving. 5th ed. New York: McGraw-
Hill, 2008.
[Felder, 1986] Felder, R. M., and R. W. Rousseau. Elementary Principles of
Chemical Processes. New York: John Wiley & Sons, 1986.
[Garber, 1999] Garber, N. J., and L. A. Hoel. Traffic and Highway Engineering.
2nd ed. Pacific Grove, CA: PWS Publishing, 1999.
[Jayaraman, 1991] Jayaraman, S. Computer-Aided Problem Solving for Scientists
and Engineers. New York: McGraw-Hill, 1991.
[Kreyzig, 2009] Kreyzig, E. Advanced Engineering Mathematics. 9th ed. New York:
John Wiley & Sons, 1999.
[Kutz, 1999] Kutz, M., editor. Mechanical Engineers’ Handbook. 2nd ed. New
York: John Wiley & Sons, 1999.
[Palm, 2010] Palm, W. System Dynamics. 2nd ed. New York: McGraw-Hill, 2010.
[Rizzoni, 2007] Rizzoni, G. Principles and Applications of Electrical Engineering.
5th ed. New York: McGraw-Hill, 2007.
[Starfield, 1990] Starfield, A. M.; K. A. Smith; and A. L. Bleloch. How to Model It:
Problem Solving for the Computer Age. New York: McGraw-Hill, 1990.
Esta página foi deixada em branco intencionalmente.
Respostas dos problemas
selecionados

Capítulo 1 25. (a) A*B = [-47, -78; 39, 64];


2. (a) -13,3333; (b) 0,6; (c) 15; (d) 1,0323. (b) B*A = [-5, -3, 48, 22].
8. (a) x + y = -3,0000 - 2,0000i; (b) xy = 28. 60 toneladas de cobre, 67 toneladas de
-13,0000 - 41,0000i; (c) x/y = -1,7200 + magnésio, 6 toneladas de manganês, 76 to-
0,0400i. neladas de silício e 101 toneladas de zinco.
18. x = -15,685 e x = 0,8425 ; 3,4008i. 31. M = 675 N·m se F estiver em newtons e r
em metros.
Capítulo 2 38. [q,r] = deconv([14,-6,3,9],
[5,7,-4]), q = [2.8, -5.12],
3. r = [0, 0, 50.04, -11.48]. O
quociente é 2,8x – 5,12 e o resto é 50,04x –
7. (a) O comprimento é 3. Valores absolutos
11,48.
= [2 4 7]; (b) O mesmo que o item (a);
(c) O comprimento é 3. Valores absolutos = 39. 2,0458.
[5.8310 5.0000 7.2801].
11. (b) Os maiores elementos na primeira, na Capítulo 3
segunda e na terceira camadas são 10, 9 e 1. (a) 3, 3,1623, 3,6056;
10, respectivamente. O maior elemento no (b) 1,7321i, 0,2848 + 1,7553i, 0,5503 +
arranjo inteiro é 10. 1,8174i;
(c) 15 + 21i, 22 + 16i, 29 + 11i;
12. (a) (d) -0,4 - 0,2i, -0,4667 - 0,0667i,
-0,5333 + 0,0667i.
(b) 2. (a) |xy| = 105, ∠xy = -2,6 rad;
(b) |x/y| = 0,84, ∠x/y = -1,67 rad.
13. (a) A.*B = [784, -128; 144,32];
(b) A/B = [76, -168; -12, 32]; 3. (a) 1,01 rad (58°); (b) 2,13 rad (122°);
(c) B.^3 = [2744, -64;216, -8]. (c) -1,01 rad (-58°); (d) -2,13 rad (122°).
14. (a) F.*D = [1200, 275, 525, 750, 7. F1 = 197,5217 N.
3000] J; (b) sum(F.*D) = 5750 J. 10. 2,7324 s na subida; 7,4612 s na descida.
554 Respostas dos problemas selecionados

Capítulo 4 Capítulo 6
4. (a) z = 1; (b) z = 0; (c) z = 1; 2. (a) y = 53,5x - 1354,5;
(d) z = 1. (b) y = 3582,1x-0,9764;
5. (a) z = 0; (b) z = 1; (c) z = 0; (c) y = 2,0622 * 105(10)-0,0067x
(d) z = 4; (e) z = 1; (f ) z = 5; 4. (a) b = 1,2603 × 10–4; (b) 836 anos. (c) En-
(g) z = 1; (h) z = 0. tre 760 e 928 anos atrás.
6. (a) z = [0, 1, 0, 1, 1]; 9. d = 0,0509y2 + 1,1054y + 2,3571;
(b) z = [0, 0, 0, 1, 1]; J = 10,1786; S = 57 550; r2 = 0,9998.
(c) z = [0, 0, 0, 1, 0]; 10. y = 40 + 9,6x1 - 6,75x2. O erro máximo é
(d) z = [1, 1, 1, 0, 1]. de 7,125%.
11. (a) z = [1, 1, 1, 0, 0, 0];
(b) z = [1, 0, 0, 1, 1, 1]; Capítulo 7
(c) z = [1, 1, 0, 1, 1, 1]; 7. (a) 96%; (b) 68%.
(d) z = [0, 1, 0, 0, 0, 0].
11. (a) O peso médio do palete é de 3000 lb. O
13. (a) $7300; (b) $5600; (c) 1200 ações; desvio padrão é 10,95 lb; (b) 8,55%.
(d) $15800.
18. O lucro anual médio é de $64 609. O lucro
28. Melhor localização: x = 9, y = 16. Custo mínimo esperado é de $51 340. O lucro
mínimo: $294,51. Há apenas uma solução. máximo esperado é de $79 440. O desvio
34. Após 33 anos, a quantidade será de padrão do lucro anual é de $5 967.
$1 041 800. 22. As temperaturas estimadas às 5 p.m. e às
36. W = 300 e T = [428,5714, 471, 4286, 266, 9 p.m. são 22,5° e 16,5°.
6667, 233,3333, 200, 100].
48. Inventário semanal para os casos (a) e (b): Capítulo 8
2. (a) C ⴝ B-1(A-1B ⴚ A).
Semana 1 2 3 4 5 (b) C = [-0.8536, -1.6058;
Inventário (a) 50 50 45 40 30 1.5357, 1.3372].
Inventário (b) 30 25 20 20 10 5. (a) x = 3c, y = -2c, z = c; (b) A plotagem
Semana 6 7 8 9 10 consiste em três linhas retas que se intercep-
Inventário (a) 30 30 25 20 10 tam em (0, 0).
Inventário 10 5 0 0 (60) 8. T1 = 19,7596oC, T2 = -7,0214oC,
T3 = -9,7462°C. A perda de calor em
Capítulo 5 watts é de 66,785.
1. A produção é lucrativa para Q Ú 108 gal/ 11. Um número infinito de soluções:
ano. O lucro cresce linearmente com Q, x = -1,3846z + 4,9231,
portanto não há um limite superior para ele. y = 0,0769z - 1,3846.
3. x = – 0,4795, 1,1346 e 3,8318. 14. Solução única: x = 8 e y = 2.
5. 37,622 m acima do ponto à esquerda, e 15. Solução de mínimos quadrados:
100,6766 m acima do ponto à direita. x = 6,0928 e y = 2,2577.
10. 0,54 rad (31°)
14. O valor em estado estacionário é y = 1. Capítulo 9
y = 0,98 em t = 4/b. 1. 23 690 m.
17. (a) A bola subirá 1,68 m e percorrerá 9,58 m 7. 13,65 ft.
horizontalmente antes de se chocar contra o 10. 1363 m/s.
solo após 1,17 s. 25. 150 m/s.
Respostas dos problemas selecionados 555

Capítulo 11 10.
2. (a) 60x5 - 10x4 + 108x3 - 49x2 + 71x - 24;
(b) 2546.
11.
3. A = 1, B = 2a, C = 0, D = -2b, E = 1 e
F = r 2 - a 2 - b 2. 23. ␪ = 0,6155 rad (35,26°).
4. (a) 24. 49,6808 m/s.
(b) b = 5,6904.
34. (a) 2; (b) 0; (c) 0.
6. (a)
41. (a) (3x0/5 + y0/5)e-3t sen 5t + x0e-3t cos 5t;
(b) e-5t(8x0/3 + y0/3) + (-5x0/3 - y0/3)e-8t
(b) x = ;0,9685, y = ;0,4976.
Esta página foi deixada em branco intencionalmente.
Índice
Símbolos do MATLAB
+ adição, 8 geração de arranjo, 12, supressão de exibição, ~ = não é igual a, 154-155
- subtração, 8 53-55 12 6 menor que, 154-155
* multiplicação, 8 () parênteses % sinal de porcentagem 6 = menor que ou igual a,
.* multiplicação de argumentos de função, designação de 154-155
arranjo, 65-66 117-118 comentário, 27 7 maior que, 154-155
^ exponenciação, 8 modificação de especificação de 7 = maior que ou igual a,
.^ exponenciação de precedência, 9 formatação, 547 154-155
arranjo, 65-66 { } chaves; envolvem ’ apóstrofo & AND, 157-158
\ divisão à esquerda, 8, elementos de células, 91 complexo conjugado && curto-circuito AND,
65-66 [] colchetes, 19, 55 transposto, 57 157-158
/ divisão à direita, 8, . . . reticências, designação de string, | OR, 157-158
65-66 continuação de linha, 12 31, 171 || curto-circuito OR, 157-
.\ divisão de arranjo à , vírgula transposição, 55 158
esquerda, 65-66 separação de colunas, .’ não conjugada ~NOT, 157-158
./ divisão de arranjo à 12 transposição >> prompt do MATLAB,
direita, 65-66 separação de sentenças, (transposição com 6
: dois pontos 12 ponto), 57 @ cria um function
endereçamento de ; ponto e vírgula = operador de atribuição handle, 124
arranjo, 57-58 separação de linhas, 55 ou substituição, 10
= = igual a, 154-155

Comandos do MATLAB
A B conv, 86 disp, 31
abs, 113-114 bar, 235, 295, 300 cos, 21-22, 117-118 doc, 37-38
acos, 21-22, 117-118 break, 176 cosh, 119 dot, 85
acosh, 119 bvp4c, 407 cot, 117-118 drawnow, 538-539
acot, 117-118 coth, 119
acoth, 119 cross, 85 E
C csc, 117-118
acsc, 117-118 eig, 395
case, 188 csch, 119
acsch, 119 else, 166
cat, 63-64 cumsum, 303-304
addpath, 23 elseif, 168
cd, 23
all, 161 end, 166
ceil, 113-114
angle, 113-114
cell, 90
D eps, 14
ans, 14 date, 121-122 erf, 305
celldisp, 91
any, 161 dblquad, 370 exist, 12
cellplot, 91
asec, 117-118 dde23, 407 exp, 21-22, 113-114
cla, 537
asech, 119 ddesd, 407 eye, 83
clabel, 249
asin, 21-22, 117-118 deconv, 86
clc, 12
asinh, 119 del2, 380
clear, 12 F
atan, 21-22, 117-118 det, 331
colormap, 537 fieldnames, 94
atan2, 117-118 deval, 407
conj, 113-114 find, 59-60, 161
atanh, 119 diff, 377, 380
continue, 276 finite, 161
axis, 222, 225 dir, 23
contour, 250
558 Índice

fix, 113-114 L pinv, 340 step, 399


floor, 113-114 legend, 232 plot, 25, 225, 232 struct, 94
fminbnd, 128 length, 19, 59-60 plotyy, 235 subplot, 232
fminsearch, 128 linspace, 56, 59-60 plot3, 246 sum, 59-60
for, 172 load, 21-22 polar, 235 surf, 250
format, 15, 31 log, 21-22, 113-114 poly, 86 surf1, 537
fplot, 223, 225 log10, 21-22, 113-114 polyder, 380 surfc, 250
fprintf, 547 logical, 155-156, 161 polyfit, 266, 273 switch, 188
function, 119 loglog, 235 polyint, 369
fzero, 128 logspace, 56, 59-60 polyval, 86, 87, 225, T
lookfor, 37-38 273
tan, 21-22, 117-118
G lsim, 399 print, 221, 225
tanh, 119
pwd, 23
gensig, 406 text, 232
getframe, 536 M tf, 397, 398
ginput, 25 max, 59-60 Q tfdata, 398
gradient, 380 mean, 295-296 quad, 369 title, 25, 225
grid, 25, 222, 225 median, 295-296 quadl, 369 trapz, 369
global, 124 menu, 31 quit, 12 triplequad, 369
gtext, 25, 232 mesh, 250 quiver, 380 type, 37-38
meshc, 250
H meshgrid, 250 R U
help, 37-38 meshz, 250 rand, 307, 309 unmkp, 318-320
helpwin, 37-38 min, 59-60 randn, 309, 310
hist, 295-296, 300 mode, 295-296 randperm, 309
movie, 536
V
hold, 231, 232 rank, 333
moviein, 536 var, 303-304
real, 113-114
mupadwelcome, 463- view, 537
I rmfield, 94
464 rmpath, 23
i, 14 W
roots, 20, 86
if, 165
imag, 113-114 N round, 113-114 waterfall, 250
NaN, 14 rref, 343 wavplay, 545
impulse, 399
nargin, 170 wavread, 545
Inf, 14
nargout, 170 S wavrecord, 546
initial, 399
norm, 59-60 wavwrite, 546
inline, 130 save, 21-22
what, 23
input, 31, 171 sec, 117-118
which, 23
interp1, 316-317, O sech, 119
while, 183
319-320 ode15i, 407 semilogx, 235
who, 12
interp2, 316-317 ode15s, 383, 393 semilogy, 235
whos, 12
interpn, 316-317 ode45, 383, 393 shading, 537
wk1read, 138-139
inv, 331 odephase, 407 sign, 113-114
ischar, 161 odeplot, 407 simulink, 429
isempty, 161 odeprint, 407 sin, 21-22, 117-118 X
isfield, 94 odeset, 392, 393 sinh, 119 xlabel, 25, 225
isinf, 161 ones, 83 size, 59-60 xlsread, 135
isnan, 161 otherwise, 188 sort, 59-60, 295-296 xor, 159, 161
isnumeric, 161 sound, 544
isreal, 161 soundsc, 545 Y
isstruct, 94
P spline, 317-320
path, 23 ylabel, 25, 225
sqrt, 21-22, 113-114
pathtool, 23 ss, 397, 398
J pause, 538-539 Z
ssdata, 397, 398
j, 14 pchip, 319-320, 327 stairs, 235 zeros, 83
pdeval, 407 std, 303-304 zlabel, 248
pi, 14 stem, 235
Índice 559

Blocos do Simulink

C G R Summer, 418-420
Clock, 423 Gain, 417-418 Rate Limiter, 448
Constant, 430 Relay, 431 T
I To Workspace, 423
D Integrator, 417-418 S Transfer Fcn, 435
Dead Zone, 436 Saturation, 448 Transfer Fcn (with initial
Derivative, 451 Scope, 423 outputs), 447
L Transport Delay, 446
Signal Builder, 451
Look-Up Table, 452 Trigonometric
F Signal Generator, 441
Sine Wave, 420-421 Function, 430
Fcn, 452 M State-Space, 425
MATLAB Fcn, 452 Step, 427
Mux, 423 Subsystem, 441

Símbolos e comandos do MuPAD*

Símbolos C hermite, 509-510 P


: dois pontos, supressão charpoly, 487 pdioe, 485
de exibição, 467-468 chebyshev1, 509-510 I PI, 467-468
:= operador de collect, 476 I, 467-468 plotfunc2d, 512
atribuição, 469-470 combine, 475 Im, 468-469 polyroots, 478
:: referência de biblioteca, conjugate, 468-469 int, 495
478 inverse, 489 R
% referência a um D invlaplace, 505 rank, 487
resultado anterior, 468- DIGITS, 468-469 Re, 468-469
469 delete, 469-470 L realroot, 495
´ notação de derivada, 500 det, 487 rec, 485
laguerreL, 509-510
# marcador de lugar, diff, 492 rectform, 469-470
laplace, 504
472-473 rewrite, 476
legendre, 509-510
E limit, 498
Comandos E, 467-468 log, 467-468 S
A eigenvalues, 489 ln, 467-468 series, 511
airyAi(x), 509-510 eigenvectors, 489 Simplify, 474
airyBi(x), 509-510 expand, 472-473 M simplify, 474
arg, 468-469 matlinsolve, 489 solve, 478, 500
assume, 476 F matrix, 487 subs, 477
maximize, 485-486 sum, 498
factor, 472-473
B factorout, 474 minimize, 487
besselI, 509-510 float, 468-469 T
besselJ, 509-510 N taylor, 497
besselK, 509-510 G normal, 474
besselY, 509-510 U
gamma, 509-510
bool, 474
O unassume, 476
H ode, 500
heaviside, 506 op, 512

* A maioria dos símbolos e dos comandos do MuPAD são idênticos às suas contrapartes no MATLAB; por exemplo, cos e
cos. Aqui estão listados símbolos e comandos comumente utilizados que apresentam um significado especial no MuPAD.
560 Índice

Assuntos
A B diretório, 6 solução pelo método da
ajuste de curva, qualidade barra de Comandos diretório atual, 16 pseudoinversa, 340
do, 275 (MuPAD), 472-473 distribuição normal, subdeterminado
álgebra linear barras, 295-296 300-302 sistema de, 339
autovalores, 395, 489 bibliotecas do MuPAD, divisão à direita, 8 equações diferenciais
autovetores, 489 documentação de atraso, 407
478
programa, 148-149 forma de Cauchy, 389
operações matriciais, Block Parameters janela,
forma de variáveis de
487 421-422
E estado, 389
polinômio
linear por partes, 428
característico, 489 C editor de variáveis, 61-62
não linear, 381
algoritmo, 147-148 Editor/Debugador, 28,
caminho, 22 ordem superior, 388
animação, 536 190-191
caminho de busca, 2 ordinária, 380
apagando variáveis, 12 EDO, ver equação
campo, 91-92 parcial, 380
Área de Trabalho diferencial ordinária
coeficiente de raízes características,
(Desktop), 5 elemento a elemento
determinação, 275 395
argumento, 8 operações, 65-66, 69, 70
comando, 8 solução simbólica de,
argumento de função, eliminação de Gauss, 333
comandos de sistema, 499
117-118 entrada/saída
diretórios e arquivos, 23 solucionadores, 383
arquivo de função, 119 comandos de, 31
comentário, 27 equações homogêneas, 333
arquivos equação diferencial com
complexo conjugado escalar, 8
arquivos M, 20-27 atraso, 407
transposto, 57 escalonando dados, 276
arquivos MAT, 20 equações algébricas
conjunto mal- espaço de trabalho, 11
ASCII, 21-22 aplicação de posto de
-condicionado, 331
comandos, 27 matriz, 333 estado de um gerador
controlador PI, 448
dados, 21-22 conjunto singular de, aleatório, 307
constantes predefinidas,
definidos pelo usuário, 331 estilo de programação,
15
119 e forma escalonada 29-30
continuação de linha, 12
função, 27 reduzida, 343 estimação de função, 263
cores, 228
planilha, 138-139 e linearidade, 334 estrutura switch, 188
script, 27 e matriz aumentada,
D exportando dados, 139-
arranjo, 19 333
debugando, 28-29, 190- 140
adição e subtração, 64- e norma euclidiana, 341
66 191 equações diofantinas exportando figuras, 225
célula, 90 derivada, ver polinomiais, 485 expressões simbólicas,
criando um, 55 diferenciação homogêneas, 333 469-470
divisão, 69 desvio padrão, 303-304 lineares, 26, 84, 329 agrupamento, 476
endereçamento, 57-58 determinantes, 333 mal-condicionado avaliação, 474
estrutura, 92 diagrama de blocos, 417- sistema de, 331 combinação, 475
exponenciação, 70 418 relações de recorrência, expansão, 472-473
funções, 59-60 diagrama de transição de 485-486 fatoração, 472-473
índice, 19 estados, 195 resolvendo conjuntos manipulação, 471-472
multidimensional, 63 diagrama estrutural, 149- de, 481 normalização, 474
multiplicação, 64-66 150 resolvendo reescrita, 476
operações, 64-66 diagramas de simulação, numericamente, 481 simplificação, 474
páginas, 62-63 417-418 resolvendo substituição, 477
potências, 70 diferença central, 377 simbolicamente, 478 extrapolação, 312-313
tamanho, 56 diferenças para a frente, sobredeterminado
vazio, 57-58 377 sistema de, 348 F
arranjos lógicos, 156- diferenças para trás, 376 solução matricial, 490 ferramenta Data Statistics,
157 diferenciação, solução pela inversa 300
Assistente de Importação, numérica, 327, 380 matricial, 331 fluxograma, 149-150
173 parcial, 407 solução pelo método da forma de Cauchy, 388
atraso de transporte, 446 polinomial, 380 divisão à esquerda, 28, forma de função de
autovalor, 395, 489 simbólica, 492 333 transferência, 435
Índice 561

forma de variáveis de funções lógicas, 161 J método de Euler, 381


estado, 388, 439 funções matemáticas janela de Comandos, 6 modificado, 382
forma escalonada comuns, 21-22, 113-114 janela gráfica, 23 método preditor-corretor,
reduzida, 343 382
forma reduzida, 388 G metodologia
formatação, 15
L
para desenvolver
gerador de números laço for, 172
formatos de exibição uma solução
aleatórios, 307 laço implícito, 177
numérica, 15 computacional, 42
gerenciando a sessão de laço while, 183
frequência absoluta, para resolução
trabalho, 12 laços aninhados, 174
296-297 de problemas de
gradiente, 378 laplaciano, 380
frequência relativa, 287 engenharia, 37-38
gráficos de barras, 295- legenda, 230
function handle, 124 métodos de Runge-Kutta,
296 limitador de velocidade,
função 383
gráficos de degraus, 235 448
aninhada, 131, 135 mínimos quadrados,
gráficos de hastes, 235 limites, 498
anônima, 131 312-313
grid, 25, 222 limites de eixo, 251
argumento, 117-118 modo celular, 190-191
complexa, 113-114 linear nos parâmetros, 327
de variáveis aleatórias,
H linha de definição de
311 handle, 124 função, 119 N
definida pelo usuário, handle de figura, 537- linha H1, 29-30 não linearidade de
119 538 saturação, 438
exponencial, 113-114 histograma, 295-296 M Navegador de Bibliotecas,
hiperbólica, 118 histograma de frequência 418-420
magnitude, 60-61
logarítmica, 124 normalizado, 300-302 marcadores de dados, nomeando variáveis, 11
matemática elementar, 25, 228 norma euclidiana, 341
113 I máscara, 180 números complexos, 16
minimização de, 126- importação de arquivos de matriz, 56 números normalmente
127 planilha, 173 aumentada, 333 distribuídos, 303-304
numérica, 115-116 importação de dados, criando uma, 55 números uniformemente
primária, 131 172 divisão, 83 distribuídos, 307
privada, 131 indexação de células, 90 especial, 82
sobrecarregadada, 131 indexando conteúdos, 90 exponenciação, 84 O
subfunção, 131 integração identidade, 82 objeto LIT, 397, 398
trigonométrica, 117-118 numérica, 369 inversa, 329-330 operações de aritmética
zeros de, 124 painel, 367-368 multiplicação, 75, 80 escalar, 8
função degrau, 400 simbólica, 495 nula, 82 operador booleano, 156-
função erro, 305 trapezoidal, 367-368 operações, 73 157
função gaussiana, 303- integração retangular, posto, 332 operador de atribuição, 10
304 367-368 singular, 331 operador de substituição,
função normal, 303-304 integral, transposta, 57 10
funções com entradas definida, 367-368 unidade, 82 operadores de
predefinidas, 405 dupla, 374 média, 295-296 curto-circuito, 160
funções de ajuda, 37-38 imprópria, 367-368 mediana, 295-296 operadores lógicos, 157-
funções de estruturas, 94 indefinida, 367-368 menu Debug, 192 158
funções de histograma, singularidade, 367-368 menu Edit, 17 operadores relacionais,
300 tripla, 375 menu File, 17
154-155
funções de integração Interface Basic Fitting, Menus do MuPAD
ordem de precedência, 9,
numérica, 369 282 Combine, 475
157-158
funções de interpolação interpolação, 312-313 General math, 472-473
linear, 316-317 bidimensional, 316-317 Rewrite, 476
funções de minimização e linear, 315-317 Simplify, 474 P
para encontrar raízes, 128 polinomial, 319-320 Solve, 479 página (em arranjos
funções de números polinômios de Hermite, método da divisão à multidimensionais), 81
aleatórios, 309 327 esquerda, 8, 333 painel, 468-469
funções especiais splines cúbicas, 316- método da pseudoinversa, pesquisa operacional,
(MuPAD), 509-511 317 340 192-193

Você também pode gostar