Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução Ao MATLAB para Engenheiros v2
Introdução Ao MATLAB para Engenheiros v2
MATLAB ®
para engenheiros
3ª edição
CDU 62:004.4MATLAB
Tradução:
Tales Argolo Jesus
Mestre em Engenharia Elétrica pela UFMG
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.
Editoração: Techbooks
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
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.
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.
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 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.
1
MATLAB é uma marca registrada da empresa The MathWorks, Inc.
4 Introdução ao MATLAB para Engenheiros
2
Simulink e MuPAD são marcas registradas da empresa The MathWorks, Inc.
Capítulo 1 ■ Visão geral do MATLAB® 5
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
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
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
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,
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.
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.
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
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.
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
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.
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
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
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 é
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.
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.
† 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
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.
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
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
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.
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.
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.
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.
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
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.
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
3
As referências aparecem no Apêndice D.
40 Introdução ao MATLAB para Engenheiros
(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.
Uma vez que este texto é sobre MATLAB, podemos utilizá-lo para fazer
esse cálculo simples. A sessã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:
(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
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.
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.
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.
a. b. 3x2 c. d.
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.
a. b.
c.
c. d.
Estimativas mais precisas podem ser feitas com a equação de Van der Waals,
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.
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.
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
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.
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 é:
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
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:
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
é 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.
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.
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.
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
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)
■ 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:
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.
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.
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:
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].)
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.
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.
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
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
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)
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)
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
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:
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:
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
(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)
■ 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 é
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 é
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).)
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.
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
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).
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
quando x = 2.
T2.5-5 Plote o polinômio
y = x3 + 13x2 + 52x + 6
ao longo da faixa -7 … x … 1.
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/4m2 (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 é
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:
■ 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
Você pode utilizar a função celldisp para exibir o conteúdo completo. Por exemplo, ao
digitar celldisp(A) será exibido o seguinte:
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.
Estudante(1) Estudante(2)
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.
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.
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.
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’);
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
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
9. Dada a matriz
Seção 2.2
11.* a. Crie um arranjo D tridimensional cujas três “camadas” sejam essas matrizes:
Seção 2.3
12.* Dadas as matrizes:
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
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
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
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:
2R R
FIGURA P20
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
Lc
D W
Lb
FIGURA P24
Seção 2.4
25.* Utilize o MATLAB para encontrar os produtos AB e BA para as seguintes ma-
trizes:
transporte; (b) o custo total no ano com material, trabalho e transporte; e (c) os
custos trimestrais totais.
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.
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
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
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
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
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:
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
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. ■
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
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.
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)
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.
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
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.
ou
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
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
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.
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.
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
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 é
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.
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:
d
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çõ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
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
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
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.
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.
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.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
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 é:
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 é 2rh, e seu
volume é r2h. A área da superfície da parte superior hemisférica é dado por
2r2, e seu volume é dado por 2r3/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
2R R
FIGURA P13
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
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
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.
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.
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
Início
Falso
Expressão
lógica
Verdadeiro
Sentenças
Fim
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
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
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.
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.
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
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 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.
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
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,
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 é
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
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:
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
Verdadeiro
Grupo de
sentenças 3
Grupo de
sentenças 2
Fim
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.
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:
Início
Defina k ⫽ m
Verdadeiro
k ⬎ n?
Incremente
k em s
Falso
Sentenças
Fim
Sentenças
após o End.
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.
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).
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
é equivalente a
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
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 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 é
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)
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.
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.
ç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.
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
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,
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:
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.
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
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.
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.
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.
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
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.
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
No Exemplo 4.9-2 veremos como utilizar o MATLAB para resolver tais equações.
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
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
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:
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
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).
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.
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
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
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,
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.
e
206 Introdução ao MATLAB para Engenheiros
⫹
Diodo
vS vL
(a)
0,6V
⫹ ⫺
vS vL
(b)
FIGURA P27
Norte
30
1
20 2
y
(milhas)
3
5
10
6
4
0 Leste
0 10 20 30
x (milhas)
FIGURA P28
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
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
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
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
T2
W
T1 T (x, y) T1
0 x
0 L
T1
FIGURA P38
em que
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
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 é
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. ■
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.
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.
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
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
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.
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.)
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
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
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
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
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.
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
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.
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
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:
%% 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
Conteúdo
• Crie a variável independente.
• Defina a cúbica.
• Plote a cúbica.
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
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.
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).
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.
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.
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.
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.
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).
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
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
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
vi C
vo
FIGURA P26
258 Introdução ao MATLAB para Engenheiros
Seção 5.4
28. As equações paramétricas para uma hélice circular são
T2
W
T1 T (x, y) T1
0 x
0 L
T1
FIGURA P35
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
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
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.
80 102
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.
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
medido. Esse experimento foi repetido com o pote preenchido em vários níveis, e os resul-
tados são mostrados na seguinte tabela:
(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.
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.
x y
0 2
5 6
10 11
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
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 é
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.
(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)
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
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
■ 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
⫺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)
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.
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%.
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:
■ 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:
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.
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).
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
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:
Tempo (s) 0 1 2 3 4 5 6
Temperatura (°C) 300 150 75 35 12 5 2
A (oz) 0 1 2 3 4 5 6 7 8 9
T (min) 130 115 110 90 89 89 95 100 110 125
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.
T (K) P (torr)
273 4,579
278 6,543
283 9,209
288 12,788
293 17,535
289 23,756
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
C(t) = C(0)e-kt
Os seguintes dados descrevem a reação:
C(t) = C(0)e-kt
e a solução para uma reação de segunda ordem (n = 2) é
2NO2 → 2NO + O2
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.
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.
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.
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.
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
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
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
(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.
Quando você rodar esse programa, descobrirá que a média é = 69,6 in, e que o
desvio padrão é = 1,96 in.
(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)
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 é,
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%.)
(7.2-5)
(7.2-6)
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.
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.
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
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
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.
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
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,
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.
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.
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
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
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
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.
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.
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. ■
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.
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 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.
(8.1-3)
■ 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.
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:
1m 3m
3m B
4m
C D
5m
z 1m
y x
■ Solução
Se considerarmos mg = 1, as equações terão a forma AT = b, em que
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:
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
⫺ ⫺
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:
O valor negativo para E no segundo caso indica que o etanol está sendo mais consumido
do que produzido.
5x1 - 3x2 = 21
7x1 - 2x2 = 36
(Respostas: x1 = 6, x2 = 3)
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
(8.3-1)
A função do MATALB norm(v) calcula a norma euclidiana.
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
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.
Em formato matricial,
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.
■ Solução
A sessão do MATLAB é:
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.
■ 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
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.
200 300
f1
100 200
1 2
f4 f2
4 3
300 400
f3
500 600
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.
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
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.
em que
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.
A, b
Não
rank (A) ⫽ rank([A b])
?
Sim
Sim
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.
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.
A(BC + A) = B
b. Avalie a solução obtida no item a para o caso
356 Introdução ao MATLAB para Engenheiros
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
pb
q2
R2
R1
pa q1 p1
R3
q3
pc
(a)
pb
R2
R1
p1
pa
R3
pc
(b)
FIGURA P6
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
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
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:
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.
1 f1 2 f2 3
100 500
f3 f4 f5
4 5 6
300 200
f6 f7
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:
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
(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
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)
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
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
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
Algumas integrais aparentemente simples não apresentam solução em uma forma fecha-
da. Um exemplo é a integral cosseno de Fresnel:
(9.1-3)
(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:
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.
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
Calcule a integral
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
(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
(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
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
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
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.
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.
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,
(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)
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)
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.
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
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.
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.
(9.3-10)
(9.3-12)
(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)
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.
(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.
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)
(9.4-5)
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.
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
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.
(9.5-4)
A matriz A para essas equações é
(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-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.
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
(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.
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
(9.5-11)
(9.5-12)
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:
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)
■ 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
1,5
1
Resposta
0,5
⫺0,5
0 1 2 3 4 5 6 7 8 9 10
Tempo
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
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:
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 é
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
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
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:
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(5t)] 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.
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 é:
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)
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
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.
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
(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.
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
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.
1
10 s
Sine Wave Gain Integrator
Clock To Workspace
>>plot(y(:,2),y(:,1)),xlabel(’t’),ylabel(’y’)
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.
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.
em que
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
x' AxBu
y CxDu
Step State-Space Scope
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
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
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ó é:
m
f
ou
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
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.
60
0
50
40 ⬆0
v (t) (m/s)
30
20
10
0
0 1 2 3 4 5 6
t (s)
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.
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
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 = :
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
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).
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
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.
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
1
s22s4
Sine Wave Dead Zone Transfer Fcn 1
Mux 1 Scope
1
s 2s4
2
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))
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:
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
(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)
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 é
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
q1
h2
h1 A1 A2
R1 R2
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.
R1 R2 Rn1 Rn
v1 C1 C2 Cn1 Cn vn
k1 k2 k3 kn1
m1 m2 mn
Torque de
carga
Tensão de
1 1
K1 KT Velocidade
controle Ls R Is c
K2
∏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
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.
4
Gain
2
5s1
Unit-Step Rate Saturation Transport Transfer Fcn Height
5/4
Command Limiter Delay (with initial
s
outputs)
Transfer Fcn
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 é,
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
4500
f 200v 0,6
0
Força do amortecedor f (N)
f 800|v |0,6
0
v dy/dt dx/dt (m/s)
y(t) (m)
0,2
d
dt
fd
y x
fs 1 1 1
m s ẋ s
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.
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.
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.
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
Problemas
Seção 10.1
1. 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:
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
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 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
A função forçante é
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) = 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:
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.
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 é:
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
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
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
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
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
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.
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.
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
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
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.
O menu Simplify
General Exponential
Logical Logarithm
Radical Sine
Relational Cosine
O menu Combine
General Power
Arc Tangent SineCosine
Exponential Sine/Cosine Hyp
Logarithm Square Root
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
O menu Rewrite
Differential Heaviside
Exponential Logarithm
Factorial Sign
Gamma Sine/Cosine
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:
Para obter uma nova variável, você deve dar um nome à expressão:
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
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
O menu Solve
Exact Polynomial Diophantine Equation
Numeric Recurrences
Linear System ODE
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:
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 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:
1. se a ⬆ 0
2. se a = 0 e b ⬆ 0
Capítulo 11 ■ MuPAD 481
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
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:
(Resposta:
484 Introdução ao MATLAB para Engenheiros
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.
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.
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 é:
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
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.
Para avaliar uma matriz simbólica numericamente, utilize as funções float e subs:
Capítulo 11 ■ MuPAD 489
Isso é igual a R(-a), como pode ser verificado digitando-se simplify(subs(R,a = - a)).
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:
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:
(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
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
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.
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
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:
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
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 é:
(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:
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
Limites
A função limit(f, x ⴝ a) retorna o limite
(Resposta: 0)
T11.5-9 Utilize o MuPAD para avaliar
(Resposta: 2/75)
(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
A sessão é:
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 é:
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,
A sessão é:
A solução é:
Capítulo 11 ■ MuPAD 503
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.
(11.6-2)
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.
(11.7-1)
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)
(11.7-5)
em que
(11.7-6)
506 Introdução ao MATLAB para Engenheiros
(11.7-8)
(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:
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
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)
Se f(t) for uma função degrau unitário, F(s) = 1/s, e a resposta forçada é:
(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)
(11-7-17)
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.
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:
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.
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) é
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 é .
R L
c
i
v Ke I
T KTi
FIGURA P13
516 Introdução ao MATLAB para Engenheiros
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:
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,
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 é
26. A equação para a tensão v(t) entre os terminais de um capacitor como uma fun-
ção do tempo é
C L
vi R vo
FIGURA P28
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:
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:
a.
b.
c.
b.
c.
d.
e.
f.
a.
b.
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):
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
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 é æ.
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:
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
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
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 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 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 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
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 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.
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 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.
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.
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.
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:
[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 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
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
* 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