Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
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