Buscar

Cal_Num_LIVRO_WEB_corrigido

Prévia do material em texto

Matemática
Cálculo Numérico
Marcelo Gomes Pereira
Roberto Hugo Bielschowsky
Cálculo Numérico
Matemática
Marcelo Gomes Pereira
Roberto Hugo Bielschowsky
Natal – RN, 2014
Cálculo Numérico
2ª Edição
Catalogação da publicação na fonte. Bibliotecária Verônica Pinheiro da Silva.
COORDENAÇÃO DE PRODUÇÃO DE MATERIAIS DIDÁTICOS
Marcos Aurélio Felipe
COORDENAÇÃO DE REVISÃO
Maria da Penha Casado Alves
COORDENAÇÃO DE DESIGN GRÁFICO
Ivana Lima
GESTÃO DO PROCESSO DE REVISÃO
Rosilene Alves de Paiva
GESTÃO DO PROCESSO DE DESIGN GRÁFICO
Dickson de Oliveira Tavares
PROJETO GRÁFICO
Ivana Lima
REVISÃO DE MATERIAIS
Camila Maria Gomes
Cristinara Ferreira dos Santos
Emanuelle Pereira de Lima Diniz
Eugenio Tavares Borges
Janio Gustavo Barbosa
Jeremias Alves de Araújo
Kaline Sampaio de Araújo
Luciane Almeida Mascarenhas de Andrade
Priscila Xavier de Macedo
Rhena Raize Peixoto de Lima
Thalyta Mabel Nobre Barbosa
Verônica Pinheiro da Silva
Orlando Brandão Meza Ucella
FICHA TÉCNICA
EDITORAÇÃO DE MATERIAIS
Alessandro de Oliveira Paula
Amanda de Lima Cabral
Amanda Duarte
Anderson Gomes do Nascimento
Carolina Aires Mayer
Carolina Costa de Oliveira
Dickson de Oliveira Tavares
Heloisa Fernandes Ferreira Nunes
José Agripino de Oliveira Neto
Leticia Torres
Luciana Melo de Lacerda
Mauricio da Silva Oliveira Junior
Revisão de estrutura e linguagem
Eugenio Tavares Borges
Janio Augusto Barbosa
Thalyta Mabel Nobre Barbosa
Revisão de língua portuguesa
Janaina Tomaz Capistrano 
Kaline Sampaio de Araújo
Samuel Anderson de Oliveira Lima
Revisão de normas da ABNT
Verônica Pinheiro da Silva
Diagramação
Elizabeth da Silva Ferreira
Ivana Lima
Johann Jean Evangelista de Melo
José Antonio Bezerra Junior
Mariana Araújo Brito 
Criação e edição de imagens
Adauto Harley
Carolina Costa de Oliveira
Heinkel Hugenin
Leonardo dos Santos Feitoza
Módulo matemático
Joacy Guilherme de A. F. Filho
Revisão tipográfi ca
Adriana Rodrigues Gomes
Letícia Torres
Margareth Pereira Dias
Nouraide Queiroz
IMAGENS UTILIZADAS
Banco de Imagens Sedis (Secretaria de Educação a Distância) - 
UFRN MasterClips IMSI MasterClips Collection, 1895 Francisco 
Blvd, East, San Rafael, CA 94901,USA. MasterFile – www.
masterfi le.cpom MorgueFile – www.morguefi le.com Pixel 
Perfect Digital – www.pixelperfectdigital.com FreeImages – 
www.freeimages.co.uk FreeFoto.com – www.freefoto.com Free 
Pictures Photos – www.fre-pictures-photos.com BigFoto – www.
bigfoto.com FreeStockPhotos.com – www.freestockphotos.com 
OneOddDude.net – www.oneodddude.net
Flickr.com - www.fl ickr.com
Governo Federal
Presidenta da República
Dilma Vana Rousseff
Vice-Presidente da República
Michel Miguel Elias Temer Lulia
Ministro da Educação
Henrique Paim
Universidade Federal do Rio Grande do Norte – UFRN
Reitora
Ângela Maria Paiva Cruz
Vice-Reitora
Maria de Fátima Freire Melo Ximenes
Secretaria de Educação a Distância (SEDIS)
Secretária de Educação a Distância
Maria Carmem Freire Diógenes Rêgo
Secretária Adjunta de Educação a Distância
Ione Rodrigues Diniz Morais
Todos as imagens utilizadas nesta publicação tiveram suas informações cromáticas originais alteradas a fi m de adaptarem-se 
aos parâmetros do projeto gráfi co © Copyright 2005. Todos os direitos reservados a Editora da Universidade Federal do Rio Grande 
do Norte – EDUFRN. Nenhuma parte deste material pode ser utilizada ou reproduzida sem a autorização expressa do Ministério da Educação – MEC
Pereira, Marcelo Gomes.
 Cálculo Númerico / Marcelo Gomes Pereira, Roberto Hugo Bielschowsky – 2. ed. – Natal: EDUFRN, 2014.
 300 p.: il.
ISBN 978-85-425-0362-3
 Disciplina ofertada ao curso de Matemática a Distância da UFRN.
 1. Algébra Linear. 2. Algoritmo. 3.Interpolação Polinomial. 4. Integração Númerica. 5. Scilab. I. Bielscho-
wsky, Roberto Hugo. II. Título.
 CDU 519.6
 P436c
Sumário
Apresentação Institucional 5 
Aula 1 Aritmética de ponto flutuante e erros numéricos 7
Aula 2 Introdução ao Scilab 29
Aula 3 Sistemas de equações lineares 55
Aula 4 SEVs do Rn, Bases e ajustes de modelos com quadrados mínimos 81
Aula 5 Autovalores e Valores Singulares 107
Aula 6 Valores singulares e erros numéricos ao resolver Ax = b 133
Aula 7 Algoritmos e programação com o Scilab – Parte I 159
Aula 8 Algoritmos e programação com o Scilab – Parte II 179
Aula 9 Zeros de funções 201
Aula 10 Interpolação polinomial 221
Aula 11 Integração numérica 241
Aula 12 Introdução Numérica às Equações Diferenciais Ordinárias 265
Apresentação Institucional
A Secretaria de Educação a Distância – SEDIS da Universidade Federal do Rio Grande do Norte – UFRN, desde 2005, vem atuando como fomentadora, no âmbito local, das Políticas Nacionais de Educação a Distância em parceira com a Secretaria de Educação 
a Distância – SEED, o Ministério da Educação – MEC e a Universidade Aberta do Brasil – 
UAB/CAPES. Duas linhas de atuação têm caracterizado o esforço em EaD desta instituição: a 
primeira está voltada para a Formação Continuada de Professores do Ensino Básico, sendo 
implementados cursos de licenciatura e pós-graduação lato e stricto sensu; a segunda volta-se 
para a Formação de Gestores Públicos, através da oferta de bacharelados e especializações 
em Administração Pública e Administração Pública Municipal.
Para dar suporte à oferta dos cursos de EaD, a SEDIS tem disponibilizado um conjunto de 
meios didáticos e pedagógicos, dentre os quais se destacam os materiais impressos que são 
elaborados por disciplinas, utilizando linguagem e projeto gráfico para atender às necessidades 
de um aluno que aprende a distância. O conteúdo é elaborado por profissionais qualificados e 
que têm experiência relevante na área, com o apoio de uma equipe multidisciplinar. O material 
impresso é a referência primária para o aluno, sendo indicadas outras mídias, como videoaulas, 
livros, textos, filmes, videoconferências, materiais digitais e interativos e webconferências, que 
possibilitam ampliar os conteúdos e a interação entre os sujeitos do processo de aprendizagem.
Assim, a UFRN por meio da SEDIS integra-se ao grupo de instituições que assumiram 
o desafio de contribuir com a formação desse “capital” humano e incorporou a EaD como 
modalidade capaz de superar as barreiras espaciais e políticas que tornaram cada vez mais 
seleto o acesso à graduação e à pós-graduação no Brasil. No Rio Grande do Norte, a UFRN 
está presente em polos presenciais de apoio localizados nas mais diferentes regiões, ofertando 
cursos de graduação, aperfeiçoamento, especialização e mestrado, interiorizando e tornando o 
Ensino Superior uma realidade que contribui para diminuir as diferenças regionais e transformar 
o conhecimento em uma possibilidade concreta para o desenvolvimento local.
Nesse sentido, este material que você recebe é resultado de um investimento intelectual 
e econômico assumido por diversas instituições que se comprometeram com a Educação e 
com a reversão da seletividade do espaço quanto ao acesso e ao consumo do saberE REFLETE 
O COMPROMISSO DA SEDIS/UFRN COM A EDUCAÇÃO A DISTÂNCIA como modalidade 
estratégica para a melhoria dos indicadores educacionais no RN e no Brasil. 
Secretaria de Educação a Distância 
SEDIS/UFRN
5
1
Aula
Aritmética de ponto flutuante 
e erros numéricos
Aula 1 Cálculo Numérico 9
Apresentação
Bem-vindo à disciplina Cálculo Numérico! 
Está curioso para saber do que se trata?
O Cálculo Numérico diz respeito às resoluções aproximadas de problemas. Seu principal 
alvo está nas aplicações a modelos que retratem algum fenômeno concreto. Em particular, 
nesta disciplina, trabalharemos modelos ligados à dinâmica populacional com dados do IBGE 
e que permitem estimar populações em tempos futuros, calcular a trajetória de um cometa, 
conhecendo alguns pontos de sua órbita, estimar áreas de regiões num mapa, modelar 
problemas simples em engenharia, representar soluções numéricas de problemas modelados 
por equações diferenciais etc... 
Esta é uma disciplina que tem muito mais a ver com Matemática aplicada do que com 
Matemática pura e tem como um de seus objetivos propiciar uma ideia inicial de temas 
e métodos em Matemática aplicada. Em particular, será muito útil na disciplina “Modelos 
Matemáticos”, que consta em seu currículo e na qual você trabalhará diferentes temas de 
realidade concreta que admitem uma modelagem matemática significativa. Aqui, trataremos 
de questões ligadas ao Cálculo e à Álgebra Linear, usando o computador para encontrar 
aproximações. Esperamos que você não torça o nariz para a palavra “aproximações”. 
É verdade que uma solução aproximada de um problema traz naturalmente um erro. 
Mas isso não significa que seja inútil. Pelo contrário, muitos problemas matemáticos não têm 
solução exata ou ela simplesmente não nos interessa. Na verdade, não existe medida precisa 
de grandezas no mundo real. Todas as medidas de fenômenos reais contêm, necessariamente, 
imprecisões a partir de alguma casa decimal. O Cálculo Numérico vem se tornando uma 
ferramenta cada vez mais importante na modelagem matemática de problemas aplicados, na 
medida em que computadores fazem contas numéricas com grande velocidade, desde que 
se admitam pequenos erros de arredondamento em cada operação.
Muito em especial, a Álgebra Linear vem se tornando uma ferramenta cada vez mais 
indispensável nas aplicações, por ser uma espécie de elo de ligação através do qual modelos 
matemáticos dialogam com os computadores. O grosso do tempo computacional gasto num 
programa para resolver uma aplicação relevante, com alguma complexidade numérica, é 
usualmente gasto em rotinas de Álgebra Linear. Já o velho Cálculo, pelo menos tão velho 
quanto Newton e Leibnitz, continua tão fundamental como sempre, pois cá de nosso cantinho 
de onde conseguimos enxergar as coisas, olhando para as equações que regem fenômenos 
naturais, às vezes dá a impressão que derivada e integral teriam sido as principais ferramentas 
utilizadas na criação do Universo. 
Aula 1 Cálculo Numérico10
O velho cálculo continua sendo cada vez mais a ferramenta fundamental com a qual se 
escrevem não apenas as equações dos primórdios de nosso Universo e da Física como um 
todo, mas também de ecossistemas marinhos, de dinâmicas econômicas, do clima em nosso 
Planeta, de reatores químicos etc. Com uma diferença fundamental do que acontecia até cerca 
de sessenta anos atrás: agora, sabemos fazer contas rapidamente, entrando no computador 
com dados escritos na forma de vetores e matrizes de números. Daí a importância crescente 
do Cálculo Numérico. 
Linhas gerais de como está organizada a disciplina
Organizaremos a disciplina como uma espécie de revisita à Álgebra Linear e ao 
Cálculo, conduzida pelo Scilab, que é um programa bom nesta coisa de fazer 
contas rapidamente, além de ser muito amigável e livre (grátis). 
Nas aulas 2, 3, 4, 5 e 6, privilegiaremos uma revisita à Álgebra Linear, através dos 
comandos do Scilab, de forma a reconhecer muitos dos métodos que você estudou em Álgebra 
Linear I e II. AL1 e AL2, como a elas nos referiremos. O ponto central desta revisita à Álgebra 
Linear é que será realizada em aritmética de ponto flutuante, como veremos nesta aula, por 
oposição à aritmética exata, ou seja, com números reais sem aproximações, como você viu 
em AL1 e AL2. Por um lado, isso faz com que as contas sejam realizadas com velocidade 
extraordinária num computador, o que é fundamental nas aplicações. Pelo outro, gera erros de 
arredondamento que podem se acumular a ponto de inviabilizar completamente as soluções 
obtidas nos computadores, conforme teremos a oportunidade de ver em vários momentos e, 
muito em especial, na Aula 6, na qual trataremos da sensibilidade de um sistema linear a dados. 
De modo que, bem distinto de uma repetição de algo já visto, trata-se de revisitar a 
Álgebra Linear com um olhar bem diferente. Em especial, gostaríamos de combinar com 
você que, nesta disciplina, sobretudo nas aulas 2, 3, 4, 5 e 6, tenha sempre à mão as aulas 
de Álgebra Linear I e II e que revejam essas disciplinas sempre que recomendarmos. Além 
disso ser muito importante nesta disciplina e evitar repetições inúteis de conteúdo, esperamos 
convencê-lo de um princípio pedagógico que nos parece importante.
Ao revisitarmos conceitos, com mais experiência e sob uma nova ótica, os 
consolidamos de uma maneira surpreendente. Em particular, o que nos parecia 
tão difícil antes, de repente fica bem fácil de entender e bem mais interessante.
Aula 1 Cálculo Numérico 11
As aulas 7 e 8 (Algoritmos e programação com Scilab I e II) serão dedicadas a uma 
introdução a algoritmos e a sua programação em Scilab. Trata-se principalmente de dar 
um pontapé inicial num assunto fundamental para o cálculo numérico e no qual o Scilab é 
especialmente amigável. Nas demais aulas, trataremos de algoritmos relacionados a cálculo 
diferencial e integral, visando encontrar zeros de funções, realizar interpolação polinomial, 
calcular aproximações numéricas de integrais, resolver numericamente equações diferenciais, 
obter estimativas para os erros cometidos em alguns dos métodos estudados, aplicar as 
técnicas desenvolvidas a problemas interessantes etc.
Esta primeira aula, em linhas gerais
Esta primeira aula fala da aritmética de ponto flutuante e de erros numéricos decorrentes 
de se arredondar resultados de contas. Esse é um tema fundamental, que nos acompanhará 
transversalmente em toda a disciplina. A aritmética de ponto flutuante corresponde, grosso 
modo, a considerarmos apenas um certo número de algarismos para representar grandezas, 
como usualmente fazemos com medidas de tamanho. 
Que sentido tem representar com vinte casas decimais resultados operados a partir de 
medidas feitas com precisão de quatro casas apenas? 
A contrapartida é que em cada operação realizada ocorrerão erros de aproximação em 
alguma casa decimal. O acúmulo de erros numéricos, mesmo que bem pequenos cada um, 
em problemas envolvendo bilhões de operações aritméticas, pode deformar completamente a 
solução obtida, a depender do problema em questão e do algoritmo empregado para resolvê-lo. 
Esse é um dos temas centrais da análise numérica, e o tangenciaremos na Aula 5. Nesta aula, 
pretendemos alertar você sobre dificuldades numéricas que podem ocorrer ao se trabalhar com 
o computador. 
Objetivos
Calcular erros absoluto e relativo.
Efetuar arredondamento e truncamento.
Representar números em diferentes bases.
Introduzir o sistema “aritmética de ponto 
flutuante”.
1
2
3
4
Aula 1 Cálculo Numérico12
Introdução
Imagine-se na situação de alguém que tem um terreno medindo 10m por 10m e precisa 
dividi-lo ao meio por uma cerca na diagonal do terreno. Para comprar arame e fazer a cerca, 
você precisa saber qual o comprimento dela. Como descobrir isso?
10
10
x
Felizmente, você conhece o teorema de Pitágoras e sabe que as medidas em questão 
devem satisfazer a equação x 2 = 102 + 102 = 2  102. Então, a cerca na diagonal terá um 
comprimento de 10
√
2m.Mas, não dá para pedir 10
√
2m de cerca na loja de ferragens. O 
que você faz é utilizar uma calculadora ou o computador para traduzir essa informação em um 
número mais compreensível. Pedimos que, neste momento, você pare a leitura, pegue uma 
calculadora (de celular ou científica) ou ligue o computador e acione o Scilab. Em seguida, 
calcule 10
√
2m. De acordo com o número que encontrar, pense em quanto de cerca seria 
razoável pedir.
Usamos uma calculadora de celular e o resultado encontrado foi:
10
√
2 = 14, 1.
Já em uma calculadora científica, o resultado encontrado foi:
10
√
2 = 14, 14213562 .
No computador, com o programa Scilab, encontramos:
10
√
2 = 14, 142135623730951.
Na verdade, nenhum dos valores encontrados é exatamente 10
√
2 . O fato é que esse é 
um número irracional, com infinitas casas decimais que não se repetem de acordo com um 
padrão. Então, por mais poderosa que seja a ferramenta que utilizarmos para efetuar esse 
cálculo, tudo o que poderemos encontrar são aproximações de 10
√
2 .
Felizmente, para o nosso problema da cerca, não é necessário ter o valor exato. Bastaria 
saber que 14,2 metros de cerca já é mais do que o necessário. Esse tipo de situação em que 
não se pode ter a solução exata do problema, mas ficamos satisfeitos com uma solução 
aproximada, é muito comum em nosso dia-a-dia.
Aula 1 Cálculo Numérico 13
Erros
Quando falamos de soluções aproximadas, falamos também em erros numéricos. No 
exemplo da cerca, no início desta aula, foram calculados três valores diferentes para 10
√
2. Cada 
um deles tem uma certa distância do valor exato. Essa distância é o que estamos chamando 
de erro. Ter controle sobre os erros é fundamental quando se trabalha com aproximações. 
Dois tipos são do nosso interesse: os erros absolutos e os relativos.
O erro absoluto é simplesmente a diferença entre o valor exato de um número x e seu 
valor aproximado x .
No caso de 10
√
2 , é impossível obter o valor exato do erro absoluto. Num caso como 
esse o que se faz é obter uma estimativa para o módulo do erro absoluto. Por exemplo, 
como sabemos que 10
√
2 está entre 14 e 14,2, podemos garantir que o erro cometido com a 
aproximação obtida no celular é menor que 0, 2, que é a maior diferença possível para valores 
x que estão entre 14 e 14,2.
Já com os valores 14,14213562 e 14,142135623730951 podemos ter uma estimativa 
mais precisa do valor de 10
√
2. Observe que as duas aproximações coincidem até o segundo 
algarismo 2. Podemos então estreitar o intervalo que contém a solução exata. Concluímos que 
10
√
2 é um número entre 14,14213562 e 14,14213563. Assim, a nossa última aproximação 
possui um erro absoluto menor que 0,00000001.
À primeira vista, esse último erro é muito pequeno. Imagine que alguém lhe dissesse que 
cometeu um erro de 0,00000001. A primeira reação é achar que esse número é insignificante, 
quase zero. Isso pode ser verdade em muitas situações. Mas, o fato é que nossa noção de 
pequeno depende daquilo que estamos observando. No caso de 10
√
2 , o erro cometido é 
satisfatório para muitos problemas práticos. 
Porém, se pensarmos em uma situação em que a solução exata é 0,0000000000000002, 
então uma aproximação que tem um erro de 0,00000001 está muito longe do ideal. Por causa 
dessa necessidade de se comparar o erro com as grandezas medidas, emprega-se a definição de 
erro relativo, que é o erro absoluto dividido pelo valor aproximado. No exemplo anterior, se a solução 
exata é 0,0000000000000002 e cometemos um erro absoluto de 0,00000001, então podemos 
ter encontrado a aproximação 0,0000000099999998. Dessa forma, o erro relativo seria de 
 ER =
EA
x
=
0, 00000001
0, 0000000099999998
∼= 1, 0000000200000004000000080000002
 
. Ou seja, 
mais de 100% de erro.
Já no exemplo de 10
√
2 , temos:
|ER| = |EA|
|x|
<
0, 00000001
14, 142135623730951
∼= 0, 0000000007 = 7 × 10−10 .
Atividade 1
Aula 1 Cálculo Numérico14
a) Encontre aproximações de π com o máximo de algarismos que conseguir.
b) Calcule os erros absoluto e relativo cometidos pela sua aproximação.
Aula 1 Cálculo Numérico 15
Arredondamento e truncamento
Vamos fazer um pequeno exercício com uma planilha eletrônica (Excel, BrOffice). Na 
barra de fórmulas, digite “=PI()”. Esse comando retorna a constante π = 3,141592... Na barra 
de ferramentas, procure pelo botão ,00,0 
“diminuir casas decimais” e aperte-o até que sua 
tela fique parecida com esta:
Agora, procure pelo botão 
,0
,00 “aumentar casas decimais” e aperte-o duas vezes. O 
valor de π que aparece é 3,142. Se você apertar o botão ,0,00 mais uma vez, aparecerá 3,1416. 
Outra vez, e aparecerá 3,14159.
Por que o valor de π, mostrado na planilha, muda tanto?
A resposta é que cada vez que apertamos um dos botões mostrados, estamos dizendo 
ao programa que queremos ver uma aproximação de π com um determinado número de 
casas decimais. Para escolher qual será o último algarismo mostrado, o programa faz um 
arredondamento, analisando o algarismo seguinte ao último a ser mostrado.
Suponha que queremos usar uma aproximação do número N = I, d1d2d3d4 com apenas 
três casas decimais. Aqui, I é a parte inteira de N e os di são os dígitos após a vírgula. Então, 
o programa faz o seguinte:
 � se d4 < 5, então N é apresentado como N = I, d1d2d3;
 � se d4 ≥ 5, então, no lugar de d3, usa-se d3 + 1.
 Desse modo, quando você disse à planilha que queria uma aproximação de π com 
somente um algarismo após a vírgula, ela verificou que a segunda casa após a vírgula é 
ocupada pelo número 4, que é menor do que 5. Assim, não houve alteração na primeira 
casa decimal.
Aula 1 Cálculo Numérico16
 Já quando foi dito ao programa que ele deveria mostrar π com três casas decimais após 
a vírgula, verificou-se que o quarto algarismo após a vírgula é 5, que é maior do que ou igual 
a 5. Então, foi adicionado 1 ao terceiro algarismo, resultando em 3,142.
 O número π é irracional. Portanto, não tem uma representação finita. 
Vamos ver até onde vai a capacidade do programa?
Continue apertando o botão de aumentar as casas decimais. Em algum momento, você 
terá um resultado parecido com este:
Observe que após o último 9, somente zeros aparecem, como se π fosse racional. O 
que aconteceu aqui?
 Acontece que computadores e calculadoras só trabalham com quantidades finitas de 
casas decimais. Existe um limite para o número de algarismos que podem ser armazenados 
pelas máquinas. Quando esse número é maior do que a capacidade da máquina, uma das 
seguintes saídas é utilizada: arredondamento ou truncamento.
 Nesse último exemplo foi usado o truncamento, que é simplesmente ignorar o restante 
das casas decimais. O número π foi “cortado” na 14ª casa decimal.
Aula 1 Cálculo Numérico 17
Atividade 2
A utilização de arredondamento ou truncamento implica em erros. Para ilustrar 
esse fato, suponha uma calculadora que mostra somente 5 dígitos. 
a) Como seria mostrado o resultado da multiplicação de 0,937 por 0,1272 ? 
(Leve em consideração os dois métodos de aproximação: arredondamento 
e truncamento).
b) Qual o erro cometido pela calculadora em cada caso?
Aula 1 Cálculo Numérico18
Representação de números 
racionais em diferentes bases
 Existem infinitas maneiras de se representar um número. Estamos acostumados a 
representar 123 (cento e vinte e três) dessa forma porque nosso sistema de numeração utiliza 
a base 10. Isso significa que o último algarismo deve ser multiplicado por 100, o penúltimo 
por 101, o antepenúltimo por 102 e os resultados devem ser somados. Ou seja,
123 = 1  102 + 2  101 + 3  100.
 Mas, essa é apenas uma forma de fazê-lo. 
Quem disse que temos que usar 10 como base? Poderíamos usar outra? Como 
ficaria cento e vinte e três na base 7? 
Note que 123 = 2  72 + 3  71 + 4  70.
Então, se usássemos a base 7, escreveríamos cento e vinte e três como 234.
É comum distinguir as representações de um número usando a seguinte notação:
(djdj–1...d2 d1d0)β = dj β j + dj–1 β j–1 +... + d2β 2 + d1β 1 + d0β 0.
 Assim, temos (123)10 = (234)7.
Exercício resolvido 1
Converta (10111)2 para a base 10 e (123)10 para a base 2.
Solução
É fácil converter para a base 10. Basta fazer a conta 
1  24 + 0  23 + 1  22 + 1  21 + 1  20 = (23)10.
Já para fazer a conversão da base 10 para a base 2, dividimos 123 por 2 e 
observamos que 123 = 61  2 + 1.
Aula 1 Cálculo Numérico 19
Dividimos 61 também por 2. Assim, verificamos que 123 = (30  2 + 1)  2 + 1.
Agora repetimos o procedimento com 30. Daí, 123 = ((15  2 + 0)  2 + 1)  2 + 1.
Continuando, dessa forma, encontraremos a seguinte sequência de igualdades:
123 = (((7  2 + 1)  2 + 0)  2 + 1)  2 + 1
= ((((3  2 + 1)  2 + 1)  2 + 0)  2 + 1)  2 + 1
= ((((1  2 + 1)  2 + 1)  2 + 1)  2 + 0)  2 + 1)  2 + 1.
Então, distribuindo as multiplicações, podemos ver que: 
123 = 1  20 + 1  21 + 0  22 + 1  23 + 1  24 + 1  25 + 1  26.
Ou ainda, reordenando os coeficientes, (123)10 = (1111011)2.
Atividade 3
Converta (11111)2 para a base 10 e (11)10 para a base 2.
Aula 1 Cálculo Numérico20
Vale lembrar que o mesmo raciocínio é válido para representações com casas 
decimais. A representação (2,35)10 significa que o número em questão é obtido como 
2  100 + 3  10–1 + 5  10–2. A vírgula indica o lugar da potência de expoente zero e que, 
a partir daquele lugar, as potências utilizadas terão expoentes negativos.
 Da mesma forma, (10,01)2 = 1  21 + 0  20 + 0  2–1 + 1  2–2 = (2,25)10.
Aritmética de ponto flutuante
 Um computador normalmente opera com a representação binária (base 2). Mas, além da 
escolha da base, a representação de um número real é feita no sistema denominado aritmética 
de ponto flutuante. Nesse sistema, um número é representado na forma:
–+ (0.d1d2...dk )  β e,
onde β é a base utilizada e os dígitos kddd ...21 são chamados de mantissa do número.
Funciona da seguinte maneira: se a base de representação é 10 e queremos colocar 
o número 280,4 no sistema de aritmética de ponto flutuante, escrevemos 0.2804  103. 
Ou seja, deslocamos a vírgula até obtermos 0,2804 e multiplicamos por uma potência de 
10 cujo expoente é determinado pelo deslocamento da vírgula. Como os computadores 
e as calculadoras geralmente trabalham com ponto no lugar da vírgula, também fizemos 
essa substituição.
 O procedimento é o mesmo com qualquer base. Tome, por exemplo, o número (10,01)2. 
Fazemos o deslocamento e multiplicamos pela potência de 2. Então, a representação em 
aritmética de ponto flutuante é 0.1001  22. Cuidado, se você for verificar essa conta! Lembre-
se que 0.1001 está na representação binária. Ele representa o número 1  2–1 + 0  2–2 + 
0  2–3 + 1  2–4 = (0,5625)10.
 Em qualquer que seja a máquina podemos contar somente com uma capacidade finita de 
representação de números. Por limitações físicas, as máquinas só operam com um determinado 
número de dígitos na mantissa. Também é finita a quantidade de expoentes disponíveis. Por 
exemplo, considere uma máquina que opere com base 10, com 5 dígitos na mantissa e 
expoentes entre –8 e 8. Os números serão representados na forma 0.d1d2d3d4d5  10e, 
onde cada dígito di está entre 0 e 9, com d1 =/ 0 e e ∈ [– 8,8].
Qual o menor número positivo que pode ser representado nessa máquina?
Aula 1 Cálculo Numérico 21
Como devemos ter d1 =/ 0, a menor possibilidade é m = 0.10000  10–8 = 10–9.
E o maior?
Aqui, escolhemos os maiores valores possíveis para os dígitos e para o expoente. Daí, 
temos M = 0.99999  108 = 99999000.
 Seja G = { x ∈ ℜ | m ≤ x ≤ M }. Dado um número real x, uma das seguintes 
possibilidades ocorre:
1) x ∈ G
se for este o caso, há ainda duas possibilidades:
1.1) x tem uma quantidade de dígitos menor que ou igual a cinco na mantissa e, portanto, é 
representado exatamente nessa máquina; 
1.2) x tem uma quantidade de dígitos na mantissa maior que 5. Então, não pode ser representado 
exatamente nessa máquina. Tome como exemplo o número 28,0476. Esse é um número que 
possui 6 dígitos na mantissa. Sua representação em ponto flutuante é 0.280476  102. Para 
ser representado pela máquina, será feito um truncamento ou um arredondamento. Dessa 
forma, o número usado pela máquina será 0.28047  102 ou 0.28048  102.
2) |x | < m ou |x | > M
a máquina dará, teoricamente, uma mensagem de erro, pois o número não pode ser 
representado nela. Por exemplo, os números 10–10 ou 1010 não podem ser representados 
nessa máquina. Na prática, o “zero” em ponto flutuante é, em muitos programas, geralmente 
representado com o menor expoente possível naquele programa e não como o zero dos 
números reais. Isso deriva dos problemas numéricos inerentes a operações com números 
abaixo deste “zero”, em valor absoluto, ou cujos resultados, em valor absoluto, estejam 
abaixo deste “zero”. Tais programas são mais precavidos e advertem da possibilidade de 
riscos numéricos, se determinadas operações resultam em números abaixo deste “zero” 
do programa. No caso do Scilab, com o qual trabalharemos, e onde o “zero” do programa 
seria da ordem de 10–324, ele considera todos os números que surjam entre 0 e 10–324 como 
“zero”, sem maiores precauções em denunciar que aconteceram problemas nas operações 
realizadas, caso tais números excepcionalmente pequenos surjam lá pelo meio das contas. 
Atividade 4
Aula 1 Cálculo Numérico22
Complete a Tabela 1 dando as representações dos números em um sistema de 
aritmética de ponto fl utuante de três dígitos, base 10 e expoente entre –4 e 4.
Tabela 1 – Representações dos números em um sistema de aritmética de ponto 
fl utuante de três dígitos, base 10 e expoente entre –4 e 4 
X Representação obtidapor arredondamento
Representação obtida
por truncamento
1,25
10,053
–238,15
2,71828...
0,000007
718235,82
 
Erros relativos em aritmética de ponto fl utuante: 
estabilidade na adição e possível amplifi cação na subtração
Observe, no Exemplo 1, como o erro relativo na subtração de dois números positivos, 
relativamente próximos entre si, pode fi car muito maior que os erros relativos no truncamento 
de cada um dos números, enquanto que o mesmo não acontece com sua adição. 
Exemplo 1
Considere x = 2617/45871 e y = 2618/45872.
1) Calcule 
√
x −√y e
√
x +
√
y usando uma máquina de calcular comum.
A nossa calculadora utiliza 11 dígitos signifi cativos e nos deu:
d =
√
y −
√
x = 0, 00004302799;
 s =
√
y +
√
x = 0, 47776691255.
2) Obtenha d = √x −√y e s =
√
x +
√
y em aritmética de ponto fl utuante, sempre na 
base 10. Porém, usando apenas 5 dígitos signifi cativos e truncando a partir da sexta casa. 
Aula 1 Cálculo Numérico 23
Nesse caso, x = 0.05706 e y = 0,05708. Ao calcular 
√
x −√y e 
√
x +
√
y , utilizando apenas 
5 casas decimais em cada operação realizada, truncando a sexta casa, obtivemos: 
 � d =
√
y −
√
x = 0, 00004;
 � s =
√
y +
√
x = 0, 47776.
3) Avalie os erros relativos das duas contas feitas no item anterior.
Começamos avaliando os erros absolutos cometidos até 4 casas decimais significativas e 
operando sempre por truncamento, como sendo:
 � ∆sAbs 0,477766912 – 0,47776 = 0, 6912*10–6;
 � ∆dAbs 0,000043027 – 0,00004 = 0,3027*10–6.
Os correspondentes erros relativos podem então ser estimados por:
 � ∆Srel ≈ ∆SAbs
/ (√
y +
√
x
)
= 6912∗10∧(−6)/0.47776 = 0.144∗10−5 .
 � ∆drel ≈ ∆dAbs
/ (√
y −
√
x
)
= 0, 3027∗10−6/0.00004 = 0.757∗10−2.
Observação – Note que, no Exemplo 1, obtivemos um erro relativo ∆s rel  0.144*10–5, 
na soma s =
√
y +
√
x , feita com cinco dígitos, indicando um acerto em cinco casas decimais 
nesta conta. Melhor que isso não poderíamos esperar, já que estamos truncando as contas 
na quinta casa decimal. Já na subtração d =
√
y −
√
x , obtivemos ∆d rel  0.757*10–2, 
indicando um acerto de apenas duas casas decimais, o que é consideravelmente pior. Isso não 
foi por acaso e leva o nome de erro de cancelamento. Indicamos, a seguir, por que a subtração 
de dois números relativos pode amplificar drasticamenteos erros relativos em x e y, enquanto 
que a soma é mais estável, produzindo resultados da mesma ordem de grandeza que os erros 
absolutos em x e y. Digamos que x e y representam aproximações de dois números reais positivos 
x e y. Os erros absolutos dessas aproximações seriam, então, ∆x = x − x e ∆y = y − y . 
Considere ainda: 
 � s = x + y e d = x – y (soma e subtração de x e y); 
 � s = x + y e d = x − y e s = x + y e d = x − y (soma e subtração das correspondentes aproximações).
Os correspondentes erros relativos ∆drel e ∆srel satisfarão, então:
 � |∆Srel | = |(S − s)/s| =
|∆x + ∆y|
x + y
≤ |∆x|
x + y
+
|∆y|
x + y
≤ |∆x|
x
+
|∆y|
y
= |∆xrel |+ |∆yrel |
 � ∆drel = (d − d)/d =
∆x − ∆y
x − y
=
∆x
x − y
− ∆y
x − y
Resumo
Aula 1 Cálculo Numérico24
Veja que, para a soma, nossa conta acima diz que o seu erro relativo seria, em módulo, 
limitado pela soma dos módulos dos erros relativos em x e y. Já para a diferença, se os 
números x e y estiverem próximos, os denominadores de 
∆x
x − y
e
∆y
x − y indicam que 
∆drel pode ser consideravelmente maior que os erros relativos
 
∆xrel =
∆x
x
e ∆yrel =
∆y
y
, 
como aconteceu no Exemplo 1.
No Exemplo 1 e na Observação 1 já temos um indício do preço a pagar por usarmos 
aritmética de ponto flutuante no lugar de aritmética exata. Na verdade, a mais severa das 
limitações ao se trabalhar com a aritmética de ponto flutuante reside na possibilidade do 
acúmulo de erros numéricos resultar em erros significativos no resultado devolvido, ao cabo 
de muitas operações aritméticas realizadas sequencialmente, mesmo que cada um dos erros 
seja relativamente pequeno. Inclusive, podendo distorcer completamente a solução procurada 
de algum problema, conforme teremos a oportunidade de verificar em algumas das aulas 
seguintes, a depender de cada problema e dos algoritmos empregados. Na aula 5, discutiremos 
um pouco mais a questão da amplificação de erros numéricos em aritmética de ponto flutuante. 
Autoavaliação
1) Responda às questões a seguir: 
a) Qual a diferença entre erro absoluto e erro relativo?
b) O que é arredondamento? E truncamento?
c) Como encontrar a representação de um número em uma base diferente da base 10?
d) Como se representa um número no sistema aritmética de ponto flutuante?
Nesta aula, você aprendeu a calcular erros de aproximações. Viu que se pode 
obter aproximações por arredondamento e truncamento. Aprendeu a converter 
representações de números e viu que as máquinas operam com aritmética de 
ponto flutuante.
Aula 1 Cálculo Numérico 25
Exercícios propostos
1) Converta os seguintes números decimais para sua forma binária:
a) 25;
b) 2345;
c) 0,5.
2) Converta os seguintes números binários para sua forma decimal:
a) (10111)2;
b) (0,1101)2;
c) (11,11)2.
3) Considere um sistema de aritmética de ponto flutuante de quatro dígitos e base decimal. 
Dados os números x = 0.937  104 e y = 0,1272  102, efetue as seguintes operações 
e obtenha o erro relativo no resultado, supondo que x e y estão exatamente representados:
a) x + y;
b) xy.
4) Considere uma máquina cujo sistema de representação de números é definido por: β = 10, 
quatro dígitos na mantissa e e ∈ [–5, 5]. Pede-se:
a) Qual o menor e o maior números em módulo representados nesta máquina?
b) Como será representado o número 73.758 nesta máquina, se for usado arredondamento? 
E se for usado truncamento?
c) Se a = 42.450 e b = 3, qual o resultado de a + b?
d) Qual o resultado da soma S = 42450 +
10∑
k=1
3
 
nesta máquina?
Referências 
FRANCO, Neide Bertoldi. Cálculo numérico. São Paulo: Pearson Prentice Hall, 2006.
PIRES, Paulo Sérgio da Motta. Introdução ao Scilab: versão 3.0. Natal: Departamento de 
Engenharia de Computação e Automação; Universidade Federal do Rio Grande do Norte, 2004. 
Disponível em: <www.dca.ufrn.br/~pmotta/sciport-3.0.pdf>. Acesso em: 30 jan. 2009.
RUGGIERO, Márcia A. Gomes; LOPES, Vera Lúcia da Rocha. Cálculo numérico: aspectos 
teóricos e computacionais. São Paulo: Makron Books, 1996. 
Aula 1 Cálculo Numérico26
Respostas dos exercícios propostos
1) a) (11001)2; b) (100100101001)2; c) (0,1)2
2) a) (23)10 ; b) (0,8125)10 ; c) (3,75)10
3) x + y é 0.9383  104 no arredondamento e 0.9382  104 no truncamento.
xy é 0.1192  106 no arredondamento e 0.1191  106 no truncamento.
4) a) m = 0.1000  10–5 e M = 0.9999  105; 
b) No arredondamento: 0.7376  102. No truncamento: 0.7375  102; 
c) a + b = 0.4245  105; 
d) S = 0.4245  105.
Aula 1 Cálculo Numérico 27
Anotações
Aula 1 Cálculo Numérico28
Anotações
Aula
2
Introdução ao Scilab
Aula 2 Cálculo Numérico 31
Apresentação
Esta aula é uma pequena introdução ao programa Scilab, voltado para aplicações numéricas, livre e organizado por um consórcio europeu. Ele será de extrema importância nesta disciplina, já que a nossa viagem pelo Cálculo Numérico terá o Scilab como principal 
veículo. Várias aplicações da teoria exposta nas aulas deverão ser feitas no computador com 
o auxílio do Scilab. Esperamos que ele se torne uma ferramenta útil no restante do seu curso 
e na sua vida profissional. O Scilab é um parente bem próximo, porém bem mais barato (em 
U$) do que o famoso Matlab; se você aprender a usar o primeiro, aprenderá a usar o segundo.
Começaremos a nossa aula orientando−o como instalar o Scilab em qualquer computador 
que você deseje, desde que rode com Windows ou com Linux. Em especial, você dispõe dos 
computadores nos polos da SEDIS, nos quais você pode providenciar uma instalação do Scilab 
(caso isto ainda não tenha sido feito). De forma a lhe facilitar a instalação desse programa, 
também lhe disponibilizamos, no Moodle, o vídeo Instalacao_do_Scilab.wmv.
No entanto, uma coisa nós precisamos combinar, sem o que esta aula não faz nenhum 
sentido: você tem que dar um jeito de se sentar na frente do computador e fazer o que nós 
estamos lhe propondo aqui. Em compensação, temos a expectativa de que, ao final da aula, 
você se surpreenda em ver como o Scilab é amigável e tome gosto em brincar com ele. Se 
você se empenhar nas atividades propostas, quando menos esperar vai se familiarizar com 
comandos de matrizes e vetores que serão fundamentais ao longo de toda a disciplina.
A primeira regra de ouro é entrar no Scilab e conhecê−lo. Quanto mais, melhor. Chega a 
ser divertido, quando você entra no jogo. Aí, adeus contas, pois quem faz contas é computador.
A segunda regra de ouro é usar e abusar dos arquivos de ajuda aos comandos, o 
popular help. Para facilitar a aplicação dessa segunda regra de ouro, providenciamos uma 
tradução do help do Scilab para o português, realizada com capricho por um aluno do curso 
de bacharelado da UFRN, Daniel de Souza Grilo, através de um projeto financiado pela Sedis 
e orientado por nós. Na página da nossa disciplina, no Moodle, damos as dicas de como você 
deve proceder para substituir o arquivo de ajuda em inglês pela versão que organizamos em 
português. Os arquivos de ajuda do Scilab contêm exemplos e são extremamente úteis para 
orientar como usar os comandos.
Uma ferramenta adicional que pode lhe ser muito útil é o excelente tutorial Scilab, em 
português, elaborado pelo professor Paulo Motta, do departamento de Engenharia Elétrica 
da UFRN, a quem muito agradecemos por colocá−lo inteiramente a nossa disposição e 
no qual nos inspiramos para escrever esta aula. Recomendamos, também, o material de 
suas aulas da disciplina Métodos Computacionais em Engenharia (uma versão de Cálculo 
Numérico para engenheiros, adotada nos currículos das engenharias da UFRN), cujo suporte 
computacional também é o Scilab.
Scilab
Tanto o tutorial do 
programa quanto as 
aulas de Métodos 
Computacionais em 
Engenharia se encontram 
à disposição para 
download em nossa 
página, no Moodle, bem 
como em: <www.dca.ufrn.
br/~pmotta/>. Acesso em: 
30 jan. 2009. 
1
3
2
4
5
Aula 2 Cálculo Numérico32
Objetivos
Efetuar cálculos simples no Scilab.
Manipular polinômios.
Operar com vetores e matrizes.Desenhar gráficos.
Introduzir a discretização de funções.
Instalação
A primeira coisa a ser feita é verificar se o seu computador tem o Scilab instalado. 
Procure pelo ícone em sua área de trabalho. Caso não encontre, precisaremos 
instalar o programa. Se o Scilab já está instalado em seu computador, você já pode passar 
para a próxima seção.
Na página da nossa disciplina, no Moodle, há um vídeo mostrando em detalhes como 
instalar o Scilab em seu computador. Basta repetir os passos apresentados. O procedimento, 
em linhas gerais, é o seguinte:
1) Acesse a página do Consórcio Scilab em <http://www.scilab.org/>;
2) Baixe o arquivo “scilab−5.0.2.exe” (ou o mais atual), se o seu sistema operacional for o 
Windows. Se for Linux, baixe “scilab−5.0.2.bin.linux−i686.tar.gz”;
3) Execute o arquivo seguindo as instruções.
Aula 2 Cálculo Numérico 33
Iniciando o Scilab
Agora que o Scilab está instalado, coloque−o para rodar. Você deverá ter em sua tela uma 
janela parecida com esta:
Figura 1 – Janela do prompt do Scilab
A seta −−> na janela é o prompt do Scilab. É por ali que você vai fornecer ao 
programa dados e comandos. Sempre que você a vir nas nossas aulas, será a 
indicação da digitação de um ou mais comandos Scilab, na sequência e na mesma 
linha. Nas linhas subsequentes, você verá a resposta que o Scilab lhe devolve, na 
tela do computador, ao(s) comando(s) digitado(s).
O Scilab possui algumas variáveis permanentes, cujos valores não podem ser modificados 
nem apagados. Um exemplo é a variável %pi (π). Digitando esse nome e apertando a tecla 
enter, temos o seguinte resultado:
−−>%pi
%pi = 3.1415927
Aula 2 Cálculo Numérico34
Se você tentar atribuir outro valor a essa variável, receberá uma mensagem de erro.
−−>%pi = 2
!−−error 13
Redefining permanent variable.
Usando o Scilab como calculadora
Vamos atribuir às variáveis a e B os valores 3 e 2, respectivamente, e depois apresentar 
sua soma:
−−>a = 3;
−−>B = 2;
−−>a + B
 ans = 5.
Observe que o ponto-e-vírgula no final da linha impede a apresentação do resultado. 
Repita a digitação feita sem colocar o ponto-e-vírgula nas linhas de a e B, e colocando na 
linha de a + B.
Outra coisa que merece destaque: o Scilab leva em consideração a diferença entre 
maiúsculas e minúsculas. Assim, B é diferente de b. Experimente pedir que ele calcule a + b.
Outras dessas variáveis permanentes são: %i (a unidade imaginária 
√
−1); %e (a base 
do logaritmo neperiano e = 2.7182818...); %T (verdadeiro); %F (falso) e muitos outros. 
Para ver todas as variáveis permanentes, digite o comando who e aperte a tecla enter.
Aula 2 Cálculo Numérico 35
Os valores atribuídos às variáveis podem ser complexos. Vamos fazer adição, subtração, 
multiplicação e divisão dos números 2 + 3i e 1 – 4i. Para não repetir a digitação dos números, 
atribuiremos esses valores às variáveis a e b.
−−> a = 2 + 3*%i
a = 2. + 3.i
−−> b = 1 – 4*%i
b = 1. – 4.i
−−> a + b    // adição
ans = 3. – i
−−> a – b   // subtração
ans = 1. + 7.i
−−> a*b   // multiplicação
ans = 14. – 5.i
−−> a/b // divisão
ans = – 0.5882353 + 0.6470588i
Observe que o que está digitado depois de “//” não é levado em conta pelo programa. 
Essa é uma maneira de inserir comentários durante o seu trabalho, muito útil na programação 
com o Scilab, como você verá na Aula 7, Programação com o Scilab I.
Os próximos exemplos mostram como calcular senos, cossenos, tangentes, potências, 
raízes e logaritmos.
−−> sin(%pi/2) // seno de π/2
ans = 1.
−−> cos(1) // cosseno de um
ans = 0.5403023058681397650105
−−> tan(0) // tangente de zero
ans = 0.
Atividade 1
1
2
3
Aula 2 Cálculo Numérico36
−−> 3 ^ 5 // 3 elevado à quinta potência
ans = 243.
−−>sqrt (–4) // raiz quadrada de –4
ans = 2.i
−−> log(%e) // logaritmo natural de e
ans = 1.
Sendo a = 1,35, b = 2,7 e c = 3, calcule:
a)a
b − c
b
; b) 
ab−c
b
; c) a
b−c
b .
Sabendo que 1 polegada equivale a 2,54 centímetros, encontre uma 
aproximação com 4 casas decimais, em centímetros, para a área de 
um círculo de raio medindo 3 polegadas.
O comando factor() fornece a fatoração prima de um inteiro positivo. 
Por exemplo, factor(6) retorna os números 2 e 3. Utilize esse comando 
para encontrar a decomposição em fatores primos de 8712870, 
48506557, 505149 e 2812281. Agora, responda: os números 
8712870
48506557
 e 505149
2812281
 são iguais?
Aula 2 Cálculo Numérico 37
Matrizes
O fato de computadores serem muito adequados à manipulação de matrizes e vetores reforça a ideia de que matrizes constituem o tijolo básico da modelagem numérica de problemas. No Scilab, isso é muito visível. Números são representados como matrizes 
1 × 1. Vetores são representados ora como matrizes linha 1 × n, ora como matrizes coluna 
n × 1, e são manipulados como se matrizes fossem.
Matrizes podem ser inseridas no Scilab de diversas maneiras. A mais imediata é 
digitando linha por linha, deixando o conjunto todo entre colchetes. Duas entradas numa 
mesma linha são separadas por um espaço ou por uma vírgula. Duas linhas são separadas 
por um ponto−e−vírgula.
A = [1 2 1; 3 2 1] // Matriz com 2 linhas e 3 colunas
A = 1. 2. 1.
3. 2. 1.
B = [ –1, 1, 0; 1, –2, 4] // Matriz com 2 linhas e 3 colunas
B = – 1. 1. 0.
 1. – 2. 4.
As operações de multiplicação por escalar e multiplicação de matrizes usam o mesmo 
operador *. Lembre−se que, para fazer a multiplicação entre matrizes, o número de colunas da 
primeira precisa ser igual ao número de linhas da segunda. Nesse caso, não podemos fazer A*B, 
mas podemos fazer a multiplicação entre A e a transposta de B, que é representada como B’.
 C = B’   // C é a transposta de B
C = – 1. 1.
 1. – 2.
 0. 4.
A*C // A vezes a transposta de B
ans = 1. 1.
 – 1. 3.
Aula 2 Cálculo Numérico38
Para adição e subtração de matrizes, são usados os sinais usuais + e –, respectivamente. 
Outros comandos importantes são size(), eye(), zeros() e ones(). Eles facilitam bastante o 
trabalho com matrizes. O comando size() retorna as dimensões da matriz em forma de vetor; 
eye( ) permite que criemos uma matriz identidade sem a necessidade de digitar seus elementos; 
zeros() cria uma matriz nula e ones( ) cria uma matriz com todas as suas entradas iguais a 1.
−−> size(A) // A é uma matriz 2 × 3
ans = 2. 3.
−−> eye(4,4) // Matriz identidade 4 × 4
ans = 1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
0. 0. 0. 1.
−−> zeros(2,4) // Matriz nula 2 × 4
ans = 0. 0. 0. 0.
0. 0. 0. 0.
−−> ones(2,4) // Matriz 2 × 4 cujas entradas são todas iguais a 1
ans = 1. 1. 1. 1.
1. 1. 1. 1.
Em alguns problemas, precisamos usar algum elemento específico de uma matriz. O 
Scilab permite que façamos isso. Para tanto, basta entrar com o nome da matriz e a posição 
do elemento. Permite, ainda, de maneira bem fácil, que se extraia da matriz uma linha, uma 
coluna ou ainda submatrizes formadas por linhas e colunas.
−−> D = [1 2 3 4; 5 6 7 8; 9 10 11 12] // A matriz D
D = 1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
−−> D(1,2) // Elemento da primeira linha e segunda coluna da matriz D
ans = 2
Aula 2 Cálculo Numérico 39
 −−> D (2,1:3) // Matriz 1 × 3 formada pela segunda linha de D, colunas de 1 a 3
ans = 5. 6. 7
−−> D (2: 3,2: 4)
ans = 6. 7. 8. // Matriz formada com as linhas 2 e 3, colunas de 2 a 4
10. 11. 12.
Podemos extrair qualquer submatriz com o comando D(I,J), se I e J forem vetores 
com índices de linhas e colunas de D. Além disso, podemos, também, alterar uma matriz nas 
posições indicadas em I e J, prescrevendo uma outra matriz no lugar.
−−> D(1,2) = 100 // Substitui o valor de D na linha 1, coluna 2 por 100.
D = 1. 100. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
−−> I = [1,3], J = [1,3,4] //I e J são matrizes−linha ou vetores (como preferir)
I = 1. 3.
J = 1. 3 .4.
−−> E = D(I, J) // Matriz formada pelas linhas 1 e 3, colunas 1, 3 e 4 de D
E = 1. 3. 4.
9. 11. 12.
−−> D(I,J) = zeros(2,3) // Zera os valores deD nas posições correspondentes
D = 0. 100. 0. 0. // às linhas em I e colunas em J.
5. 6. 7. 8.
0. 10. 0. 0.
Aula 2 Cálculo Numérico40
Muitas vezes é importante concatenar matrizes para formar matrizes maiores, ou 
para defini−las através de blocos de matrizes. O Scilab trabalha com blocos de matrizes, 
com a mesma lógica que antes. Ou seja, separados por espaços ou por vírgulas, se forem 
concatenados na horizontal, e por ponto−e−vírgula, se forem concatenados na vertical.
−−> F = [D ones(3,1)] // Forma F, adicionando uma coluna de números um à matriz D
F = 0. 100. 0. 0. 1.
5. 6. 7. 8. 1.
0. 10. 0. 0. 1.
−−>D ( : ,5 : 6) = [15 16; 17 18; 19 20] // Adiciona duas colunas a D preexistente
D = 0. 100. 0. 0. 15. 16.
5. 6. 7. 8. 17. 18.
0. 10. 0. 0. 19. 20.
−−> G = [eye(2,2) –2*ones(2,3); zeros(2,2) [1 2 3; 4 5 6] ] // Forma G com 
4 blocos
G = 1. 0. –2. –2. –2.
0. 1. –2. –2. –2.
0. 0. 1. 2. 3.
0. 0. 4. 5. 6.
Observação 1 − Vetores no ℜn
Podemos representar os vetores na forma de uma coluna de números, ou de uma 
linha de números. Assim, um elemento v de ℜ3 tanto pode aparecer com o formato 
v =


x1
x2
x3


 como v = [x1 x2 x3]. No Scilab, não há um comando específico para vetores. 
Serão representados ora como matriz 1 × n, ora como matriz n × 1. Felizmente, como você 
poderá ver ao longo dessa disciplina, representar vetores por matrizes muito mais ajuda que 
atrapalha, apesar de parecer meio estranho no começo.
Vetores por Matrizes
Na bibliografia ligada à 
Álgebra Linear Numérica, 
costuma-se representar 
vetores por matrizes. 
O usual (default), na 
Álgebra Linear Numérica, 
é tratar vetores como 
matrizes coluna, ou seja, 
representados na forma 
x = xnx1. Provavelmente, 
devido ao fato do produto 
matriz-vetor ser tão 
fundamental para a 
Álgebra Linear no ℜn e 
no Cn. Se x = xnx1 e 
A = Anxn, isto permite 
calcular o produto da 
matriz A pelo vetor x, 
assim como o produto 
das matrizes A e x.
Atividade 2
1
2
3
Aula 2 Cálculo Numérico 41
O produto interno de dois vetores x e y será x * y, se você entrou com x na forma x
1 x n e 
y na forma yn x 1. Se você tiver entrado na forma mais usual da Álgebra Linear Numérica, que 
é x = xn x 1 e y = yn x 1, o produto será xTy.
−−> x = [1 2 3] // O vetor x, como matriz 1 × 3
x = 1. 2. 3.
−−> y = [1; 2; 3] // O vetor y, como matriz 3 × 1
y = 1.
2.
3.
−−> x*y // x*y é uma matriz 1 × 1 que calcula o produto interno x ⋅ y.
ans = 14
−−> y*x    // O produto de y = y
3×1 por x = x1×3 dá uma matriz 3 × 3
ans = 1. 2. 3.
2. 4. 6.
3. 6. 9.
−−> y’*x’ // Note que y’*x’ = y(1) × (1) + y(2) × (2) + y(3) × (3) = x*y
ans = 14
Verifique se os vetores v = (sen(π / 6), π), e w = (e, ln 2) são 
ortogonais.
Ache, em matemática exata, a projeção ortogonal de v na direção 
de w. (Sugestão: digamos que tal projeção ortogonal seja v . Isso 
significa que v = cw e v – v agora é ortogonal a w. Conclua que 
c = (vT w)/(wTw). 
Faça essa mesma conta, agora, no Scilab.
Aula 2 Cálculo Numérico42
Atividade 3
Observação 2 – Relembramos, com a tabela a seguir, a notação matemática adotada por nós 
para matrizes e vetores, comparando−a com a linguagem correspondente do Scilab.
Tabela 1 – Matematiquês X Scilabês
Notação Matemática Notação em Scilab
Entrada na linha i e na coluna j Aij A(i, j)
j − ésima coluna de A A(j) A(1 : m,j), ou A( : , j )
I − ésima linha de A Ai A(i, : ) ou A(i, 1 : n)
Matriz transposta de A AT A’
Produto de A por B AB ou A*B A*B
Potência de A An Aˆn
Produto, divisão e potenciação de A por 
B, entrada a entrada Não se define, aparentemente
A.*B, A./B e A.ˆB
(muito útil)
A atividade a seguir é muito importante, pois lhe permite treinar comandos com matrizes 
e revisitar, via Scilab, propriedades elementares do produto matriz-vetor e fundamentais na 
manipulação de matrizes.
1
Carregue A = [ 3 6 9 ; 2 4 6; 1 2 3], B = [1 1 1; 2 2 2; 3 3 3], 
c = [1; 2; 2] e d = [2; 1; 1] no Scilab. Traduza a linguagem matemática 
usada abaixo para a linguagem do Scilab e verifique, no programa, que:
a) Aij é o produto da linha i pela coluna j, ou seja, que Aij = AiB(j);
b) A j-esima coluna de AB é AB(j) e a i-ésima linha de AB vale AiB;
c) A i-ésima coordenada de Ac é Aic;
d) Ac = c
1
A(1) + c
2
A(2) + c
3
A(3) (Atenção! Essa identidade é muito importante);
e) ||c||2 = cTc = c
1
2 + c
2
2 + c
3
2 – Quadrado da norma euclidiana de c;
f) cTd = c
1
d
1
 + c
2
d
2
 + c
3
d
3
 – Produto interno entre c e d.
Para as mesmas A e B do item anterior:
a) Compare os resultados de AB, com A.*B e explique o que cada um faz.
b) Compare os resultados de Aˆ2 com A.ˆ2 e explique o que cada um faz.
2
Aula 2 Cálculo Numérico 43
Atividade 5
Atividade 4
1
Entre com A = [1 2 3; 10 9 8 ], B = [4 5; 7 6 ], x = [0 0 0 1 2 ] e 
y = ones(1,5).
a) Monte uma matriz C cujas duas primeiras linhas sejam formadas, nessa 
ordem, pelos blocos A e B, a terceira por x e a quarta por y.
b) Calcule D = CTC, F = CCT (observe que são quadradas e simétricas).
c) Observe que D
23
 é o produto interno das colunas 2 e 3 de C, e que F
23
 é o 
produto interno das linhas 2 e 3 de C.
d) Prove que, dada uma matriz Y = Ymxn, então Z = YTY e W = YYT são 
quadradas e simétricas. Mostre, ainda, que Zij é o produto interno das colunas 
i e j de Y e que Wij representa o produto interno das linhas i e j de Y.
O comando rand(m,n) gera uma matriz com m linhas e n colunas cujos elementos são 
números aleatórios entre 0 e 1, uniformemente distribuídos. É muito útil para testar algoritmos 
e fazer experimentos numéricos. Nas duas próximas atividades, pedimos a você que o explore 
para fazer alguns experimentos numéricos.
Digite “R = rand(2,2);” e encontre o traço de R, onde traço 
(R) = R
11
 + R
22
.
Digite help trace no prompt do Scilab e veja o que ele lhe diz sobre este 
comando. Depois, use−o para calcular o traço de R.
Armazene em X e Y matrizes 4 × 4 com entradas aleatórias e calcule 
X*Y e Y*X. O resultado é diferente! É isso mesmo? Repita mais 10 
vezes a operação e veja se em alguma situação ocorreu X*Y = Y*X.
Certo ou errado? Justifique:
Se X e Y são matrizes 4 × 4, então X*Y ≠ Y*X.
Armazene X = rand(4,4) e Y = inv(X). Calcule X*Y e Y*X. O 
resultado foi igual, a menos que existam erros de arredondamento. 
Mas pode mesmo acontecer X*Y = Y*X? O que este item tem a ver 
com o anterior?
2
3
4
5
Aula 2 Cálculo Numérico44
Polinômios
O forte de Scilab reside em matemática numérica, muito mais que em matemática 
simbólica. Contudo, Scilab também sabe operar com algo de matemática simbólica, como faz 
com polinômios. Ainda bem, pois vamos precisar (e muito) de polinômios nesta disciplina.
Os polinômios são criados no Scilab por meio da função poly. Para criar o polinômio 
p = x2 – 3x + 2, fazemos o seguinte: definimos seu nome; chamamos a função poly e 
informamos um vetor c; inserimos a letra representando a variável a ser usada, entre aspas, 
e a palavra “coeff”, se queremos um polinômio cujos coeficientes sejam as coordenadas de 
c. Se queremos um polinômio cujas raízes sejam as coordenadas de c, digitamos “roots” em 
vez de “coeff”. Já roots(q) devolve as raízes do polinômio q. Olhe o que o help do Scilab diz 
sobre esses dois comandos. Observe o que acontece na tela.
−−> p = poly([2 –3 1], “x”, “coeff”)
p = 2 –3x + x2
−−> r = poly([2 –3 1], “x”, “roots”)
r = 6 – 7x + x3
−−> roots(r)
ans = 1.
2.
– 3.
Para avaliar o polinômio em determinado valor de x, usamos a função horner. No exemplo 
a seguir, encontramos p(2) = 0.
−−>horner(p,2)
 ans = 0.
Roots
significa raízes, 
em inglês.
Com polinômios, também podemos fazer adição, subtração, multiplicação e divisão. Nos 
exemplos as seguir, usamos q = x3 + 2.
Aula 2 Cálculo Numérico 45
−−> q = poly([2 0 0 1], “x”, “coeff”) // Definindo q
q = 2 + x3
−−> p+q    // Adição
ans = 4 – 3x + x2 + x3
−−> p – q    // Subtração
ans = – 3x + x2 – x3
−−>p*q    // Multiplicaçãoans = 4 – 6x + 2x2 + 2x3 – 3x4 + x5
−−> p/q //Divisão
ans = 
2 + x3
2 – 3x + x2
−−> [r,Q] = pdiv(q,p) // Divisão com resto: q = pQ + r
Q = 3 + x
r = – 4 + 7x
−−>roots(p)    // raízes de p
ans = 1.
 2.
−−> roots(q)    // raízes de q
Ans = 0.6299605 + 1.0911236i
0.6299605 – 1.0911236i
 – 1.259921
−−> roots(p*q) // Esta conta é até desnecessária, dada roots(p) e roots(q). Por quê?
ans = 1.
 – 1.259921
0.6299605 + 1.0911236i
0.6299605 – 1.0911236i
2.
Atividade 6
Aula 2 Cálculo Numérico46
Utilize o comando horner para encontrar (p ° q) (x) e (q ° p) (x), onde 
p e q são os polinômios usados nos exemplos do texto.
Calcule os restos das divisões de P = x3 – 2x2 – 5x + 3 por nos 
casos em que:
 a) = x – 1; b) = x – 2; c) = x – 3.
Calcule, também, P(1), P(2), e P(3). O que se observa? Pode−se fazer 
alguma conjectura? Você consegue provar?
1
2
Discretização de funções
Muitas pessoas confundem funções com as fórmulas que as representam, como era usual no século XVIII. Nos dias atuais, o conceito de função não se confunde com o de uma fórmula que a represente. É bem mais amplo que isso. Como você bem sabe, 
é tão somente uma relação que, a cada ponto de um conjunto A, associa um único ponto de 
um conjunto B. E ainda bem que é assim, pois a imensa maioria das funções que aparecem 
na vida real não surgem representadas por fórmulas.
Será que faz sentido ficar procurando fórmulas matemáticas usuais para representar o 
vôo de um besouro, uma fotografia ou a gravação de Tom Jobim e Elis Regina de Águas de 
Março? No entanto, podemos modelar tais fenômenos como funções. Um vôo realizado por um 
certo besouro pode perfeitamente ser modelado por uma função c: ℜ −>ℜ3, já que se trata de 
uma curva no ℜ3. Uma dada fotografia em preto e branco pode ser modelada por uma função 
que, a cada ponto de um retângulo, associa um número entre 0 e 1 que informa o tom de cinza 
daquele ponto. A gravação de uma música pode ser modelada pelo sinal elétrico gerado na 
saída do amplificador, que é uma função do tempo. Ao acionarmos os alto falantes – e sem 
mexermos nos seus botões de ajuste – esse sinal reproduz a música de maneira sempre igual, 
ao ser emitido num mesmo aparelho de som.
Uma das questões mais importantes da matemática reside exatamente em como 
representar funções. O que se tem visto, de duas décadas para cá, é que a representação 
digital das funções vem ganhando cada vez mais espaço na nossa vida cotidiana exatamente 
por ser a que mais se adequa à manipulação por computadores. Todos vivemos num mundo 
no qual as gravações, fotografias e registros de um modo geral vão sendo cada vez mais 
Aula 2 Cálculo Numérico 47
digitalizados. Já nos acostumamos com jargões desta representação, como resolução, pixels, 
jpg, mp3, bytes e gigabytes. Matematicamente, representar uma função de maneira digital, ou 
discretizá−la (para usar uma linguagem mais antiga), significa representá−la por um vetor de 
valores medidos em intervalos mais ou menos espaçados das variáveis.
Numa linguagem mais antiga, a função f(x) = x2, no intervalo [0,1], pode ser discretizada 
numa partição de [–2,2] em 10 subintervalos de igual tamanho h = 0.4, pelo vetor 
Y = [f(–2), f(–1.6), ..., f(1.6), f(2.0)]. O comando Scilab para fazê−lo seria:
−−> P = –2.0:0.4:2.0 // P = P
1 × 11 é um vetor que armazena a partição prescrita.
P = – 2. – 1.6 – 1.2 – 0.8 – 0.4 0. 0.4 0.8 1.2 1.6 2.
−−>Y = P.ˆ2 // Y é o vetor que discretiza y = x2 , na partição P.
 4. 2.56 1.44 0.64 0.16 0. 0.16 0.64 1.44 2.56 4.
Numa linguagem mais atual, Y seria uma digitalização do sinal y = x2, com uma 
resolução h = 0.4.
 No Cálculo Numérico, a representação das funções é, por sua própria essência, discreta. 
Um ponto a favor das representações discretas das funções é que a própria Natureza nos induz 
a isto. A discretização temporal de um filme costuma ser de 24 fotos por segundo. Mais rápido 
que isso não faz muita diferença para nossa capacidade visual.
 As funções que usualmente aparecem no Cálculo já estão programadas em Scilab para 
aceitar um vetor v como entrada, e devolvem vetores calculados nas coordenadas de v. Como 
exemplo, temos a função cos( ):
à P = [0, 0.1,0.3, 0.7,1.0, 1.2, 1. 3, 1.57]; Y = cos(P)
Y = 1. 0.99500 0.95533 0.76484 0.54030 0.36235 0.26749 0.0007963
-2.0
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0
Aula 2 Cálculo Numérico48
Gráficos
Coerentemente, o Scilab trabalha gráficos bidimensionais fazendo uso de representações discretas das funções. Ou seja, ligando com segmentos de reta os pontos do gráfico de f que você escolheu para discretizá-la. Nem adianta informar a fórmula de uma função 
para ver o seu gráfico no Scilab. Você precisa informar quais são as abscissas dos pontos que o 
Scilab deve utilizar num vetor (digamos P) e as respectivas ordenadas num vetor Y ( = f(P)). 
Ao digitar plot(P,Y), com P e Y, como no exemplo logo acima, o Scilab gera um gráfico de 
y = x2, a partir da discretização gerada pela partição do intervalo [–2, 2], em 10 subintervalos 
de igual comprimento h = 0.4.
−−>P = –2:0.4:2.0; Y = P.^2; plot(P,Y)
Logo após este comando, o Scilab abre uma janela com o gráfico da Figura 2.
Figura 2 – Gráfico de y = x2, gerado com 11 pontos igualmente espaçados.
A resolução na Figura 2 não ficou das melhores, não é? Tentemos corrigir isto com uma 
partição do intervalo [–2,2] em 400 subintervalos de tamanho 0.01:
−−> P = –2:0.01:2.0; Y = P.^2; plot(P,Y).
Aula 2 Cálculo Numérico 49
-2.0
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0
Figura 3 – Gráfico de y = x2, gerado com 400 pontos igualmente espaçados
Atividade 7
1
2
Veja, no help de plot2d, as várias opções que lá existem. Em especial, 
preste atenção como fazer gráficos com várias funções de uma só vez.
Considere as funções f, g e h : ℜ→ℜ, dadas por f(x) = sen(x), g(x) 
= sen(3x) e h(x) = sen(9x). Esboce as três funções entre 0 e 2 π num 
mesmo gráfico, com partições do [0, 2π] em 20 e em 600 subintervalos 
de mesmo tamanho.
Para desenhar gráficos de funções de duas coordenadas em três dimensões, o 
procedimento é parecido com anterior. A diferença é que, para discretizar funções de duas 
variáveis, alguns elementos de programação podem se tornar indispensáveis. Portanto, 
deixaremos o tema para a Aula 7, Programação com o Scilab I. Se você quiser ir adiantando, 
dê uma olhada no comando ‘plot3d’ no help do Scilab.
Aula 2 Cálculo Numérico50
Resumo
Nesta aula, você viu comandos básicos do programa Scilab. Aprendeu a usar 
seus comandos de ajuda e a fazer uso desse programa para resolver problemas 
envolvendo aritmética, polinômios, vetores e matrizes. Compreendeu, 
também, como representar funções discretamente e como fazer gráficos em 
duas dimensões.
Autoavaliação
1) Você foi ao computador, entrou no Scilab e tentou executar as atividades programadas? 
Se não o fez, pare aqui, volte e faça-o.
2) Você tentou executar as tarefas programadas e conseguiu? Se conseguiu, parabéns. Você 
pode prosseguir. Se não conseguiu, entre em contato conosco e batalhe até conseguir. 
Isso é fundamental para o resto da disciplina. Temos a certeza que você conseguirá dar 
conta de todas as atividades desta aula.
3) Você aprendeu direitinho o caminho para o help do Scilab? Se não aprendeu, volte e tente 
ver o que ele diz dos comandos que você executou. Experimente com exemplos lá do help 
e perceba como isto pode lhe ajudar a usar o programa.
4) Você tomou gosto pelo Scilab e brincou um pouco com ele por conta própria? Se ainda 
não brincou, tente fazê-lo. Esse programa gosta de brincadeiras numéricas. Se você tentou 
brincar, mas não gostou, sinta-se à vontade para nos dizer, por e−mail, o que achou...
5) Resolva os exercícios propostos.
Exercícios propostos
1) Vá no help do Scilab e veja como os comandos timer( ) e tic, toc funcionam. Use esses 
comandos para calcular os tempos de execução de A*B e A*c, onde A = rand(n,n),B = rand(n,n) e c = rand(n,1), para n = 100. Não se esqueça de usar o ponto−e−vírgula 
para evitar que apareçam cachoeiras de números na sua tela.
2) Digite stacksize(‘max’) no prompt do Scilab, para que ele libere espaço para rodar este 
problema. Repita o Exercício 1 para n = 100, 200, 300, 400, 500, 600, 700, 800, 900 e 
1000 e armazene os dados obtidos numa matriz de nome Tempo, 10 × 2. Nas duas colunas 
Aula 2 Cálculo Numérico 51
da primeira linha, coloque os tempos obtidos para calcular AB e Ac, nesta ordem, para 
n = 100. Na segunda, faça o mesmo, para n = 200. E assim por diante, até chegar na 
linha 10 de Tempo.
3) Esboce os gráficos de Tempo( :, 1)/n3 contra n e de Tempo( :, 2)/n2 contra n, obtidos 
no problema anterior. Dá para intuir alguma coisa nesses gráficos sobre a relação entre n 
e o tempo de execução de cada um dos dois comandos?
Referências
PIRES, Paulo Sérgio da Motta. Introdução ao Scilab: versão 3.0. Natal: Departamento de 
Engenharia de Computação e Automação; Universidade Federal do Rio Grande do Norte, 
2004. (Disponível na página da nossa disciplina). Disponível em: <www.dca.ufrn.br/~pmotta/
sciport−3.0.pdf>. Acesso em: 30 jan. 2009.
Respostas dos exercícios propostos
Comandos Scilab sempre precedidos de −−>. Comentários numa linha de 
comando precedidos de //.
1) −−> n = 100; A = rand(n,n); B = rand(n,n); c = rand(n,1); // Gera as 
matrizes A,B e c, com n = 100.
 −−> timer( ); A*B; t1 = timer( ), A*c ; t2 = timer(); // t1 e t2 são os 
tempos de execução de A*B e A*c.
2) Comandos Scilab
−−> stacksize(‘max’)
Repete−se este mesmo comando abaixo para n = 100, 200,... 1000, mudando 
em cada execução apenas a linha de Tempo. Ou seja, fazendo na chamada n, 
Tempo(n,1) no lugar de Tempo(1,1) e Tempo(n,2) no lugar de Tempo(2,1)
−−> n = 100; A = rand(n,n); B = rand(n,n); c = rand(n,1); // Para 
n = 100, calcula A,B e c
100
0.0e+000
0.5e−010
1.0e−009
1.5e−009
2.0e−009
2.5e−009
3.0e−009
3.5e−009
4.0e−009
200 300 400 500 600 700 800 900 1000
100
0.0e+000
2.0e−008
4.0e−008
6.0e−008
8.0e−008
1.0e−007
1.2e−007
1.4e−007
1.6e−007
1.8e−007
200 300 400 500 600 700 800 900 1000
Aula 2 Cálculo Numérico52
−−> timer(); A*B; Tempo(1,1) = timer(), A*c; Tempo(1,2) = timer() // 
1a linha de Tempo
−−> n = 1000 ; A = rand(n,n); B = rand(n,n); c = rand(n,1); // Para n 
= 1000, calcula A, B e c
−−> timer(); A*B; Tempo(10,1) = timer(), A*c; Tempo(10,2) = timer() // 
10a linha de Tempo
3) i −−> x = (100:100:1000)’; // Vetor x = [100; 200;...; 1000]
−−> T1 = Tempo(:,1)./x.^3; //T1 = [Tempo(1,1)/1003, Tempo(2,1)/2003,..., 
Tempo(10,1)/10003]
−−> T2 = Tempo(:,2)./x.^2; //T2 = [Tempo(1,1)/1003, Tempo(2,1)/2003,..., 
Tempo(10,1)/10003]
−−> plot (x,T1); // Esboça o primeiro dos gráficos pedidos
−−> clf; plot (x,T2, ‘b’) // clf limpa a janela corrente para o gráfico de T2
Aula 2 Cálculo Numérico 53
ii.1 – No primeiro gráfico parece bem claro que, para n > 500, o gráfico 
tende a ser uma reta horizontal. Isto corresponderia a dizer que o tempo de 
execução de A*B é proporcional a n3. Na verdade, é fácil contar o número de 
operações executadas para obter A*B. Veja que ocorrem exatamente n pares de 
multiplicação e soma para cada entrada da matriz. Como são n2 entradas, isso 
corresponde a n3 operações. Portanto, o tempo de execução será n3*u, onde u 
é o tempo gasto numa soma seguida de uma multiplicação. Diz−se, ainda, que a 
complexidade do produto de duas matrizes n × n é O(n3).
ii.2 – Nesta demonstração não fica tão claro (mas é igualmente verdade) que o 
gráfico tende a uma reta horizontal, à medida que n cresce, e que o tempo de execução 
é proporcional a n2. Se aumentarmos o valor de n até n = 2000, isso ficará mais 
claro. Diz−se, ainda, que a complexidade do produto matrizn × n – vetor é O(n2). 
Aula 2 Cálculo Numérico54
Anotações
Aula
Sistemas de equações 
lineares
3
1
2
3
Aula 3 Cálculo Numérico 57
Apresentação 
Sistemas de equações lineares talvez constituam a ferramenta mais recorrente nas aplicações da matemática, sobretudo com o advento de computadores cada vez mais velozes. Aparecem, muito frequentemente, em problemas da ordem de centenas de 
equações e variáveis, podendo chegar a centenas de milhões, em áreas tão diversas quanto 
tomografia médica, sismologia, metereologia, redes neurais, tráfego aéreo, dinâmica de fluidos 
etc. Em linhas gerais, ao discretizarmos um dado problema, estamos nos candidatando a 
encontrar sistemas de equações lineares pela frente. Nesta aula, trabalharemos com dois 
algoritmos implementados no Scilab e adequados para resolver sistemas de equações 
lineares de médio porte. De maneira vaga, pense num problema de médio porte, neste ano 
de 2009, como da ordem de até 5000 variáveis e equações, a depender do computador. Nos 
complementos desta aula, o aluno mais interessado encontrará na nossa página, no moodle, 
uma discretização para o problema da distribuição de temperatura numa chapa retangular 
condutora de calor, desembocando num sistema linear de algumas centenas de equações e 
variáveis. Num segundo complemento, você disporá de uma introdução a métodos iterativos, 
de modo a lhe dar uma idéia geral do que acontece com problemas de grande porte. 
Objetivos
Estudar sistemas de equações lineares de médio 
porte, do ponto de vista numérico, com a ajuda 
do Scilab. 
Traba lhar com a lguns comandos do 
Scilab destinados a manipular e resolver 
sistemas lineares.
Revisitar o método de Gauss-Jordan e a eliminação 
de Gauss, de forma a associar-lhes o que fazem os 
programas Scilab que os empregam. 
1. 2. 1. 2. 
–1. 0. – 2. – 4. 
2. 2. 0. 9. 
1. 0. 1. 3. 
Aula 3 Cálculo Numérico58
Sistemas de equações lineares 
Se você puxar pela memória, provavelmente, se lembrará de inúmeras situações nas quais se 
deparou com sistemas de equações lineares, ao resolver problemas de Física, Química, Geometria, 
Aritmética etc. Em geral, eram problemas com poucas variáveis e equações. Algo como:



x1 + 2x2 + x3 + 2x4 = 8
−x1 − 2x3 − 4x4 = −7
2x1 + 2x2 + 9x4 = 15
x1 + x3 + 3x4 = 5
 (I)
Nas disciplinas de Álgebra Linear que cursou, você certamente deve ter percebido a 
importância de escrevê-lo na sua forma vetorial, ou seja, Ax = b. Ao digitar no prompt do 
Scilab A = [1, 2, 1, 2; –1 0 –2 –4; 2, 2, 0, 9; 1 0 1 3], b = [8; –7; 15; 5], ele devolverá, 
a menos de uma arrumadinha no layout: 
−−> A = [1, 2, 1, 2; –1 0 –2 –4; 2, 2, 0, 9; 1 0 1 3] // Matriz dos coeficientes de I
A = 
−−> b = [8; –7; 15; 5] // Vetor dos termos independentes de I
b = 8. 
–7.
15.
5.
Atividade 1
Atividade 2
Aula 3 Cálculo Numérico 59
Procure problemas de Física, Química, Geometria e Aritmética (pelo menos 
um de cada área), cujas soluções passam pela resolução de um sistema 
de equações lineares.
Trabalharemos, nesta aula, com dois comandos do Scilab para resolver numericamente 
sistemas lineares Ax = b. Começamos com o comando ‘\’, que programa o método de 
Gauss-Jordan visto em Álgebra Linear I. Na aula 7 (Programação com o Scilab I), teremos a 
oportunidade de discutir sua programação. O segundo, ‘linsolve‘ , usa o método dos valores 
singulares, que é bem mais robusto e cuja explicação precisará esperar pela aula 5 (Autovalores, 
valores singulares e sensibilidade de um sistema linear a dados). 
Dê uma olhada nas aulas 3, 4 e 5 da disciplina Álgebra linear I, relativas a sistemas 
de equações lineares e preste especial atenção ao método de Gauss-Jordan. Em 
particular, reveja com carinho o algoritmo da eliminação de Gauss pois ele é uma 
espécie de “pau pra toda a obra” na álgebra linear numérica, sendo fundamental 
não apenas no algoritmo de Gauss-Jordan, mas também para achar bases de 
subespaços vetoriais, calcular determinantes, produzir a importante fatoração 
LU, a qual veremos ao final desta aula, inverter matrizes etc. 
A =


1 1 1 1
1 −2 3 1
−5 −1 −1 0

 e b =


3
2
−7


U =


1 1 1 1 3
1 −2 3 1 2
−5 −1 −1 0 −7

−−−−−−−−−−→U2 ← U2 − U1

1 1 1 1 3
0 −3 2 0 −1
−5 −1 −1 0 −7


−−−−−−−−−−−→
U3 ← U3 + 5U1


1 1 1 1 3
0 −3 2 0 −1
0 4 4 5 8

 −−−−−−−−−−−−→U3 ← U3 + 4/3U2


1 1 1 1 3
0 −3 2 0 −1
0 0 20/3 5 20/3


Aula 3 Cálculo Numérico60
Resolvendo Ax = b, via 
eliminação de Gauss
Em linhas gerais, numa primeira etapa, ao digitar x = A\b no prompt do Scilab, o 
programa Scilab aplica a eliminação de Gauss, utilizando apenas duas das chamadas operações 
elementares nas linhas da matriz aumentada [A, b], do sistema:
i) permuta de duas linhas;
ii) substitui uma linha pela soma dela mesma com um múltiplo de outra.
A eliminação de Gauss realizada pelo Scilab é ligeiramente diferente da que você viu na 
disciplina de Álgebra Linear, na medida em que não multiplica nem divide linhas por constantes. 
Permite, entre outras coisas, obter como subprodutos a importante fatoração LU de A, que 
veremos ao final da aula, bem como o determinante de A para matrizes quadradas. A única 
desvantagem é que a matriz escalonada U, aqui obtida, não estará mais na forma escada 
reduzida e obrigará a resolver posteriormente um sistema triangular. Vamos ver um pouco 
como isso funciona no exemplo 1. 
Exemplo 1 
Vamos usar o método de Gauss-Jordan para resolver Ax =b, no caso
Solução
Para resolver Ax = b, inicialmente aplicamos a eliminação de Gauss na matriz ampliada 
 = [A b], usando apenas a operação ii, apresentada no início desta seção, sem permutar linhas:
Variações
A variante usualmente 
implementada em 
programas como o Scilab 
consiste em fazer uso 
também da permuta de 
linhas, de modo a usar 
como pivô sempre a maior 
entrada disponível, por 
razões de estabilidade 
numérica (vide atividade 3). 



x1 + x2 + x3 + x4 = 3
− 3x2 + 2x3 = −1
20
3
x3 + 5x4 =
20
3



x1 + x2 + x3 = 3
− 3x2 + 2x3 = −1
20
3
x3 =
20
3
Aula 3 Cálculo Numérico 61
Obtemos um sistema linear equivalente, na forma escalonada:
Uma solução para este sistema pode ser obtida fazendo a variável livre x
4
 = 0 e resolvendo o 
sistema triangular resultante. Resolvendo, de baixo para cima, o sistema triangular resultante: 
Obtemos x
3
 = 1; x
2 
= (–1 – 2x
3
)/(–3) = 1 e x
1
 = 3 – x
2
 – x
3
 = 1
Com pequenas variações, Scilab faz algo muito parecido ao digitarmos x = A\b no 
seu prompt. Ou seja, começa aplicando uma eliminação de Gauss para obter um sistema 
Ux = 
–
b, com as mesmas soluções que Ax = b e U na forma de uma escada. A segunda 
etapa do algoritmo implementado no Scilab é bem mais rápida. Quando Ax = b tem solução, 
consiste em anular as variáveis livres e obter uma solução do sistema triangular resultante. 
Resolvendo o mesmo sistema do exemplo 1, usando o Scilab, obtemos o que vemos no 
exemplo a seguir. 
Exemplo 2
−−> A = [1 1 1 1; 1 –2 3 1; –5 –1 –1 0]; b = [ 3; 2; –7]; // Entradas do sistema
−−> x = A\b          // Procurando uma solução de A*x = b
1.
1. 
1. 
0
Testando a solução para verificar se Ax – b  0 
−−> teste = norm (A *x –b)/norm(b) // Testando a solução obtida
teste = 4.106D –16
Atividade 3
Aula 3 Cálculo Numérico62
Observação 1 – No exemplo 2 nem precisávamos testar a solução obtida, pois coincidiu com a 
solução do exemplo 1. Mas, usualmente, é bom fazê-lo. Nunca é demais lembrar que estamos 
trabalhando com aritmética de ponto flutuante e, portanto, obtendo aproximações numéricas 
das soluções de Ax = b. Ou seja, não podemos esperar soluções exatas do sistema. Inclusive, 
há casos nos quais os erros de arredondamento podem falsificar completamente a solução do 
sistema, como teremos ocasião de verificar na aula 5 e também no exercício proposto 2, ao 
final desta aula. Portanto, é recomendável, sempre que possível, aplicar um teste para verificar 
se obtivemos uma solução aceitável para Ax = b. Um teste relativamente simples consiste 
em verificar se o erro Ax – b, às vezes também chamado de resíduo, cometido ao se admitir 
que x é a solução de Ax = b, resulta suficientemente perto de zero. Para tanto, calculamos 
a norma de A *x –b. Um resíduo na décima quinta casa decimal, como o obtido acima, é um 
bom resultado, já que trabalhamos com cerca de 16 algarismos significativos.
O algoritmo da eliminação de Gauss escolhe, em cada coluna, um pivô, com o qual 
zera os elementos que estão abaixo dele. No caso do exemplo 1, preferimos não 
fazer nenhuma troca de linhas, o que é permitido, já que não apareceu nenhum 
zero na posição de pivô. Resultaram, ao final, os números 1, –2 e 20/3 como 
pivôs. No Scilab, em cada iteração, sempre é escolhido o maior pivô possível, 
mediante troca de linhas, por razões de estabilidade numérica. Aplique o algoritmo 
da eliminação de Gauss à mesma matriz A dos exemplos 1 e 2, com a diferença 
de usar a possibilidade de permutar linhas, de modo a escolher como pivô sempre 
o maior elemento, em módulo, da coluna e disponível para tal, ou seja, o maior 
elemento, em módulo, da diagonal para baixo, na coluna do pivô em questão. 
Aula 3 Cálculo Numérico 63
Caso Ax = b não tenha solução
Quando Ax = b não tem solução, x = A\b será uma solução da equação normal 
ATAx =ATb, que você viu na aula 12 (Ortogonalidade) de Álgebra Linear I. Tal solução é 
denominada solução de quadrados mínimos de A e é, num certo sentido que discutiremos 
com mais detalhes na próxima aula, a “melhor solução possível”. Veja o exemplo a seguir.
Exemplo 3
Tentando calcular a solução de um sistema Ax = b, que não tem solução. 
−−> A = [1,2,3;4,5,6;7,8,9]; b = [1;0;0]
−−> x =A\b 
Warning : matrix is close to singular or badly scaled. rcond = 1.5420D–18 computing 
least squares solution. (see lsq).
 x = – 0.6666667 
0.
0.5 
−−> teste = norm(A*x–b)/norm(b)
teste = 0.4082483 
−−>teste2 = norm(A'*A*x – A'*b)/norm(b)
 teste2 =1.005D –14 
Nesse caso, a matriz A não é invertível e o sistema Ax = b não tem solução. Como 
dissemos acima, x resulta ser uma solução de quadrados mínimos. Nesse caso, Scilab até 
que foi gentil e devolveu uma advertência (Warning), na qual afirma que a matriz pode ser não-
invertível (singular), e que o x devolvido é uma solução de quadrados mínimos (least squares 
solution). Teste 2 igualmente confirma que ATAx –ATb ≈0. 
Inversa de A no Scilab
Veja que dada uma matriz 
invertível A = Ann , se 
X =Xnn for a inversa de 
A, então, A*X = [AX(1), 
AX(2),...,AX(n)] = [I(1), 
I(2), ..., I(n)], onde I(j) 
representa a j-ésima 
coluna da identidade. Isso 
significa que cada coluna X(j) 
da inversa de A é a solução 
de Ax = I(j). Para obter 
a inversa de A, Scilab 
resolve, de uma maneira 
esperta, esses n sistemas 
lineares, essencialmente 
por uma variante do 
método de Gauss-Jordan, 
porém realizando uma 
única eliminação de Gauss 
de A. Veja uma versão 
desse procedimento nas 
páginas 9-11, da aula 4 
de AL1 Ax = b
Aula 3 Cálculo Numérico64
Cálculo de matrizes inversas 
e determinantes, usando 
eliminação de Gauss 
Inversão de matrizes
As matrizes invertíveis são, necessariamente, quadradas e muito importantes na Álgebra 
Linear (Dê uma espiadinha na parte final da aula 4 – Justificativa do método Gauss-Jordan 
– AL1). Como você sabe, A=Ann é invertível se existir matriz X que com ela comute e 
tal que A*X = X*A = Inn. Em geral, a inversa é denotada por A–1. Matrizes invertíveis 
funcionam de forma análoga a números não nulos, no que diz respeito à multiplicação. 
Por exemplo, se A é invertível, então, o sistema Ax = b tem solução única x = A–1b. Dada 
uma matriz invertível A = Ann, inv(A) calcula a inversa de A no Scilab. Teríamos aí uma 
alternativa para resolver Ax = b, fazendo x = inv(A) *b. Por exemplo: 
−−> A= [1 1 1 ; 1 –2 3 ; –5 –1 –1 ]; b = [3,2,–7]; 
−−> x = inv(A)*b, teste=norm(A*x–b)/norm(b),
x = 1. 
1. 
1. 
teste = 5.64D–17 
Atividade 4
1
2
3
x = inv(A)*b 
O número de operações 
gasto em x = inv(A)*b 
é mesmo ligeiramente 
acima do dobro do que 
é gasto para resolver 
x =A\b , sem oferecer 
muita coisa a mais, pois 
utiliza a mesma eliminação 
de Gauss usada em A\b, 
de

Continue navegando