You are on page 1of 367

PROGRAMANDO a HP 50g

(Com Programação Simbólica)

Gentil, o iconoclasta

2a edição

Boa Vista-RR
Edição do autor
2015
Prefácio à 1.a Ediç~
ao
A motivação para escrever o presente livro foi tripla. Em 1996 eu me
encontrava na UFSC quando fui solicitado, pelos alunos da fı́sica e engen-
haria, a ministrar um curso de programação da HP ; quando, na ocasião,
tive a oportunidade de escrever uma apostila “Programando a HP 48 ” para
conduzir o curso. Em 2009 encontro-me na UFRR ministrando a disciplina
Cálculo Numérico, na qual decidi adotar a HP 50g . Reescrevi a apostila
adaptando-a para a HP 50g e postei uma versão em minha homepage. Num
perı́odo de dois anos aproximadamente recebi email’s de várias partes do
Brasil de usuários do meu trabalho − devo admitir que a apostila fez bas-
tante sucesso. Isto me motivou a transformar o referido trabalho no presente
livro. Este trabalho foi escrito tomando por base “a velha apostila”, sua
adaptação e o Guia do Usuário-HP.
No que diz respeito à eficiência da maioria dos alunos em utilizar os
recursos disponı́veis na calculadora − pelo que tenho observado − é a mesma
de um proprietário de uma possante ferrari que, no entanto, se desloca
em um monociclo.
Creio que o conteúdo deste livro é o essencial para quem se inicia em pro-
gramação (aliás este curso se dirige a principiantes). É importante salientar
que iremos aprender a programar não somente a HP 50g , como também,
em decorrência, outras linguagens de computação, como por exemplo, PAS-
CAL, MATLAB, C++ , etc† . Estou salientando este fato devido ao pre-
conceito generalizado existente a respeito da programação de calculadoras
comparado à de microcomputadores − preconceito este que só se explica
em função da ignorância de quem desconhece que essencialmente não há
diferença entre programar uma calculadora e um microcomputador (nas lin-
guagens supramencionadas, por exemplo). Inclusive devido à portabilidade
(pode-se carregá-la no bolso, ou na bolsa, como queiram) é que eu penso
que os pais deveriam dar a seus filhos, juntamente com o vı́deo-game, uma
calculadora programável, pois desta forma estão lhes abrindo as portas de
uma alternativa profissional (e ainda porque a programação desenvolve a
inteligência, logicamente falando).
No prefácio do meu primeiro livro ([4]), em 1999, escrevi:
“Há algum tempo tenho o sonho de ver estudantes, de todos os nı́veis,
com calculadoras programáveis em sala de aula e programando os problemas
em tempo real.”
Este livro se constitui num auxı́lio para que este sonho se torne realidade.
Por mais este trabalho concluido louvo à Fonte infinita e inexaurı́vel.
Gentil, o iconoclasta
(Boa Vista-RR/Julho-2011)


Já que a lógica (estrutura) de programação é a mesma.

3
Prefácio à 2.a Ediç~
ao
O diferencial desta segunda edição em relação a anterior consta dos
seguintes ı́tens: Programação simbólica (ou algébrica), Aplicações à matemá-
tica financeira (estamos criando uma nova calculadora financeira, a HP 12G ),
APlicações à Estatı́stica, Aplicações ao Cálculo Numérico, Limites, Derivadas
e Integral. Por oportuno, o presente livro pode ser adotado nestas disci-
plinas, juntamente com um livro-texto.
Tenho ao longo do tempo recebido vários email’s relativos tanto a apos-
tila (.pdf), embrião deste livro, quanto ao livro propriamente − primeira
edição. Vou me permitir aqui reproduzi apenas um deles que, juntamente
com outras variáveis, motivou-me a debruçar-me (com denodo/“fez a obrigação
com força”) durante vários meses na elaboração desta segunda edição:

Gentil Lopes <gentil.silva@gmail.com>

Livro HP50g
1 mensagem

Cleber Pertel <cleber.pertel@uol.com.br> 9 de maio de 2013 22:11


Para: gentil.silva@gmail.com
Professor Gentil,
Chamo-me Cleber e sou acadêmico do curso de Engenharia Quı́mica
da Universidade Federal do Paraná. Estou escrevendo para o senhor para
parabenizá-lo pela sua obra “Programando a HP - 50g”. Esse livro é fantás-
tico! Tem me ajudado muito. Confesso que quando necessitei comprar
a referida calculadora, senti-me extremamente ignorante. Tinha a ferrari,
mas me sentia andando num monociclo. O seu livro fez toda a diferença no
caminho que percorri para adentrar no fantástico mundo da programação.
Embora meus passos ainda sejam modéstos, tornaram-se firmes graças à
sua preciosa ajuda. Embora não seja seu aluno fisicamente, sinto-me tal e
qual, pois o senhor, através do seu livro, tornou-se indispensável em minha
vida acadêmica, da mesma forma que os mestres que possuo na universi-
dade. Infelizmente não estamos próximos, pois eu gostaria muito de um
autógrafo seu, mas, de qualquer forma, receba com estas palavras meu ca-
rinho e gratidão por uma obra tão rica que, humildemente, fala aos iniciantes
(categoria na qual estou incluı́do) e, mais do que isso, nos abre as portas do
interesse e da curiosidade para adentrar nesse mundo ı́mpar que o seu livro
conduz-nos os primeiros passos, quando estes ainda são vacilantes.
Que Deus o abençoe!
Um forte abraço, com votos de paz,
Cleber Pertel

4
Sumário

1 Introdução à Programação 9
1.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Sinalizadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Funções para números reais . . . . . . . . . . . . . . . 13
1.3.2 Menu de comandos da pilha . . . . . . . . . . . . . . . 14
1.4 Programação de fórmulas . . . . . . . . . . . . . . . . . . . . 15
1.5 Para armazenar ou nomear um programa . . . . . . . . . . . 17
1.6 Para executar um programa . . . . . . . . . . . . . . . . . . . 18
1.7 Para visualizar ou editar um programa . . . . . . . . . . . . . 20
1.8 Executando um programa passo-a-passo (DBUG) . . . . . . . . 21
1.9 Exibindo variáveis de entrada e saı́da . . . . . . . . . . . . . . 22
1.10 Excluindo uma variável . . . . . . . . . . . . . . . . . . . . . 23
 Apêndice: Criando Pastas, Movendo e Renomeando Arquivos . . 23
 Apêndice: Transmitindo Dados Entre Duas HP 50g . . . . . . . 31

2 Listas e Matrizes 35
2.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.1.1 Criando listas . . . . . . . . . . . . . . . . . . . . . . . 35
2.1.2 Manipulação de listas . . . . . . . . . . . . . . . . . . 36
2.1.3 Operações com listas de números . . . . . . . . . . . . 37
2.1.4 O menu MTH/LIST . . . . . . . . . . . . . . . . . . . 38
2.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.1 Criando e montando matrizes . . . . . . . . . . . . . . 38
2.2.2 Desmontando matrizes . . . . . . . . . . . . . . . . . . 40
2.2.3 Inserindo linhas e colunas . . . . . . . . . . . . . . . . 41
2.2.4 Extraindo linhas e colunas . . . . . . . . . . . . . . . . 41
2.2.5 Extraindo e substituindo elementos em matrizes . . . 42
2.2.6 Cálculo de Matrizes com Elementos Algébricos . . . . 45
• Catálogo de comandos . . . . . . . . . . . . . . . . . . . . . 46

5
3 Estruturas de Programação 53
3.1 Estruturas cı́clicas . . . . . . . . . . . . . . . . . . . . . . . . 54
3.1.1 FOR - NEXT . . . . . . . . . . . . . . . . . . . . . . . 54
 Subrotinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.1.2 FOR - STEP . . . . . . . . . . . . . . . . . . . . . . . 58
3.1.3 FOR - NEXT’s concatenados . . . . . . . . . . . . . . 63
3.1.4 WHILE - REPEAT - END . . . . . . . . . . . . . . . 67
3.2 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . 71
3.2.1 IF - THEN - END . . . . . . . . . . . . . . . . . . . . 71
3.2.2 IF - THEN - ELSE - END . . . . . . . . . . . . . . . . 72
3.3 Operadores lógicos relacionais . . . . . . . . . . . . . . . . . . 78

4 PROGRAMAÇÃO SIMBÓLICA 83
4.1 Introdução: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.2 Configurações CAS . . . . . . . . . . . . . . . . . . . . . . . . 84
 O Desafio do Século . . . . . . . . . . . . . . . . . . . . . . . 87
4.3 Progressões Aritméticas de Ordem m . . . . . . . . . . . . . . 89
4.4 Progressões Geométricas de Ordem m . . . . . . . . . . . . . 103
4.4.1 Encontrando combinações . . . . . . . . . . . . . . . . 106
 O Desafio da Década . . . . . . . . . . . . . . . . . . . . . . 106
4.5 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

5 APLICAÇÕES À MATEMÁTICA FINANCEIRA 119


5.1 Breve comparação entre a HP 50g e a HP 12C . . . . . . . . 119
5.2 Aplicações à Matemática Financeira . . . . . . . . . . . . . . 123
5.2.1 A HP 50g como Calculadora financeira . . . . . . . . 126
5.3 Valor Atual de um Conjunto de Capitais . . . . . . . . . . . . 132
5.4 Sequência Uniforme de Pagamentos . . . . . . . . . . . . . . . 135
5.4.1 Cálculo de prestações . . . . . . . . . . . . . . . . . . 135
5.4.2 Cálculo da taxa de juros . . . . . . . . . . . . . . . . . 139
5.4.3 Capitalização composta em perı́odos fracionários . . . 145
5.5 Séries Não Uniformes . . . . . . . . . . . . . . . . . . . . . . . 151
5.5.1 Séries com prestações diferentes . . . . . . . . . . . . . 151
5.5.2 Sistemas de amortização (PRICE) . . . . . . . . . . . 166

6 APLICAÇÕES À ESTATÍSTICA 173


6.1 Séries Estatı́sticas . . . . . . . . . . . . . . . . . . . . . . . . 174
6.1.1 Distribuição de frequência-variável discreta . . . . . . 174
6.1.2 Distribuição de frequência-variável contı́nua . . . . . . 178
6.1.3 Frequência relativa de um elemento da série − fr . . . 181
6.1.4 Frequência acumulada de um elemento da série − Fi . 182
6.1.5 Frequência acumulada relativa de um elemento da série
− FRi . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.1.6 Frequência relativa de um elemento da série − fr . . . 184

6
6.1.7 Frequência acumulada de uma classe − Fi . . . . . . . 184
6.1.8 Frequência acumulada relativa de uma classe − f Ri . . 184
6.2 Medidas de Tendência Central . . . . . . . . . . . . . . . . . 186
P
6.2.1 Somatório − notação sigma ( ) . . . . . . . . . . . . 186
6.3 Médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.3.1 Média aritmética simples . . . . . . . . . . . . . . . . 190
6.3.2 Média aritmética ponderada . . . . . . . . . . . . . . . 190
6.3.3 Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . 191
6.3.4 Moda . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.4 Medidas de Dispersão . . . . . . . . . . . . . . . . . . . . . . 200
6.4.1 Desvio médio simples . . . . . . . . . . . . . . . . . . 200
6.4.2 Variância e Desvio Padrão . . . . . . . . . . . . . . . . 205
6.5 Ajustamento de Reta e Correlação . . . . . . . . . . . . . . . 208
6.5.1 A reta de mı́nimos quadrados . . . . . . . . . . . . . . 208
6.5.2 Correlação linear . . . . . . . . . . . . . . . . . . . . . 211

7 APLICAÇÕES AO CÁLCULO NUMÉRICO 215


7.1 Interpolação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
7.1.1 Interpolação de Lagrange . . . . . . . . . . . . . . . . 220
7.1.2 Interpolação de Newton . . . . . . . . . . . . . . . . . 227
 Conceito de Diferença Dividida . . . . . . . . . . . . . . . . 227
 Fórmula de Newton . . . . . . . . . . . . . . . . . . . . . . . 231
7.1.3 Interpolação de Gregory-Newton . . . . . . . . . . . . 233
 Conceito de Diferença Finita . . . . . . . . . . . . . . . . . . 233
 Fórmula de Gregory-Newton . . . . . . . . . . . . . . . . . . 237
7.2 Integração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
7.2.1 Regra dos trapézios . . . . . . . . . . . . . . . . . . . 241
7.2.2 Primeira regra de Simpson . . . . . . . . . . . . . . . 245
7.2.3 Segunda regra de Simpson . . . . . . . . . . . . . . . . 246
7.2.4 Quadratura gaussiana . . . . . . . . . . . . . . . . . . 248
7.2.5 Integração dupla . . . . . . . . . . . . . . . . . . . . . 254
7.3 Equações Diferenciais Ordinárias . . . . . . . . . . . . . . . . 260
7.3.1 Problema de valor inicial (PVI) . . . . . . . . . . . . . 262
7.3.2 Métodos baseados em série de Taylor . . . . . . . . . . 264
7.3.3 Método de Euler . . . . . . . . . . . . . . . . . . . . . 265
7.3.4 Método de Taylor de ordem p = 2 . . . . . . . . . . . 270
7.3.5 Métodos de Runge-Kutta . . . . . . . . . . . . . . . . 274

8 TRAÇANDO GRÁFICOS 283


8.1 Gráfico de funções . . . . . . . . . . . . . . . . . . . . . . . . 283
8.1.1 Gerando uma tabela de valores para uma função . . . 286
8.2 Gerando plotagens com programas . . . . . . . . . . . . . . . 288
8.2.1 Exemplos de plotagens geradas por programas . . . . 295
8.3 Desenhos via programação . . . . . . . . . . . . . . . . . . . . 305

7
8.3.1 Exemplos de programas usando as funções de desenho 306
8.4 Animação de Gráficos e Figuras . . . . . . . . . . . . . . . . . 309
8.5 Plotagem de Superfı́cies . . . . . . . . . . . . . . . . . . . . . 314
 A função MAP . . . . . . . . . . . . . . . . . . . . . . . . . 315
 Apêndice: Personalizando o teclado . . . . . . . . . . . . . . 316

9 CÁLCULO, ÁLGEBRA E ARITMÉTICA 319


9.1 O menu ALG (Algébrico) . . . . . . . . . . . . . . . . . . . . 319
9.2 O menu ARITHMETIC . . . . . . . . . . . . . . . . . . . . . 323
9.3 O menu CALC (Cálculo) . . . . . . . . . . . . . . . . . . . . 330
9.4 Configurações CAS . . . . . . . . . . . . . . . . . . . . . . . . 342
9.5 Resolução de Equações . . . . . . . . . . . . . . . . . . . . . . 348

∗ ∗ ∗
Apenas um pedido
Este espaço ficaria em branco, decidi aproveitá-lo para fazer um pedido
ao eventual leitor.
Dediquei muitos anos de trabalho até chegar no presente livro, não tive
nenhum apoio ou incentivo institucional∗ ; inclusive em várias oportunidades
deixei de ganhar dinheiro em minha Universidade − não participando de
“projetos mil” − para dispor de mais tempo para me dedicar à escrita de
meus livros. Para publicar todos eles† , à exceção do primeiro (ver email p.
117), tomei dinheiro emprestado no Banco a juros, o que sigifica que devo
vendê-los para saldar minhas dı́vidas.
Como disse, postei gratuitamente uma versão deste livro (da primeira
edição) na internet, esta apostila circula o Paı́s e serve a milhares de estu-
dantes; isto creio pelos email’s que tenho recebido.
Muitos destes email’s são de agradecimento; diante do exposto o pedido
é que o estudante que porventura adquirir este livro não permita ou incentive
a cópia xerox do mesmo (esta é também uma forma de me agradecer por
todos estes anos de empenho e dedicação) uma vez que é tão fácil adquirı́-lo
no formato impresso:
www.profgentil.com
Antecipadamente agradeço a compreensão.
O Autor

Por exemplo, entreguei uma versão da primeira edição deste livro à editora de minha
Universidade (UFRR) e após dois anos não me deram nem satisfação. Também submeti
um outro meu, de matemática (Espaços Métricos), novamente “não fui contemplado”.

Na página 352 exponho a capa deles. Na p. 356 exponho o “baner” de um “queimão”
que realizei como um protesto ao descaso em relação às minhas obras − queimei, literal-
mente falando, dezenas de livros em uma fogueira. Na biblioteca da Universidade consta
um único exemplar do livro Programando a HP 50g , doado por mim. Do livro Espaços
Métricos − elogiado até pelo professor Ubiratan D’Ambrosio (frase que encima o baner)
− como eu não doei nenhum exemplar, não consta nenhum exemplar na biblioteca.

8
Capı́tulo 1
Introdução à Programação
1.1 Introdução

Programar a calculadora significa introduzir em sua memória (RAM−


Random Access Memory − memória de acesso aleatório) uma série de ins-
truções e comandos para que ela os execute sequêncialmente, cumprindo
alguma tarefa especı́fica. Por exemplo, resolver uma equação quadrática,
multiplicar ou dividir polinômios, imprimir textos, elaborar um gráfico, to-
car música, etc.
Para tanto é necessário que as instruções e os comandos sejam digitados
no padrão sintático da linguagem da calculadora e dispostos sequêncialmente
na ordem em que devem ser executados. A fim de que a execução seja per-
feita e apresente os resultados objetivados com precisão, não basta atender
estes requisitos. É preciso que o programa não contenha erros de lógica,
cuja detecção não é feita pela calculadora, que está preparada para apontar
somente erros de sintaxe.
Os recursos de programação postos à nossa disposição pela calculadora
HP 50g são excepcionalmente valiosos e variados e a melhor forma de con-
hecê-los, entender sua finalidade e alcance e fixá-los em nossa memória é
através da prática.
Embora mencionada como uma calculadora por causa de seu formato
compacto similar aos dispositivos de cálculo manuais tı́picos, a HP 50g deve
ser vista como um computador programável/gráfico.

Programação estruturada
A HP 50g encoraja o uso de programação estruturada. Cada programa
possui apenas um ponto de entrada: seu inı́cio. Também possui apenas um
ponto de saı́da: seu final. Não existem rótulos dentro de um programa para
desvios e, portanto, não existem comandos GOTO (ir para).

9
1.2 Sinalizadores
Um importante conceito − imprescindı́vel − para o usuário da HP é o de
sinalizadores (ou flags).
Um sinalizador é um valor Booleano que pode ser ativado ou desativado
(verdadeiro ou falso), que especifica uma dada configuração da calcu-
ladora ou uma opção em um programa. Os sinalizadores na calculadora
são identificados por números. Existem 256 sinalizadores, numerados de -
128 a 128. Sinalizadores positivos são chamados de sinalizadores de usuários
e estão disponı́veis para programação pelo usuário. Os sinalizadores repre-
sentados pelos números negativos são chamados de sinalizadores de sistema
e afetam a forma que a calculadora opera. Para ver a configuração atual do
sinalizador de sistema pressione a tecla MODE :
H

 
 CALCULATOR MODES 
Operating Mode.. RPN
Number Format...Std FM,
Angle Measure...Radians
Coord System....Rectangular
XBeep Key Click XLast Stack

Choose calculator operating Mode


FLAGS CHOOS CAS DISP CANCL OK

e depois a tecla virtual FLAGS . Você obterá um visor denominado


SYSTEM FLAGS listando os números dos sinalizadores e as configurações.
Um sinalizador pode ser considerado ativado se você ver a marca de
seleção (X) na frente do número do sinalizador. Caso contrário, o sinali-
zador não está ativado. Para alterar o status de um sinalizador de sistema
pressione a tecla virtual X CHK enquanto o sinalizador que você deseja
alterar é ressaltado. Você pode usar as teclas de setas para cima e para

baixo ( △ ) para se deslocar ao redor da lista de sinalizadores do sistema.
Exemplo de configuração de sinalizador: Por exemplo, o sinalizador
02 quando ativo (X) disponibiliza uma constante na sua forma numérica e
não como sı́mbolo. Por exemplo, ative este sinalizador e, após, coloque π na
pilha. Depois desative-o e coloque, novamente, π na pilha.
Como mais um exemplo: Ative a trava automática do Modo Alfa para
somente uma digitação de ALPHA (ao invés de duas). Para fazer isto,
ative o sinalizador 60.

Ainda: Com o sinalizador 105 desativado teremos 2 na pilha, caso
contrário, teremos 1.4142135 . . . .
Importante: A calculadora opera (trabalha) em dois modos: pilha (RPN)
e algébrico (ALG). Neste livro optaremos, do inı́cio ao fim (sempre), pelo
modo pilha.

10
A lógica operacional RPN (Reverse Polish Notation, ou Notação Polonesa
Reversa) é baseada numa lógica matemática não ambı́gua que não utiliza
parêntesis, conhecida como “Notação Polonesa”, desenvolvida pelo lógico
polonês Jan Lukasiewicz (1878-1956). Enquanto a notação algébrica con-
vencional posiciona os operadores entre os números ou variáveis (exemplo):
2+3 ou a+b
a notação de Lukasiewicz posiciona os operadores antes dos números ou
variáveis: + 2 3 ou + a b.
Para modificar a eficiência da pilha a HP modificou essa notação de forma
que os operadores sejam posicionados depois dos números (ou variáveis):
2 3 + ou a b +
Essa é a razão do nome Notação Polonesa Reversa.
A bem da verdade, optando pelo modo RPN também estaremos usufruindo
do modo algébrico; digo, dentro do modo RPN está embutido o modo
algébrico − é possı́vel também trabalharmos no modo algébrico.
Caso sua calculadora esteja no modo algébrico − isto estará indicado
na primeira linha do visor à direita, com o distintivo ALG − para colocá-la
no modo pilha pressione a tecla MODE :
H

 
 CALCULATOR MODES 
Operating Mode.. Algebraic
Number Format...Std FM,
Angle Measure...Radians
Coord System....Rectangular
XBeep Key Click XLast Stack

Choose calculator operating Mode


FLAGS CHOOS CAS DISP CANCL OK

Agora pressione a tecla virtual (menu) CHOOS (escolher) para obter:

 
 CALCULATOR MODES 
Operating Mode.. Algebraic
Number Format...Std FM,
Angle Measure...Radians
CoordAlgebraic System....Rectangular
XBeepRPN Key Click XLast Stack

Choose calculator operating Mode


FLAGS CHOOS CAS DISP CANCL OK


Agora basta selecionar o modo RPN: e pressionar OK OK (2×).

11
1.3 Menus

O que chamamos de Menus são os seis pequenos retângulos na parte


inferior do visor, por exemplo,

 
 CALCULATOR MODES 
Operating Mode.. RPN
Number Format...Std FM,
Angle Measure...Radians
Coord System....Rectangular
XBeep Key Click XLast Stack

Choose calculator operating Mode


FLAGS CHOOS CAS DISP CANCL OK

Os seis menus (ret^


angulos)

associados com as seis teclas do menu, F1 até F6:

F1 A F2 B F3 C F4 D F5 E F6 E

Os seis retângulos exibidos na parte inferior do visor serão alterados de-


pendendo de qual menu está sendo exibido. Mas F1 A será sempre associada
com o primeiro retângulo exibido, F2 B com o segundo e assim por diante.
Uma vez que a calculadora tem apenas seis teclas associadas com os
menus, serão apenas exibidos 6 sı́mbolos de cada vez. Entretanto, um menu
pode ter mais do que seis entradas. Cada grupo de 6 entradas é chamado de
Página de menu. Por exemplo, aperte a tecla TOOL , este menu, conhecido
I
como menu TOOL,
tem oito entradas arranjadas em duas páginas. A página seguinte contendo
as duas entradas seguintes do menu fica disponı́vel ao pressionar a tecla NXT
L
Nas duas páginas seguintes exibiremos duas tabelas que são da máxima
importância para a programação da HP.
Portanto, Deus não é transcendente
ao universo, nem pode ter personalidade,
providencia, livre vontade e propósitos.
Então, mesmo o homem bom, apesar de
que ame a Deus, não pode esperar que
Deus o ame em retorno. (Espinoza)

12
MTH REAL
1.3.1 Funções para números reais ( )

A tabela a seguir mostra os comandos, sua descrição e exemplos. Antes,


veja a Nota após a tabela.

Exemplos
Comando/Descrição
Antes Depois
ABS. Valor absoluto 1: −12 1 : 12
CEIL. Menor inteiro maior ou igual 1: −3.5 1 : −3
ao argumento.
1: 3.5 1 : 4
FLOOR. Maior inteiro menor ou 1: 6.9 1 : 6
igual ao argumento.
1: −6.9 1 : −7
FP. Parte fracionária do argumento. 1: 5.234 1 : .234
1: −5.234 1 : −.234
IP. Parte inteira do argumento. 1: 5.234 1 : 5
1: −5.234 1 : −5
MANT. Mantissa do argumento. 1: 1.23E12 1 : 1.23
MAX. O maior valor entre dois 2: 5
números
1: −6 1: 5
MIN. O menor valor entre dois 2: 5
números.
1: −6 1: −6
MOD. Resto da divisão entre dois 2: 6
números
1: 4 1: 2
RND. Arredonda o número de acordo 2: 1.2345678
com o valor do argumento:
n = 0 até 11. 1: 5 1: 1.23457
SIGN. Retorna +1 para argumentos 1: −2.7 1 : −1
positivos, −1 para argumentos nega-
tivos e 0 para argumentos nulos.

TRNC. Trunca o número de acordo 2: 1.2345678


com o valor do argumento:
n = 0 até 11. 1: 5 1: 1.23456

• Nota: Caso você não consiga acessar os comandos acima através das
teclas MTH REAL , então o sinalizador 117 da sua calculadora deve ser

ativado. Esse sinalizador faz com que as funções sejam acessadas nos menus.
MTH REAL NXT
• Nota: Após digitar pressione, se necessário, a tecla L

para mover para a próxima página (do menu); a combinação


PREV move para a página anterior (do menu).

13
( PRG STACK )
1.3.2 Menu de comandos da pilha

Exemplos
Comando/Descrição
Antes Depois
DUP. duplica o objeto do nı́vel 1. 2: 2: 5
1: 5 1: 5
SWAP. permuta os objetos dos nı́veis 2: 9 2: 10
1 e 2. 1: 10 1: 9
DROP. deleta o objeto do nı́veil 1. 2: 7 2:
1: 8 1: 7
OVER. retorna uma cópia do objeto 4: 4:
do nı́ve 2 para o nı́vel 1. 3: 3: p
AB p
p
2: AB p 2: 234
p
1: 234 1: AB p
ROT. rotaciona os três primeiros 3: 12 3: 34
objetos da pilha.
2: 34 2: 56
1: 56 1: 12
ROLL. move o objeto do nı́vel n+1 4: 444
para o nı́vel 1.
(n está no nı́vel 1) 3: 333 3: 333
2: 222 2: 222
1: 3 1: 444
PICK. retorna uma cópia do objeto 4: 123 4: 123
do nı́vel n+1 para o nı́vel 1
3: 456 3: 456
(n está no nı́vel 1)
2: 789 2: 789
1: 3 1: 123
DEPTH. retorna o número de obje- 3: 3: 16
tos na pilha.
2: 16 2: −5
1: −5 1: 2
DROP2. remove os objetos dos nı́veis 3: 12 3:
1 e 2.
2: 10 2:
1: 8 1: 12
DROPN. remove os primeiros n+1 4: 123 4:
objetos da pilha.
3: 456 3:
(n está no nı́vel 1)
2: 789 2:
1: 2 1: 123
DUPN. duplica n objetos da pilha, 5: 5: 333
começando no nı́vel 2.
4: 333 4: 222
(n está no nı́vel 1)
3: 222 3: 111
2: 111 2: 222
1: 2 1: 111

14
1.4 Programação de fórmulas
Para a HP 50g um programa é um objeto delimitado pelos sı́mbolos
≪ ≫, isto é, todos os programas devem ser digitados entre estes sı́mbolos∗ .
Variáveis
Variáveis são como arquivos em um disco rı́gido de computador. Uma
variável pode armazenar um objeto (valores numéricos, expressões algébricas,
listas, vetores, matrizes, programas, etc).
As variáveis são reconhecidas pelos seus nomes, que podem ser qualquer
combinação de caracteres alfabéticos ou numéricos, iniciando com uma letra.
Aguns caracteres não alfabéticos, tais como a seta (→) podem ser usados
em um nome de variável, se combinados com um caractere alfabético. Assim,
p → Ap é um nome válido de variável, mas p → p não é. Exemplos válidos de

nomes de variáveis são: p Ap, p B p, p a p, p b p, p α p, p β p, p A1 p, p AB12 p, p → A12 p


, p Vel p, p Z0 p, p Z1 p, p Agnus p , p Aline p , p Ananda p , p Aarao p , etc.
Uma variável não pode ter o mesmo nome de uma função da calculadora.
Você não pode ter uma variável SIN por exemplo, já que existe um co-
mando SIN na calculadora. Numa eventual dúvida, consulte o catálogo de
comandos da calculadora. (p. 46)
Nota: Letras maiúsculas e minúsculas não são equivalentes.
Estrutura de variável local
O comando† → define nomes de variáveis locais (isto é, variáveis que
somente são válidas dentro do programa em que foram definidas) − ao
contrário das variáveis globais, que são definidas pela tecla STOK (do inglês
STORE, armazenar).
Antes de se iniciar a programação de determinado problema é importante
que se tenha bem claro em mente quais são os dados de entrada e quais são
os dados de saı́da; por exemplo:
1o ) Resolver a equação quadrática ax2 + bx + c = 0. Temos:

a
r1
b R.E.Q.
r2
c

Onde:
− Dados de entrada: a, b e c.
− Dados de saı́da: r1 e r2 (são as raı́zes).

O qual encontra-se acima da tecla + , em vermelho.

Este comando (de atribuição) encontra-se acima da tecla 0 , em vermelho.

15
− R.E.Q.: Variável que irá armazenar o programa (e que será referenciada
sempre que o programa for executado).
Observação: o nome R.E.Q. é apenas um exemplo, o nome poderia ser
um outro, a seu critério (atendendo o ı́tem anterior variáveis).
2o ) Calcular o n−ésimo termo de uma progressão aritmética:

an = a1 + (n − 1)r

Temos:

a1
r P.A. an
n

Onde:
− Dados de entrada: O primeiro termo a1 ; a razão da P.A. r e a posição n
do termo que queremos encontrar.
− Dados de saı́da: O n−ésimo termo an .
− P.A.: Variável que irá armazenar o programa (e que será referenciada
sempre que o programa for executado).

3o ) Cálculo da hipotenusa de um triângulo retângulo: a = b2 + c2 .
Temos:

b a c
HIP. a ⊡
c b

Onde:
− Dados de entrada: Os catetos b e c.
− Dado de saı́da: A hipotenusa a.
− HIP.: Variável que irá armazenar o programa.
Nos três programas anteriores devemos fornecer os dados de entrada e o
programa calcula e fornece os dados de saı́da.
Uma estrutura de variável local possui uma das seguintes organizações
dentro de um programa:

≪ → nome1 nome2 . . . nomen p objeto algébrico p ≫ (1.1)

Ou,
≪ → nome1 nome2 . . . nomen ≪ programa ≫ ≫ (1.2)

16
O comando (de atribuição) → remove n objetos da pilha e os armazena
nas variáveis locais, cujos nomes são listados em seguida.
Somente agora faremos nosso primeiro programa. Uma observação opor-
tuna é a de que assim como não existe uma única maneira de se resolver
determinado problema na fı́sica ou na matemática, por exemplo, também
não existe um único modo de se fazer determinado programa no computa-
dor (ou na calculadora); provavelmente cada programador o faça de modo
distinto. Um critério bastante geral para se avaliar um bom programa é
a simplicidade do mesmo, embora nesta altura dos acontecimentos (isto é,
para o iniciando na programação) o importante é que o programa seja feito
e funcione de acordo com o esperado.
Exemplo 1:
O seguinte programa toma dois números da pilha e retorna um resultado
numérico (o valor absoluto da diferença entre ambos, isto é: |a − b|).

≪→ a b pABS(a − b)p ≫ (1.3)

Este programa é da forma (1.1) (ver p. 16). Antes de programarmos o


exemplo acima, observamos que você pode acessar os comandos, como ABS
por exemplo, pelas teclas do menu (p. 13) ou digitá-los, ou ainda pelo Catálogo
de comandos (p. 46).
Pois bem, vamos retomar o programa anterior. observe que em,
p
ABS(a − b)p

temos aspas simples (chamadas doravante de plics). Estas aspas simples


(plics) encontram-se na tecla p O .
Digite o programa dado em (1.3). Observe que entre a seta e a primeira
variável (no caso a) existe um espaço (mas não se preocupe pois a calculadora
o coloca automaticamente; isto é, após digitar a seta − (veja nota † na p. 15).

1.5 Para armazenar ou nomear um programa


1o ) Entre com o programa, já digitado, na pilha. Isto é, após digitá-lo
pressione ENTER . O programa irá para o nı́vel 1 da pilha, assim:

RAD XYZ BIN R ∼ p X p HLT


{HOME GENTIL} 12:24 19 : MAY
6
5
4
3
2
1 ≪ → a b pABS(a − b)p

17
2o ) Agora precisamos armazenar este programa em uma variável (nomeá-
lo), para isto pressione plics, em p O , e escolha um nome para o programa.
Por exemplo, p DIST p . Pressione ENTER e, em seguida, pressione a tecla
STO . Você acabou de armazenar (STO) o programa na variável que você
K
escolheu (isto é, no nome dado ao programa). Observe que o programa (e
o seu nome) desaparecem da pilha mas o nome (do programa) aparece no
menu de variáveis, assim:

RAD XYZ BIN R ∼ pXp HLT


{HOME GENTIL} 12:52 19 : MAY
7
6
5
4
3
2
1
DIST
Aqui está o programa.

Se na sua calculadora o programa não aparece no primeiro menu, como


acima, basta você pressionar a tecla VAR
J
(onde acessamos os programas).
Nota: O procedimento para armazenar qualquer programa é sempre o mesmo,
isto é, siga os passos 1o ) e 2o ) acima.

1.6 Para executar um programa


Coloque os dados na pilha (no caso do programa DIST, os números que
serão armazenados nas variáveis a e b, por exemplo 3 e 5), pressione VAR
J
(caso necessário) e depois a tecla do menu que contém o nome dado ao
programa.
Como funciona o programa anterior: Se o leitor colocar na pilha, por
exemplo, os seguintes dados de entrada: 3 e 5; ao executar o programa o
comando de atribuição (→) armazenará estes valores nas variáveis a e b, res-
pectivamente (isto é, fará a=3 e b=5). Em seguida a expressão algébrica
(que consta entre plics) será avaliada (calculada) para estes dados. O resul-
tado: 2, será deixado na Pilha.
Modos de programação
Em nosso curso utilizaremos dois modos de programação, os dados nas
referências (1.1) e (1.2) (p. 16). O primeiro é mais prático para a pro-
gramação de fórmulas matemáticas, enquanto o segundo para programas
mais elaborados, como teremos oportunidade de exemplificar.

18
Exemplo 2: Por exemplo, o programa a seguir,
p
≪→ b c ( b∧ 2 + c∧ 2 ) p ≫

calcula a hipotenusa de um triângulo retângulo. (ver p. 16)


Exemplo 3: Este mesmo programa no modo (1.2) fica assim:
≪ → b c
≪ p ( b ∧ 2 + c ∧ 2 ) p EVAL


O comando EVAL (acessado na tecla EVAL N ) avalia uma expressão
algébrica (isto é, uma expressão entre plics) que o precede. Sugerimos ao
leitor digitar este programa e, em seguida, seguir os passos descritos nas
subseções 1.5 e 1.6.
Exemplo 4: O maior de dois números. A seguinte fórmula matemática

a + b + |a − b|
max{ a, b } =
2
nos fornece o maior de dois números. Por exemplo

2 + 5 + |2 − 5|
max{ 2, 5 } = =5
2
O programa seguinte

≪→ a b p (a + b + ABS(a − b))/2 p ≫
nos devolve o maior de dois números fornecidos. Observe que esse programa
executa o mesmo que a função MAX, para números reais, que consta na
tabela dos reais à p. 13.
A fórmula para o menor de dois números é como a seguir

a + b − |a − b|
min{ a, b } =
2
Por exemplo

−1 + 0 − | − 1 − 0|
min{ −1, 0 } = = −1
2

∗ ∗ ∗
Para muitos pensar é uma tarefa fastidiosa. Para mim, nos meus
dias felizes, uma festa e uma orgia. (Nietzsche, F. Vontade de poder, XIV, 24)

19
1.7 Para visualizar ou editar um programa
Para visualizar − ou editar um programa − coloque seu nome entre plics
e em seguida na pilha. Pressionando (se necessário) as teclas:
VAR p O (nome do programa)
J ENTER
no menu
Nota: Caso o programa que você deseja editar não se encontre em um
dos menus exibidos na tela pressione a tecla NXT
L
até encontrá-lo.
Com o nome do programa na pilha pressione, em seguida, as duas teclas:

Pronto! Agora é só editar (ou visualizar) o programa.


Nota: Utilizando os quatro botões prateados, abaixo,


você posiciona o cursor em qualquer posição do programa.


Exemplo 5: Como mais um exemplo de programação de fórmulas vamos
resolver uma equação quadrática ax2 + bx + c = 0, segundo a conhecida
fórmula de Bháskara,

−b ± b2 − 4ac
x=
2·a
O programa fica assim: (ver p. 15)

≪ → a b c
p p
≪ (−b + (b ∧ 2 − 4 ∗ a ∗ c))/(2 ∗ a) EVAL
p p
(−b − (b ∧ 2 − 4 ∗ a ∗ c))/(2 ∗ a) EVAL

Notas: − O aspirante a programador deve ficar atento para a inserção


correta dos parêntesis, sob pena de redundar em erro de lógica, o qual a
calculadora não detecta (ela não adivinha o que você gostaria de calcular).
X
− O “chapeuzinho” em b ∧2 (isto é, b2 ) é acessado na tecla Y Q .
− Se, ao digitar um programa, “a tela (visor) se tornar pequena(o)” use as
teclas q para iniciar em uma nova linha.
Sugerimos ao leitor carregar e executar este programa.

20
1.8 Executando um programa passo-a-passo (DBUG)
A calculadora nos oferece um recurso muito importante, principal-
mente para quem se inicia em programação, que é a possibilidade de se
executar um programa passo-a-passo. Este recurso é poderoso e deve,
amiúdo, ser utilizado, por duas razões:
1a ) Permite que se compreenda o funcionamento (e a lógica) de um pro-
grama;
2a ) Facilita a correção de eventuais erros.
Este recurso nós o chamamos de DBUG. É fácil entender como um pro-
grama trabalha (funciona) se você executá-lo passo-a-passo, observando o
efeito de cada etapa (comando). Isto facilita “depurar” seus próprios pro-
gramas ou entender programas escritos por outros.
Utilizando o DBUG
1. Coloque todos os dados requeridos pelo programa na pilha, e nos
nı́veis apropriados∗ ;
2. Coloque o nome do programa no nı́vel 1 da pilha. Isto é, abra plics
e pressione o nome do programa o qual é acessado − como já dissemos −
pressionando-se a tecla VAR
J e depois a tecla do menu que contém o nome
dado ao programa.
Pressione a tecla ENTER;
3. Pressione a seguinte sequência de teclas:

PRG NXT NXT RUN DBUG


L L

Neste momento o nome do programa desaparece da pilha. Agora basta


ir pressionando, sucessivamente, o menu SST .
• Caso o leitor deseje continuar com a execução normal pressione o comando
CONT. Este comando é acessado pressionando-se as teclas: ON .

Sugerimos ao leitor executar passo-a-passo o programa para o cálculo das


raı́zes de uma equação quadrática.
Para avançar passo-a-passo no meio do programa
1. Insira (editando o programa) o comando HALT na linha de programa
a partir da qual você deseja iniciar o avanço manual (DBUG);
2. Execute o programa normalmente. Ele pára quando o comando HALT
é executado, o anúncio HALT é exibido (na tela).
3. Tome qualquer ação:

No caso do programa da hipotenusa, a ordem em que os catetos são fornecidos não
altera o resultado final. Já no caso do programa para o cálculo da raı́zes de uma equação
quadrática, a ordem − na qual os dados entram na pilha − é decisivo.

21
• Para ver o próximo passo do programa exibido na área de mensagens
e então executá-lo, pressione o menu SST .
• Para ver, mas não executar o próximo (ou os próximos dois passos),
pressione NXTL
.
• Para continuar com a execução normal, pressione CONT ( ON ).
Quando você desejar que o programa seja executado normalmente (no-
vamente) remova o comando HALT do programa.

1.9 Exibindo variáveis de entrada e saı́da


A instrução PROMPT faz com que a calculadora nos mostre (exiba) a(s)
variável(eis) de entrada num programa. Esta instrução é acessada com a
seguinte sequência de teclas:

PRG NXT IN NXT PROMP


L L

A instrução →TAG rotula um objeto com um nome ou texto descritivo.


Esta instrução é acessada com a seguinte sequência de teclas:

PRG TYPE →TAG

Nota importante: Lembramos que todos os comandos (instruções) podem


ser digitados “na mão”. Se o leitor decidir digitar a instrução →TAG alerta-
mos que não deve haver espaço entre a seta e TAG. Esta setinha encontra-se
acima da tecla 0 , em vermelho.
Exemplo 6: Para exemplificar o uso destas instruções vamos acrescentá-las
ao programa das raı́zes de uma equação quadrática, assim:

≪ p p Entre com a, b e c p p PROMPT → a b c


≪ p (−b + (b ∧ 2 − 4 ∗ a ∗ c))/(2 ∗ a)p EVAL
p p R1 p p →TAG
p p
(−b − (b ∧ 2 − 4 ∗ a ∗ c))/(2 ∗ a) EVAL
p p R2 p p →TAG



pp pp
Nota: Acesse as aspas duplas assim: .
Ao encontrar PROMPT o processamento do programa é interrompido e a
calculadora fica esperando os dados de entrada; coloque-os na pilha e, após,
pressione CONT (continue): ON .

22
1.10 Excluindo uma variável

Para excluir (deletar) uma variável (pode ser um programa) proceda


assim: coloque, entre plics, o nome da variável, pressione ENTER para colo-
TOOL PURGE
cá-lo na pilha, após pressione: I . Para excluir várias variáveis
ao mesmo tempo coloque-as (isto é, seus nomes) entre chaves ({ . . . . . . })
e proceda como antes.
Nota: Oportunamente estaremos mostrando uma outra alternativa para
deletarmos uma variável.

Apêndice: Criando Pastas, Movendo e Renome-


ando Arquivos

Organizando dados na calculadora


Você pode organizar dados na sua calculadora armazenando as variáveis
em uma árvore de diretórios − ou pastas, consideraremos como sinônimos.
Diretórios são áreas de memória usadas para guardar suas variáveis − em
particular programas − de forma similar ao de pastas em um computador
pessoal.
Na página 29 estaremos complementado as informações sobre o funciona-
mento da memória da calculadora bem como listando a função de vários dos
menus considerados a seguir.
Pois bem, para observar a “árvore” de arquivos em sua calculadora pres-
sione a combinação de teclas∗ FILES para obter o visor do gerenciador

de arquivo da calculadora:

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Atenção: Este é o visor da configuração atual da minha calculadora, na


sua certamente será diferente . . . porém similar.


A função FILE ativa o navegador de arquivo na memória da calculadora.

23
Criando diretórios
Pois bem, vamos criar uma pasta chamada PRGHP, na qual guardaremos
alguns programas-exemplos.
Como não tenho a menor idéia da configuração da árvore de diretórios
da sua calculadora, inicialmente retorne à pilha − pressione ON .
1o ) Se você está na pilha observe na parte superior do visor (segunda linha)
que existe um par de chaves: { HOME . . . } isto indica qual o (sub)diretório
atual da sua calculadora. Vamos unificar a minha e a sua calculadora no
diretório raiz (HOME) para isto pressione† UPDIR , possivelmente

mais de uma vez até que tenhamos entre chaves apenas o diretório HOME:
{ HOME }.
2o ) Vamos entrar na árvore de diretórios: pressione: FILES ;

3o ) na sua calculadora deverá aparecer um visor similar ao seguinte:

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Agora pressione a tecla virtual OK para adentrarmos no diretório raiz.


Digite NXT
L
NEW . Isto produzirá a seguinte forma de entrada:

 
 NEW VARIABLE 
Object:
Name:
Directory

Enter New Object


EDIT CHOOS CANCL OK

O campo de entrada Object , o primeiro campo de entrada no formulário,


é ressaltado por padrão. Este campo de entrada pode manter o conteúdo
de uma nova variável que está sendo criada. Dado que não temos neste
ponto nenhum conteúdo para o novo subdiretório, simplesmente pulamos

A função UPDIR move o local da memória um nı́vel acima na árvore do arquivo da
calculadora.

24

este campo de entrada pressionando a tecla com a seta para baixo, , uma
vez. O campo de entrada Name é agora ressaltado.

 
 NEW VARIABLE 
Object:
Name:
Directory

Enter variable name


EDIT CANCL OK

Neste local inserimos o nome do novo subdiretório, conforme a seguir:


ALPHA ALPHA PRGHP ENTER .
Após a última operação acima o cursor se move para o campo de seleção
− Directory.

 
 NEW VARIABLE 
Object:
Name: PRGHP
Directory

Create a new directory?


EDIT X CHK CANCL OK

Pressione a tecla virtual X CHK para especificar que você está criando
um diretório e pressione OK para sair do formulário de entrada. As
variáveis constantes no diretório HOME serão mostradas no visor conforme
a seguir:

Memory: 242367 | Select: 0


PRGHP DIR 6
GENTIL DIR 1233
CASDIR DIR 531

PURGE RENAM NEW ORDER SEND RECV

Isto na minha calculadora, na sua certamente é diferente. Mas o que


importa é que o subdiretório que acabamos de criar comparece em destaque
no visor acima.

25
Agora pressione UPDIR para retornar à tela da árvore de diretórios

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
PRGHP
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Agora descemos a árvore uma posição pressionando a tecla com a seta



para baixo, , para assinalar a pasta recém criada, assim:

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
PRGHP
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Em seguida pressione a tecla virtual (menu) CHDIR para selecionar o


diretório (CHange DIRectory) assinalado. Nesse momento a calculadora
retornará à tela principal:

RAD XYZ HEX R ∼ pXp HLT


{HOME PRGHP} 08:30 , 07 : JUN
7
6
5
4
3
2
1

Obseve que em cima comparece {HOME PRGHP} indicando que estamos


na pasta PRGHP. Se o leitor pressionar a tecla VAR
J (se necessário) observará
que os menus estão todos vazios, digo, nossa pasta PRGHP, recém criada, está
vazia − como seria de se esperar.

26
Digite o seguinte programa (maior de dois números): (p. 19 )

p
≪→ a b (a + b + ABS(a − b))/2 p ≫

Armazene este programana variável MDN, por exemplo.

Movendo, copiando e renomeando Arquivos


Agora desejamos digitar o seguinte programa (o menor de dois números):
p
≪→ a b (a + b − ABS(a − b))/2 p ≫

Esse programa tem uma única alteração em relação ao anterior (MDN),


razão porque vamos obter uma cópia de MDN e realizar a alteração necessária.
Com esse objetivo em vista, nossa estratégia será a seguinte: criaremos,
dentro da pasta PRGHP uma nova pasta a qual daremos o nome de RASC. (ras-
cunho) em seguida transferiremos uma cópia do arquivo (programa) MDN
para dentro da pasta Rascunho, renomearemos esse arquivo (com o nome
MIDN) e em seguida o moveremos de volta para a pasta PRGHP e, então, o
editaremos.
Pois bem, entramos na árvore de diretórios ( FILES ), onde deverá

estar assinalada a pasta PRGHP, pressione o menu OK , para adentrarmos


na pasta. Mude a página do menu ( NXT L
), pressione o menu NEW , desça

uma posição ( ).
Neste momento inserimos o nome do novo subdiretório, conforme a seguir:
ALPHA ALPHA RASC. ENTER . Pressione a tecla tecla virtual X CHK ,
em seguida OK . Deveremos estar na seguinte tela:

Memory: 242367 | Select: 0


RASC. DIR 6
MDN PROG 59

PURGE RENAM NEW ORDER SEND RECV

Este é o conteúdo atual da pasta PRGHP. A propósito observe que o objeto


que acabamos de criar é um (sub)diretório (uma subpasta) ocupando 6 bytes
de memória. O outro objeto é o programa MDN, que ocupa um espaço de
59 bytes.

Dando continuidade ao nosso desiderato, assinale o programa ( ).
Mude a página do menu três vezes ( NXTL , 3×), para alcançarmos o menu
COPY . Pressione COPY , quando então será mostrada a seguinte tela

27
 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 236 KB
PRGHP
RASC.

CHDIR CANCL OK

Assinale a (sub)pasta criada ( ) e, em seguida pressione OK .
A tela nos mostra agora a pasta PRGHP e o seu novo conteúdo, veja:

Memory: 242367 | Select: 0


RASC. DIR 73
MDN PROG 59

EDIT COPY MOVE RCL EVAL TREE

Agora vamos voltar à árvore para adentrarmos à (sub)pasta rascunho,



então: pressione TREE , em seguida e OK . Estamos dentro da pasta
rascunho. Pressione NXT L
para ir à próxima página do menu. Pressione
o menu RENAM , para renomear o arquivo, como MIDN, após pressione
ENTER.
Agora vamos mover esse arquivo para a pasta PRGHP. Para isso pressione
NXT (3×) para chegar no menu MOVE . Pressione este menu. A tela volta
L
para a árvore de diretórios. Com o botão ( △ ) suba até a pasta PRGHP.
Com a pasta PRGHP assinalada pressione OK . A nova tela fica assim:

Memory: 242367 | Select: 0


no Entries

EDIT COPY MOVE RCL EVAL TREE

mostrando que não há mais nenhuma entrada (conteúdo) na subpasta ras-
cunho.

28
Vejamos agora o novo conteúdo da pasta PRGHP: volte à árvore pressio-
nando o menu TREE , após suba um ramo na árvore, ( △ ), e, em seguida,
OK . Lhe será mostrada a seguinte tela.

Memory: 242367 | Select: 0


MIDN PROG 59
RASC. DIR 6
MDN PROG 59

EDIT COPY MOVE RCL EVAL TREE

Finalmente, para fazer as alterações necessárias pressione EDIT , a cal-


culadora então colocará uma cópia do programa na pilha:

≪→ a b p (a + b + ABS(a − b))/2 p ≫
Faça a alteração, após pressione ENTER e ON.

Estrutura da mémoria
A calculadora contém um total de 2.5 MB de memória do qual 1 MB é
usada para armazenar o sistema operacional (memória do sistema) e 1.5 MB
é usado para a operação da calculadora e armazenagem de dados (memória
do usuário). Os usuários não têm acesso ao componente da memória do
sistema.
 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
PRGHP
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

O visor acima indica a existência de três portas de memória (ou partições


da memória). As portas da memória disponı́veis são:
• Porta 0, chamada IRAM
• Porta 1, chamada ERAM
• Porta 2, chamada FLASH

29
A seção HOME da memória funciona como um disco num computador
pessoal. Cada objeto com nome em HOME é semelhante a um arquivo num
disco de computador. O diretório principal (ou raiz) para a HP 50g é
chamado HOME.
A porta 0 e o diretório HOME compartilham a mesma área da memória,
então quanto mais dados armazenados no diretório HOME, por exemplo,
menos memória estará disponı́vel para a armazenagem na Porta 0. O
tamanho total da memória para a área da memória do diretório Porta
0/HOME é 241 KB.
Porta 1 (ERAM) pode conter até 128 KB de dados. Porta 1, juntamente
com a Porta 0 e o diretório HOME, constitui o segmento RAM da calcu-
ladora (memória de acesso aleatório) da memória da calculadora.
A Porta 2 pertence ao segmento Flash ROM da calculadora (memória
apenas de leitura). A Porta 2 pode armazenar até 1085 KB de dados.
A quarta linha e as linhas subsequentes no visor acima mostram a árvore
do diretório da calculadora. O diretório superior, como já ressaltamos, é o
diretório Home e tem pré-definido em seu interior um sub-diretório chamado
CASDIR. O visor File Manager possui três funções associadas às teclas do
menu virtual:
CHDIR : Seleciona o diretório (CHange DIRectory).
CANCL : Cancela a ação.
OK : Aprova a seleção.
O subdiretório CASDIR contém um número de variáveis necessárias para
a operação adequada do CAS (sistema algébrico do computador).
Por exemplo, para obsevar os arquivos (variáveis) dentro do (sub)diretório

CASDIR, desça com a seta para baixo, , até destacá-lo; agora pressione
a tecla virtual OK .
Funções para manipular variáveis (arquivos)
Este visor inclui 20 comandos associados às teclas do menu soft que podem
ser usados para criar, editar e manipular variáveis. As primeiras seis funções
são as seguintes:
EDIT : Para editar uma variável ressaltada.
COPY : Para copiar uma variável ressaltada.
MOVE : Para mover uma variável ressaltada.
RCL : Para retornar o conteúdo de uma variável ressaltada (coloca no
nı́vel 1 da pilha).
EVAL : Para avaliar (executar) uma variável ressaltada.
TREE : Para ver a árvore do diretório onde a variável está contida.

Se você pressionar a tecla NXT


L , o próximo conjunto de funçẽs fica disponı́vel:
PURGE : Para excluir ou apagar uma variável.
RENAM : Para renomear uma variável (Arquivo, “pasta”, etc.).
NEW : Para criar uma nova variável (ou “Pasta”).

30
ORDER : Para ordenar um conjunto de variáveis no diretório.
SEND : Para enviar uma variável para outra calculadora ou computador.
RECV : Para receber uma variável de uma outra calculadora ou com-
putador.
Se você pressionar a tecla NXT L , o terceiro conjunto de funçẽs fica
disponı́vel:
HALT : Para retornar para a pilha temporariamente.
VIEW : Para ver o conteúdo de uma variável.
EDITB : Para editar o conteúdo de uma variável binária
)
HEADE : Para mostrar o diretório contendo a variável no cabeçalho.
LIST : Fornece uma lista de nomes e descrição de variáveis.
SORT : Seleciona as variáveis de acordo com um critério de seleção.

L , o último conjunto de funçẽs fica disponı́vel:


Se você pressionar a tecla NXT
XSEND : Para enviar a variável com o protocolo XModem.
CHDIR : Para alterar o diretório.

Apêndice: Transmitindo Dados Entre Duas HP 50g


Para transferir objetos de uma HP 50g para outra:
Se o objeto (um programa, por exemplo) que você deseja transferir não
encontra-se no diretório corrente∗ então você deve selecionar o diretório onde
este objeto encontra-se; ou seja, pressione FILES para chegar na árvore

de diretórios; isto é, a um visor similar ao seguinte:

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK


Em seguida com a tecla △ ou selecione o diretório no qual o objeto, a ser
transferido, encontra-se. Após selecionar o diretório pressione CHDIR para
que este seja o diretório corrente. Talvez você queira também selecionar, na
calculadora que irá receber os dados, o diretório que irá recebê-los. Então,
1. Alinhe as portas infravermelhas através das marcas △. As calculadoras
não devem se distanciar mais de 5 cm.


Para se certificar disto pressione a tecla VAR e pesquise nos menus “embaixo”.
J

31
hp
Graphing Calculator
HP 50g
SEND TO CALCULATOR

Enter names of vars to send

Name:
EDIT CHOOS
CHOOS

Graphing Calculator

CHOOSCASDI
N
N

Connecting

IOPAR GENTI
HP 50g

SEND

7
6
5
4
3
2
1
hp

Na figura acima a calculadora da esquerda irá transmitir e a da direita


irá receber os dados.

2. A máquina que enviará a informação.


2.1. Pressione a sequência de teclas: APPS
G
OK para chegar na
seguinte tela:

RAD XYZ DEC R ∼ p X p HLT


{HOME} 10:01 18 : MAY
7 1. Send to Calculator ..
6 2. Get from Calculator
3. Print display

5 4. Print ..
4 5. Transfer ..
3 6. Start Server
2
1
CANCL OK

Vamos explicar a função desta seis aplicações:

32
1. Send to Calculator.. . . . Envia os dados para outra calculadora
(ou a um computador com porta infravermelha).
2. Get from Calculator . . . Recebe dados de outra calculadora
(ou de um computador com porta infravermelha).
3. Print display . . . Envia o visor para impressão.
4. Print.. . . . Imprime o objeto selecionado da calculadora.
5. Transfer.. . . . Transfere os dados para outro dispositivo.
6. Start Server . . . Calculadora definida como um servidor para
a comunicação com os computadores.
2.2. Pois bem, pressionando OK na tela acima o visor da calculadora
que irá transmitir estará no seguinte modo:
 
 SEND TO CALCULATOR

Name:

Enter names of vars to end


EDIT CHOOS
CHOOS SEND

Pressionando CHOOS a calculadora entrará no diretório corrente para


que você possa selecionar o objeto a ser transmitido.
Faça isto e pressione OK , a calculadora retornará com o visor acima já
com o objeto pronto para ser enviado, o que pode ser feito pressionando-se
SEND , mas antes você deve prepará a calculadora receptora.

3. A máquina que receberá a informação.



3.1. Pressione a sequência de teclas: APPS
G
OK para chegar na
seguinte tela:
RAD XYZ DEC R ∼ p X p HLT
{HOME} 10:01 18 : MAY
7 1. Send to Calculator ..
6 2. Get from Calculator
3. Print display
5 4. Print ..
4 5. Transfer ..
3 6. Start Server
2
1
CANCL OK

3.2. Agora pressione OK para receber a informação.

33
Dúvida de um leitor
[. . . ] Vamos supor que queiras calcular o cosseno de um ângulo no for-
mato (entrada) graus, minuto, segundo. O programa a seguir faz isto:

≪ → a
≪ DEG a HMS→ COS

Vamos supor que queiras calcular o cosseno de

3o 12′ 15′′

Tens que entrar no seguinte formato

3.1215

O comando HMS→ faz a seuinte conversão


12 15
3.1215 = 3 + + = 3.20416666667
60 3600
Observa que a calculadora deve ser fixada no modo grau, caso esteja em
radiano, vai dá errado; digo ela interpreta o último número acima como
radiano, e não como grau.

HMS→ : Converte o ângulo de G.MMSS (grau, minuto, segundo) para grau.


→HMS : Converte de decimal para G.MMSS (grau, minuto, segundo).
Por exemplo,
3.20416666667 → HMS
converte para
3.1215 = 3o 12′ 15′′

HMS+: Efetua soma no formato G.MMSS


HMS−: Efetua subtração no formato G.MMSS
Estes comandos podem ser digitados ou acessados diretamente em

TIME
9
NXT
4. Tools.. OK L

34
Capı́tulo 2
Listas e Matrizes
O gênio, porque sabe encontrar
relações novas entre as coisas, revela-nos
novas harmonias e nos aproximam do
pensamento de Deus. (Pietro Ubaldi)
(E = m · c2 )

Com o objetivo de aumentar ainda mais nosso poder (potência) de pro-


gramação é que incluimos este capı́tulo com dois importantes recursos para
programação: listas e matrizes.

2.1 Listas
Uma lista é constituida de objetos (números, letras, gráfico, etc.) entre
chaves e separados por um espaço (tecla SPC ). Uma lista é o que, em
matemática, comumente conhecemos por conjunto. Exemplo de lista:

{1 5 a {b c} }

Este é um recurso muito importante para manipulação de objetos. Nos


próximos capı́tulos, inclusive no de Estatı́stica, utilizaremos com bastante
frequência os resultados (comandos e funções) do presente capı́tulo.

2.1.1 Criando listas


Para introduzir uma lista a partir do teclado:
1. Use + para indicar o inı́cio e o fim de uma lista.

2. Entre com os elementos da lista, separados por SPC .


Para montar uma série de elementos numa lista:
1. Entre com os elementos na pilha.

35
2. Digite o número de elementos no nı́vel 1 da pilha.
3. Use PRG LIST →LIST para converter os elementos da pilha em
uma lista.
Exemplo: Crie uma lista com os elementos −1, 0 e 1, usando →LIST .

Passo 1: Entre com os elementos e o número de elementos na pilha.

1 +/- W SPC 0 SPC 1 SPC 3 ENTER

Após este procedimento a pilha deve apresentar-se assim:

{ HOME } 07:52 15:APR


7 :
6 :
5 :
4 : −1
3 : 0
2 : 1
1 : 3

Passo 2: Converta a pilha para uma lista.


PRG LIST →LIST { −1 0 1 }
1 :
ELEM PROC OBJ→ →LIST SUB REPL

Importante: Para realizar o processo inverso do anterior; digo, para


desmontar uma lista (ou ainda, para retirarmos os elementos de uma lista)
basta digitarmos
PRG LIST OBJ→

Nota: A lista deve está no nı́vel 1 (tal como na tela anterior). Observe,
ademais, que este comando nos devolve, no nı́vel 1, o número de elementos
na lista.

2.1.2 Manipulação de listas


As funções a seguir oferecem maneiras de manipular os elementos de uma
lista. Sugerimos ao leitor fazer uma simulação em cada ı́tem para que os
respectivos comandos fiquem perfeitamente compreendidos.
1) MTH LIST SORT coloca os elementos de uma lista em ordem
ascendente. A lista deve estar no nı́vel 1.
2) MTH LIST REVLI reverte a ordem dos elementos de uma lista. A

lista deve estar no nı́vel 1.


3) + adiciona itens ao inı́cio ou no final de uma lista ou concatena duas
listas. Para acrescentar um elemento ao inı́cio da lista, entre com o ı́tem, a

36
lista e pressione + . Para adicionar um ı́tem no final da lista, entre com a
lista, depois com o ı́tem e pressione + .
4) PRG LIST ELEM NXT HEAD substitui a lista do nı́vel 1 pelo seu
L
primeiro ı́tem isolado.
5) PRG LIST ELEM NXT TAIL substitui a lista do nı́vel 1 por todos
L
seus elementos, com exceção do primeiro.
6) PRG LIST ELEM GET substitui a lista do nı́vel 2 e um número de

posição (ı́ndice) do nı́vel pelo elemento da lista naquela posição indicada.


7) PRG LIST ELEM GETI é similar a GET, porém ela também
incrementa o número de posições (ı́ndice). O novo ı́ndice é colocado no
nı́vel 2. A lista original estará no nı́vel 3.
8) PRG LIST ELEM PUT toma um objeto do nı́vel 1 e substitui um

objeto existente dentro da lista. Você deve fornecer a posição do objeto no


nı́vel 2 e a lista (ou matriz) no nı́vel 3. A lista resultante estará no nı́vel 1.
9) PRG LIST ELEM PUTI é similar a PUT, porém ela também
incrementa o ı́ndice. O novo ı́ndice é colocado no nı́vel 1 e a nova lista no
nı́vel 2.
10) PRG LIST ELEM SIZE substitui a lista do nı́vel 1 pelo número
de elementos que ela possui.
11) PRG LIST ELEM POS substitui a lista do nı́vel 2 e um elemento

daquela lista (nı́vel 1) por um ı́ndice contendo a primeira ocorrência daquele


elemento na lista. Se o elemento não for encontrado, 0 será retornado.

2.1.3 Operações com listas de números


Podemos realizar com listas de números algumas das operações que re-
alizamos com números.
Alterar os sinais
A tecla de alteração de sinal ( +/- W ), quando aplicada a uma lista de
números trocará o sinal de todos os elementos da lista.
Exemplo: A lista { 1 − 2 3 − 4 }, ficará: { −1 2 − 3 4 }.
Adição, subtração, multiplicação e divisão
Podemos multiplicar ou dividir todos os elementos de uma lista por um
mesmo número.
Exemplo:
Multiplicando a lista { 1 − 2 3 − 4 }, por 5, teremos: { 5 − 10 15 − 20 }.
A subtração de um único número de uma lista irá subtrair o mesmo
número de cada elemento na lista, por exemplo:
{ 1 − 2 3 − 4 } − 2 = { −1 − 4 1 − 6 }

37
Atenção!: A adição de um único número com uma lista produz uma lista
aumentada pelo número (“concatenação”) e não uma adição desse único
número para cada elemento na lista. Por exemplo:

{1 − 2 3 − 4} + 2 = {1 − 2 3 − 4 2}

A subtração, multiplicação e a divisão de listas de números do mesmo


tamanho produzem uma lista do mesmo tamanho com operações termo a
termo.
Nota: Se as listas envolvidas na operação tiverem tamanhos diferentes, é
apresentada uma mensagem de erro (Erro: Dimensão Inválida).
O sinal de mais (+), quando aplicado às listas, age como um operador
de concatenação colocando juntas as duas listas em vez de adicionar termo
a termo.
Para produzir adição termo a termo de duas listas do mesmo tamanho,
é necessário usar o operador ADD (ADD pode ser digitado diretamente do teclado).

2.1.4 O menu MTH/LIST


O menu MTH ( MTH LIST ) fornece um número de funções refe-

rentes exclusivamente as listas.


O menu contém as seguintes funções:
∆LIST : Calcula a diferença entre elementos consecutivos na lista.
P
LIST : Calcula o somatório dos elementos na lista.
Q
LIST : Calcula o produto dos elementos na lista.
SORT : Classifica os elementos na ordem crescente.
REVLIST : Reverte a ordem da lista.
ADD : Operador para adição termo a termo de duas listas do mesmo tamanho.

2.2 Matrizes
A HP 50g possui grandes recursos para entrada e manipulação de ma-
trizes. Muitas das operações descritas aqui também se aplicam a vetores
(que são matrizes com apenas uma linha ou uma coluna). O nome matrizes
também inclui objetos vetoriais.

2.2.1 Criando e montando matrizes


Você pode introduzir uma matriz de duas maneiras:
− O Editor de Matrizes (Matrix writer). Um método mais intuitivo
para entrar, visualizar e editar elementos de matrizes.
− Linha de comando. O método básico de entrada de objetos.

38
Para entrar com uma matriz usando o Editor de Matrizes:
1. Pressione MTRW para acessar a tela e menu do Editor de Matrizes.

2. Para cada elemento na primeira linha execute uma das opcções abaixo:
 Digite um número real ou complexo e pressione ENTER .
 Calcule o elemento usando a linha de comando e pressione ENTER . Para
calcular o elemento, digite os argumentos separados com SPC e pressione a
função desejada para o cálculo.

3. Pressione para marcar o final da primeira linha (a qual especifica o
número de colunas para a matriz).
Nota: Manipulando os quatro botões prateados, abaixo,


você pode colocar o cursor em qualquer posição da matriz.


4. Para cada elemento do restante da matriz, digite (ou compute) seu valor
e pressione ENTER . Ou, se você desejar, introduza números em mais de uma
célula de uma só vez, digitando-os na linha de comando e usando SPC para
separá-los. Pressione ENTER ao final para introduzi-los.
5. Após a entrada de todos os elementos na matriz, pressione ENTER para
colocá-la na pilha operacional.
Para entrar com uma matriz utilizando a linha de comando:
1. Pressione [ ] duas vezes para entrar com os delimitadores para a

matriz e para a primeira linha.


2. Digite os elementos da primeira linha. Pressione SPC para separar os
elementos.
3. Pressione para avançar o cursor para além do “fecha colchetes”.

4. Pressione [ ] para preencher uma nova linha (se necessário).

5. Repita os passos 3. e 4., se necessário. Ao término pressione ENTER para


colocar a matriz na pilha.
Por exemplo: digitando
[[1 2] [3 4]]
ao pressionar ENTER, teremos na pilha:
 
1 2
3 4
Para montar uma matriz por linhas a partir de uma série de
vetores:
1. Introduza cada vetor na pilha, na mesma ordem que você deseja que
apareçam na matriz.

39
Entre com o vetor da linha 1 antes, depois a linha 2, e assim por diante.
2. Entre com o número de linhas para a matriz desejada.
3. Pressione MTH MATRX COL COL→ para montar os vetores numa
matriz.
Para criar uma matriz preenchida com uma constante dada:
1. Entre com um dos seguintes ı́tens na pilha:
 Uma lista contendo as dimensões da matriz desejada na forma:
{linha coluna}.
 Qualquer matriz, cujos elementos você não se importa que sejam alter-
ados.
2. Introduza a constante com a qual você deseja preencher a matriz.
3. Pressione MTH MATRX MAKE CON . Isto retorna uma matriz com as

dimensões especificadas, preenchida com a constante fornecida.


Para criar uma matriz identidade:
1. Entre com um dos seguintes ı́tens na pilha:
 Um número real que representa o número de linhas e colunas de uma
matriz identidade (quadrada).
 Qualquer matriz quadrada, cujo conteúdo você não se importa que se-
jam alterados.
2. Pressione MTH MATRX MAKE IDN. Esta operaçã retorna uma matriz

identidade com as dimensões dadas.

2.2.2 Desmontando matrizes


A HP 50g monta e desmonta os elementos de uma matriz de duas di-
mensões, seguindo a ordem de preenchimento de linhas (da esquerda para
a direita, e de cima para baixo). Começando com o elemento corrente (fre-
quentemente o elemento da linha 1 e coluna 1), a ordem de preenchimento
de linhas assume que o “próximo” elemento será o próximo naquela linha.
Caso não existam mais elementos na linha, então o próximo será o primeiro
da linha seguinte. Esta convenção de preenchimento é semelhante a um
processador de textos, onde uma linha é preenchida e, assim que cheia, o
preenchimento prossegue no inı́cio da próxima.
Para desmembrar uma matriz em seus elementos
1. Entre com a matriz na pilha.
2. Pressione PRG TYPE OBJ→ . A matriz será desmontada na ordem de

preenchimento por linhas, colocando cada elemento em um nı́vel separado.


O nı́vel 1 contém uma lista com as dimensões originais da matriz.
Para montar uma matriz a partir de uma sequência de elementos
1. Entre com com os elementos na pilha na ordem de preenchimento por
linhas.

40
2. Entre com uma lista contendo as dimensões da matriz desejada na forma:
{ linhas colunas }.
3. Pressione PRG TYPE →ARRY . Para montar a matriz.

Para desmembrar uma matriz em vetores-linha


1. Entre com a matriz na pilha.
2. Pressione MTH MATRX ROW →ROW . A matriz é desmembrada em

vetores (primeira linha até a última). O nı́vel 1 da pilha contém um número


real representando o número de linhas da matriz original.
Para desmembrar uma matriz em vetores-coluna
1. Entre com a matriz na pilha.
2. Pressione MTH MATRX COL →COL . A matriz é desmembrada

em vetores (primeira coluna até a última). O nı́vel 1 da pilha contém um


número real representando o número de colunas da matriz original.

2.2.3 Inserindo linhas e colunas


Para inserir uma ou mais linhas novas numa matriz:
1. Entre com a matriz alvo (aquela que você deseja modificar) na pilha
operacional.
2. Entre com o vetor, matriz ou elemento (quando o objeto alvo é um vetor)
que você deseja inserir. Uma matriz inserida deve possuir o mesmo número
de linhas e colunas que a matriz alvo.
3. Entre com o número da linha sobre a qual você eseja inserir a nova matriz.
Todos os elementos localizados naquela linha da matriz alvo serão movidos
para baixo, acomodando a inserção. Números de linhas começam de 1 e não
de 0.
4. Pressione MTH MATRX ROW ROW+ para inserir as novas linhas.

Para inserir uma ou mais colunas novas numa matriz:


1. Entre com a matriz alvo (aquela que você deseja modificar) na pilha
operacional.
2. Entre com o vetor, matriz ou elemento (quando o objeto alvo é um vetor)
que você deseja inserir. Uma matriz inserida deve possuir o mesmo número
de linhas e colunas que a matriz alvo.
3. Entre com o número da coluna sobre a qual você eseja inserir a nova
matriz. Todos os elementos localizados naquela coluna da matriz alvo serão
movidos para a direita, acomodando a inserção. Números de colunas começam
de 1 e não de 0.
4. Pressione MTH MATRX COL COL+ para inserir as novas colunas.

2.2.4 Extraindo linhas e colunas


Para extrair uma linha especı́fica de uma matriz:

41
1. Entre com a matriz na pilha operacional.
2. Entre com o número da linha (ou a posição do elemento, caso a matriz
alvo seja um vetor) que você deseja extrair.
4. Pressione MTH MATRX ROW ROW- . O vetor-linha (ou elemento)

extraı́do é colocado no nı́vel 1 e a matriz com a linha removida é colocada


no nı́vel 2.

Para extrair uma coluna especı́fica de uma matriz:


1. Entre com a matriz na pilha operacional.
2. Entre com o número da coluna (ou a posição do elemento, caso a matriz
alvo seja um vetor) que você deseja extrair.
4. Pressione MTH MATRX COL COL- . O vetor-coluna (ou elemento)

extraı́do é colocado no nı́vel 1 e a matriz com a coluna removida é colocada


no nı́vel 2.

Invertendo Linhas e Colunas


Para inverter a posição de duas linhas numa matriz:
1. Entre com a matriz na pilha. Se a matriz for um vetor, ele será consid-
erado um vetor-coluna.
2. Entre com os dois números das linhas que serão trocadas.
4. Pressione MTH MATRX ROW NXT RSWP . A matriz modificada será
L
deixada no nı́vel 1.
Para inverter a posição de duas colunas numa matriz:
1. Entre com a matriz na pilha. Se a matriz for um vetor, ele será consid-
erado um vetor-linha.
2. Entre com os dois números das colunas que serão trocadas.
4. Pressione MTH MATRX COL CSWP . A matriz modificada será deixada
no nı́vel 1.

2.2.5 Extraindo e substituindo elementos em matrizes


Para extrair um elemento de uma posição especı́fica:
1. Entre com a matriz na pilha.
2. Entre com um dos seguintes objetos:
 Uma lista contendo a linha e a coluna do elemento que você deseja
extrair: {linha, coluna}.
 A posição do elemento que você deseja extrair (contando da esquerda
para a direita, e de cima para baixo).
3. Pressione MTH MATRX MAKE NXT GET para extrair o elemento
L
especı́fico.

42
Para substituir um elemento de uma posição especı́fica:
1. Entre com a matriz na pilha.
2. Entre com um dos seguintes objetos:
 Uma lista contendo a linha e a coluna do elemento que você deseja ex-
trair: {linha coluna}.
 A posição do elemento que você deseja extrair (contando da esquerda
para a direita, e de cima para baixo).
3. Entre com o elemento substituto .
4. Pressione MTH MATRX MAKE NXT PUT para substituir o elemento
L
especı́fico na localização escolhida.
Obtendo as dimensões de uma matriz: Para obter as dimensões (número
de linhas e colunas) de uma matriz inicialmente coloque-a na pilha, após
pressione: MTH MATRX MAKE SIZE

Transformando matrizes
Para transpor uma matriz:
1. Entre com a matriz na pilha.
2. Pressione MTH MATRX MAKE TRN . Para transpor a matriz.

Para inverter uma matriz quadrada:


1. Entre com a matriz quadrada na pilha.
2. Pressione 1/X Y .
Para alterar as dimensões de uma matriz
1. Entre com a matriz na pilha.
2. Entre com uma lista contendo as novas dimensões da matriz na forma:
{linha coluna}.
3. Pressione MTH MATRX MAKE RDM para redimensioná-la. Elementos

da matriz original são recolocados na matriz redimensionada, da esquerda


para a direita, da 1a linha até a útima. Caso haja menos elementos na nova
matriz, os elementos em excesso da original serão descartados. Caso haja
mais elementos na nova matriz, as posições faltantes serão preenchidas com
zeros (ou (0, 0) se a matriz for complexa).

Usando Matrizes e Seus Elementos em Expressões Algébricas


Você pode realizar cálculos com elementos de matrizes usando sintaxe algébrica.
A matriz deve ser representada por um nome na expressão simbólica ou
equação.
Para utilizar um elemento da matriz numa expressão algébrica
1. Certifique-se de que a matriz está armazenada numa variável.

43
2. Crie a expressão algébrica e, no ponto onde o elemento de matriz será
usado, digite o nome da matriz e pressione () .

3. Entre com os ı́ndices para o elemento:


 Para um vetor, digite um ı́ndice (número da posição do elemento).
,
 Para uma matriz, entre os dois ı́ndices separados (número da
linha e da coluna para o elemento).
Exemplo 7: Vejamos um exemplo deste importante recurso. Coloque
na pilha a seguinte matriz,
 
1 2 3
4 5 6

Para isto veja, por exemplo: Para entrar com uma matriz uti-
lizando a linha de comando. (p. 39)

Após, armazene-a em uma variável. Por exemplo, para armazenar esta ma-
triz na variável M, proceda assim: digite p Mp e pressione ENTER para
colocar este nome no nı́vel 1 da pilha, em seguida pressione STOK para ar-
mazenar a matriz neste nome. Este é o nome da matriz (com o qual ela será
referenciada).
Para se certificar disto basta pressionar ALPHA HIST M ENTER, a matriz
deverá retornar à pilha.
Digite a seguinte expressão: p M(1, 1) + M(1, 2)p .
Agora pressione ENTER para colocar este objeto algébrico na pilha. Em
seguida mande avaliá-lo pressionando EVALN . O resultado deverá ser 3, pre-
cisamente a soma dos dois primeiros elementos da primeira linha da matriz.
Vamos sofisticar um pouco mais nosso exemplo. O seguinte objeto
algébrico∗ .
P
p (k = 1, 3, M(1, k)) p

o qual é equivalente a,

3
X
M(1, k) = M(1, 1) + M(1, 2) + M(1, 3)
k=1

quando avaliado ( EVALN ) nos fornece o resultado 6, que é a soma dos ele-
mentos da primeira linha da matriz M.
Agora vamos “abusar” da boa vontade da HP . O seguinte objeto algébrico

P P
p (J = 1, 3, (I = 1, 2, M(I, J))) p


Este somatório, entre plics, pode ser acessado assim: p O SIN S

44
o qual é equivalente a,
3 X
X 2
M(I, J) = M(1, 1) + M(2, 1)
J=1 I=1
+ M(1, 2) + M(2, 2)
+ M(1, 3) + M(2, 3)

quando avaliado nos fornece o resultado 21, que é a soma − por colunas −
de todos os elementos da matriz M.

2.2.6 Cálculo de Matrizes com Elementos Algébricos


Um estudante de engenharia civil (Liercio Feital) me escreveu com a
seguinte dúvida: Como fazer um programa para gerar matrizes tipo:
" #
12E/L 10E/2L
8E/L 5E

“onde eu entraria com os valores E = 10 e L = 2, o programa mostraria a


matriz resultante”: " #
60 25
40 50

Na edição anterior deste livro apresentei o seguinte programa para a


solução deste problema.

≪ → E L
p p
≪ 12∗E/L EVAL
p p
10 ∗ E/(2 ∗ L) EVAL
p
8 ∗ E/L p EVAL
p
5 ∗ Ep EVAL
{2 2} →ARRY


onde entramos com as varáveis E e L, o programa calcula cada elemento e
depois monta a matriz resultante, 2 × 2. Este programa pode ser adaptado
para outras matrizes, inclusive com outras dimensões e variáveis.
Acontece que eu próprio fiquei insatisfeito com esta solução − não é
elegante, é “dispendiosa”. Por oportuno, fui treinado na matemática (em
longos anos) a apurar a sensibilidade em “questões que envolvem lógica”.

45
Algo análogo ao que acontece com um músico.
Escrevendo esta segunda edição do livro encontrei − meio que ao acaso −
um comando que achei de grande potencial no trato com matrizes simbólicas,
um recurso que eu próprio buscava desde meus primeiros tempos de HP.
Aproveito a oportunidade para apresentar ao leitor o:

• Catálogo de comandos
O catálogo de comandos da HP 50g − acessado com ( CAT ), acima

da tecla P − contém varios dos comandos (funções) da calculadora.


Para acessar um comando qualquer utilize os botões para cima e para

baixo ( △ ), após destacar a função desejada pressione, no menu, OK .
Vejamos um exemplo, a função AXL converte um vetor em uma lista
(e vice-versa). Entre na pilha, por exemplo, com o vetor [ 1 2 3 ]. Em
seguida entre no Catálogo e procure pela função AXL, ao encontrá-la pres-
sione OK no menu, para obter: { 1 2 3 }.

RAD XYZ DEC R


CATALOG: = COMMANDS
771
pXp
{HOME CNUM INTP} 10:07 AUG : 19
AXL
7 AXM
6 AXQ
5 BAR
4 BARPLOT
BASIS
3 BAUD

2 BEEP
1
HELP CANCL OK
Descrição do comando Ativação do comando

Nota: Muitas vezes procurar um comando através dos botões torna-


se demorado; podemos pegar um “atalho” digitando (modo ALPHA ) a
primeira letra do comando − ou as duas primeiras letras.
Pois bem, na verdade o comando que nos interessa, de momento, é o AXM
(logo após o AXL acima) este comando converte uma matriz simbólica em
numérica − que legal, não?!
Com este novo comando o programa do Liercio fica assim:

≪ → E L
≪ [ [ p 12 ∗ E/L p p 10 ∗ E/(2 ∗ L) p ] [ p 8 ∗ E/L p p5 ∗ E p ]]
AXM

46
Este programa produz o mesmo resultado que o anterior. Observe, ademais,
que o programa acima pode ser tratado como uma função de duas variáveis;
por exemplo, armazene-o na variável LF. Então, ao entrar na pilha com
p LF(10, 2)p e mandar avaliar,
EVAL N , recebemos de volta a matriz já espera-
da. (p. 45)

Descobri ainda que com este comando podemos operar (tratar) com ma-
trizes na forma simbólica; por exemplo, entrando na pilha com as matrizes

[ [ p ap p
b p ] [ p cp p
d p ]]

[ [ pEp pF p ] [ p Gp pH p ]]

e multiplicando-as a HP nos devolve o seguinte resultado: (matriz à direita)

" # " # " #


a b E F G·b+E ·a H ·b+F ·a
· = (2.1)
c d G H G·d+E ·c H ·d+F ·c

Pois bem, o programa seguinte

≪ → a b c d E F G H
≪ [ [ p ap p b p ] [ p cp p d p ] ]
[ [ pE p p
F p ] [ p Gp p
H p ]]
∗ AXM

realiza a multiplicação dada em (2.1). Por exemplo, entrando com

1 2 3 4 5 6 7 8

Obtemos de volta o resultado de


" # " # " #
1 2 5 6 19 22
· =
3 4 7 8 43 50

Duas observações: O programa acima pode ser visto como uma função
de oito variáveis: (caso tenha sido armazenado em F )

F (a, b, c, d, E, F, G, H)

Os programas podem ser alterados − se necessário − para que as matrizes


simbólicas sejam dados de entrada.

47
O comando AXM será ainda de grande utilidade aos estudantes de en-
genharia elétrica. Com efeito, na disciplina Circuitos Elétricos ocorre com
bastante frequência produtos de matrizes complexas, tais como
" # " #
1+i 1−i 1 3i
·
2 2 + 3i 1−i 1+i

A HP até que calcula este produto − com os números complexos na forma


algébrica −, todavia não simplifica o resultado. Por exemplo, para realizar
a multiplicação apresentada anteriormente, entre com as matrizes na pilha,
digitando-as no formato∗ :

[ [ p 1 + ip p1 − ip ] [ 2 p2 + 3i p ] ]

[[1 p3 ∗ ip ] [ p 1 − ip p1 + ip ] ]

Após multiplicá-las aplique o comando AXM para obter o resultado:


" #
(1, −1) (−1, 3)
(7, 1) (−1, 11)

Evidentemente que operações mais complexas (p. ex. envolvendo multi-


plicações e divisões) podem ser programadas.
Vejamos mais um exemplo. O seguinte sistema matricial foi retirado de
um livro de Circuitos Elétricos† : (p. 176)

" #" # " #


6 − j8 −(3 − j4) I1 220 120o
=
−(3 − j4) 6 − j8 I2 220 0o

Onde: I1 e I2 , incógnitas do sistema acima, são as correntes de malha.


Para os que não sabem, j é utilizado na engenharia elétrica para o sı́mbolo
i complexo, já que i é reservado para designar a corrente (como função do
tempo i = i(t)).
Os números complexos na matriz da esquerda representam impedâncias
(que são as grandezas que traduzem as resistências oferecidas por compo-
nentes do circuito tais como resistor, indutor (bobina) e capacitor à pas-
sagem da corrente alternada) e na matriz da direita temos as tensões no
circuito dadas na forma polar − esta forma está contemplada na HP, como
veremos logo mais.

Certifique-se de que o sinalizador 103 de sua calculadora esteja ativado (Modo com-
plexo ativo).

O mesmo com o qual eu me formei em 1986 (sem HP!): Joseph A. Edminis-
ter/Copyright c 1971 by Editora McGraw-Hill do Brasil-Ltda.

48
Sem querer ser saudosista − apenas a tı́tulo de informação aos estu-
dantes de hoje e para que apreciem devidamente a vantagem de se ter uma
HP 50g −, na minha época de estudante ainda não existiam calculadoras
programáveis, apenas cientı́ficas (e ainda não sofisticadas como as atuais).
Apenas uma década antes ainda era pior. Com efeito, recebi um email
de um engenheiro que estudou a versão anterior deste livro e me escreveu −
dentre outras coisas:
Gentil, bom dia! (email: 11/06/2012)

Aproveitei esses feriados estendidos em SP e li bem seu livro. Pratiquei


todos os exercı́cios propostos e pratiquei todos os programas. Foi muito bom
mesmo. Aprendi muito! [. . .]
Não sou matemático, sou engenheiro mecânico formado em 1975. Na minha
época de faculdade, não havia calculadoras ainda. Tudo era feito na régua
de cálculo ou no lápis e borracha. A minha Aristo tenho até hoje. [. . .]
Apesar de eu já me encontrar no fim da linha (fim de carreira - 60 anos),
ainda tenho disposição para aprender.
Pedir ao Ariovaldo (Siqueira) para que me enviasse uma foto da sua régua
para que eu pudesse mostrá-la aos meus alunos. Ele respondeu:
Em anexo encontra-se para sua apreciação o seu pedido. Tenho duas réguas
de cálculo, a Aristo e a Sterling Slide Rule. Na época eu fazia tudo com
elas em engenharia, ambas eu comprei em 1970 e as usei até 1978. Depois
aposentei as duas e comprei minha primeira Texas.

Foto-Ariovaldo

49
Vamos apresentar a solução do sistema feita pelo livro de Circuitos
Elétricos e depois vamos resolver pela HP − para que apreciemos devida-
mente o “sofrimento dos tempos antigos” e saibamos valorizar “as delı́cias
dos paraı́sos hodiernos”, por assim dizer. Então (como no livro, via deter-
minantes):

220 120o −(3 − j4)


220 0o 6 − j8 2200 66, 9o + 1100 −53, 1o
I1 =
=
6 − j8 −(3 − j4) 100 −106, 2o − 25 −106, 2o

−(3 − j4) 6 − j8

1905 36, 9o
= = 25, 4 143, 1o
75 −106, 2o


220
120o −(3 − j4)

220 0o 6 − j8 2200 −53, 1o + 1100 66, 9o
I2 = = −106, 2o
∆z 75

1905 −23, 2o
= = 25, 4 83o
75 −106, 2o

Isto porque o autor do livro não mostrou várias contas intermediárias.


E olha que este é apenas um sistema 2 × 2, também são comuns os de ordem
3 × 3, etc.
Nos meus tempos de estudante sofri bastante com estas contas − eu tinha
a esperança de que um dia Deus iria atender minhas orações! −, finalmente,
após décadas, chegou minha vez de rir por último!.
Vamos lá! HP 50g a postos!:
" #" # " #
6 − j8 −(3 − j4) I1 220 120o
=
−(3 − j4) 6 − j8 I2 220 0o

Inicialmente vamos alterar a configuração da calculadora para entrarmos


com a matriz da direita: pressionando a tecla MODEH , coloque (se necessário)
sua calculadora no modo grau e o sistema de coordenadas mude de retan-
gular para polar, assim:
Number Format...Fix 1
Angle Measure...Degrees
Coord System....Polar

50
Aproveitamos e fixamos a calculadora em uma decimal, para comparar
com a resposta do livro. Pois bem, inicialmente observo que existe a seguinte
correspondência com a notação da HP

220 120o = (220,∠120 )

O sı́mbolo ∠ é obtido com a seguinte sequência de teclas:

ALPHA 6

Pois bem, entramos inicialmente com a matriz da direita na seguinte


forma
[ [ (220, ∠120) ] [ (220, ∠0) ] ]
Após digitá-la pressione ENTER para colocá-la no nı́vel 1 da pilha. Entre
com a matriz da esquerda da seguinte forma:

[ [ p 6 − i ∗ 8p p − (3 − i ∗ 4) p ] [ p − (3 − i ∗ 4) p p6 − i ∗ 8p ] ]

Em seguida pressione ENTER para colocá-la no nı́vel 1 da pilha. Agora


basta dividir ( ÷ ) uma matriz pela outra; em seguida digite o comando
AXM, para obter a matriz:
" #
( 25.4,∠143.1 )
( 25.4,∠83.1 )

Sendo assim posso afirmar que minhas insistentes orações foram ouvidas!
− mesmo que tenha sido a favor de terceiros, não importa! Por exemplo,
meu filho (Aarão), atualmente cursa engenharia elétrica − advirto que isto
se deu sem que tenha havido qualquer sugestão minha neste sentido, e ainda
porque quando ele fez esta opção eu já não exercia a engenharia há muitos
anos∗ .

∗ ∗ ∗
Descobrimos que onde a ciência mais progrediu a mente recuperou da
natureza aquilo que colocou lá. Encontramos uma pegada estranha nas
praias do desconhecido. Criamos teorias profundas, uma após a outra,
para explicar a origem daquela pegada. Por fim, conseguimos reconstruir
com sucesso a criatura que deixou aquela marca. E vejam! A pegada é
nossa. (Sir Arthur Eddington)


Este breve interregno tem uma continuação na p. 100, a quem interessar possa.

51
A fórmula a seguir
n = N (i − 1) + j (2.2)
nos permite transferir os elementos de uma matriz de ordem M × N para
um vetor de comprimento M × N . (para a prova desta fórmula veja [4])

A fórmula nos diz em que posição n (do vetor) devemos guardar o ele-
mento aij da matriz. Por exemplo, para a matriz
 
a11 a12 a13
a21 a22 a23
de ordem 2 × 3, procedemos assim:

a11 ⇒ n = 3(1 − 1) + 1 = 1 ⇒ [ a11 , ? , ? , ? , ? , ? ]


a12 ⇒ n = 3(1 − 1) + 2 = 2 ⇒ [ a11 , a12 , ? , ? , ? , ? ]
a13 ⇒ n = 3(1 − 1) + 3 = 3 ⇒ [ a11 , a12 , a13 , ? , ? , ? ]
a21 ⇒ n = 3(2 − 1) + 1 = 4 ⇒ [ a11 , a12 , a13 , a21 , ? , ? ]
a22 ⇒ n = 3(2 − 1) + 2 = 5 ⇒ [ a11 , a12 , a13 , a21 , a22 , ? ]
a23 ⇒ n = 3(2 − 1) + 3 = 6 ⇒ [ a11 , a12 , a13 , a21 , a22 , a23 ]
Portanto:
 
a11 a12 a13
֌ [ a11 , a12 , a13 , a21 , a22 , a23 ]
a21 a22 a23
A fórmula a seguir (também uma contribuição minha):
  
 i = n−1
N +1
(2.3)
 j = n − N n−1 

N
é a inversa da função dada em (2.2) e nos diz, caso desejemos, como transferir
de volta as coordenadas do ponto para a matriz.
N é o número de colunas na matriz. ⌊ x ⌋ é chamado o maior inteiro que
não supera x (função piso). Por exemplo, para a situação anterior temos:
  
 i = 5−1 3 +1 =2
a5 ⇒
 j = 5 − 3 5−1  = 2
3
Ou seja, a quinta coordenada do vetor (n = 5) ocupará a posição (i, j) =
(2, 2) da matriz, assim:
 
− − −
[ a1 , a2 , a3 , a4 , a5 , a6 ]
− − −

Em [4] mostramos aplicações destas fórmulas na computação.

52
Capı́tulo 3
Estruturas de Programação
A preguiça e a covardia são as causas pelas quais uma parte tão
grande dos homens (. . . ) compraz-se em permanecer por toda a sua
vida menores; e é por isso que é tão fácil a outros instituı́rem-se seus
tutores. (Immanuel Kant)

Introdução
Uma estrutura de programaç~ ao permite a um programa tomar uma
decisão sobre como ele deve ser executado, dependendo das condições dadas
ou dos valores de argumentos em particular. Um uso cuidadoso e inteligente
destas estruturas tornam possı́vel a criação de programas com extraordinária
flexibilidade.
Diriamos que a programação propriamente dita começa aqui com estru-
turas de programação, pois o que fizemos anteriormente foi a programação
de fórmulas apenas. Estas estruturas que iremos estudar são comuns a várias
linguagens de programação, como por exemplo, PASCAL, FORTRAN, C++ ,
MATLAB, etc. Quero dizer: você entendendo-as neste contexto, também es-
tará apto a executá-las em qualquer outra linguagem em que estas se façam
presentes; daı́ a importância de entendê-las nesta aqui, isto é, na HP .

As estruturas de programação
As estruturas que iremos estudar são as seguintes:


 F OR − N EXT

• Estruturas cı́clicas : F OR − ST EP



W HILE − REP EAT − EN D
(
IF − T HEN − EN D
• Estruturas condicionais :
IF − T HEN − ELSE − EN D

53
3.1 Estruturas cı́clicas
3.1.1 FOR - NEXT
Entre com esta estrutura num programa pressionando a seguinte sequência
de teclas:
PRG BRCH FOR

A sintaxe desta estrutura é assim:

≪ . . . inı́cio fim FOR contador


cláusula-cı́clica
NEXT . . .

Esta estrutura executa uma porção do programa por um número definido
de vezes usando o conteúdo de uma variável local como contador, a qual
pode ser usada dentro do loop para cálculos ou outros propósitos. A cláusula
cı́clica é executada pelo ao menos uma vez.
FOR extrai dois números da pilha: inı́cio e fim e cria uma variável local
(contador) para controle de incremento do ciclo. Depois disto a cláusula-
cı́clica é executada, sendo que a variável contador pode aparecer dentro da
cláusula. NEXT incrementa o contador em 1 (uma unidade) e testa se ele é
menor ou igual ao valor fim. Se for este o caso, a cláusula-cı́clica é repetida
com o novo valor do contador. Caso contrário, a execução prossegue após
NEXT. Quando o ciclo (loop) terminar o contador é apagado.
Vamos dar alguns exemplos de programas que utilizam esta estrutura,
comentar alguns aspectos destes exemplos e colocar alguns problemas que
devem ser programados com esta estrutura.
Exemplo 8: (Somatório). Vamos construir um programa para calcular a
soma dos N primeiros números Naturais. Isto é, queremos o valor de:
N
X
i = 1 + 2 + 3 + ··· + N (3.1)
i=1

Devemos fornecer ao programa o valor de N (até onde queremos que o


mesmo some) e este deve nos devolver o valor da soma. O programa fica:
≪ → N
≪ 0 p S p STO
1 N FOR I
p
S I + S p STO
pp
NEXT S SOMAp p →TAG


54
Neste programa fornecemos o valor de N , que será armazenado na variável
local N e a execução começa inicializando uma variável (global por causa
de STO) com zero. A variável S irá armazenar (acumular) o valor da soma.
O contador (ou variável de controle) é o I, que irá variar de 1 até N , o que
concorda com a variação de i no somatório em (3.1).
Para que o leitor entenda o funcionamento (lógica) do programa sugeri-
mos que o mesmo seja executado com o auxı́lio do DBUG. (ver 1.8, p. 21)

Existe uma fórmula para o somatório dado em (3.1), assim:


N
X N · (N + 1)
i = 1 + 2 + 3 + ··· + N =
2
i=1

a qual pode fácilmente ser programada, veja:

≪→ N pN ∗ (N + 1)/2 p ≫
Exemplo 9: (Fatorial). O fatorial de um número natural n é definido assim:

n! = n(n − 1)(n − 2) · · · 1

Por exemplo, 5! = 5 · 4 · 3 · 2 · 1 = 120. O programa seguinte calcula o fatorial


de um número natural N .

≪ → N
≪ 1 pF p STO
1 N FOR I
p
F I ∗ F p STO
pp
NEXT F FAT.p p →TAG

Sugestão: execute-o no DBUG. Nota: Podemos inicializar um somatório


sempre com 0 e um produtório sempre com 1.
Exemplo 10: (Soma dos termos de uma P.A.). No estudo das progressões
aritméticas existem duas fórmulas dadas por,
n · (n − 1)
an = a1 + (n − 1) · r, S n = n · a1 + ·r
2
para o cálculo do n-ésimo termo e para a soma dos n primeiros termos,
respectivamente.
Embora a segunda fórmula possa ser programada diretamente (e mais
fácilmente), faremos um programa, para o cálculo da soma dos termos de
uma P.A., utilizando a primeira fórmula − como mais um exemplo de uti-
lização do FOR-NEXT. O programa fica assim:

55
≪ → a1 r N
≪ 0 p S p STO
1 N FOR n
p
a1 + (n − 1) ∗ r p EVAL
S + p S p STO
NEXT S p p SOMAp p →TAG

Observe que utilizamos − para o cálculo de an − o modo algébrico após


o FOR, poderiamos ter utilizado o modo pilha.

 Subrotinas
Um recurso (ou técnica) bastante utilizado em programação é o que se
chama de subrotina, que consiste na possibilidade de um programa ser aces-
sado por um outro.
Uma situação em que é recomendável o uso de subrotina é quando temos
um conjunto de instruções que é utilizado em diversas partes de um pro-
grama e para que não seja reescrito diversas vezes, é colocado em um pro-
grama à parte onde o primeiro programa (podemos chamá-lo de principal)
acessa o segundo (subrotina). Podemos resumir a idéia no seguinte dia-
grama:

P.P.

Subrotina

Atenção!: Os dados requeridos pelo programa subrotina são passados


pelo programa principal.
Para avançar passo a passo quando o próximo passo é uma sub-
rotina
 Para executar a subrotina em uma única etapa, pressione SST
(ver DBUG, p. 21)

 Para executar a subrotina passo a passo, pressione SST ↓ .

56
Exemplo 11: (Combinações). Como ilustração da utilização de subrotinas
vamos fazer um programa para o cálculo do número de combinações de m
objetos tomados n a n, segundo a fórmula:
 
m m!
= (3.2)
n n! (m − n)!

Observe que devemos calcular três fatoriais e para isto vamos usar o
programa feito na p. 55 como subrotina. Para os nossos propósitos aquele
programa fica assim:

≪ → N
≪ 1 pF p STO
1 N FOR I
p
F I ∗ Fp STO
NEXT F


Vamos armazenar este programa com o nome de FAT. O programa prin-
cipal (para o cálculo de (3.2)) pode ser:

≪ → M N
≪ M FAT
N FAT
M N − FAT
∗ / p p COMB(M, N) p p →TAG

Observe que o programa principal chama a subrotina (armazenada em


FAT) três vezes. O programa principal coloca o dado (inicialmente M ) na
pilha e chama a subrotina, esta calcula o fatorial e deixa o resultado na
pilha. Execute-o no DBUG. Em blocos, temos:

M
M
P.P. N
N

FAT

57
3.1.2 FOR - STEP
Entre com esta estrutura num programa pressionando a seguinte sequência
de teclas:
PRG BRCH FOR

A sintaxe desta estrutura é assim:


≪ . . . inı́cio fim FOR contador
cláusula-cı́clica
incremento STEP . . .

Esta estrutura executa uma porção do programa por um número definido
de vezes usando o conteúdo de uma variável local como contador, da mesma
forma que em FOR-NEXT. A diferença é que você pode especificar um
incremento diferente de 1.
FOR extrai dois números da pilha: inı́cio e fim e cria uma variável local
(contador) para controle de incremento do ciclo. Depois disto a cláusula-
cı́clica é executada, sendo que a variável contador pode aparecer dentro da
cláusula. STEP aumenta o contador com o valor do incremento e testa se
ele é menor ou igual ao valor fim. Se for este o caso, a cláusula-cı́clica é
repetida com o novo valor do contador (se o valor do incremento é negativo,
o ciclo é repetido enquanto o contador for maior ou igual ao valor fim).
Se o incremento de STEP for um objeto algébrico ou nome (variável), ele é
automaticamente convertido para um número. Ele também pode ser positivo
ou negativo. Se for positivo, o ciclo é executado novamente enquanto o
contador for menor ou igual a fim. Caso contrário, a execução prossegue
após STEP.
Vejamos um exemplo de uso desta estrutura:
No cálculo numérico de integrais,
Z b
I= f (x) dx
a

efetuamos uma partição do intervalo [ a, b ] em n subintervalos e “amostramos”


a função f nos pontos desta partição, assim:
yn−1
y3
y0
y2 yn−2
y1 yn
y4

p p p p p p
x0 = a x1 x2 x3 x4 ··· xn−2 xn−1 xn = b

58
Onde:

y0 = f (x0 ), y1 = f (x1 ), y2 = f (x2 ), . . . , yn−1 = f (xn−1 ), yn = f (xn )

Para obter uma partição (regular) do intervalo [ a, b ] em N subintervalos


de mesmo comprimento, fazemos h = b−a N , no que resulta

xn = x0 + n h, n = 0, 1, 2, . . . , N.

[ ] x
a = x0 x1 x2 ... xn−1 xn = b
h h h

Por exemplo, para x ∈ [ a, b ] = [ 0, 1 ] e N = 4 subintervalos, temos

b−a 1−0 1
h= = = = 0. 25
N 4 4
A discretização do intevalo fica: (n = 0, 1, 2, 3, 4)

p p p p p x
x0 = 0 1 1 3 x4 = 1
x1 = 4
x2 = 2
x3 = 4

O programa seguinte recebe a, b e N , e sai com um vetor contendo a


partição do intervalo [ a, b ]:

≪ → a b N
≪ p (b − a)/N p EVAL p hp STO
a b FOR xi
xi
h STEP
N 1 + → ARRY

Por exemplo, para a discretização acima entramos com a = 0, b = 1 e


N = 4, o programa nos devolve o seguinte vetor: [ 0 .25 .5 .75 1 ].

59
Exercı́cios
Nota: Os exercı́cios seguintes devem, preferencialmente, ser implementados
com a estrutura “FOR”.
1) Faça um programa para sair com os N primeiros termos de uma P.A.
(progressão aritmática), de dois modos distintos:
( a ) em uma lista ( b ) em um vetor.
2) Faça um programa para calcular o produto dos N primeiros termos de
uma P.A.
3) Faça um programa para calcular a soma dos N primeiros termos de uma
P.G.
n
X
4) Faça um programa para calcular o seguinte somatório: i2 .
i=1
5) Seja a sequência,

1, 1, −1, −1, 1, 1, −1, −1, 1, 1, −1, −1, ...

cuja fórmula do termo geral e do produto são,


(n−1)(n−2) n(n−1)(n−2)
2 6
an = (−1) e Pn = (−1)

Faça um programa para sair com um vetor contendo os N primeiros


termos desta sequência e mais ainda o produto destes N primeiros termos.
Xn
6) Faça um programa para calcular o somatório: im ; onde m e n são
i=1
valores arbitrários que devem ser fornecidos ao programa.
Sugestão: Veja fórmula (4.8), p. 99.
7) Faça um programa para calcular a soma,

1 · 2 + 2 · 3 + 3 · 4 + · · · + n · (n + 1)

8) Faça um programa para calcular o produto interno canônico de dois ve-


tors, assim:

[ a1 a2 . . . an ] · [ b1 b2 . . . bn ] = a1 · b1 + a2 · b2 + · · · + an · bn

9) Faça um programa para sair com um vetor contendo os N primeiros


termos de uma P.A., usando a fórmula de recorrência (definição) de uma
P.A.: 
 a1 = a
a
n = an−1 + r, n ≥ 2.

60
10) Faça um programa para sair com um vetor contendo os N primeiros
termos de uma P.G., usando a fórmula de recorrência (definição) de uma
P.G.: 
 a1 = a
a
n = an−1 · q, n ≥ 2.

11) Faça um programa para sair (em lista ou vetor) com os N primeiros
termos das seguintes sequências :
( i ) a1 = 4; an = (−1)n · an−1 .
( ii ) a1 = −2; an = (an−1 )2 .
( iii ) (U.F.CE -81) Os termos da sucessão a1 , a2 , . . . , an , estão relaciona-
dos pela fórmula an+1 = 1 + 2 · an , onde n = 1, 2, 3, . . .. Se a1 = 0, então a6
é:
a ) 25 b ) 27 c ) 29 d ) 31
12) (PUC-SP - 81) Na sequência (a1 , a2 , . . .) tem-se:

2 + a2n
a1 = 1 e an+1 =
2an

Qual dos números abaixo está mais próximo de a3 ?


√ √ √
a)1 b)2 c) 2 d) 3 e) 5

Nota: Lembramos que nestes exercı́cios queremos que você faça um pouco
mais do que o exercı́cio pede. Queremos que você faça um programa para
listar os n primeiros termos das sequências dadas.
13) (U.F.BA. - 81) sejam as sequências
 
 a1 =4 b1 =5
e
a
n+1 = 1 + a2 b
n+1 = 1
1+bn
n

Se P = an · bn , tem-se:

a) P < 0 b) 0 ≤ P < 1 c) 1 ≤ P < 2 d) 2 ≤ P < 3 e) P ≥ 3

14) (U.F.PR. - 80) Seja f uma função tal que f (1) = 2 e f (x+1) = f (x)−1,
para todo valor real de x. Então f (100) é igual a:

a ) − 99 b ) − 97 c ) 96 d ) 98 e ) 100

Nota: Aqui o leitor deverá fazer um programa para fornecer f (N ) onde


N > 1 é um um número natural.

61
15) (PUC - SP - 85) Na sequência (a0 , a1 , a2 , . . .) onde a0 = 1 e an+1 =
an + n, para todo n ∈ N, a soma dos 7 primeiros termos é

a ) 41 b ) 42 c ) 43 d ) 63 e ) 64

Nota: O leitor deverá sempre resolver os problemas de forma generalizada.


Por exemplo, aqui faça um programa para calculara soma dos N primeiros
termos da sequência .
16) (PUC - SP - 70) Sendo f : R → R definida por f (x) = 2x + 3, então
f (1) + f (2) + f (3) + · · · + f (25) é igual a:

a ) 725 b ) 753 c ) 653 d ) 1375 e ) 400

17) No cálculo numérico de integrais (p. 58)

Z b
I= f (x) dx
a

A primeira regra de Simpson generalizada estabelece que,


Rx
n
x0
f (x) dx ∼
= h
3
[ f (x0 ) + 4f (x1 ) + 2f (x2 ) + 4f (x3 ) + ··· +2f (xn−2 ) + 4f (xn−1 ) + f (xn ) ]

Faça um programa que calcule a seguinte integral


Z 1
I= x2 dx
0

O programa deve receber n. Depois calcule o valor exato da integral e


compare com os resultados do programa para alguns valores de n.
Sugest~ao: Inicialmente determine uma fórmula para gerar os coeficientes
numéricos em destaque na expressão:

1f (x0 ) + 4f (x1 ) + 2f (x2 ) + 4f (x3 ) + · · · + 2f (xn−2 ) + 4f (xn−1 ) + 1f (xn )

18) Armazenando um vetor de 16 posições em uma matriz 4 × 4, quais as


posições ocupadas pelos conteúdos das posições n = 7, n = 11 e n = 16 do
vetor?
Sugest~ ao: Programe a fórmula 2.3 (p. 52).
19) Para uma matriz de ordem M × N faça um programa que relacione suas
posições i, j com as posições n de um vetor segundo a fórmula (2.2) (p. 52).

62
3.1.3 FOR - NEXT’s concatenados
O que chamamos de concatenação de FOR - NEXT’s é o mesmo que
encaixe (ou aninhamento) de FOR - NEXT’s que, dependendo do programa,
pode tomar diversas configurações. Por exemplo, assim:

FOR FOR FOR


FOR FOR FOR
FOR
a) b) c) NEXT
FOR
NEXT
NEXT NEXT
NEXT
NEXT NEXT NEXT

A concatenação é, amiúdo, útil para se trabalhar com matrizes. Vejamos


os seguintes exemplos:

Exemplo 12: (U.E.LONDRINA - 84) Dada a matriz A = ( amn )2×2 onde


amn = 2n−m , a soma de todos os elementos que compõe a matriz A2 é igual
a:
a ) 81/4 b ) 10 c)9 d ) 25/4 e) − 6

Motivados pelo desafio acima vamos fazer um programa para construir


uma matriz (quadrada de ordem N ) e que, em particular (N = 2) tenhamos
a matriz do problema anterior.
Lembramos que o FOR - NEXT é acessado com a seguinte sequência de
teclas:
PRG BRCH FOR

O programa procurado fica assim:

≪ → N
≪ 1 N FOR m
1 N FOR n
p p
2 ∧ (n − m) EVAL
NEXT N ROW→
NEXT N ROW→

Observe que temos uma concatenação tipo a ). O primeiro FOR (ou


ainda, o primeiro laço) fixa a linha e o segundo varia as colunas, de modo
que a matriz vai sendo construida linha a linha e de cima para baixo. Para
maiores detalhes execute-o no DBUG.

63
Para obter a matriz A2 , após a execução do programa, basta pressionar
ENTER e multiplicar × . Por exemplo, fornecendo 2 ao programa, este nos
devolve a matriz:
 
1 2
0.5 1
cujo quadrado é,  
2 4
1 2

Exemplo 13: (CESCEM - 71) Define-se a distância entre duas matrizes


A = ( aij ) e B = ( bij ) quadradas e de mesma ordem n pela fórmula:

d(A, B) = max |aij − bij |, i, j = 1, 2, 3, . . . , n.

   
1 2 5 7
Assim a distância entre as matrizes e é:
3 4 6 8

a) − 5 b) − 3 c)0 d)3 e)5

Nota: Na fórmula da distância max significa máximo (maior).


Antes de implementar o desafio acima em um programa, vejamos como
fica esta distância para duas matrizes quadradas de ordem 2, isto é,
   
a11 a12 b11 b12
A= e B=
a21 a22 b21 b22
Primeiro, construimos a matriz diferença:

     
a11 a12 b11 b12 a11 − b11 a12 − b12
A−B= − =
a21 a22 b21 b22 a21 − b21 a22 − b22



Agora temos que:




 |a11 − b11 | |a12 − b12 |


d(A, B) = max
 |a21 − b21 |
 |a22 − b22 |

Para as matrizes dadas no desafio temos:


 

 


 


 |1− 5| |2− 7| 
4 5

 
d(A, B) = max ⇒ d(A, B) = max =5
 |3− 6|
 |4− 8| 3
 4

64
O programa para calcular a distância entre duas matrizes quadradas de
ordem n, fica assim:
≪ → A B
≪ A SIZE OBJ → DROP DROP p N p STO
1 N FOR I
1 N FOR J
p
ABS(A(I, J) − B(I, J))p EV AL
NEXT
1 N 1 − FOR k
MAX
NEXT
NEXT
1 N 1 − FOR k
MAX
NEXT p p d(A, B) p p →TAG


Observe que temos uma concatenação de FOR’s com a seguinte con-
figuração:

− Onde: O laço maior fixa as linhas; o primeiro laço interno ao maior


varia as colunas e calcula o valor absoluto da diferença dos elementos de
mesma posição; o segundo laço interno encontra o maior valor de cada linha
(de A − B), e o último laço encontra o maior valor dentre os maiores valores
obtidos nas linhas (de A − B). Para maiores detalhes, execute-o no DBUG.

Exercı́cios
Nota: Os exercı́cios seguintes devem ser implementados com FOR-NEXT.
20) (U. MACK. - 73) Sendo A = ( aij ) uma matrix quadrada de ordem 2 e
aij = j − i2 , o determinante da matriz A é:
a)0 b)1 c)2 d)3 e)4
Nota: Novamente enfatizo que você deve implementar os exercı́cios da forma
mais geral possı́vel. Por exemplo, neste, entre com N (dimensão da matriz
quadrada) e o programa deve sair com o determinante (DET) da matriz.

65
21) A seguinte fórmula (matriz) é de importância decisiva para encontrar-
mos combinações. Teremos oportunidade de usá-la futuramente:

 
i−1
j−1
2
aij = ( −1 )

Nota: ⌊ x ⌋ é o maior inteiro que não supera x. Na HP você acessa esta


função com o comando FLOOR. (ver tabela dos reais, p. 13)
Elabore um programa onde se entra com N e o mesmo nos devolva uma
matriz de ordem 2N × N .
Para dedução desta fórmula veja [4].
22) Uma outra distância entre matrizes A = ( aij ) e B = ( bij ) é dada pela
igualdade
 1/2
m X
X n
d(A, B) =  (aij − bij )2 
i=1 j=1

onde A e B são matrizes retangulares de ordem m × n. Esta é conhecida


como distância euclidiana. Programe a fórmula acima.
23) Suponhamos uma calculadora que trabalhe apenas com vetores (unidi-
mensionais) e não com matrizes. Faça um programa para multiplicar duas
matrizes, ambas armazenadas em vetores. (p. 52)
Por exemplo, para as matrizes abaixo
 
  1 0
1 0 1
A= e B= 0 1 
0 1 1
1 2

deveremos entrar com as matrizes e respectivas ordens, assim:

[1 0 1 0 1 1] 2 3
[1 0 0 1 1 2] 3 2

Neste caso, o programa deverá sair com o seguinte vetor: [ 2 2 1 3 ], que


corresponde à matriz:  
2 2
C=
1 3

66
3.1.4 WHILE - REPEAT - END

Esta é uma outra estrutura cı́clica bastante utilizada. Entre com esta
estrutura num programa pressionando a seguinte sequência de teclas:

PRG BRCH WHILE

A sintaxe desta estrutura é assim:


≪ ...
WHILE cláusula-de-teste
REPEAT
cláusula-cı́clia
END . . .

Esta estrutura executa um ciclo repetidamente, enquanto o resultado de


um teste seja 1 (Verdadeiro). Ela pode ser interpretada como:
≪ ...
ENQUANTO isto ocorrer
REPITA
esta instrução
FIM . . .

Como a cláusula-de-teste é executada antes da cláusula-cı́clica, o ciclo


jamais será executado se o teste já for falso desde o princı́pio. WHILE inicia
a cláusula-de-teste, a qual deixa no nı́vel 1 da pilha o resultado do teste.
REPEAT remove da pilha o resultado do teste e o avalia: se for verdadeiro
(6= 0), a cláusula-cı́clica é executada novamente; caso contrário a execução
prossegue com a instrução seguinte a END.
Se o argumento do REPEAT for um objeto algébrico ou nome (de uma
variável), ele é automaticamente convertido para número.
Esta estrutura será bastante utilizada no capı́tulo sobre Estatı́stica.
Vamos ilustrar o uso desta estrutura através de alguns exemplos.
1 1 1
Exemplo 14: (UNESP - 84) Seja Sn = 21 + 22 + ··· + 2n , n um número
natural diferente de zero. O menor número n tal que Sn > 0, 99 é:

a) 5 b) 6 c) 7 d) 8 e) 9

1
A idéia aqui é variarmos n (a partir de 1) e irmos somando os termos 2n
até que o resultado da soma seja maior que 0, 99.

67
Vejamos alguns computos:

n Sn
1
1 2 = 0, 5
1 1
2 2 + 22
= 0, 75
1
3 2 + 212 + 213 = 0, 875
... ........................

Vamos fazer melhor: o programa vai receber como entrada um número


L que, em particular, pode ser L = 0, 99. Então:
≪ → L
p p
≪ 1 pn p STO 0 S STO
p p
WHILE S≤L
REPEAT p 1/2∧ n p EVAL
S + pS p STO
p n p INCR DROP
END n 1 −

Para melhor compreensão de como o programa funciona: DBUG.


Exemplo 15: (F.C.M. STA. CASA - 82) Para que a soma dos termos da
sequência ( −81, −77, −73, . . . ) seja um número positivo, deve-se considerar
no mı́nimo:

a ) 35 termos b ) 39 termos c ) 41 termos d ) 42 termos e ) 43 termos

Solução: A sequência dada é uma P.A. de primeiro termo a1 = −81 e


r = −77 − (−81) = 4. Logo, an = a1 + (n − 1)r = −81 + (n − 1) · 4. Podemos
também usar a fórmula da soma dos termos de uma P.A., assim:

n(n − 1)
Sn = na1 + r
2
n(n − 1)
= n · (−81) + 4 = −81n + 2n(n − 1) (3.3)
2
Então, vamos calcular esta soma, incrementando n, até que a mesma seja
positiva. Temos,

≪ 1 pn p STO
WHILE p 2n(n − 1) − 81n ≤ 0 p
REPEAT p n p INCR DROP
END n

68
Rodando o programa este nos devolve n = 42. Confirmando em (3.3):

n = 41 ⇒ S41 = −81 · 41 + 2 · 41 · (41 − 1) = −41


n = 42 ⇒ S42 = −81 · 42 + 2 · 42 · (42 − 1) = 42

Exemplo 16: Considere a sequência numérica dada por an = n a, onde
√ a>
0 é um número real. Em Análise matemática demonstra-se que lim n a = 1.
n→∞
Um outro resultado conhecido da Análise é que se uma sequência converge
para um limite então toda subsequência desta sequência converge para o
mesmo limite. A sequência a seguir:

2
√ √ √n
a, 4 a, 8 a, ..., 2 a, ...

é uma subsequência da sequência ( n a ), portanto converge para 1.
Uma consequência deste resultado é que se você coloca qualquer número
real (positivo) em sua calculadora e vai apertando sucessivamente a tecla da

raiz quadrada ( ) no final você sempre obterá o número 1 no visor.
O nosso problema é: Dado um número a > 0 e um erro ε > 0 quan-
tas vezes devemos pressionar a tecla de nossa calculadora de modo que a
diferença (“distância”) entre o resultado no visor e 1 seja menor que ε ?
De outro modo: resolva, para n, a seguinte inequação:

n
| 2 a − 1| < ε

O seguinte programa resolve nosso problema:

≪ → a ε
≪ 0 pn p STO
p
WHILE ABS( XROOT(2 ∧ n, a) − 1) ≥ ε p
REPEAT p n p INCR DROP
END n p p n0 p p →TAG


Por exemplo,

a 50 50 0, 5 0, 5
ε 0, 1 0, 01 0, 1 0, 01
n0 6 9 3 7

69
Exercı́cios
Pn
24) Determine n tal que i=1 2i = 4088.
25) Resolva o problema anterior utilizando a fórmula para a soma dos ter-
a ·q n −a
mos de uma P.G.: Sn = 1 q−1 1 .
26) Resolva a questão da UNESP (p. 67) utilizando a fórmula para a soma
dos termos de uma P.G.
27) Elabore um programa onde entramos com o primeiro termo e a razão de
uma P.A., e ainda com um número L (maior ou igual ao primeiro termo),
e o programa saia com n, a quantidade máxima de termos que podemos
somar para que a soma não ulrapasse L.
28) Qual é o primeiro termo positivo da P.A. ( −81, −77, −73, . . .)?
29) Encontre o valor de k de modo que:
k X
X 30
(−2i + 3j) = 300
j=1 i=1

30) Quantos termos devem ser somados na sequência ,


2 −1 2 −1 2 −1 2 −1 2 −1 ...
a partir do primeiro termo, para que a soma seja 15?
Dado: Sn = [ 2n − 3 · (−1)n + 3 ] · 41 .
31) Quantos termos devem ser somados na sequência ,
−1 3 −1 3 −1 3 −1 3 −1 3 ...
a partir do primeiro termo, para que a soma seja 13?
Dado: Sn = (−1)n + n − 1.
32) Diz-se que o número real L é limite da sequência (xn ) de números reais,
e escreve-se L = lim xn ou L = lim xn , quando para cada número real
n→∞
ε > 0, dado arbitrariamente, for possı́vel obtermos um inteiro n0 ∈ N tal
que |xn − L| < ε sempre que n > n0 . Em linguagem simbólica:
lim xn = L ⇔ ∀ ε > 0, ∃ n0 ∈ N; n > n0 ⇒ |xn − L| < ε
n→∞
Exemplos:
i ) A sequência dada por 1, 12 , 13 , . . . , n1 , . . . tem 0 como limite;

ii ) A sequência dada por xn = n n tem 1 como limite.
Faça um programa no qual entramos com ε > 0 e o mesmo saia com o
n0 da definição.
Observação: a fórmula do termo geral da sequência e o seu limite devem
estar embutidos no programa.
33) Faça um programa que saia com os N primeiros números primos em
uma lista.

70
3.2 Estruturas Condicionais
3.2.1 IF - THEN - END
Entre com esta estrutura num programa pressionando a seguinte sequência
de teclas:
PRG BRCH IF

A sintaxe desta estrutura é assim:

≪ ... IF
cláusula-de-teste
THEN
cláusula-verdadeira
END . . .

Esta estrutura executa uma sequência de comandos somente se o teste
resultar verdadeiro. A cláusula de teste pode ser uma sequência de comandos
− da pilha − (por exemplo A B <) ou uma expressão algébrica (por exemplo
p
A < B p ), sendo neste último caso desnecessário executar →NUM ou EVAL.
A palavra IF inicia a cláusula-de-teste, a qual deixa o resultado do teste
(0 ou 1) na pilha. THEN remove este resultado. Se o valor é diferente
de zero, a cláusula verdadeira é executada. Caso contrário, a execução do
programa prossegue com a instrução seguinte a END.
Exemplo 17: (O menor).
≪ → A B ≪ → A B
≪ IF ≪ IF
p
A B < A < Bp
THEN A THEN A
END END
≫ ≫
≫ ≫

Os dois programas acima executam a mesma tarefa, no da esquerda a


cláusula-de-teste é dada via operações de pilha, no da direita via expressão
algébrica.
O programa recebe dois números, se o primeiro é menor então é “im-
presso”.
Exemplo 18: (Nos diz se um número é par).
Iremos fazer um programa que nos diz se um dado inteiro é par. Fare-
mos este programa de dois modos distintos para ilustrar duas funções para
números reais que são FP e MOD. (ver tabela, p. 13)

71
i ) Usando FP

≪ → N
≪ IF p F P (N/2) == 0 p
THEN p p O número é par. p p
END

Nota: O “duplo igual” : == é de comparação. Você pode digitá-lo


diretamente do teclado da calculadora, digitando duas vezes =.
ii ) Usando MOD
≪ → N
≪ IF
N 2 MOD 0 ==
THEN p p O número é par. p p
END


Neste programa N e 2 são colocados na pilha, MOD coloca na pilha o
resto da divisão de N por 2, o qual é comparado com 0. Execute-o no DBUG.
Vamos nos deter mais na próxima estrutura condicional, por ser a mais
utilizada.

3.2.2 IF - THEN - ELSE - END


Entre com esta estrutura num programa pressionando a seguinte sequência
de teclas:
PRG BRCH IF

A sintaxe desta estrutura funciona assim:

≪ ... IF
cláusula-de-teste
THEN
cláusula-verdadeira
ELSE
cláusula-falsa
END . . .

72
Esta estrutura executa uma sequência de comandos se o teste resultar
verdadeiro e outra, caso seja falso. Se a cláusula-de-teste for um objeto
algébrico, ela é automáticamente convertida para um valor numérico.
A palavra IF inicia a cláusula-de-teste, a qual deixa o resultado (0 ou
1) na pilha. THEN remove este resultado. Se o valor é diferente de 0, a
cláusula-verdadeira é executada; caso contrário, a cláusula-falsa é executada.
Após ter executado a cláusula apropriada, o programa prossegue com a
instrução seguinte à END.
Exemplo 19: (Nos diz se um número é par ou ı́mpar).
O programa seguinte nos diz se um número é par ou ı́mpar.

≪ → N
≪ IF p F P (N/2) == 0 p
THEN p p O número é par. p p
ELSE p p O número é impar. p p
END

Exemplo 20: . Fazer um programa para sair com os N primeiros termos


da sequência 
 n2 , se n é par;
an =
 n+1
2 , se n é ı́mpar.
Então,

≪ → N
≪ 1 N
FOR n
IF pF P (n/2) == 0 p
THEN n 2 /
ELSE n 1 + 2 /

END
NEXT N ROW→

Interprete o programa acima e execute-o no DBUG.

73
Exemplo 21: (U.E.CE. - 80) Considere a sequência de números reais definida
por 
an−1 , se n é par;
an =
 n+1
2 , se n é ı́mpar.
Então o produto dos seis primeiros termos é igual a:

a ) 48 b ) 30 c ) 36 d ) 42

Vamos fazer um programa para sair com os N primeiros termos da


sequência acima. Observe que quando n é par o n-ésimo termo é igual ao
termo anterior ( an−1 ), motivo pelo qual usaremos um vetor para guardar
os termos da sequência. Então:

≪ → N
≪ [ 0 ] { N } RDM pA p STO
1 N FOR n
IF pF P (n/2) 6= 0 p
THEN p (n + 1)/2 p EVAL pA(n) p STO
ELSE pA(n − 1) p EVAL pA(n) p STO
END
NEXT A

Interprete o programa acima e execute-o no DBUG para dirimir quaisquer


dúvidas.
Uma fórmula alternativa para a sequência dada é:

an = [ 2n + 1 − (−1)n ]/4

Exemplo 22: (PUC- SP - 76) Se A é uma matriz 3 por 2 definida pela lei

1, se i = j;
aij =
2
i , se i 6= j.

Então A se escreve:
     
  1 1 1 1   1 1
1 4 9 1 1 9
a) b)  4 1  c)  1 4  d) e)  4 1 
1 1 9 1 4 9
9 9 9 9 6 6

Vamos resolver este problema para uma matriz de dimensão genérica


M × N . Assim:

74
≪ → M N
≪ 1 M FOR I
1 N FOR J
IF pI == J p
THEN 1
ELSE I 2 ∧
END
NEXT N ROW→
NEXT M ROW→

Exemplo 23: (Com)prove que uma matriz A, quadrada e de ordem N ,


cujos elementos estão dados pela equação,
 
 (−1) j−1 j−1 , se i < j;

 i−1


aij = (−1)i−1 , se i = j;




0, se i > j.

satisfaz a relação A2 = I.
Vamos fazer um  programa para comprovar esta relação. Antes, ob-
servamos que j−1 i−1 significa uma combinação e que, na HP , encontra-se
disponı́vel em
MTH NXT PROB COMB . O programa fica assim:
L

≪ → N
≪ 1 N FOR I
1 N FOR J
IF p I < J p
THEN
p
(−1) ∧ (J − 1) ∗ COMB(J − 1, I − 1) p EVAL
ELSE
IF p I == J p
THEN p (−1) ∧ (I − 1) p EVAL
ELSE 0
END
END
NEXT N ROW→
NEXT N ROW→


75
O programa sai com a matriz A. Para comprovar que A2 = I (I é matriz
identidade) basta pressionar ENTER e × .
Exemplo 24: (Limite da funç~ ao quadrática)
Definição (Limite): Sejam D ⊂ R um conjunto de números reais, f : D → R
uma função real e a ∈ D ′ um ponto de acumulação de D. Diz-se que o
número real L é limite de f (x) quando x tende a a, e escreve-se lim = L,
x→a
quando, para todo ε > 0 dado arbitrariamente, pode-se obter δ > 0 tal que
se tem |f (x) − L| < ε sempre que x ∈ X e 0 < |x − a| < δ.
Em [7] provamos o seguinte,
Teorema 1. Se f (x) = ax2 + bx + c então lim f (x) = f (d), onde
x→d
f (d) = a · d2 + b · d + c.
No referido opúsculo deduzimos a seguinte fórmula

 n o
ε


 min 1, a
a (2d+ |a| )+b , se a (2d − 1) + b ≥ 0;
δ(ε) = n o (3.4)
 −ε

 min 1, a
a (2d− |a| )+b , se a (2d − 1) + b < 0.

que nos dá o δ em função de ε para o limite em questão.


Exemplos ( p. 63-LEITHOLD): Prove que o limite é o número indicado,
35. lim x2 = 1. Neste caso, temos: a = 1, b = 0, d = 1. Então, sendo
x→1

a (2d − 1) + b = 1 · (2 · 1 − 1) + 0 = 1 > 0, temos

n ε o
δ(ε) = min 1, a
a (2d + |a| )+b
n ε o n εo
= min 1, 1 = min 1,
1 · (2 · 1 + |1| )+0 3

36. lim x2 = 9. Neste caso, temos: a = 1, b = 0, d = −3. Então, sendo


x→−3

a (2d − 1) + b = 1 · (2 · (−3) − 1) + 0 = −7 < 0, temos

n −ε o
δ(ε) = min 1, a
a (2d − |a| ) + b
n −ε o n εo
= min 1, 1 = min 1,
1 · ( 2 · (−3) − |1| )+0 7

76
15. lim (x2 + 3x − 4) = −4; ε = 0, 03. Neste caso, temos: a = 1, b = 3,
x→0
d = 0. Então, sendo

a (2d − 1) + b = 1 · (2 · 0 − 1) + 3 = 2 > 0, temos

n ε o
δ(ε) = min 1, a
a (2d + |a| )+b
n 0, 03 o n o
= min 1, 1 = min 1; 0, 0075 = 0, 0075
1 · ( 2 · 0 + |1| )+3

O programa a seguir implementa a fórmula (3.4):

≪ → a b d ε
≪ IF p a ∗ (2 ∗ d − 1) + b ≥ 0 p
THEN 1
p
ε/(a ∗ (2 ∗ d + a/ABS(a)) + b) p EVAL
pp
MIN δ(ε) p p →TAG
ELSE 1
p − ε/(a ∗ (2 ∗ d − a/ABS(a)) + b) p EVAL

MIN p p δ(ε) p p →TAG


END

Nota: Caracteres como δ e ε são acessados pressionando-se as teclas


CHARS
.

Para acessar outros caracteres, além dos que são mostrados de imediato,

pressione (botão prateado). Coloque (com auxı́lio dos botões prateados)
o cursor sobre o sı́mbolo desejado aı́ é só pressionar a tecla virtual ECHO 1 .

Os verdadeiros criminosos são os


polı́ticos, não os criminosos que estão
em suas prisões. Este mundo seria
muito melhor se houvesse uma troca:
todos os polı́ticos nas prisões e to-
dos os criminosos nas posições dos
polı́ticos: eles se revelariam mais hu-
manos. (Osho)

77
3.3 Operadores lógicos relacionais
Um outro recurso − não menos importante − que a programação nos
oferece são os operadores lógicos booleanos: OR, AND, XOR, NOT,
etc., acessados com a seguinte sequência de teclas:

PRG TEST NXT


L

Estes operadores estão definidos pelas respectivas tabelas-verdade:

p q p OR q p q p AND q p q p XOR q p p̄

V V V V V V V V F V F
V F V V F F V F V F V
F V V F V F F V V
F F F F F F F F F

Ou ainda, na forma em que a HP entende e opera:

p q p OR q p q p AND q p q p XOR q p p̄

1 1 1 1 1 1 1 1 0 1 0
1 0 1 1 0 0 1 0 1 0 1
0 1 1 0 1 0 0 1 1
0 0 0 0 0 0 0 0 0

Vejamos um exemplo de aplicação destes operadores:


Exemplo 25: (CESGRANRIO - 76) Seja H o conjunto

{ n ∈ N : 2 ≤ n ≤ 40 },

n múltiplo de 2, n não múltiplo de 3. O número de elementos de H é:

a ) 12 b ) 14 c) 7 d ) 13 e) 6

Observe, na definição do conjunto em questão: n é múltiplo de 2 e n não


é múltiplo de 3. Aqui temos uma tarefa para o operador lógico AND.
Vamos fazer melhor, vamos fazer um programa que recebe dois números
naturais M e N (N < M ) e devolve todos os múltiplos de 2, e não de 3,
entre N e M ; assim:

≪ → N M
≪ N M FOR n
IF p FP(n/2) == 0 AND FP(n/3) 6= 0 p

THEN n
END
NEXT DEPTH →LIST

≫ 78
Nota: O comando DEPTH retorna o número de objetos na pilha (p. 14).
O programa seguinte sai com os múltiplos de 2 ou 3 entre N e M (N < M ).

≪ → N M
≪ N M FOR n
IF p FP(n/2) == 0 OR FP(n/3) == 0 p

THEN n
END
NEXT DEPTH →LIST

Exercı́cios
34) (F. SANTANA - 83) Dadas as matrizes A = ( aij )2 , tal que

1 + i, se i = j;
aij =

0, se i 6= j.

e B = ( Bij )2 , tal que bij = 2i − 3j, então A + B é igual a:

         
−1 4 1 −4 −1 4 1 −4 1 4
a) b) c) d) e)
−1 −2 −1 −2 1 2 1 2 1 2

35) Fazer um programa para sair com a matriz identidade de ordem N :



1, se i = j;
aij =

0, se i 6= j.

36) (U. MACK. - 80) Dada a matriz A = ( aij )2 tal que



sen π2 j, se i = j;
aij =

cos πj, se i 6= j.

Então A2 é a matriz:

         
−1 −1 0 −1 −1 1 0 1 0 1
a) b) c) d) e)
1 0 1 1 0 1 −1 1 −1 −1

79
37) (UFRS - 83) A = ( aij ) é uma matriz de ordem 2 × 2 com aij = 2−i se
i = j e aij = 0 se i 6= j. A inversa de A é:
" 1 # " 1 #  
0 − 0

2 0
 
−2 0
 2 0
2 2
a) b) c) d) e)  1

0 4 1
0 −4 1 0 4 0 −4 0 22

38) (FCM STA CASA - 81) Seja a matriz A = ( aij ), de ordem 3, tal que


 1 se i < j;


aij = k se i = j e k ∈ R;




−1 se i > j.

Se o determinante de A é igual a zero, então k pertence ao conjunto:

a ) k ∈ { −3, 1, 3 } b ) k ∈ { −2, 1, 2 } c ) k ∈ { 0, 1/3, 1/2 }


√ √
d ) k ∈ { − 3, 3 } e ) k ∈ { −1/3, 1/3 }

39) (U. MACK - 80 ) Seja a função f : R → R definida por



|x| + 3 se |x| ≤ 2;

f (x) =
|x − 3| se |x| > 2

O valor de f (f (f (. . . f (0) . . .))),

a ) é 0 b ) pode ser 1 c ) é 3 d ) pode ser 3 e ) é impossı́vel de calcular.

Neste exercı́cio faça um programa onde entra-se com N e o mesmo sai


com uma lista com as N composições de f em 0. Exemplo,

Se N = 1 então f (f (0))

Se N = 2 então f (f (f (0))), etc.

40) (PUC CAMP. - 80) Considerando N = { 0, 1, 2, 3, . . .} e, ainda,


24
A = { x ∈ N/ = n, x ∈ N }
x
B = { x ∈ N/ 3x + 4 < 2x + 9 }

podemos afirmar que,


a ) A ∪ B tem 8 elementos b ) A ∪ B = A c) A ∩ B = A
d ) A ∩ B possui 4 elementos b ) n.d.a.

80
41) (ITA - 66) Quantos números inteiros existem, de 1000 a 10000, não
divisı́veis nem por cinco nem por sete?
42) (UFRN - 84) O número de múltiplos de sete entre 50 e 150 é:

a)9 b ) 12 c ) 14 d ) 16 e ) 23

43) (CESCEA - 75) Quantos números ı́mpares há entre 14 e 192?

a ) 88 b ) 89 c ) 87 d ) 86 e ) 90

44) (FGV - 81) A soma dos números naturais não superiores a 1000, não
divisı́veis por 7, é:

a ) 429429 b ) 500500 c ) 500500/7 d ) 999999/7 e ) n.d.a.

45) (CESGRANRIO - 84) A soma dos números naturais menores que 100
e que divididos por 5 deixam resto 2 é:

a ) 996 b ) 976 c ) 990 d ) 991 e ) 998

∗ ∗ ∗

Ao gerar o .pdf deste livro percebi que as páginas 82, 213 e 280 ficariam
em branco (ociosas, por assim dizer) − os capı́tulos iniciam em páginas
ı́mpares −, para não desperdiçar estas páginas decidir preenchê-las com um
resumo de um trabalho meu:∗
Números Hipercomplexos − 2D
( Uma Nova Generalização dos Números Reais )

Em resumo foi uma multiplicação que defini no plano R2 . É uma nova


ferramenta matemática que disponibilizo − quem sabe alguém não necessi-
tará da mesma futuramente.
Por oportuno, desde já deixo aqui uma sugestão de aplicação para a
mesma: assim como os fractais são construidos com a multiplicação Complexa,
que tal construirmos fractais com a multiplicação Hipercomplexa?
Nota: Caso alguém se disponha a gerar os fractais hipercomplexos, por favor
entre em contato comigo; tenho curiosidade de vê-los.
Ademais, estes novos números podem ser programados na HP 50g , de
sorte que ela trabalhará não apenas com os números complexos mas também
com os hipercomplexos.

Este trabalho foi postado em minha página em 04.04.2007, o original contém 67
páginas.

81
Definição: Números Hipercomplexos
Seja R o conjunto
 dos números reais. Consideremos o produto cartesiano
R × R = R2 = (x, y) : x, y ∈ R .
Vamos tomar dois elementos neste conjunto, (a, b) e (c, d), para dar três
importantes definições:
( i ) Igualdade: dois pares ordenados são iguais se, e somente se, ocorre o
seguinte:
(a, b) = (c, d) ⇔ a = c e b = d.
( ii ) Adição: chama-se adição de dois pares ordenados a um novo par orde-
nado, obtido da seguinte forma:
(a, b) + (c, d) = (a + c, b + d)
( iii ) Multiplicação: chama-se multiplicação de dois pares ordenados a um
novo par ordenado, obtido da seguinte forma:
(a, b) · (c, d) = ( a c ∓ b d, |a| d + b |c| ) (3.5)
onde, na abscissa do produto, tomamos − se a c ≥ 0, tomamos + caso
contrário.
Definição 1 (Números hipercomplexos). Chama-se sistema dos números
hipercomplexos, e representamos por H, ao sistema de pares ordenados de
números reais para os quais estão definidas a igualdade, a adição e a multi-
plicação conforme o ı́tem acima.
Representaremos cada elemento genérico (x, y) ∈ H com o sı́mbolo w,
portanto:
w ∈ H ⇔ w = (x, y) ∈ ( R2 , +, ·)
Exemplos:
Calcule o produto dos pares dados a seguir:
(i) w1 = (0, 1), w2 = (0, −1)
( ii ) w1 = (−1, 1), w2 = (1, 1)
Solução:
( i ) Como a c = 0 · 0 ≥ 0, o produto é calculado assim:

(0, 1) · (0, −1) = 0 · 0 − 1 · (−1), |0| · (−1) + 1 · |0| = (1, 0)
( ii ) Como a c = −1 · 1 < 0, o produto é calculado assim:

(−1, 1) · (1, 1) = − 1 · 1 + 1 · 1, | − 1| · 1 + 1 · |1| = (0, 2)
Nota: Este assunto continua na página 213, onde mostramos um programa
para multiplicar dois hipercomplexos.

82
Capı́tulo 4
PROGRAMAÇÃO SIMBÓLICA
Matemática: Esta “ciência vazia” que − espantosamente − se aplica
a todas as contingências fenomenológicas, apesar de ser um puro for-
malismo reflexivo.

4.1 Introdução:
O que diferencia a programação simbólica − ou algébrica − da pro-
gramação dos capı́tulos anteriores é que na programação simbólica teremos
na saı́da dos programas fórmulas ou expressões algébricas − além dos obje-
tos de saı́da da programação numérica, chamemo-la assim.
Veremos que, mesmo em casos onde se deve ter um número como saı́da de
um programa a programação algébrica pode facilitar bastante; apenas para
contextualizar, vejamos um exemplo elementar da matemática financeira; a
ser resolvido no próximo capı́tulo:
Um congelador no valor de $ 950, 00 a vista é vendido em 12 pagamentos
mensais e sem entrada no valor de $ 100, 00 cada. Qual a taxa de juros
cobrada pela loja?
Ao tentar resolver esse problema nos deparamos com a seguinte equação:

i(1 + i)12 100


=
(1 + i)12 − 1 950

Como isolar i (taxa) nesta equação? Veremos que com a programação


simbólica isto é possı́vel.
Não podemos falar de computação simbólica sem antes tratar do CAS da
calculadora∗ .

Aqui trataremos apenas do essencial para o presente capı́tulo, na seção 9.4 (p. 342)
alongaremos um pouco mais.

83
4.2 Configurações CAS
CAS significa sistema algébrico do computador. Este é o centro matemático
da calculadora onde as operações e funções matemáticas simbólicas são pro-
gramadas. O CAS oferece um número de configurações que podem ser ajus-
tados de acordo com o tipo de operação de interesse. Para ver as con-
figurações CAS opcionais use o seguinte:
• Pressione a tecla MODE para ativar formulário de entrada CALCULA-
H
TOR MODES:

 
 CALCULATOR MODES 
Operating Mode.. RPN
Number Format...Std FM,
Angle Measure...Radians
Coord System....Rectangular
XBeep Key Click XLast Stack

Choose calculator operating Mode


FLAGS CHOOS CAS DISP CANCL OK
Aqui está.

e depois a tecla virtual CAS . Você obterá a seguinte tela − salvo possı́veis
alterações em alguns detalhes:

 
 CAS MODES 
Indep var: pX p
Modulo: 13

Numeric Approx Complex


Verbose Step/Step Incr Pow
XRigorous XSimp Non-Rational

Enter independent variable name


EDIT CANCL OK

Esta tela fornece um formulário de entrada para alterar as configurações


CAS.
• Para navegar através das diversas opções no formulário de entrada
CAS MODES, use os quatro botões prateados:

Aqui, para não nos alongarmos em demasia, vamos tratar apenas de dois
estados do CAS.

84
Modo CAS Numeric e Symbolic
Quando o modo CAS Numeric for selecionado, certas constantes na calcu-
ladora são exibidas no seu valor de ponto de flutuação total. Por definição, a
opção Numeric foi desmarcada, significando que estas constantes prédefini-
das serão exibidas com seu sı́mbolo, em vez de seus valores, no visor da
calculadora.
Vamos fazer uma simulação: para marcar (ou desmarcar, dependendo
do estado da sua calculadora) esta opção − supondo que você esteja na
última tela apresentada acima − com os botões prateados selecione a opção
Numeric, obtendo o seguinte resultado:

 
 CAS MODES 
Indep var: pX p
Modulo: 13

ր XNumeric
Verbose
Approx
Step/Step
Complex
Incr Pow
Aqui
XRigorous XSimp Non-Rational

Replace constantes by values?


EDIT XCHK CANCL OK
Marque (ou desmarque).

Se esta opção estiver marcada ( X − Numeric) (após pressione OK 2×) ao


entramos, p. ex., com π na pilha esta constante aparecerá no visor com seu
valo numérico: 3.1415 . . .; caso contrário, aparecerá no visor o sı́mbolo: π.
Na verdade, observei que esta opção do CAS não é independente do
sinalizador 02. Por exemplo, se este sinalizador estiver ativado: (p. 10)

X 02 Constant → num

então, a calculadora colocará na pilha o valor numérico de π, qualquer que


seja a escolha feita em Numeric, no CAS.
Resumindo: para que as escolhas no CAS −no caso em discussão− sejam
válidas é necessário que o sinalizador 02 esteja desativado, assim:

02 Constant → symb

Nota: Estes detalhes (importantes) eu tenho que ir descobrindo (“advin-


hando”) por mim mesmo, uma vez que o manual da HP não faz menção
explı́cita − ou, pelo ao menos eu não encontrei no meu manual.
Enfatizo: o manual afirma: (p. 846, arquivo .pdf)

“Por definição, a opção − Numeric foi desmarcada, significando que estas


constantes pré-definidas serão exibidas como seu sı́mbolo, em vez de seus
valores, no visor da calculadora”.

85
Observei que isto não é verdade, pelo ao menos na minha calculadora, se
o sinalizador 02 estiver ativo:

X 02 Constant → num

No meu entendimento, o manual erra em não mencionar a dependência


de − Numeric, no CAS, com relação ao sinalizador 02.
Existe a seguinte correspondência: − Numeric e o sinalizador 03 são
equivalentes: Marcar, ou desmarcar um deles significar marcar ou desmarcar
o outro. Resumindo∗ :

− Numeric ⇐⇒ Sinalizador 03

Modo CAS Aproximado e Exato


Quando X − Approx for selecionado, as operações simbólicas, (ex. Integrais
definidas, raı́zes quadradas, etc.), serão calculadas numericamente. Quando
− Approx for desmarcado (modo Exact é ativo), as operações simbólicas
serão calculadas como expressões algébricas de formato fechado, sempre que
possı́vel. (p. 351)

O estado deste (importante) sinalizador vem indicado na primeira linha


do visor de sua calculadora:

R= ⇔ − Approx (modo exato/simbólico)


R∼ ⇔ − Approx
X (modo aproximado/numérico)

Anteriormente notamos uma equivalência entre − Numeric e o sinalizador


03; no que diz respeito a − Approx este é equivalente ao sinalizador 105.
Resumindo:
CAS

− Numeric ⇐⇒ Sinalizador 03 : 02 Constant → symb
| {z }
(Flags) Desativado

− Approx ⇐⇒ Sinalizador 105

Números reais e inteiros


As operações CAS utilizam os números para manter a precisão total nos
cálculos. Os números reais armazenados no formulário têm uma mantissa e
um expoente e tem precisão limitada. No modo X − Approx, portanto, sempre
que inserir um número inteiro, ele é automaticamente transformado em um

Lembrando que a funcionalidade de − Numeric vai depender do sinalizador 02 estar
desmarcado: 02 Constant → symb.

86
número real. Sempre que a calculadora listar um valor inteiro seguido por
um ponto decimal, isto indica que o número inteiro foi convertido para uma
representação real. Isto indicará que o número foi inserido enquanto o CAS
foi definido para o modo X − Approx.
Por exemplo, insira o número 2 na pilha da sua calculadora: se, no nı́vel 1
da pilha, o número aparece como 2. (dois seguido de um ponto decimal), isto
significa que a calculadora (CAS) encontra-se configurada no modo X − Approx
(real), este número é real; se, ao contrário, aparece 2 (sem ponto decimal) a
calculadora encontra-se no modo − Approx, e 2 é tratado como um número
inteiro. Em alguns casos, inclusive em programação, é importante certificar-
se deste detalhe antes de inserir um dado em sua calculadora.
Um outro detalhe que é importante lembrar: a calculadora faz distinção
− e isto em alguns casos é decisivo, inclusive em programação − entre uma
variável seguida ou não de um ponto. Por exemplo, neste momento, em
minha calculadora se coloco a variável i na pilha tenho 0.04; porém, se
coloco i., tenho 10.00;
Um “incômodo” que resolvi com o uso de − Approx foi o seguinte: ao
colocar na pilha (estando minha calculadora no modo X − Approx e Number
Format....Std), por exemplo, o polinômio p X ∧2 + 4 ∗ X + 1 p, ao pressionar
2.
ENTER obtenho no visor X + 4. · X + 1.

Para “extrair” os pontinhos ao lado dos números desmarque X − Approx


2
e entre novamente com o polinômio para obter: X + 4 · X + 1.
Retomando, para ter a oportunidade de exemplificar a programação
simbólica tive que optar por um dos temas da matemática. Decidi escolher
o tema das “Progressões aritméticas e geométricas de ordem m”.
Estes foram dois assuntos inéditos que desenvolvi em um livro que publi-
quei no ano de 2000: “Novas Seqüências Aritméticas e Geométricas”. ([4])
Posteriormente chegou ao meu conhecimento que já existiam as progres-
sões aritméticas de ordem m. Entretanto, tempos depois tive a oportunidade
de constatar que minha abordagem é mais completa e com fórmulas que não
comparecem nas outras; e, ademais, as progressões geométricas de ordem m
não são tratadas nos livros que consultei (p. ex., A Matemática do Ensino Médio/Vol.
2/SBM) − o que me leva a crê que são totalmente inéditas. (Capa, p. 352)

 O Desafio do Século
Na página seguinte vai um Desafio que lancei em maio de 2013. Este é
um problema − de programação simbólica − que resolvi no contexto das
progressões aritméticas de ordem m.
Até o fechamento deste trabalho (data na folha de rosto) não recebi
nenhuma proposta de resolução. Estarei desenvolvendo as ferramentas para
no momento oportuno apresentar a solução do desafio − ao final o leitor
decida por si mesmo se exagerei ou não no tı́tulo do Desafio.

87
O Desafio do Século
Um desafio dirigido − preferencialmente − aos estudantes de ciência da
computação, mas não apenas a estes. Não fazemos discriminação.
Nos livros de Cálculo I constam algumas fórmulas (deduzidas a duras
penas) para se encontrar a soma de potências dos n primeiros números
naturais, por exemplo:
n(n + 1)
1 + 2 + 3 + ··· + n =
2
Ou ainda
n(2n + 1)(n + 1)
12 + 22 + 32 + · · · + n2 =
6
Ou ainda
n2 (n + 1)2
13 + 23 + 33 + · · · + n3 =
4

No entanto, não existe uma fórmula para uma potência arbitrária.


O Desafio: faça um programa no qual entramos (apenas) com a potência
m e o mesmo saia com a fórmula correspondente:
1m + 2m + 3m + · · · + nm = ?
Nota: m é um inteiro positivo arbitrariamente fixado. Por exemplo, se
entrarmos com m = 2, teremos

m=2 Programa
n(2n+1)(n+1)

? 6

− Faça o programa na linguagem de sua preferência − deixamos livre.


Nota: Tente resolver o desafio, de preferência sem nenhuma ajuda minha.
− As possı́veis soluções devem ser enviadas para: gentil.silva@gmail.com
Uma curiosidade: Se o eminente matemático Gauss vivesse nos dias
atuais, e, se eu quisesse mantê-lo ocupado por algum tempo, será que ele
resolveria este desafio antes de Jesus voltar?
− O arquivo .pdf deste desafio encontra-se disponı́vel em:
www.profgentil.com

Prof. Gentil, o taumaturgo


Boa Vista, RR/17.05.2013

88
4.3 Progressões Aritméticas de Ordem m
Como afirmei anteriormente resolvi o Desafio do Século dentro do con-
texto das progressões aritméticas de ordem m.
O que são as progressões aritméticas de ordem m? Respondemos que
não existe uma forma única de defini-las; ou ainda, existem definições alter-
nativas. Vamos optar por uma delas.
Inicialmente consideremos a sequência dos cubos dos números naturais:

13 23 33 43 53 63 ...

Ou ainda,

1 8 27 64 125 216 ...

Façamos sucessivas diferenças entre os termos consecutivos desta sequência


para obter a seguinte sequência: (ver ∆LIST, p. 38)

7 19 37 61 91 ...

Procedamos da mesma forma em relação a sequência acima, para obter:

12 18 24 30 ...

E ainda mais uma última diferença:

6 6 6 ...

Obtivemos uma sequência constante. Vamos resumir isto em um só dia-


grama, assim:

1 8 27 64 125 216 ... ∆0 an


7 19 37 61 91 ... ∆1 an
12 18 24 30 ... ∆ 2 an
6 6 6 ... ∆ 3 an

Onde anotamos: ∆m an = m - ésima diferença da sequência an .


Agora estamos em condições de estabelecer a seguinte:

Definição 2 (Progressão aritmética de ordem m). Uma sequência (an ) é


uma progressão aritmética de ordem m se e somente se

∆m an = constante 6= 0

89
Usaremos da seguinte notação: P.A.m , para uma progressão aritmética
de ordem m (m = 0, 1, 2, . . .).
Uma P.A.0 é qualquer sequência constante, com a exigência de que esta
constante seja diferente de 0.
O diagrama anterior nos fornece uma forte evidência de que a sequência
dada por an = n3 é uma P.A.3 , mas como podemos provar isto?
Em nosso livro já mencionado ([4]) demonstramos a seguinte fórmula

m  
m
X
k m
∆ a(n) = (−1) a(n − k + m) (4.1)
k
k=0

para a m-ésima diferença de uma sequência a(n). A tı́tulo de exemplo,


vamos calcular a terceira diferença da sequência dada por a(n) = n3 , assim:
3  
3
X
k 3
∆ a(n) = (−1) a(n − k + 3)
k
k=0

então,
3  
3
X
k 3
∆ a(n) = (−1) (n − k + 3)3
k
k=0

Desenvolvendo o somatório, temos:


   
3 0 3 3 1 3
∆ a(n) = (−1) (n − 0 + 3) + (−1) (n − 1 + 3)3
0 1
   
3 2 3 3 3
+ (−1) (n − 2 + 3) + (−1) (n − 3 + 3)3
2 3

Ou seja,

∆3 a(n) = 1 · (n + 3)3 − 3 · (n + 2)3 + 3 · (n + 1)3 − 1 · n3 = 6

Sendo assim, provamos que a sequência dos cubos dos n primeiros números
naturais é uma P.A.3 . (vide def. 2, p. 89)

Nota: Não desenvolvi as potências no polinômio,

(n + 3)3 − 3(n + 2)3 + 3(n + 1)3 − n3

entrei com este polinômio na pilha e pedi que a HP simplificasse, ela me deu
6 como resultado. (EXPAND, p. 320)

A tı́tulo de curiosidade, os coeficientes 1 3 3 1, formam a terceira


linha do Triângulo aritmético de Pascal, veja isto na página seguinte.

90
Apenas a tı́tulo de informação, podemos mostrar que cada diagonal no
Triângulo de Pascal está em progressão aritmética de alguma ordem.

0
P.A.
ց
P.A.1 1
2
ց
P.A. 1 1
ց
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
················································

Nossa primeira programação simbólica


Vamos “automatizar” todo o processo anterior, isto é, vamos desenvolver
nossa primeira programação simbólica programando a equação (4.1) − para
a sequência an = n3 .
O programa resulta inacreditavelmente simples (compacto)!, veja a seguir:

≪ → m
≪ −2 CF − 3 CF − 105 SF − 103 CF
p
P
(k = 0, m, (−1) ∧ k ∗ COMB(m, k) ∗ (n − k + m) ∧3 ) p
EVAL −105 CF SIMPLIFY

Na primeira linha do programa entramos com m, a ordem da diferença


desejada. Na segunda linha desativamos o sinalizador 3 para trabalhar-
mos no modo não numérico (mas sim simbólico) − aqui está o segredo da
computação simbólica.
Na última linha do programa antes de simplificar (SIMPLIFY) o polinômio
resultante desativamos o sinalizador 105 − para que os números envolvidos
nas operações sejam transformados de reais em inteiros (sem os “pontinhos”
nas variáveis).
Importante: Ainda existe uma possibilidade de o programa não funcionar
em algumas calculadoras: Se houver algum valor (ou objeto) previamente
armazenado na variável n. Neste caso apague (PURGE) esta variável.
(p. 23, ou p. 340, Reinicio quente)
Pois bem, digite o programa anterior e entre com m = 1, por exemplo.

91
O programa devolverá a seguinte sequência (ou polinômio):
3 · n2 + 3 · n + 1
Nota: Podemos escolher o polinômio na ordem crescente ou decrescente nas
potências de n − ver CAS, p. 84, (− Incr Pow).
O significado do polinômio acima é que
∆1 (n3 ) = 3 · n2 + 3 · n + 1
Esta é a fórmula do termo geral da sequência que consta na segunda linha
do diagrama

1 8 27 64 125 216 ... ∆ 0 an


7 19 37 61 91 ... ∆ 1 an
12 18 24 30 ... ∆2 an
6 6 6 ... ∆3 an

Se entramos com m = 2 no programa obtemos:


∆2 (n3 ) = 6 · n + 6
Se entramos com m = 3 no programa obtemos:
∆3 (n3 ) = 6
O seguinte teorema afirma que se tomarmos j diferenças sucessivas entre
termos consecutivos de uma P.A.m , obteremos uma P.A. de ordem m − j.
Teorema 2 (Teorema do gene ). Seja m um natural arbitrariamente fixado
e seja j um natural tal que 0 ≤ j ≤ m. Nestas condições a seguinte
identidade é válida:

∆j anm = an(m−j)

Prova: [4] 

Este teorema nos permite ver o diagrama “dos cubos” da seguinte forma:

1 8 27 64 125 216 ... P.A.3


7 19 37 61 91 ... P.A.2
12 18 24 30 ... P.A.1
6 6 6 ... P.A.0

92
Fórmula do termo geral de uma P.A.m
Numa progressão aritmética temos a conhecida fórmula do termo geral:
an = a1 + (n − 1) r (4.2)
Necessitaremos de dois ı́ndices para localizar um termo qualquer em uma
P.A.m , um que se refira ao próprio termo e, outro, que se refira à ordem da
sequência . Convencionamos:
anm = n - ésimo termo da P.A. de ordem m.
Por exemplo, observe a disposição dos ı́ndices no diagrama a seguir
a13 a23 a33 a43 a53 a63 ... P.A.3
a12 a22 a32 a42 a52 ... P.A.2
a11 a21 a31 a41 ... P.A.1
a10 a20 a30 ... P.A.0

A foŕmula que generaliza a equação (4.2) é dada no seguinte


Teorema 3 (Fórmula do termo geral de uma P.A.m ). Em uma P.A.m o
n - ésimo termo vale

m  
X n−1
anm = a1(m−j) (4.3)
j
j=0

Nota: Esta fórmula − e as seguintes − não consta em nenhum dos livros


sobre P.A.m .
Por exemplo, a fórmula do termo geral de uma P.A.3 é calculada assim:
3  
X n−1
an3 = a1(3−j)
j
j=0
       
n−1 n−1 n−1 n−1
= a1(3−0) + a1(3−1) + a1(3−2) + a1(3−3)
0 1 2 3
Simplificando, obtemos:
(n − 1)(n − 2) (n − 3)(n − 2)(n − 1)
an3 = a13 + (n − 1)a12 + a11 + a10
2 6
Observe que para calcular o n-ésimo termo de uma P.A.m necessitaremos
conhecer, a priori, o primeiro termo de todas as progressões anteriores, é o
que nos diz o coeficiente a1(m−j) (j = 0, 1, . . . , m) em (4.3).

93
No caso particular de uma P.A.3 isto implica em que para conhecermos
qualquer termo do retângulo em destaque na horizontal

a13 a23 a33 a43 a53 a63 ... P.A.3


a12 a22 a32 a42 a52 ... P.A.2
a11 a21 a31 a41 ... P.A.1
a10 a20 a30 ... P.A.0

deveremos conhecer os termos em destaque na vertical (como se observa na


equação de an3 anterior). Quando do desenvolvimento das progressões ari-
tméticas de ordem m este “inconveniente” me causou um certo desconforto,
assim é que me perguntei se não seria possı́vel uma fórmula do termo geral
em função apenas dos termos da própria progressão − no caso do diagrama
acima, apenas em função dos termos no retângulo em destaque na horizon-
tal. Este problema foi solucionado pela seguinte fórmula:

j  
X j
k
a1(m−j) = (−1) a (4.4)
k (1−k+j)m
k=0

Para m = 3, por exemplo, esta fórmula nos permite obter os três termos
em destaque na vertical − do diagrama anterior − em função dos quatro
primeiros termos do retângulo na horizontal.
O programa seguinte implementa a fórmula (4.4)

≪ → a
≪ −3 CF − 103 CF 0 a SIZE OBJ → −
FOR j
p
P
(k = 0, j, (−1) ∧ k ∗ COMB(j, k) ∗ a(1 − k + j)) p
EVAL
NEXT DEPTH ROW →

Armazene este programa na variável CPAM − será subrotina do próximo.

94
Por exemplo, para o diagrama a seguir

1 8 27 64 125 216 ... ∆ 0 an


7 19 37 61 91 ... ∆1 an
12 18 24 30 ... ∆ 2 an
6 6 6 ... ∆ 3 an

Entrando com o vetor: [ 1 8 27 64 ]


Recebemos de volta o vetor: [ 1 7 12 6 ].
O programa a seguir implementa a fórmula do termo geral de uma P.A.m
(eq. (4.3), p. 93)

≪ → a
≪ −2 CF − 3 CF − 105 SF − 103 CF
a CPAM AXL DUP SIZE 1 − pmp STO
p p
REVLIST AXL a1 STO
p
P
(j = 0, m, COMB(n − 1, j) ∗ a1(m − j + 1)) p
EVAL −105 CF SIMPLIFY COLLECT

Comentário: Na terceira linha do programa colocamos o vetor a na pilha


com os primeiros m + 1 termos da P.A.m , e acionamos
(p. ex. [ 1 8 27 64 ]),
a subrotina anterior (CPAM), o vetor recebido (com o primeiro termo de
todas as sequências) é convertido em uma lista (AXL, p. 46) a fim de ser
“invertido” , por exemplo, no caso da sequência dos cubos, temos:
[ 1 7 12 6 ] → { 1 7 12 6 } → { 6 12 7 1 } → [ 6 12 7 1 ] → a1
porque esta forma invertida é requerida pela equação (4.3) (p. 93).
No somatório fizemos uma translação de uma unidade nos ı́ndices do
vetor, a1(m − j + 1), porque na HP os ı́ndices iniciam em 1 e não em 0.
Por exemplo, vamos encontrar uma fórmula para a sequência :
1 3 5 7 9 11 ...
Esta sequência é uma progressão aritmética de ordem 1, o que significa que
é suficiente entrarmos com os dois primeiros termos: [ 1 3 ]. Neste caso o
programa nos devolve a seguinte fórmula: 2 · n − 1.
Encontre a fórmula do termo geral da seguinte P.A.2 (segunda diagonal
do triângulo de Pascal, p. 91)
1 3 6 10 15 21 ...

95
Neste caso devemos fornecer os três primeiros termos da sequência : [ 1 3 6 ].
O programa nos devolve a seguinte fórmula: n·(n+1)
2 .
Uma das possı́veis aplicações de uma P.A.m é a seguinte: Dada uma
sequência qualquer com m + 1 termos, podemos encontrar um polinômio de
grau menor ou igual a m que contém estes m + 1 termos.
Por exemplo, não existe uma fórmula que produza os números primos em
sequência, no entanto podemos obter uma fórmula para quantos números
primos desejarmos. Por exemplo, fixado os n primos iniciais, o programa
anterior pode − teóricamente − ser utilizado para nos fornecer um polinômio
(de grau menor ou igual a n − 1) que gera os n primeiros primos.
A tı́tulo de exemplo, considere a sequência dos cinco primeiros primos

2 3 5 7 11

Entrando com o vetor: [ 2 3 5 7 11 ], o programa nos devolve o seguinte


polinômio:
3 · n4 − 34 · n3 + 141 · n2 − 206 · n + 144
P (n) =
24
Propriedade fundamental de uma P.A.m
Em uma progressão aritmética a diferença entre dois termos consecutivos
quaisquer, é constante e igual à própria razão, isto é

a(n+1) − an = r.

Este fato decorre da própria definição. Perguntamos: Existiria uma pro-


priedade análoga para uma P.A.m ? A resposta está na seguinte,
Proposição 1 (Propriedade fundamental da P.A.m ). Em uma P.A.m , m + 1
termos consecutivos estão vinculados pela seguinte identidade:
m  
X
k m
(−1) a(n−k)m = a10 (4.5)
k
k=0

Prova: [4] 
Exemplo: Três termos consecutivos quaisquer de uma P.A.2 , satisfazem:
2  
X
k2
(−1) a = a10
k (n−k)2
k=0

Ou ainda,
     
2 2 2
a(n−0)2 − a(n−1)2 + a = a10
0 1 2 (n−2)2

1 · an2 − 2 · a(n−1)2 + 1 · a(n−2)2 = a10

96
Isto é,

an − 2 an−1 + an−2 = a10

Teorema da Unificação
Em [4] demonstramos um teorema que unifica sob as P.A.m todas as
sequências (an ) que têm como fórmula um polinômio em n.
Resumindo: Uma sequência (an ) é uma P.A.m se, e somente se, é um
polinômio em n de grau m.

Soma dos termos de uma P.A.m


Para uma progressão aritmética temos a seguinte fórmula para a soma
dos seus n primeiros termos

n(n − 1) · r
S n = n · a1 +
2
Esta equação é generalizada da seguinte forma:

Proposição 2. Em toda P.A.m a soma Snm dos n termos iniciais vale:

m  
X n
Snm = a (4.6)
j + 1 1(m−j)
j=0

Prova: [4] 
Fazendo uma ligeira mudança no programa da p. 95 obtemos um pro-
grama para calcular a fórmula, Snm , dos n primeiros termos de uma P.A.m ,
assim:

≪ → a
≪ −2 CF − 3 CF − 105 SF − 103 CF
p
a CPAM AXL DUP SIZE 1 − m p STO
REVLIST AXL p a1 p STO
p
P
(j = 0, m, COMB(n, j + 1) ∗ a1(m − j + 1)) p
EVAL −105 CF SIMPLIFY COLLECT

Armazene este programa na variável FST − será subrotina.

97
Exemplo: Dada a sequência an = n2 , dos quadrados dos números naturais,
encontre uma fórmula para a soma dos seus n primeiros termos.
Solução: Neste caso entramos com um vetor contendo os três primeiros
termos da sequência: [ 1 4 9 ]. Obtemos: (2n+1)(n+1)n
6 .
Exemplo: Os números triangulares
n(n + 1)
1 3 6 ... ...
2
estão em P.A.2 , encontre uma fórmula para a soma dos seus termos.
Solução: Neste caso entramos com um vetor contendo os três primeiros
termos da sequência: [ 1 3 6 ]. Obtemos: (n+1)(n+2)n
6 .
O programa a seguir apresenta uma outra alternativa para o cálculo da
fórmula da soma, Snm :
≪ → P m

1 m 1 + FOR I
P n I 2 →LIST | EVAL
NEXT m 1 + →ARRY FST


Entramos com a fórmula do termo geral da P.A.m e o grau do polinômio.
Para o exemplo anterior, por exemplo, entramos com
p
n ∗ (n + 1)/2 p 2
O programa monta o vetor com os m + 1 primeiros termos da P.A.m e
chama o programa anterior (subrotina).
Para a função do comando | veja p. 321 (Outra forma de substituição. . . ).
A seguir apresentamos um importante resultado para a resolução do
Desafio do Século:
Teorema 4. Para a sequência dada por an = nm , onde m é um natural
arbitrariamente fixado, é válida a seguinte identidade:

∆m nm = m! (4.7)

Sendo assim, concluimos, pela definição 2 (p. 89), que a sequência listada
a seguir
1m 2m 3m ... nm ...
é uma P.A.m , o que significa que a fórmula (4.6) calcula a soma dos seus
termos.
Juntando a equação (4.6) (p. 97) com a equação (4.4) (p. 94), anunciamos
o seguinte resultado:

98
Teorema 5 (Gentil/1997). Sendo m um natural arbitrariamente fixado, é
válida a seguinte identidade:
m  
X n
1m + 2m + 3m + · · · + nm = a (4.8)
j + 1 (m−j)
j=0

Onde:
j  
X
k j m
a(m−j) = (−1) (1 − k + j) (4.9)
k
k=0

Esta é uma fórmula inédita. Em 1713 foi publicado na ravista Ars Con-
jectandi (Arte de Conjecturar) uma fórmula que, infelizmente, padece da
recursividade − fórmula esta atribuida a Jacques Bernoulli (1654 − 1705).
Durante muitos anos − por séculos − os matemáticos estiveram à procura
de uma fórmula fechada para a referida soma . . . Ninguém teve êxito, coube
a mim materializar essa aspiração.
Em um apêndice (p. 102) mostramos e exemplificamos a fórmula de Bernoulli.
A Solução do Desafio do Século
A solução do desafio do século consta do seguinte programa:

≪ → m
≪ −2 CF − 3 CF − 105 SF − 103 CF
0 m FOR j
p
P
(k = 0, j, (−1) ∧ k ∗ COMB(j, k) ∗ (1 − k + j) ∧ m) p EVAL
p p
NEXT m 1 + ROW → a STO
p
P p
(j = 0, m, COMB(n, j + 1) ∗ a(j + 1)) EVAL
SIMPLIFY →Q COLLECT

Da terceira até a quinta linha do programa implementamos a equação


(4.9) e guardamos os coeficientes no vetor a. Na sexta (penúltima) linha
implementamos a equação (4.8). A função COLLECT (p. 319) fatora um
polinômio (nos inteiros).
Entrando com m = 3, por exemplo, obtemos a fórmula:

(n + 1)2 · n2
13 + 23 + 33 + · · · + n3 =
22
Em FILES (p. 27) podemos ter acesso ao tamanho do programa.

Resolvemos o Desafio do Século com a bagatela de 266 bytes . . . pasmém!


Jacques Bernoulli jamais sonhou com esta possibilidade (desenvolvimento).

99
Interregno: A Matemática como arte e engenharia
O matemático, como o pintor ou o
poeta, é um desenhista. Se os seus de-
senhos são mais duradouros que os deles,
é porque são feitos com idéias.
(G.H. Hardy)

Tenho enfatizado (junto a meus alunos) menos o aspecto utilitário da


matemática, mas, sobretudo, sua vertente como arte e engenharia − tal
como de fato ela é em sua essência. Assim como se desenvolve a sensibilidade
para a música (ou outro tipo qualquer de arte) de igual modo desenvolve-se
a sensibilidade para a matemática; digo, o enlêvo experimentado pelo artista
também faz parte da experiência matemática.
A verdadeira matemática conjuga arte com engenharia. (p. ex., p. a seguir)
Me formei em engenharia (eletrônica) no ano de 1986 e fui trabalhar em
minha cidade natal (Boa Vista-RR) no setor de Telecomunicações (Sistema
Telebrás), era detentor de um cargo de chefia e minha ocupação ordinária se
resumia em carimbar pápeis e “monitorar” os “indicadores de desempenho
operacional”, onde utilizava tabelas e gráficos. Embora fosse relativamente
bem remunerado não estava (nem um pouco) satisfeito pois sentia que min-
has atividades não se enquadravam na concepção que se tem do que seja
engenharia.
Por outro lado, desde os tempos de estudante alimentei o sonho de
deixar minha contribuição à ciência; entretanto, não desejava deixar uma
contribuição efêmera mas, se possı́vel, uma que “transcendesse os séculos”.
Juntando a este requisito minha insatisfação com a “engenharia” que eu
praticava decidi me demitir para dá aulas de matemática na ufrr, que es-
tava sendo criada na ocasião∗ .
Observe que aquele que opta por fazer pesquisas antes de mais nada dá
(literalmente) um salto no escuro† porquanto, a priori, não existe nenhuma
garantia de que se terá algum êxito.
Pois bem, atuando no magistério, e não descuidando do meu objetivo
principal, comecei a ensaiar algumas criações na matemática; em retrospecto
creio que fui bem sucedido. Por exemplo, em 2000 publiquei um livro onde
constam alguns dos meus feitos − além dos que constam no presente tra-
balho.

Quando estudava para prestar concurso na universidade me ocorreu que naquele pre-
ciso momento (1989) milhares de indivı́duos, por este Brasil afora, estavam estudando
para melhorar suas condições salariais e eu, aqui, estudando para piorar a minha. Com
efeito, de saida perderia a metade do salário, afora outras vantagens − foi o que aconteceu.

Pelo ao menos numa conjuntura semelhante a que eu me encontrava, inclusive em
termos de preparo acadêmico, apenas um curso de graduação em engenharia, digo, numa
outra área. Por oportuno, por essa época (ainda como “engenheiro”) foi que comecei a
desenvolver, de modo um tanto quanto empı́rico, as P.A. e P.G. de ordem m.

100
O interessante disso tudo é que somente muitos anos depois atinei com
um fato deveras paradoxal: eu havia abandonado a “engenharia” e, sem
dá-me conta, encontrava-me praticando a verdadeira engenharia!
Com efeito, conto com verdadeiras obras de engenharia-matemática dis-
persas por outros livros meus (como [12], p. ex.), apenas para contextualizar:

1m + 2m + 3m + ··· + nm

(Eq. (4.8), p. 99)

Snm a1(m−j) Teo. 4


(Eq. (4.6), p. 97) (Eq. (4.4), p. 94) (Eq. (4.7), p. 98)

Teo. do gene Binômio


de
(Teo. 2, p. 92) Newton

F.T.G. ∆m a(n)
(eq. (4.3), p. 93) (eq. (4.1), p. 90)

Triângulo
de Definição P.A.m
Pascal (p. 89)

Aqui temos a “árvore genealógica” − ou fluxograma de interdependência −


do teorema 5 (p. 99).
Para a “construção” daquela fórmula foi necessária a construção das
equações de Snm e a1(m−j) e, ademais, a demonstração do teorema Teo. 4,
etc., etc.
A matemática é um campo demasiadamente árduo e
inóspito para agradar àqueles a quem não oferece grandes recom-
pensas. Recompensas que são da mesma ı́ndole que as do artista.
. . . Acrescenta ainda que é no ato de criar que o matemático en-
contra sua culminância e que “nenhuma quantidade de trabalho
ou correção técnica pode substituir este momento de criação na
vida de um matemático, poeta ou músico”. (Norbert Wiener)

101
Apêndice: A fórmula recursiva de Bernoulli:
m  
m m m m (n + 1)m+1 X m Bk
1 +2 +3 +···+n = + (n+1)m−k+1
m+1 k m−k+1
k=1
Onde os Bk são os números de Bernoulli. Sabendo-se que B0 = 1, os
demais números são calculados mediante a seguinte fórmula recursiva:
k−1  
X k Bi
Bk = − (4.10)
i k+1−i
i=0
Por exemplo (m = 2):
2  
2 2 2(n + 1)2+1 X
2 2 Bk
1 + 2 + 3 + ··· + n = + (n + 1)2−k+1
2+1 k 2−k+1
k=1
Ou seja,
2  
2 2 2 (n + 1)3 X
2 2 Bk
1 + 2 + 3 + ··· + n = + (n + 1)3−k
3 k 3−k
k=1
Desenvolvendo o lado direito (LD),
2    
(n + 1)3 X 2 Bk 3−k (n + 1)3 2 B1
LD = + (n + 1) = + (n + 1)2
3 k 3−k 3 1 2
k=1
 
2 B2
+ (n + 1)1
2 1
Isto é,
(n + 1)3
LD = + B1 (n + 1)2 + B2 (n + 1) (4.11)
3
Em (4.10), temos
1−1    
X 1 Bi 1 B0 B 1
B1 = − =− =− 0 =−
i 2−i 0 2−0 2 2
i=0
e
2−1      
X 2 Bi 2 B0 2 B1
B2 = − =− −
i 2+1−i 0 3 1 2
i=0
temos
B0 1 −1 1
B2 = −
− B1 = − − =
3 3 2 6
Substituindo em (4.11), temos:
(n + 1)3 −1 1 n(2n + 1)(n + 1)
LD = + (n + 1)2 + (n + 1) =
3 2 6 6
A simplificação à direita obtive na HP. (p. 282)

102
4.4 Progressões Geométricas de Ordem m
Qualquer progressão geométrica serve como exemplo de uma progressão
geométrica de ordem um;
Um exemplo de uma progressão geométrica de ordem dois é dado pela
sequência a seguir:
1 1 −1 −1 1 1 −1 −1 ...
Um outro exemplo é dado pela sequência seguinte:
1 22 43 84 165 ... 2n(n−1) ...
O que estas sequências têm em comum é o fato de os quocientes suces-
sivos entre seus termos consecutivos resultar em uma sequência constante,
veja:
1 1 −1 −1 1 1 ... ∆0
1 −1 1 −1 1 ... ∆1
−1 −1 −1 −1 ... ∆2

Ainda,
1 22 43 84 165 326 ... ∆0
22 24 26 28 210 ... ∆1
22 22 22 22 ... ∆2
Onde anotamos: ∆m an = m - ésimo quociente da sequência an .
Agora estamos em condições de estabelecer a seguinte:
Definição 3 (Progressão geométrica de ordem m). Uma sequência (an ) é
uma progressão geométrica de ordem m se e somente se
∆m an = constante 6= 1
Usaremos da seguinte notação: P.G.m , para uma progressão geométrica
de ordem m (m = 0, 1, 2, . . .).
Uma P.G.0 é qualquer sequência constante, com a exigência de que esta
constante seja diferente de 1 (e de 0).
Em nosso livro já mencionado ([4]) demonstramos a seguinte fórmula
m
Y (−1)k ( m )
∆m a(n) = a(n − k + m) k
(4.12)
k=0

para o m-ésimo quociente de uma sequência a(n).


Compare esta equação com a equação (4.1) (p. 90).

103
Tal como no estudo das progressões aritméticas, convencionamos:
anm = n - ésimo termo da P.G. de ordem m.
Também demonstramos a fórmula do termo geral de uma P.G.m , assim:
Teorema 6 (Fórmula do termo geral de uma P.G.m ). Em uma P.G.m o
n - ésimo termo vale

m
Y ( n−1
j )
anm = a1(m−j) (4.13)
j=0

Compare esta fórmula com a equação (4.3) (p. 93).


Podemos escrever a fórmula do termo geral de uma P.G.m em função
apenas dos seus próprios termos com a seguinte equação:
j j
Y (−1)k ( k )
a1(m−j) = a(1−k+j)m (4.14)
k=0

Compare esta fórmula com a equação (4.4) (p. 94).


O seguinte teorema afirma que se tomarmos j quocientes sucessivos entre
termos consecutivos de uma P.G.m , obteremos uma P.G. de ordem m − j.
Teorema 7 (Teorema do gene-II). Seja m um natural arbitrariamente fixa-
do e seja j um natural tal que 0 ≤ j ≤ m. Nestas condições a seguinte
identidade é válida:

∆j anm = an(m−j)

Prova: [4] 
Propriedade fundamental de uma P.G.m
Em uma progressão geométrica o quociente entre dois termos consecu-
tivos quaisquer, é constante e igual à própria razão, isto é
a(n+1) /an = q.
Este fato decorre da própria definição. Perguntamos: Existiria uma pro-
priedade análoga para uma P.G.m ? A resposta está na seguinte,
Proposição 3 (Propriedade fundamental da P.G.m ). Em uma P.G.m , m+1
termos consecutivos estão vinculados pela seguinte identidade:
m
Y (−1)k ( m
k )
a(n−k)m = a10 (4.15)
k=0
Prova: [4] 
Compare esta equação com a equação (4.5) (p. 96).

104
Produto dos termos de uma P.G.m
Para uma progressão geométrica temos a seguinte fórmula para o produto
dos seus n primeiros termos
n(n−1)
Pn = an1 · q 2

Uma generalização desta fórmula é dada a seguir

Proposição 4. Em toda P.G.m o produto Pnm dos n termos iniciais vale:


m n
Y ( j+1 )
Pnm = a1(m−j) (4.16)
j=0

Compare esta equação com a equação 4.6 (p. 97).

Não iremos programar as fórmulas das P.G.m em função de uma falha


da HP 50g , por exemplo, ela não simplifica uma expressão trivial como a
seguinte:
2
(−1)n · (−1)n
Unificando sequências sob as P.G.m
Na p. 97 afirmamos que toda sequência que tem como fórmula do termo
geral um polinômio de grau m é uma P.A.m . Desejamos agora estabelecer
um análogo para as P.G.m .

Definição 4 (Polinômio dual). Dada uma sequência de números reais

(am , am−1 , . . . , a1 , a0 )

com ai 6= 0 (i = 0, 1, . . . , m) consideremos a função p : R → R dada por


m m−1 2
p(x) = axm · axm−1 · · · · · ax2 · ax1 · a0 (4.17)

a função p é denominada função dupolinomial ou dupolinômio associa-


da(o) à sequência dada.

Nota: Devido às regras de potênciação, se x ∈ R, a definição acima é


válida para 0 < ai 6= 1 e se x ∈ Z, vale para todo ai real não-nulo.
Exemplos:
3 2 
(a) p(x) = 2x · 3x · 4−x · 21 ⇒ 2, 3, 14 , 21
2 
(b) p(x) = 3x −1 ⇒ 3, 1, 13
3 
(c) p(n) = (−1)n −1 ⇒ − 1, 1, 1, −1

105
Definição 5 (Grau). Seja p(x) um polinômio dual não identicamente 1 (tal
como em (4.17)). Chama-se grau de p, e representa-se por ∂p ou gr p, o
número natural q tal que aq 6= 1 e ai = 1 para todo i > q.
(
aq 6= 1
∂p = q ⇐⇒
ai = 1, ∀ i > q

Pode ser mostrado (veja [4]) que para um dupolinômio p(x), tal como em
(4.17), vale a seguinte identidade
m
Y (−1)k (m
k)
p(x+m−k) = am!
m
(4.18)
k=0

Para x = n ∈ N o lado esquerdo da identidade acima é justamente o


m - ésimo quociente, assim: (eq. (4.12) p. 103)
m
Y (−1)k (m
k)
∆m p(n) = p(n+m−k) = am!
m
k=0

Conclusão: Toda sequência que tem como fórmula do termo geral um


dupolinômio de grau m e tal que am!
m
6= 1 é uma P.G.m . (def 3, p. 103)

A fórmula do termo geral de uma P.G.m é um polinômio dual.


Definição 6 (Expressão aritmética ordenada-Dualidade). Chamamos de
expressão aritmética ordenada uma expressão da forma
y = k0 a0 + k1 a1 + k2 a2 + · · · + kn an + · · ·
e sua expressão dual por
k k k
ȳ = a0 0 · a1 1 · a2 2 · · · · · aknn · · · ·
Definimos também ȳ¯ = y. Para os nossos propósitos será suficiente
considerar expressões aritméticas ordenadas em que ai ∈ R∗ e ki ∈ Z.
Isto é, dada uma expressão aritmética ordenada, para obtermos sua ex-
pressão dual, intermudamos soma e produto, enquanto seus coeficientes
passam a ser expoentes na expressão dual.
A toda propriedade (ou fórmula) de uma P.A.m corresponde uma pro-
priedade (ou fórmula) dual para a P.G.m .
Nas provas concernentes às P.A.m se trocarmos soma por produto
provaremos as propriedades (ou fórmulas) duais das P.G.m .

4.4.1 Encontrando combinações


Em seguida ao Desafio do Século lancei também o da Década.

 O Desafio da Década

106
O Desafio da Década
Não temos conhecimento de que existia uma fórmula para gerar a re-
presentação binária de um número inteiro positivo. A fórmula seguinte
preenche esta lacuna
  
n
 1, se j é ı́mpar;
2
anj =   (4.19)
 0, se n
j é par.
2

Onde: anj é o j−ésimo


 bit da representação de n. Fixado n fazemos
j = 0, 1, 2, . . . , log2n .
   
Nota: x é a parte inteira de x (função piso). Por exemplo, 1, 25 = 1.
Para n = 20, por exemplo, temos j = 0, 1, 2, 3, 4; a fórmula acima nos
fornece: 0 0 1 0 1. Ou ainda: 0 0 1 0 1 = 0 · 20 + 0 · 21 + 1 · 22 + 0 · 23 + 1 · 24 .
Observe, ademais, que esta fórmula nos permite obter diretamente (se
necessário) qualquer bit de uma representação binária − sem precisar obter
toda a representação. Por outro lado, considere também a seguinte fórmula

n
 1, se

2
j é ı́mpar;
bnj =

 0, se n
2
j é par.

m
 m! m

Estamos assumindo que: n = (m−n)! n! , se m ≥ n e n = 0, se m < n.
Nota: Uma outra aplicação  da matriz dada em (4.19) é no cálculo de com-
m m!
binações. A fórmula n = (m−n)! n! nos diz quantas são as combinações
de m objetos tomados n a n, mas esta fórmula não nos diz quais são estas
combinações. A matriz (anj ) nos permite encontrar as tais combinações.
O Desafio:
1a ) Etapa: programe as duas fórmulas e comprove − em alguns casos par-
ticulares − que ambas fornecem o mesmo resultado.
2a ) Etapa: prove matemáticamente que as duas fórmulas são iguais.
  
Sugestão: prove que nj e 2nj têm a mesma paridade (i.e., ambos são
2
pares ou ambos são ı́mpares) para n e j inteiros positivos arbitrariamente
fixados.
3a ) Etapa: prove que a fórmula anj de fato nos fornece o desenvolvimento
binário de um inteiro positivo n.
− As possı́veis soluções devem ser enviadas para: gentil.silva@gmail.com
− O arquivo .pdf deste desafio encontra-se disponı́vel em:
www.profgentil.com
Prof. Gentil, o taumaturgo
Boa Vista, RR/21.05.2013

107
Depois de nomear os dois desafios me bateu uma forte suspeita de que
O Desafio da Década − na sua ı́ntegra − é que deveria ser o do século.

A conhecida fórmula da análise combinatória nr = (n−r)!
n!
r! nos fornece
o número de combinações dos n elementos de um conjunto, tomados r a r.
Mas esta fórmula não nos fornece as tais combinações. O nosso objetivo
nesta seção é estabelecer, com o auxı́lio das P.G.m , uma fórmula que tem
precisamente esta finalidade.
Problema: Dado o conjunto A = {a1 , a2 , a3 , a4 }, obter todas as com-
binações possı́veis de seus elementos.
Solução: O raciocı́nio que será desenvolvido a seguir se estende a um
conjunto com um número arbitrário de elementos.
Todas as combinações podem ser obtidas da seguinte matriz
a1 a2 a3 a4 {a }
i
1 1 1 1 {a1 , a2 , a3 , a4 }
−1 1 1 1 {a2 , a3 , a4 }
1 −1 1 1 {a1 , a3 , a4 }
−1 −1 1 1 {a3 , a4 } Onde convencionamos que quando
1 1 −1 1 {a1 , a2 , a4 }
ocorre 1 na sequência o respectivo ele-
−1 1 −1 1 {a2 , a4 }
mento (na coluna) participa da com-
1 −1 −1 1 {a1 , a4 }
binação, onde ocorre −1 não participa.
−1 −1 −1 1 {a4 }
1 1 1 −1 {a1 , a2 , a3 }
−1 1 1 −1 {a2 , a3 }
1 −1 1 −1 {a1 , a3 }
−1 −1 1 −1 {a3 }
1 1 −1 −1 {a1 , a2 }
−1 1 −1 −1 {a2 }
1 −1 −1 −1 {a1 }
−1 −1 −1 −1 ∅

O leitor pode inferir fácilmente a lei de construção desta matriz. Só


observamos que o número de colunas é igual ao número n de elementos do
conjunto, o número de linhas é igual ao de subconjuntos 2n .
Esta matriz, apropriadamente modificada, comparece em Lógica e Eletrônica
Digital.
Com o auxı́lio das P.G.m s vamos deduzir uma fórmula para a matriz
acima:
( i ) Os termos da coluna um (j = 1) estão em P.G.1 , onde an1 = ( −1 )n−1 ;
( n−1
2 )
( ii ) os termos da coluna dois (j = 2) estão em P.G.2 , onde an2 = ( −1 ) ;
( iii ) pode ser mostrado ainda que os termos da coluna três (j = 3) estão
( n−1
4 )
em P.G.4 , onde an4 = ( −1 ) .
j−1
De um modo geral, os termos da coluna j estão em P.G.2 , onde

108
i−1
( j−1 )
aij = ( −1 ) 2 (4.20)

Interregno: Costumo dizer que, enquanto a gestação da mulher dura


nove meses, a do homem pode durar anos. Deduzi a fórmula (4.20) por volta
do ano de 1989 e, naturalmente, senti uma certa euforia (mesmo porque na
ocasião estava precisando, desesperadamente, calcular algumas combinações
− observo que não se tratava de fazer uma “fézinha”). Mas, não obstante
o deslumbramento inicial, confesso que a euforia foi fugaz. Não tardei a me
entristecer sobremaneira com a fórmula em questão (entrei em depressão
pós-parto. O leitor pode estar certo de que isto também acontece para
quem concebe pelas vias intelectuais). Explico: Ao programar a fórmula
para o cálculo de algumas combinações, observei que o resultado não era o
esperado. Revi cuidadosamente a dedução da fórmula e não encontrei erro
algum. Algum tempo depois percebi que o erro era computacional − mais
precisamente de arredondamentos.
Observe que no expoente da equação devemos ter um número inteiro, par
ou ı́mpar; no que irá resultar +1 ou −1 na matriz. Como devemos lidar com
valores elevados de combinações, o computador fará um arredondamento e,
por vezes, o que seria um número ı́mpar (no expoente) vai ser arredondado
para um número par e, vice-versa. Por exemplo, a calculadora (estamos
falando da HP 48, uma das mais conceituadas∗ ) nos fornece o seguinte re-
sultado:
( 60
20 )
( −1 ) = ( −1 )4.19184450581E15 = 1,
( 60
20 )
enquanto o resultado correto é, ( −1 ) = −1.
Como já disse, fiquei assaz frustrado, pois minha fórmula não era confiável
do ponto de vista computacional.
Uma pena, pois é uma fórmula tão bonitinha (o leitor queira nos descul-
par, é que todo pai acha seu próprio filho bonito; é uma lei natural, fazer
o quê?). Desta forma foi que perdi todo o encantamento com este rebento,
rebelde à técnica. . .
Bem, cerca de dez anos depois (1999, precisamente), consegui a ressureição
do que fora reputado como inútil. . . Através de um teorema do matemático
francês Édouard Lucas (1842−1891) estabeleci a seguinte curiosa identidade
i−1
( j−1 ) µi−1
aij = ( −1 ) 2 = ( −1 ) 2j−1

Ou seja, não existe a necessidade de calcularmos o binomial constante na


fórmula, basta obter o bit de posição j − 1, na expansão binária de i − 1.
(p. 116)

Era a versão da HP que eu usava quando redigia o presente texto.

109
. . . E assim é que, após uma década de afastamento, consegui me reapro-
ximar de meu rebento.
A matriz abaixo

 
i−1
j−1
2
aij = ( −1 ) (4.21)

gera (em um caso particular) a matriz de combinaç~ oes da p. 108.


Nota: ⌊ x ⌋ é o maior inteiro que não supera x. Na HP você acessa esta
função com o comando FLOOR (ver tabela dos reais, p. 13).
− Já não conto mais o número de fórmulas que deduzi (demonstrei) na
matemática (lembro a eq. 4.8, p. 99), confesso que, pela fórmula acima, tenho
um carinho todo especial∗ .
O programa a seguir utiliza a matriz (4.21) para encontrar as combinações
de N objetos, tomados r a r.
Devemos entrar com uma lista contendo os objetos e r (nesta ordem).

≪ → L r
≪ { } p LC p STO L SIZE p N p STO
1 2 N ∧ FOR I
1 N FOR J
IF p (−1) ∧ FLOOR((I − 1)/2 ∧ (J − 1)) == 1p
THEN J
END
p p
NEXT DEPTH DUP C STO
p p
IF C==r
THEN ROW→ p V p STO 1 r
FOR K L p V(K) p EVAL
GET
NEXT r
→LIST 1 →LIST LC + p LC p STO
ELSE CLEAR
END
NEXT LC


Precisamente pelos detalhes técnicos envolvidos em sua dedução e demonstração.

110
Por exemplo, para a seguinte entrada: { a b c d } 3, o programa
nos devolve,

{{a b c} {a b d} {a c d} {b c d} }
P
Para a seguinte entrada: { a c π −1 } 3, o programa nos
devolve,
P P P P
{{ a c} { a π} { a c π} { c π} { a -1 }
P P
{ a c -1 } { c -1 } { a π -1 } { π -1 } { c π -1 } }

Descrição do programa:

Inicialmente observe que temos uma concatenação de estruturas com a


seguinte configuração:
FOR
FOR
IF

IF
FOR

1. Inicialmente (segunda linha do programa) armazenamos uma lista vazia


na variável LC (esta lista guardará as combinações “úteis”);
2. Depois colocamos a lista (com os objetos) na pilha e pedimos seu com-
primento (dimensão) o qual é armazenado na variável N;
3. Em seguida fixamos a variação do primeiro FOR: de 1 até 2N ; este FOR
irá gerar os ı́ndices das linhas da matriz de combinações;
4. Após, fixamos a variação do segundo FOR: de 1 até N ; este FOR irá
gerar os ı́ndices das colunas da matriz de combinações;
5. O primeiro IF testa se o elemento aij da matriz é igual a 1; se for este o
caso colocamos o ı́ndice da coluna deste elemento na pilha;
− Resumindo até aqui: o primeiro FOR fixa uma linha (da matriz); o se-
gundo FOR pesquisa todas as colunas desta linha procurando os elementos
iguais a 1 e guarda os ı́ndices (posições) destes elementos.
6. Ao sair do segundo laço (FOR) perguntamos (via comando DEPTH)
quantos elementos (ı́ndices) existem na pilha;∗
7. Em seguida, duplicamos esta informação e guardamos uma cópia na
variável C;

Em outras palavras: estamos contabilizando o saldo de nossa “pescaria”.

111
8. Após, temos o segundo IF que testa se o número de elementos iguais a 1,
na linha pesquisada, é igual a r; se for este o caso guardamos (com ROW→)
os ı́ndices em um vetor V e o armazenamos na variável V ; o FOR a seguir
tem a incubência de retirar, da lista original, todos os elementos com ı́ndices
no vetor V (ou seja, uma combinação válida; digo, com r elementos); ao sair
do FOR colocamos os elementos da pilha em uma lista e depois novamente
entre chaves (uma lista dentro da outra); em seguida colocamos na pilha
a lista LC (inicialmente vazia) e colocamos ( + ) a lista com a combinação
válida dentro da lista LC e armazenamos a lista “atualizada” na variável
LC (nela própria). Em seguida o último NEXT incrementa a linha (isto
é, faz o processamento ir para uma nova linha da matriz) e tudo se repete
como anteriormente.
Se não for este o caso (isto é, se o número de elementos iguais a 1, na
linha pesquisada, não é igual a r), simplesmente limpamos (CLEAR) a pilha
(esta linha não nos interessa);
9. Ao término o programa disponibiliza, na pilha, a lista com todas as
combinações úteis.

Desenvolvimento binário
Uma outra utilidade para a matriz de combinações é no desenvolvimento
binário de um inteiro positivo n. Com efeito, se trocarmos −1 por 0, assim:
 j k
i−1
1, se

2
j−1 é par;
aij = j k (4.22)

0, se i−1
j−1 é ı́mpar.
2

Obtemos, por exemplo:

20 21 22 23
1 1 1 1 15=1·20 + 1·21 + 1·22 + 1·23
0 1 1 1 14=0·20 + 1·21 + 1·22 + 1·23
1 0 1 1 13=1·20 + 0·21 + 1·22 + 1·23
0 0 1 1 12=0·20 + 0·21 + 1·22 + 1·23
1 1 0 1 11=1·20 + 1·21 + 0·22 + 1·23
0 1 0 1 10=0·20 + 1·21 + 0·22 + 1·23
1 0 0 1 9=1·20 + 0·21 + 0·22 + 1·23
0 0 0 1 8=0·20 + 0·21 + 0·22 + 1·23
1 1 1 0 7=1·20 + 1·21 + 1·22 + 0·23
0 1 1 0 6=0·20 + 1·21 + 1·22 + 0·23
1 0 1 0 5=1·20 + 0·21 + 1·22 + 0·23
0 0 1 0 4=0·20 + 0·21 + 1·22 + 0·23
1 1 0 0 3=1·20 + 1·21 + 0·22 + 0·23
0 1 0 0 2=0·20 + 1·21 + 0·22 + 0·23
1 0 0 0 1=1·20 + 0·21 + 0·22 + 0·23
0 0 0 0 0=0·20 + 0·21 + 0·22 + 0·23

112
Na matriz de combinações (equação (4.21), p. 110) a contagem de linhas e
colunas inicia-se em 1, na matriz acima (matriz binária) a contagem de lin-
has e colunas deve iniciar-se em 0, o que significa que devemos fazer uma
translação nos ı́ndices da matriz (4.22); e, ademais, “inverter-la ”∗ ; sendo
assim tendo em conta estas observações e escrevendo a equação anterior em
função do natural n, a ser desenvolvido, resulta:

  
n
1, se j é ı́mpar;
2
anj =   (4.23)
0, n
se j é par.
2

Esta equação nos fornece o j-ésimo bit do desenvolvimento binário de n.


Para programar esta equação precisamos da variação de j, e isto se
consegue assim:
n j
≥1 ⇒ 2 ≤n ⇒ j ≤ log2n
2j
 
Então, fazemos: j = 0, 1, 2, . . . , log2n .
O programa a seguir recebe um número natural n e devolve n em base 2.
≪ → n
≪ 0 p FLOOR(LOG(n)/LOG(2)) pEVAL
FOR j
IF p FP(FLOOR(n/2 ∧ j)/2)==0 p
THEN 0
ELSE 1
END
NEXT DEPTH ROW→

∗ ∗ ∗
Dogmas são prisões, um espı́rito que
queira realizar belas obras, que também
queira os meios necessários, tem de ser
cético. Estar livre de toda forma de
crença pertence à força, ao poder de ver
sem algemas. (Nietzsche)


Isto é, trocar 1 por 0 e 0 por 1.

113
4.5 Exercı́cios
Os exercı́cios seguintes destinam-se a dois tipos de público: os diletantes
da matemática e os da computação (programação). A maioria dos exercı́cios
são da forma: prove e comprove; os da matemática devem prová-los e os
da computação comprová-los − programando-os “tanto quanto possı́vel”.
1) Resolva o Desafio do Século utilizando a fórmula de Bernoulli. (p. 102)

2) Sendo f : R −→ R, dada por f (x) = x2 + 1, encontre


S = f (1) + f (2) + f (3) + · · · + f (n)
2 −1
3) Sendo f : R −→ R, dada por f (x) = 2x , encontre
P = f (1) · f (2) · f (3) · · · · · f (n)
4) Prove (e comprove) que a diagonal m (m = 0, 1, 2, . . .) do Triângulo
aritmético de Pascal está em P.A.m .
5) Existe a função NEXTPRIME (p. 325) que fornece o próximo primo para
um número inteiro dado. Faça um programa que devolva uma fórmula
(polinômio) que gere todos os primos entre dois inteiros dados.
2 −1
6) Considere o dupolinômio p(x) = 3x , prove que (eq. (4.18), p. 106)

2 2
Y (−1)k (k )
p(x+2−k) = 32!
k=0
3 −1
7) Seja p(n) = (−1)n , prove que
3 3
Y (−1)k (k )
p(n+3−k) = (−1)3!
k=0

8) Calcule o valor da soma


n
X
S= k(2k + 1)
k=1

9) Calcule o valor da soma


n
X
S= (2k − 1)2 (2k + 1)
k=1

10) Produto dos termos de uma P.A. Em nosso livro [4] deduzimos
e demonstramos a seguinte fórmula para o produto dos termos de uma
progressão aritmética de primeiro termo a1 e razão r:

n (a1 + nr)( 1r )!
Pn = a1 r · a  (4.24)
(a1 + nr) r1 !

114
Comentário: Existe uma função matemática (função gama − já está embu-
tida na HP 50g ) que generaliza o fatorial de um número para todos os reais,
salvo os inteiros negativos. Portanto, a fórmula anterior é válida sempre que
a1
r 6∈ Z− . Por exemplo, confirme em sua calculadora os seguintes fatoriais

(−0.5)! = 2(0.5)! = π = 1.772454 . . .

A vantagem da fórmula (4.24) é que podemos trabalhá-la com qualquer


calculadora, pois sempre será possı́vel simplificar o fatorial de uma eventual
fração. Pois bem, prove (e comprove) a seguinte equação:

1 · 3 · 5 · . . . · (2n − 1) 1 (2n + 1)( 21 ) !
= ·
2 · 4 · 6 · . . . · (2n) n! (2n + 1)( 21 )!

Para todo x ∈ ] − 1, 1 [, temos


+∞
X 1 · 3 · 5 · . . . · (2n − 1) n
(1 + x)−1/2 = 1 + (−1)n x
2 · 4 · 6 · . . . · (2n)
n=1

Ou ainda,
Para todo x ∈ ] − 1, 1 [, temos
+∞
2 −1/2
X 1 · 3 · 5 · . . . · (2n − 1) 2n
(1 − x ) = 1+ (−1)n x
2 · 4 · 6 · . . . · (2n)
n=1

11) A energia cinética K de uma partı́cula de massa m e velocidade v é


dada por K = 21 m v 2 . Nesta fórmula, a massa m é considerada constante
e K é denominada energia cinética newtoniana. Por outro lado, na teoria
da relatividade de Albert Einstein, a massa m cresce com a velocidade e a
energia K é dada pela fórmula
" #
2 1
K = m0 c p −1
1 − (v/c)2

na qual m0 é a massa de repouso (quando a velocidade da partı́cula é igual


a 0) e c é a velocidade da luz. Use uma série binomial apropriada para
mostrar que se a velocidade for pequena comparada com a velocidade da luz
(i.e., v/c ≪ 1), então as energias newtoniana e relativista são praticamente
a mesma.
( n−1
2 )
12) Prove, pela definição 3 (p. 103), que a sequência dada por an = ( −1 )
é uma P.G.2 .
( n−1
4 )
13) Prove, pela definição 3 (p. 103), que a sequência dada por an = ( −1 )
é uma P.G.4 .

115
14) Prove que, para j arbitrariamente fixado, a sequência resultante da
j−1
matriz (4.20) (p. 109) é, de fato, uma P.G.2
2 ⌋
⌊ n−1
15) Prove que a sequência dada por an = ( −1 ) é uma P.G.2 .
⌊ n−1
4 ⌋
16) Prove que a sequência dada por an = ( −1 ) é uma P.G.4 .
17) Prove que, para j arbitrariamente fixado, a sequência resultante da
j−1
matriz (4.21) (p. 110) é, de fato, uma P.G.2
18) Prove os teoremas do gene − teo. 2, p. 92 e teo. 7, p. 104.
19) Prove que a sequência dada por an = nm é uma progressão aritmética
de ordem m. Sugestão: Prove (4.7), p. 98.
20) Prove que se (an ) é uma sequência dada por

an = am nm + am−1 nm−1 + · · · + a1 n + a0

com am 6= 0, então (an ) é uma P.A.m .


m
21) Seja q(x) = ax . Sendo x ∈ R e 0 < a 6= 1 ou x ∈ Z e a 6= 0 prove
que:
m
Y (−1)k (m
k)
q(x+m−k) = am!
k=0
22) Para cada m, natural arbitrariamente fixado, a sequência seguinte
jn−1k jn−1k
an = 4 − 2 +1
2m 2m−1
é uma P.G. de ordem 2m−1 . Prove isto para m = 1 e m = 2.
23) Faremos uso da seguinte notação:
µnj é o bit (digito) de posição j no desenvolvimento binário de n.
2
Estamos contando as posições da esquerda para a direita, iniciando em zero.
Por exemplo, para

25 = 1 · 20 + 0 · 21 + 0 · 22 + 1 · 23 + 1 · 24 ⇒ 25 = ( 1 0 0 1 1 )2

temos,
µ25
20
= 1, µ25
21
= 0, µ25
22
= 0, µ25
23
= 1, µ25
24
= 1.
Podemos considerar,

µ25
25
= µ25
26
= µ25
27
= · · · = 0.

A sequência dada abaixo



 1, se µn−1
m−1 = 0;
2
an =
−1, se µn−1 = 1.
m−1
2

116
m−1
é uma P.G.2 , onde m é um natural arbitrariamente fixado.
Prove isto para m = 1 e m = 2.
24) Prove que a matriz (4.21) (p. 110) gera a matriz de combinações e que
ela presta-se de fato ao cálculo de combinações.
25) Prove que de fato a matriz dada pela equação (4.20) (p. 109) calcula
combinações.
Sugestão: Tendo resolvido o exercı́cio anterior, demonstre a igualdade:
 
i−1 i−1
( j−1 ) j−1
( −1 ) 2 = ( −1 ) 2

∗ ∗ ∗
No ano de 2000 publiquei um livro de matemática − “Novas Seqüências
Artméticas e Geométricas ” (p. 352) − com alguns resultados inéditos.
Esse livro chegou às mãos de um renomado matemático brasileiro, Prof.
Ubiratan D, Ambrósio, que teceu∗ alguns comentários sobre o mesmo.
Tomei a liberdade de incluir aqui o email que o Prof. me enviou. Embora
os comentários se refiram a um outro livro, penso que minha decisão se
justifica tendo em conta que ambos os livros têm em comum o mesmo autor.
O endereço gentil@dmat.ufrr.br foi recusado.
Gostaria que ele recebesse esse e-mail. De fato, gostei muito do livro.
Um Abraço, Ubiratan
−−−−− Original Message −−−−−
From: Ubiratan D, Ambrósio <ubi@usp.br>
To: Gentil Lopes da Silva
Sent: Saturday, November 06, 2004 10:46 AM
Subject: Obrigado pelo livro
Caro Gentil
Muito obrigado pelo livro que você mandou pelo Chateau. Está muito bom,
interessante e cheio de provocações. Dá oportunidade para os estudantes
se iniciarem em pesquisas. Você fala que o livro destina-se a alunos de
2o e 3o graus. Eu diria que é também para a pós. Aritmética continua
sendo grande fonte de problemas de pesquisa que podem ser trabalhados
com relativamente pouco da complicada linguagem, notações e resultados
que caracterizam muitas áreas da matemática. São formulações simples que
podem ser trabalhados com pouca técnica, exigindo imaginação e criativi-
dade. Vou recomendar aos meus alunos. Mas tive um problema. Nos sites
das livrarias, o livro não existe. E nem está no site da Thesaurus. Recomen-
dar um livro implica dizer como adquirir. O que você diz? Siga em frente

Observo que de livre iniciativa, isto é, sem que eu tenha solicitado.

117
com suas idéias. As suas reflexões iniciais, a sua escolha de epı́grafes, e a
própria capa, são uma grande contribuição para um novo pensar na urgente
renovação da educação em todos os nı́veis. A sua trajetória desde seus estu-
dos, lecionando em condições precárias, e com as dificuldades para publicar
o livro é um exemplo, muitı́ssimo frequente, do processo (certamente inten-
cional) de desencorajar o florescimento dos criativos, e abrir o espaço para
os executores de idéias de outros.
Uma curiosidade: você sabia que o Édouard Lucas, que você cita na página
393, é quem fez a revisão técnica para a publicação póstuma do livro “Mélanges
de Calcul Intégral”, de Joaquim Gomes de Souza, o Souzinha, em 1882? O
livro havia sido recusado por inúmeras editoras enquanto ele estava vivo.
Muito obrigado.
Um abraço, Ubiratan

∗ ∗ ∗
Nota: Como o Prof. Ubiratan não estava conseguindo acessar o meu
antigo endereço eletrônico (gentil@dmat.ufrr.br) ele enviou o email a um
seu ex-aluno (saudoso Chateaubriand), colega meu, que me repassou.
Como evidentemente muitos são os que não conhecem o Professor Ubi-
ratan, a seguir transcrevo uma parte do seu currı́culo:
- Em 1963, defendeu sua tese de doutorado em matemática pura na Escola
de Engenharia de São Carlos (EESC);
- Pós-doutor em matemática - Brown University;
- Em 1964, foi convidado para ser pesquisador associado no Departamento
de Matemática da Brown University, em Providence, Rhode Island, nos Es-
tados Unidos da América;
- Durante sua permanência nos Estados Unidos, dedicou-se à matemática
pura;
- Em 1972, decidiu voltar ao Brasil, para a Universidade Estadual de Campi-
nas (UNICAMP), onde foi Diretor do Instituto de Matemática, Estatı́stica e
Ciência da Computação (IMECC), orientou vários doutores e mestres; além
de fazer pesquisa em matemática pura é autor de livros na área de Topologia
e Análise;
- Atualmente é apontado como um dos maiores pesquisadores da visão
holı́stica em Ciências e Educação. Possui mais de 200 obras, entre livros
e artigos.

118
Capı́tulo 5
APLICAÇÕES À MATEMÁTICA
FINANCEIRA
Flexibilidade permite-me progredir a cada dia; a mover-me cada vez
mais próximo a minha meta de perfeição. Esta virtude tem força dentro
dela, assim como elasticidade. (Raja Yoga)

Introdução:
Neste capı́tulo estaremos tornando patente as inúmeras vantagens da cal-
culadora HP 50g frente a HP 12C no que diz respeito à matemática finan-
ceira; estaremos ademais arrolando mais alguns exemplos da importância da
programação algébrica, mesmo nos casos em que a saı́da de um programa
seja apenas um número.

5.1 Breve comparação entre a HP 50g e a HP 12C


Apresentaremos brevemente algumas diferenças imediatas − e decisivas
− entre as duas calculadoras.

119
1a ) Tela plana × tela unidimensional. Como consequência a HP 12C
trabalha com alguns registradores∗ invisı́veis ao operador, na HP 50g estes
registradores (que são os nı́veis da pilha) são visı́veis. Aqui vai uma diferença
significativa entre ambas. Um visor maior tanto facilita a inserção de dados
como a saı́da (visualização) de dados.
2a ) A HP 12C trabalha apenas com a lógica RPN (modo pilha), a
HP 50g trabalha nos dois modos: RPN e algébrico − Apenas esta diferença
já coloca a HP 50g kilômetros à frente da HP 12C, no que diz respeito à
potência de cálculos.
Tenho lido na internet alguns comentários sugerindo que a lógica RPN
é sempre superior à algébrica. Creio que vai depender do critério adotado.
Para cálculos longos − inclusive a nı́vel de programação − a algébrica é mais
aconselhável.
O ideal é um dispositivo que utiliza ambas as lógicas, creio que desta
afirmação ninguém discorda. E este dispositivo é a HP 50g e não a HP 12C.
3a ) A HP 12C não é programável, enquanto que esta é, precisamente, a
especialidade da HP 50g − Apenas esta diferença já coloca a HP 50g anos-
luz à frente da HP 12C, no que diz respeito à potência de cálculos.
Nota: A bem da verdade, a HP 12C admite um certo nı́vel de programação,
que eu, todavia, cosidero rudimentar, tosco e sofrivel, quando comparado ao
da HP 50g − é como se fosse inexistente, tanto isto é verdade que consultei
alguns livros de matemática financeira, que trabalham com a HP 12C, e
nenhum deles sequer menciona que esta calculadora seja programável.
4a ) A HP 12C não trabalha com listas e matrizes, e isto faz muita
diferença, tanto na matemática financeira quanto na Estatı́stica, como estare-
mos mostrando no cap. 6 − na verdade, já mostramos isto em capı́tulos
anteriores.
5a ) Os usuários da HP 50g podem guardar seus arquivos (programas)
em pastas ou cartão de memória. Por exemplo, assim:

HP 50g

HOME
HP 12G
MAT.FIN.
ESTAT.

6a ) A HP 50g admite programação simbólica.



Que são posições de memória.

120
7a ) Os usuários da HP 12C aprendem a pressionar teclas enquanto os
da HP 50g aprendem a programar teclas.
Existem problemas simples − de matemática financeira! − que não
podem ser resolvidos diretamente na HP 12C por falta da tecla correspon-
dente; para citar apenas um:
“Qual o capital que, aplicado a 8, 2 % a.m., durante seis meses, rende
juros compostos de R $ 75.573, 51?”
Na HP 50g podemos criar uma tecla para resolver não apenas problemas
do gênero, como diversos outros que não podem ser resolvidos fácilmente
pela HP 12C.
8a ) E para encerrar estas ligeiras comparações, oportunamente estarei
mostrando que a calculadora financeira HP 12C fornece alguns resultados
de cálculos financeiros errados! . . . Pasmém!!! (p. 149)

E acrescento: “Quando um remédio não produz os efeitos prometidos,


ou quando seus efeitos colaterais vão além dos previstos, os laboratórios
responsáveis por sua fabricação são obrigados a retirá-lo de circulação, de
igual modo, estou sugerindo que deva acontecer com a calculadora financeira
HP 12C.”
Oportunamente estaremos confrontando as duas calculadoras no que diz
respeito à eficácia de cálculos financeiros.
Por oportuno, a comparação acima vale não apenas com respeito à HP 12C
como também para várias outras calculadoras financeiras. Com efeito, fiz
uma pesquisa na internet sobre várias calculadoras financeiras − consultei
alguns manuais −, tais como: BA II PLUSTM (Texas), HP-19B (HP), HF
100F (Dismac), EL-735 (Sharp), etc.
A maioria delas tem tela unidimensional, com duas exceções (HP-19B
e EL-735) que têm tela plana e mesmo assim com altura apenas metade
da altura da tela da HP 50g . Todas elas pecam em dois detalhes muito
importantes − na minha apreciação, claro −: não são programáveis e não
trabalham com listas e matrizes.
Encontrei, ainda, a calculadora financeira Casio FC-1000 com tela plana
que me pareceu superior a todas as outras, infelizmente não encontrei o
manual, razão porque não posso emitir uma opinião a respeito, a não ser que,
caso não seja programável e não incorpore os recursos de listas e matrizes,
então, por isto mesmo, partilha com as demais estes dois pecados capitais.
No presente capı́tulo estaremos criando (“projetando”) uma nova calcu-
ladora financeira, superior a todas as que se encontram no mercado − por
todas as razões expostas anteriormente.
Além das vantagens já mencionadas − como se não bastasse − existe
uma outra: pelo fato de nossa calculadora ser programável isto implica em
que ela será uma “Calculadora Financeira Personalizada”, no sentido de

121
que você vai construindo-a de acordo com suas necessidades. O fato de ela
trabalhar com listas, vetores e matrizes isto facilitará tanto a entrada como
também a manipulação e exibição dos dados − a ausência destes objetos nas
outras calculadoras financeiras é, verdadeiramente, de se lastimar − como
estaremos mostrando não apenas neste capı́tulo mais ainda no de Estatı́stica.
Apenas para citar, an passant, um único exemplo, nossa calculadora
financeira − HP 12G , é assim que a chamaremos − calcula a Tabela PRICE
(demonstrativo deste sistema de amortização) digitando-se apenas “duas
teclas”, assim: (p. 166)
p p
PRICE(P V, i, n) EVAL N

Duvidamos de que qualquer outra calculadora financeira construa esta Tabela


(e exiba-a) de modo mais simples que a HP 12G . Fica o desafio!
Pilha de Registradores na HP 12C
A HP 12C possui alguns registradores (posições de memória) associados
ao visor, embora somente um deles (X) é exibido como visor:







Last X Registradores



T


da




Z HP 12C


Y “Visor”
Visor −→ X

Quando um número é digitado no teclado, ele é automaticamente in-


serido no registrador X (visor). Se a tecla [ENTER] é pressionada, o número
é duplicado, sendo seu valor copiado para o registrador Y. As operações na
calculadora são, na maioria das vezes, efetuadas com o auxı́lio dos regis-
tradores X e Y. Assim, sugere-se que ao iniciar-se operações na calculadora
a pilha de registradores financeiros seja limpa (“Reset”); para isto basta
pressionar as teclas [f] [FIN].

122
Novamente enfatizamos, enquanto na HP 12C os outros registradores
associados ao visor não estão visı́veis ao operador, o que evidentemente
dificulta as operações e programação, na HP 50g os registradores associados
ao visor de fato estão visı́veis − são os diversos nı́veis da pilha.

5.2 Aplicações à Matemática Financeira


Antes de iniciarmos propriamente a transferência da HP 12C para dentro
da HP 50g , vamos criar uma pasta que guardará os “arquivos financeiros”.
Pois bem, para observar a “árvore” de arquivos em sua calculadora pres-
sione a combinação de teclas∗ FILES para obter o visor do gerenciador

de arquivo da calculadora:
 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Atenção: Este é o visor da configuração atual da minha calculadora, na


sua certamente será diferente . . . porém similar.
Vamos criar uma pasta chamada HP12G, na qual guardaremos nossos
programas concernentes às teclas da HP 12C, e outros mais.
Como não tenho a menor idéia da configuração da árvore de diretórios
da sua calculadora, inicialmente retorne à pilha − pressione ON .
1o ) Se você está na pilha observe na parte superior do visor (segunda linha)
que existe um par de chaves: { HOME . . . } isto indica qual o (sub)diretório
atual da sua calculadora. Vamos unificar a minha e a sua calculadora no
diretório raiz (HOME) para isto pressione† UPDIR , possivelmente

mais de uma vez até que tenhamos entre chaves apenas o diretório HOME:
{ HOME }.

2o ) Vamos entrar na árvore de diretórios: pressione: FILES ;


3o ) na sua calculadora deverá aparecer um visor similar ao seguinte:


A função FILE ativa o navegador de arquivo na memória da calculadora.

A função UPDIR move o local da memória um nı́vel acima na árvore do arquivo da
calculadora.

123
 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Agora pressione a tecla virtual OK para adentrarmos no diretório raiz.


Digite NXT
L
NEW . Isto produzirá a seguinte forma de entrada:

 
 NEW VARIABLE 
Object:
Name:
Directory

Enter New Object


EDIT CHOOS CANCL OK

O campo de entrada Object , o primeiro campo de entrada no formulário,


é ressaltado por padrão. Este campo de entrada pode manter o conteúdo
de uma nova variável que está sendo criada. Dado que não temos neste
ponto nenhum conteúdo para o novo subdiretório, simplesmente pulamos

este campo de entrada pressionando a tecla com a seta para baixo, , uma
vez. O campo de entrada Name é agora ressaltado.
 
 NEW VARIABLE 
Object:
Name:
Directory

Enter variable name


EDIT CHOOS CANCL OK

Neste local inserimos o nome do novo subdiretório, conforme a seguir:


ALPHA ALPHA HP12G ENTER .

124
Após a última operação acima o cursor se move para o campo de seleção
− Directory.

 
 NEW VARIABLE 
Object:
Name: HP12G
Directory

Create a new directory?


EDIT X CHK CANCL OK

Pressione a tecla virtual X CHK para especificar que você está criando
um diretório e pressione OK para sair do formulário de entrada. As
variáveis constantes no diretório HOME serão mostradas no visor conforme
a seguir:

Memory: 242367 | Select: 0


HP12G DIR 6
GENTIL DIR 1233
CASDIR DIR 531

PURGE RENAM NEW ORDER SEND RECV

Isto na minha calculadora, na sua certamente é diferente. Mas o que


importa é que o subdiretório que acabamos de criar comparece em destaque
no visor acima.

Agora pressione UPDIR para retornar à tela da árvore de diretórios

 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
HP12C
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Agora descemos a árvore uma posição pressionando a tecla com a seta



para baixo, , para assinalar a pasta recém criada, assim:

125
 
 File Manager 
0 : IRAM 237 KB
1 : ERAM 127 KB
2 : FLASH 699 KB
Home 237 KB
HP12C
GENTIL
PROG.
INTN
CASDIR

CHDIR CANCL OK

Em seguida pressione a tecla virtual (menu) CHDIR para selecionar o


diretório (CHange DIRectory) assinalado. Nesse momento a calculadora
retornará à tela principal:

RAD XYZ HEX R ∼ pXp HLT


{HOME HP12G} 08:30 , 07 : JUN
7
6
5
4
3
2
1

Obseve que em cima comparece {HOME HP12G} indicando que estamos


na pasta HP12G. Se o leitor pressionar a tecla VAR
J (se necessário) observará
que os menus estão todos vazios, digo, nossa pasta HP12G, recém criada, está
vazia − como seria de se esperar.

5.2.1 A HP 50g como Calculadora financeira

Agora vamos criar, a tı́tulo de ilustração, algumas teclas∗ na HP 50g apli-


cadas à matemática financeira.
Antes vejamos um importante instrumento muito utilizado nas transações
financeiras: Fluxo de Caixa.
O diagrama de fluxo de caixa é uma representação pictórica dos mo-
mentos e sentidos das transações financeiras. O diagrama consta de uma
linha horizontal, denominada linha de tempo − que especifica a duração da
transação financeira − e setas verticais para cima e para baixo indicando
entradas e saı́das de caixa (dinheiro). Um possı́vel exemplo seria:


Teclas virtuais, menus.

126
···

p p p p p p
0 1 2 3 ··· n−1 n

onde n é o número de perı́odos.

Juros Compostos
Iniciamos com a sobejamente conhecida fórmula para capitalização com-
posta:
M = C(1 + i)n (5.1)
Essa fórmula na linguagem da HP 12C fica assim

M = C (1 + i) n

F V = P V (1 + i) n
Onde: FV = Valor Futuro = Montante;
PV = Valor Presente = Capital inicial.
Da equação acima deduzimos outras três, quais sejam:


log FP VV
n =
log(1 + i)

FV
F V = P V (1 + i) n PV =
(1 + i)n
r
n FV
i = −1
PV

As principais funções financeiras na HP 12C para operações com juros


compostos são:

127
[ n ] : número de perı́odos;
[ i ] : taxa de juros;
[ PV ] : do inglês Present Value, valor presente;
[ PMT ] : do inglês Payment, valor da prestação (ou pagamento);
[ FV ] : do inglês Future Value, valor futuro.

Exemplo: Qual o montante obtido de uma aplicação de $ 550, 00 feita por


quatro meses a uma taxa de 2 % a.m.?
Solução: O programa a seguir calcula o valor futuro de um dado capital:

≪ → PV i n
p p
≪ P V ∗ (1 + i/100) ∧ n EVAL
pp FV p p →TAG 2 FIX

Na última linha Fixamos o resultado em duas decimais. Digite este pro-


grama em sua calculadora e armazene-o na variável FV.
Entrando com os dados: P V = 550, i = 2, n = 4; obtemos: F V = 595.34.

PV = $ 550 FV = $ 595.34

p p p p p n
0 1 2 3 4

Pela HP 12C resolvemos este problema digitando a seguinte sequência


de teclas:

[ f ] [ FIN ] 550 [ CHS ] [ PV ] 2 [ i ] 4 [ n ] [ FV ] ⇒ 595.34

A tecla [ CHS ] troca o sinal de um número. O sinal negativo se deve a


uma “convenção de sinais” na HP 12C, nesta convenção PV e FV devem
ter sinais contrários − Ou ainda: o que entra tem sinal negativo e o que sai
tem sinal positivo, do ponto de vista do aplicador.
Observe que para a utilização do nosso programa digitamos as teclas

550 SPC 2 SPC 4 FV

Digitamos apenas três teclas (duas iguais) contra sete da HP 12C.

128
Alternativamente, podemos acrescentar a exibição das variáveis de en-
trada no programa anterior, assim:

≪ p p Entre com PV, i e n p p PROMPT → P V i n


p p
≪ −51 SF P V ∗ (1 + i/100) ∧ n EVAL
pp FV p p →TAG 2 FIX

Acrescentamos na segunda linha, a tı́tulo de exemplo, a ativação do sina-


lizador 51 que coloca vı́rgula ao invés do ponto decimal. Entrando com os
mesmos valores agora recebemos F V = 595, 34.
Atenção: Ao executar o programa na versão anterior não esqueça de, após
digitar os dados de entrada, pressionar CONT (continue).
Dando prosseguimento à implementação da HP 12C vamos fazer um
programa para o número de perı́odos n, que é a tecla [n] nessa calculadora.
Considerando a fórmula para o número de perı́odos, dada na p. 127,
temos o seguinte programa:

≪ p p Entre com PV, FV e i p p PROMPT → P V FV i


≪ p log(F V /PV)/log(1 + i/100)p EVAL
p p Np p →TAG 2 FIX

Digitei o programa acima e o armazenei em minha calculadora HP 12G com


o nome de NP (número de perı́odos).
Problema: Durante quanto tempo um capital de $ 2000, 00 deve ser apli-
cado a juros compostos e à taxa de 1, 5% a.m. para gerar um montante de
$ 2 236, 28?
Entrando com os dados: P V = 2000, F V = 2236.28, i = 1.5; obtive o
seguinte resultado: N = 7.50.

PV = $ 2000 FV = $ 2 236.28

p p p p p p p p p n
0 1 2 3 4 5 6 7 8

129
A resolução algébrica deste problema dá-se assim:
FV 2 236. 28
PV
log10 log102000, 00
n = (1+i)
= (1+1. 5/100)
= 7.500
log10 log10
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:
[ f ] [ FIN ] 2000 [ CHS ] [ PV ] 2 236.28 [ FV ] 1.5 [ i ] [ n ] Visor ⇒ 8
Que não é o valor exato: 7.5. O que estaria acontecendo?
O que acontece é que a HP 12C arredonta os perı́odos não inteiros para
o próximo inteiro: 7.5 → 8.
Se eventualmente vamos usar este resultado para outros cálculos isto
significa que não podemos confiar nos resultados da HP 12C., não é assim?
Vejamos mais um exemplo. Problema: Um montante de $ 630, 00 foi
obtido após a aplicação de $ 570, 00 a uma taxa de juros compostos igual a
3%. Qual a duração da operação?
Solução: Entrando no programa anterior com os dados: PV=570, FV=630
e i=3, o programa nos devolve: N=3.39. Pela HP 12C resolvemos este
problema digitando a seguinte sequência de teclas:
[ f ] [ FIN ] 630 [ FV ] 570 [ CHS ] [ PV ] 3 [ i ] [ n ] Visor ⇒ 4
Que não é o valor exato: 3.39 (com duas decimais). A HP 12C arredonta
os perı́odos não inteiros para o próximo inteiro: 3.39 → 4.
O Programa que calcula a taxa de juros fica assim: (p. 127)

≪ p p Entre com PV, FV e n p p PROMPT → P V FV n


≪ p XROOT(n, F V /P V ) − 1p EVAL
100 ∗ p p ip p →TAG 2 FIX

Digitei o programa acima e o armazenei em minha calculadora com o


nome de TJ (taxa de juros).

Nota: A função XROOT é obtida na tecla x y (acima da letra R).
Problema: Um capital de $ 2000, 00 foi aplicado a juros compostos, du-
rante 4 meses, produzindo um montante de $ 2 200, 00. Qual a taxa mensal
de juros da aplicação?
Solução: Entrando no programa anterior com os dados: PV=2000, FV=2200
e n=4, o programa nos devolve: i=2.41.
Portanto, a taxa de juros da aplicação é 2, 41 % a.m.

130
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:

[ f ] [ FIN ] 2000 [ PV ] 2200 [ CHS ] [ FV ] 4 [ n ] [ i ] Visor ⇒ 2.41

Problema: Um capital inicial de $ 430, 00 rendeu $ 80, 00 de juros após


permanecer aplicado por quatro meses. Qual a taxa mensal de juros da
aplicação?
Solução: Entrando no programa anterior com os dados: PV=430, FV=430+
80 = 510 e n=4, o programa nos devolve: i=4.36.
Pela HP 12C resolvemos este problema digitando:

[ f ] [ FIN ] 430 [ PV ] 510 [ CHS ] [ FV ] 4 [ n ] [ i ] Visor ⇒ 4.36

Problema: Qual o capital que, aplicado a 8, 2 % a.m., durante seis meses,


rende juros compostos de $ 75.573, 51.
Este é um simples problema de matemática financeira para o qual não
existe uma tecla especı́fica para sua resolução na HP 12C.
Vamos acrescentar esta tecla em nossa HP 12G . A fórmula para a reso-
lução desse problema é a seguinte
 
J = P V (1 + i)n − 1 ⇒ P V = J/ (1 + i)n − 1

A nova “tecla” é a seguinte:

≪ p p Entre com i, n e J p p PROMPT → i n J


≪ p J/( (1 + i/100 ) ∧ n − 1 )p EVAL
p p PV p p →TAG 2 FIX

Solução: Entrando no programa anterior com os dados: i = 8.2, n = 6 e


J = 75573.51, o programa nos devolve: PV= 125, 000.00.
Problema: Que juro produz um capital de $ 10.000, 00 aplicado por 15
meses à taxa composta de 2 % a.m.?
Este é mais um problema que não tem solução direta pela HP 12C−
embora possa ser resolvido.
Vamos acrescentar mais uma tecla em nossa HP 12G . A fórmula para a
resolução desse problema é

J = P V (1 + i)n − 1

A nova “tecla” é a seguinte:

131
≪ p p Entre com PV, i e n p p PROMPT → P V i n
≪ pPV ∗ ( (1 + i/100 ) ∧ n − 1 )p EVAL
p p Jp p →TAG 2 FIX

Solução: Entrando no programa anterior com os dados: P V = 10000,


i = 2, n = 15, o programa nos devolve: J= 3.458, 68.
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:

[ f ] [ FIN ] 1000 [ PV ] 15 [ n ] 2 [ i ] [ FV ] [ RCL ] [PV] [+] ⇒ −3.458, 68

Observe

J = PV (1 + i)n − 1 ⇒ J = P V (1 + i)n − P V ⇒ J = FV − PV

[RCL] [PV]: Significa: Recupera o conteúdo do registrador [PV].


Novamente, a resolução pela HP 12G resultou bem mais simples.

5.3 Valor Atual de um Conjunto de Capitais


Suponhamos que uma pessoa tenha uma dı́vida de P1 reais para pagar
daqui a 1 mês. Suponhamos ainda que ela consiga aplicar seu dinheiro a
juros compostos, à taxa de i % a.m. A pergunta é: quanto essa pessoa
deverá aplicar hoje àquela taxa para fazer frente ao seu compromisso?
Solução: Gráficamente temos o seguinte esquema

C0 = ? P1

p p
0 1

Considerando a fórmula M = C(1 + i)n , devemos ter

P1
P1 = C0 (1 + i)1 ⇒ C0 =
(1 + i)1

O valor encontrado é chamado de valor atual de P1 reais.

132
Agora suponhamos que a pessoa tivesse uma dı́vida de P1 reais para
daqui a 1 mês e outra de P2 reais para daqui a 2 meses. A pergunta é:
quanto essa pessoa deverá aplicar hoje àquela taxa para fazer frente aos
seus compromissos?
Solução: Consideremos o seguinte esquema gráfico

C0′ = ? P1 P2

p p p
0 1 2

Para saldar o segundo compromisso a pessoa deverá aplicar


P2
(1 + i)2

Portanto, para saldar as duas dı́vidas, hoje ela precisaria de:


P1 P2
C0′ = 1
+
(1 + i) (1 + i)2

Confirmando: Vamos necessitar da equação M (n) = C(1 + i)n : utilizando


o montante encontrado acima, daqui a um mês o montante será
 
1 P1 P2
M (1) = C(1 + i) = + (1 + i)1
(1 + i)1 (1 + i)2

P2
= P1 +
(1 + i)

Saldando, no final do primeiro perı́odo, o compromisso devido, ficamos com


o montante
P2
M (1) = P1 + − P1
(1 + i)

Aplicando o capital restante por mais um perı́odo teremos ao final do se-


gundo perı́odo o seguinte rendimento
P2
M (1) = C(1 + i)1 = (1 + i)1 = P2
(1 + i)

para saldar o segundo compromisso.

133
Generalizando: Dado um conjunto de valores monetários Y1 na data 1,
Y2 na data 2, e assim por diante até o valor Yn na data n, chamamos de
valor atual desse conjunto, a uma taxa i, ao valor indicado por V , que,
aplicado à taxa i, gera as rendas Y1 , Y2 , . . . , Yn , isto é:

Y1 Y2 Y3 Yn
V = + + + ··· +
(1 + i)1 (1 + i)2 (1 + i)3 (1 + i)n
V
Y1 Y2 Y3 Yn
···

0 1 2 3 ··· n

Para efeitos de programação, podemos escrever


n
Y1 Y2 Yn X Yk
V = 1
+ 2
+ · · · + n
= (5.2)
(1 + i) (1 + i) (1 + i) (1 + i)k
k=1

O programa a seguir recebe um vetor contendo as rendas e a taxa i e sai


com o valor atual V :

≪ → Y i
≪ −105 SF 2 FIX
Y SIZE OBJ→ DROP p N p STO
p
P
( k = 1, N, Y (k)/(1 + i/100) ∧ k) p EVAL

Exemplo: Uma pessoa tem dı́vidas de $ 9000, 00 e $ 8000, 00 que


vencem dentro de 1 e 2 meses, respectivamente. Quanto deverá aplicar
hoje, a juros compostos − a uma taxa de 2% a.m., para fazer frente aos
compromissos?
Solução: Entrando com os dados: [ 9000 8000 ] 2 ; temos: 16 512.88

PV = $ 16 512.88 $ 9000 $ 8000

p p p
0 1 2

134
Exemplo: Uma pessoa tem dı́vidas de $ 2000, 00, $ 3500, 00 e $ 5000, 00
que vencem dentro de 2, 5 e 6 meses, respectivamente. Quanto deverá
aplicar hoje, a juros compostos e à taxa de 2% a.m., para fazer frente aos
compromissos?
5000

3500

PV = ? 2000

p p p p p p p n
0 1 2 3 4 5 6

Solução: Este problema não pode ser resolvido diretamente pelo programa
anterior. Vamos alterá-lo da seguinte forma:

≪ → Y z i
≪ −105 SF 2 FIX
Y SIZE OBJ→ DROP p N p STO
p
P
( k = 1, N, Y (k)/(1 + i/100) ∧ z(k)) p EVAL

Agora entramos com dois vetores de mesmo comprimento, o primeiro


contendo as rendas e o segundo os valores dos respectivos vencimentos, e
mais a taxa.
Para o problema proposto entramos com:

[ 2000 3500 5000 ] [ 2 5 6 ] 1

Recebemos: 10 000.95 de outro modo: 10. 000, 95.

5.4 Sequência Uniforme de Pagamentos


5.4.1 Cálculo de prestações
Quando compramos um artigo a prazo efetuamos geralmente seu paga-
mento em uma série de prestações igualmente espaçadas no tempo. Essa
série de prestações é equivalente a um pagamento único, que seria o paga-
mento à vista.
Este é um caso particular da equação (5.2) (p. 134), assim:

135
V=?
P P P P P
···

p p p p p p
0 1 2 3 ··· n−1 n

Então:
P P P P
V = 1
+ 2
+ 3
+ ··· +
(1 + i) (1 + i) (1 + i) (1 + i)n

No lado direito dessa equação temos a soma dos termos de uma progressão
P 1
geométrica de primeiro termo a1 = (1+i) 1 e razão q = (1+i) 1. Sendo
assim, podemos aplicar a fórmula que soma os n primeiros termos de uma
progressão geométrica, que é a seguinte

a1 (q n − 1)
S = a1 + a2 + a3 + · · · + an =
q−1

Então h i
P 1
n
(1+i) 1+i −1
V = 1
(1+i) −1

Simplificando, obtemos

1 − ( 1 + i )−n
V = P · (5.3)
i

Essa fórmula nos fornece o valor à V ista de uma compra feita em n


parcelas iguais a P quando embutida uma taxa de juros de valor i.
Exemplos:
1 ) Um banco concedeu um empréstimo para uma pessoa adquirir um carro.
O pagamento deveria ser feito em 12 prestações mensais de $ 1400, 00 cada
uma, sem entrada. Qual o valor do empréstimo sabendo-se que a taxa de
juros compostos cobrada pelo banco foi de 3 % a.m.?
Solução: O empréstimo deve ser pago em 12 prestações mensais uniformes,
sem entrada, conforme vemos no diagrama de fluxo de caixa:
$ 1400, 00 $ 1400, 00

···

p p p p p p
0 1 2 3 ··· 11 12
136
Dos dados fornecidos obtemos: P = 1400, n = 12 e i = 3 % a.m.
Substituindo esses resultados na equação (5.3), obtemos

1 − ( 1 + i )−n
V = P ·
i
1 − ( 1 + 0, 03 )−12
= 1400 · = 13 935, 61
0, 03
Vamos programar a fórmula deduzida. Antes, passando a fórmula para
a linguagem da HP 12C, temos

1−( 1+i )−n


V =P · i

1−( 1+i )−n


P V = P MT · i
(#)

Onde: P V = Valor Presente e P M T = Pagamento = Prestações.


Antes de programar essa fórmula criei uma subpasta (por nome SUP) −
dentro da pasta HP12G − para guardar os próximos programas, para não
misturar com os programas oriundos da outra equação. (eq. (5.1), p. 127)
Pois bem, o programa a seguir calcula o valor de P V de acordo com a
equação ( # ):

≪ p p Entre com PMT, n e i p p PROMPT → P M T n i


p p
≪ i 100 / i STO
p p
P M T ∗ ( (1 − (1 + i) ∧ − n )/i ) EVAL
p p PV p p →TAG 2 FIX

Para fazer um teste neste programa executei-o com os dados do problema


anterior, isto é: P M T = 1400, n = 12 e i = 3 % a.m.
Ao final, obtive o seguinte resultado: V P : 19, 935.61

137
Séries postecipadas e antecipadas
Nos pagamentos periódicos, os pagamentos podem ser feitos no inı́cio do
perı́odo de capitalização, quando são chamados de antecipados, ou no final
do perı́odo, quando são chamados de postecipados. Por exemplo, os salários,
por serem pagos no fim do mês, são rendas postecipadas; as mensalidades
escolares, por sua vez, são rendas antecipadas.

P P P P P P
··· ···

p p p p p p p p
0 1 2 3 ··· 0 1 2 3 ···
− Antecipados − Postecipados

Temos a seguinte fórmula:

i(1 + i)n−1
PMT = PV · (1 + i)m (5.4)
(1 + i)n − 1

como uma generalização da fórmula (5.3) (p. 136). Quando m = 0 temos as


séries antecipadas e m = 1 as séries postecipadas.
Óbviamente que a fórmula (5.4) contempla outras possibilidades. Por
exemplo, se a primeira parcela for paga no final do segundo perı́odo (ou
inı́cio do terceiro) (m = 2):

P P P
···

p p p p p − Postecipados, m = 2
0 1 2 3 4 ···

O programa a seguir calcula o valor do PMT de acordo com a fórmula (5.4).

≪ p p Entre: PV, n, i, e m p p PROMPT → P V n i m


p p
≪ i 100 / i STO
p
P V ∗ i ∗ (1 + i) ∧ (n − 1) ∗ (1 + i ) ∧ m/((1 + i) ∧ n − 1)p EVAL
p p PMT p p →TAG 2 FIX

138
Exemplo: Uma geladeira possui preço a vista igual a $ 800, 00, podendo
ser paga em três parcelas mensais e iguais sem entrada. Sabendo que a taxa
de juros praticada pela loja é igual a 5% a.m., calcule o valor da prestação
a ser cobrada pela loja.
Solução: Entrando no programa anterior com os dados: PV=800, n=3,
i=5 e m=1 (sem entrada), o programa nos devolve: PMT=293.77.
Para operar com a tecla [PMT] da HP 12C, é preciso previamente ter em
conta se a série é postecipada − configurada por meio das teclas [g] [END]
− ou antecipada, configurada pelas teclas [g] [BEG].
Nota: Quando se pressiona [g] [END], nada muda no visor; quando se
pressiona [g] [BEG], acende o indicador de estado BEGIN, indicando paga-
mentos antecipados.
Ademais, deve-se ter em conta a “convenção de sinais”. A resolução do
problema anterior pela HP 12C se dá pela seguinte sequência de teclas:

[ f ] [ FIN ] 800 [ PV ] 3 [ n ] 5 [ i ] [ g ] [ END ] [ PMT ] ⇒ −293.77

Temos uma outra alternativa:

[ f ] [ FIN ] 800 [ CHS ] [ PV ] 3 [ n ] 5 [ i ] [ g ] [ END, ] [ PMT ] ⇒ 293.77

Pela convenção de sinais PV e PMT têm sinais contrários. Em muitos


casos se a convenção não for observada a HP 12C emite uma mensagem de
erro.
Observe que na HP 12G não existe uma tal convenção de sinais; não pre-
cisamos nos preocupar com isto.

5.4.2 Cálculo da taxa de juros


Consideremos o seguinte problema: Um congelador no valor de $ 950, 00
a vista é vendido em 12 pagamentos mensais e sem entrada no valor de
$ 100, 00 cada. Qual a taxa de juros cobrada pela loja?
Substituindo os dados na fórmula (5.4) (p. 138), temos:

i(1 + i)n−1
PMT = PV · (1 + i)m
(1 + i)n − 1

isto é,
i(1 + i)12−1
100 = 950 · (1 + i)1
(1 + i)12 − 1
Ou ainda,
i(1 + i)12 10
12
=
(1 + i) − 1 95
Como isolar i nesta equação? A este respeito na referência [3], lemos:

139
“Se é possı́vel uma fórmula especial para o cálculo de n, tal não acontece
para o cálculo de i, quando se conhecem P V , P M T e n. O cálculo de i
só é possı́vel por aproximações sucessivas. Calcula-se o valor de P V com
várias taxas até que se consigam valores próximos do valor dado para P V .
Em seguida, com o auxı́lio da regra de três, faz-se uma interpolação para
determinar a taxa correspondente a esse valor dado.” (p. 145)
Este, em geral, é o sentimento presente nos livros de matemática finan-
ceira. Vamos mostrar aqui que é possı́vel sim obter “uma fórmula especial
para o cálculo de i”. Veremos como, através da computação algébrica, obter
uma fórmula para o cálculo da taxa e sem aproximações − num sentido a
ser esclarecido oportunamente.
Para os nossos propósitos iremos necessitar do binômio de Newton:
n  
n
X n n−k k
(a + b) = a b (5.5)
k
k=0

Tomando nesta equação a = 1 e b = i, resulta:


n  
n
X n
(1 + i ) = ik
k
k=0

Vejamos um caso particular desta equação:


3          
3
X 3 k 3 0 3 1 3 2 3 3
(1 + i) = i = i + i + i + i
k 0 1 2 3
k=0

= 1 + 3i + 3i2 + i3

Resulta um polinômio do terceiro grau em i. Polinômios é uma das


especialidades da HP 50g .
O programa a seguir recebe n e sai com o polinômio dado pela equação
n  
n
X n
(1 + X ) = Xk
k
k=0

≪ → n
≪ −2 CF − 3 CF − 105 SF − 103 CF − 114 SF
p
P
(k = 0, n, COMB(n, k) ∗ X ∧ k) p EVAL
−105 CF SIMPLIFY


Nota: Trabalharemos com a variável padrão X, no lugar da taxa i.

140
Na segunda linha ativamos o sinalizador 114 para que o polinômio resul-
tante esteja em ordem crescente, nas potências de X. Entrando com n = 3,
por exemplo, recebemos de volta o seguinte polinômio: (CAS, p. 153)

1 + 3 · X + 3 · X2 + X3
Vamos manipular algébricamente a fórmula
i(1 + i)n−1
PMT = PV · (1 + i)m
(1 + i)n − 1
para obter:
(1 + i)n − 1 − i(1 + i)n+m−1 · P V /P M T = 0
Ou ainda,
n   n+m−1
X  
X n k n+m−1
i −1−i· i k · P V /P M T = 0
k k
k=0 k=0

Sendo
n        
X n k n 0 n 1 n
i = i + i + ··· + in
k 0 1 n
k=0 | {z }
=1
e
n+m−1
X      
n+m−1 n+m−1 n+m−1
ik = i0 + ··· + i n+m−1
k 0 n+m−1
k=0

Observe que temos uma diferença entre dois polinômios em i:


n   n+m−1
X n+ m − 1
X n k
i − P V /P M T · i k+1 = 0
k k
|k=1 {z } | k=0
{z }
p1 (i) p2 (i)

O programa seguinte calcula a taxa de juros dada pela equação (5.4) (p. 138).

≪ p p Entre : PV, PMT, n e m p p PROMPT → P V P M T n m


≪ 4 FIX − 2 CF − 3 CF − 105 SF − 103 CF
p
P
(k = 1, n, COMB(n, k) ∗ X ∧ k) p EVAL
p
P
P V /P M T ∗ (k = 0, n + m − 1, COMB(n + m − 1, k) ∗ X ∧ (k + 1)) p
EVAL − pX p ZEROS

141
Problema: Um congelador no valor de $ 950, 00 a vista é vendido em 12
pagamentos mensais iguais e sem entrada no valor de $ 100, 00 cada. Qual
a taxa de juros cobrada pela loja?
O diagrama de fluxo de caixa da operação é visto a seguir:

VP PMT PMT

p p p p p p p p p p p p p
0 1 2 3 4 5 6 7 8 9 10 11 12

Solução: Entrando no programa anterior com os dados: P V = 950,


P M T = 100, n = 12, m = 1 (sem entrada), o programa nos devolve a
seguinte lista:
{ 0.0000 3.7909 − 178.6066 }
Ou seja: o polinômio resultante do problema em questão possui três raı́zes
reais. A que nos interessa é: i = 3.7909.
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:
[ f ] [ FIN ] 950 [ PV ] 100 [ CHS ] [ PMT ] 12 [ n ] [ g ] [ END ] [ i ] ⇒ 3.7909
Vamos fazer um acréscimo no programa anterior para que o programa
saia apenas com a taxa i que esteja entre 0 e 1; isto é, 0 < i < 1. O
programa modificado fica assim:

≪ p p Entre : PV, PMT, n e m p p PROMPT → P V P M T n m


≪ 4 FIX − 2 CF − 3 CF − 105 SF − 103 CF
p
P
(k = 1, n, COMB(n, k) ∗ X ∧ k) p EVAL
p
P
P V /P M T ∗ (k = 0, n + m − 1, COMB(n + m − 1, k) ∗ X ∧ (k + 1)) p
p
EVAL − X p ZEROS
DUP AXL p vp STO SIZE 1 SWAP
FOR I
IF p 0 < v(I) AND v(I) < 1 p
THEN p v(I) p EVAL
END
NEXT 100 ∗ pp i p p →TAG

142
Problema: Uma loja de decorações anuncia a venda de um objeto de arte
por $ 600, 00 a vista ou em 1 + 8 (isto é, com uma entrada e oito parcelas
mensais) de $ 80, 00 cada. Qual a taxa de juros cobrada pela loja?
Solução: O diagrama de fluxo de caixa da operação é visto a seguir:

PMT PMT = $ 80, 00

p p p p p p p p p
0 1 2 3 4 5 6 7 8

PV = $ 600, 00

Entrando no programa com os dados: P V = 600, P M T = 80, n = 9,


m = 0 (com entrada), o programa nos devolve: i = 4.8598 (a.m.).
Pela HP 12C resolvemos este problema digitando:

[ f ] [ FIN ] 600 [ PV ] 80 [ CHS ] [ PMT ] 9 [ n ] [ g ] [ BEG ] [ i ] ⇒ 4.8598

Problema: Um aparelho de som é anunciado com um preço a vista de


$ 1200, 00 ou em três parcelas mensais iguais a $ 500, 00. Calcule a taxa de
juros cobrada pela loja, supondo que a primeira parcela seja paga:
a) no ato;
b) 30 dias após a compra.
Solução:
a) Entrando no programa com os dados: P V = 1200, P M T = 500,
n = 3, m = 0, o programa nos devolve: i = 27.4659 (a.m.).
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:

[ f ] [ FIN ] 1200 [ PV ] 500 [ CHS ] [ PMT ] 3 [ n ] [ g ] [ BEG ] [ i ] ⇒ 27.4659

b) Entrando no programa com os dados: P V = 1200, P M T = 500,


n = 3, m = 1, o programa nos devolve: i = 12.0444 (a.m.).
Pela HP 12C resolvemos este problema digitando a seguinte sequência
de teclas:

[ f ] [ FIN ] 1200 [ PV ] 500 [ CHS ] [ PMT ] 3 [ n ] [ g ] [ END ] [ i ] ⇒ 12.0444

Vamos armazenar (STO) o programa seguinte (modificação do anterior):

143
≪ → PV PMT n m
≪ 4 FIX − 2 CF − 3 CF − 105 SF − 103 CF
p
P
(k = 1, n, COMB(n, k) ∗ X ∧ k) p EVAL
p P V /P M T ∗
P
(k = 0, n + m − 1, COMB(n + m − 1, k) ∗ X ∧ (k + 1)) p
p
EVAL − X p ZEROS
DUP AXL p vp STO SIZE 1 SWAP
FOR I
IF p 0 < v(I) AND v(I) < 1 p
THEN p v(I) p EVAL
END
NEXT 100 ∗ pp i p p →TAG

numa variável por nome FTJ (fórmula da taxa de juros). Este programa
agora pode ser visto, efetivamente, como uma fórmula para o cálculo da
taxa de juros, derivada da equação (5.4) (p. 138). É uma função de quatro
variáveis, por exemplo, para
p
FTJ(1200, 500, 3, 0)p EVAL
temos FTJ(1200, 500, 3, 0) = 27.4659, para a taxa de juros.
E mais: pela “dedução” do programa podemos dizer que este é um valor
“lógicamente exato” da taxa de juros; embora, eventualmente, possa não
ser numéricamente exato, uma vez que no cálculo das raı́zes do polinômio,
pela HP 50g , introduz-se aproximações nos algoritmos numéricos.
∗ ∗ ∗
Não creio que devo gastar anos estudando o trabalho dos outros,
decifrando um campo complicado para poder contribuir com um pequeno
aporte meu. Prefiro dar largas passadas numa direção totalmente nova,
em que a imaginação é, pelo menos, inicialmente, muito mais importante
do que a técnica, porque suas técnicas correspondentes têm ainda de ser
desenvolvidas. [. . .]
Lembre-se que a matemática é uma livre criação da mente humana
e, como disse Cantor − o inventor da moderna teoria da infinitude,
descrita por Wallace −, a essência da matemática reside na liberdade,
na liberdade de criar. A história, porém, julga essas criações por sua
beleza duradoura e pela extensão com que elas iluminam outras ideias
matemáticas ou o universo fı́sico, em suma, por sua “fertilidade”.
(Gregory Chaitin/Matemático e cientista da computação)

144
5.4.3 Capitalização composta em perı́odos fracionários
Os exemplos apresentados até agora − com respectivos fluxos de caixa
− foram para transações financeiras em que os juros começam a acumular
no inı́cio do primeiro perı́odo de pagamento regular. No entanto, muitas
vezes os juros começam a acumular antes do inı́cio do primeiro perı́odo
de pagamento regular − pode ser o caso de um empréstimo bancário, por
exemplo. O perı́odo referido, durante o qual os juros começam a acumular
antes da data do primeiro pagamento, é denominado perı́odo fracionário.

PMT
VP
···

p0 p1 p2 p3 Antecipado
n

Perı́odo
fracionário

PMT
VP
···

p0 p1 p2 p3 Postecipado
n

Perı́odo
fracionário

Consideremos o seguinte problema: Um empréstimo de $ 3 950 por 42


meses para comprar um carro começa a acumular juros 13 dias antes do
inı́cio do primeiro perı́odo de pagamento. Pagamentos de $ 120 são feitos no
final de cada mês. Calcule a taxa de juros do financiamento considerando
os dias extras.
Solução: O diagrama de fluxo de caixa é visto a seguir:

VP= $ 3 950 PMT PMT= $ 120

···

p0 p1 p2 p3 p 42
n

13 dias

O número de perı́odos que devemos utilizar no exemplo é:


n = 42 + 13 30 = 42, 43. Substituindo os dados do problema na fórmula
(5.4) (p. 138), temos:

145
i(1 + i)42, 43−1
120 = 3950 · (1 + i)1
(1 + i)42, 43 − 1
Simplificando ligeiramente, temos
120  
i(1 + i)42, 43 = (1 + i)42, 43 − 1
3950
E não podemos aplicar a fórmula do binômio de Newton para desenvolver o
binômio acima posto que o expoente não é um número natural.
O desenvolvimento matemático que se segue é com vistas a construir um
algoritmo (programa) para resolver problemas do gênero.
Antes precisamos generalizar o coeficiente binomial, assim:

Definição 7. Se m for qualquer número real e k um número natural, então


definimos o coeficiente binomial, assim:

  
m  1, se k = 0;
= 
k  m(m − 1)(m − 2) · · · m − (k − 1) , se k ≥ 1.

k!
Por exemplo,

a ) Calcule 42 .

Solução: Sendo m = 4 e k = 2, temos, m − (k − 1) = 4 − 1, então
 
4 4(4 − 1) 4·3
= = =6
2 2! 2
4, 5 
b ) Calcule 3 .

Solução: Sendo m = 4, 5 e k = 3, temos, m − (k − 1) = 4, 5 − 2, então
 
4, 5 4, 5 (4, 5 − 1)(4, 5 − 2) 4, 5 · 3, 5 · 2, 5
= = = 6, 5625
3 3! 6
−4 
c ) Calcule 2 .

Solução: Sendo m = −4 e k = 2, temos, m − (k − 1) = −4 − 1, então
 
−4 −4(−4 − 1) −4 · (−5)
= = = 10
2 2! 2

A HP possui uma função, COMB ( MTH NXT PROB COMB ), que


L
calcula combinações COMB(m, k), no entanto se m não for inteiro ou se for
negativo a calculadora acusará um erro. Vamos contornar esta limitação.

146
O programa a seguir calcula o coeficiente binomial como definido acima.

≪ → m k
≪ IF p FP(m == 0) AND m ≥ 0 p
THEN m k COMB
ELSE
IF k 0 ==
THEN 1
p p
ELSE 1 P STO
0 k 1 − FOR I
m I − P ∗ pP p STO
NEXT P k ! /

END
END


Após o primeiro IF perguntamos se m é um número inteiro e positivo,
se for este o caso então calculamos o coeficiente tal como na calculadora
(COMB); caso contrário, calculamos segundo nossa definição.
Observe que este programa generaliza a função COMB da calculadora.
Armazene o programa acima na variável comb (tudo em minúsculo, para
evitar problemas com o COMB da calculadora).
Iremos necessitar da série binomial (estudada no Cálculo), ei-la:

m(m − 1) 2 m(m − 1) · · · m − (k − 1) k
1 + mx + x + ··· + x + ···
2! k!
Pode-se provar, que se m não for um número Natural, então a série
binomial converge para (1 + x)m para |x| < 1. Sendo assim,

m m(m − 1) 2 m(m − 1) · · · m − (k − 1) k
(1+x) = 1 + mx + x +···+ x +···
2! k!
Tendo em conta nossa extensão do coeficiente binomial, temos:
+∞  
X m
( 1 + x )m = xk
k
k=0

Esta identidade vale se m não é um número natural. Na verdade é o caso


que nos interessa agora, uma vez que para m natural já tratamos anterior-
mente.

147
A tı́tulo de exemplo, vamos substituir x por i e m por −n para obter:
∞  
−n
X −n k
(1 + i) = i (5.6)
k
k=0

Vejamos dois casos particulares:


∞        
−2
X −2 k −2 0 −2 1 −2 2
(1 + i) = i = i + i + i + ···
k 0 1 2
k=0

= 1 + −2i + 3i2 + · · ·

Os coeficientes binomiais foram calculados com o programa comb.


∞        
−3
X −3 k −3 0 −3 1 −3 2
(1 + i) = i = i + i + i + ···
k 0 1 2
k=0

= 1 + −3i + 6i2 + · · ·

O programa seguinte recebe n e N

≪ → n N
≪ −2 CF − 3 CF − 105 SF − 103 CF − 114 SF
p
P
(k = 0, N, comb(−n, k) ∗ X ∧ k) p EVAL
−105 CF SIMPLIFY


e sai com o polinômio
N        
X −n −n −n −n
( 1 + X )−n = Xk = X0 + X1 + · · · + XN
k 0 1 N
k=0

na variável X e de grau N .
Na segunda linha ativamos o sinalizador 114 para que o polinômio re-
sultante esteja em ordem crescente, nas potências de X. Observe que
comb(−n, k), dentro do somatório, chama o programa que foi armazenado
na variável comb − é uma subrotina.
Por exemplo, fornecendo ao programa n = 2 e N = 2, recebemos de
volta o polinômio:

1 − 2 · X + 3 · X2

Fornecendo n = 3 e N = 4, recebemos de volta o polinômio:

1 − 3 · X + 6 · X 2 − 10 · X 3 + 15 · X 4

148
Vamos manipular algébricamente a fórmula∗

i(1 + i)n−1
PMT = PV · (1 + i)M (5.7)
(1 + i)n − 1

para obter:

(1 + i)n − 1 − i(1 + i)n+M −1 · P V /P M T = 0

Considerando que n não é um número Natural, podemos escrever:


+∞   +∞  
X n k X n+M −1 k
i −1−i i · P V /P M T = 0
k k
k=0 k=0

Ou ainda,
+∞   +∞  
X n k
X n+M −1
i − 1 − P V /P M T · i ik = 0
k k
k=0 k=0

O programa para esta fórmula muda muito pouco em relação ao pro-


grama da p. 142. Devemos estabelecer um limite N (N = 10 no programa)
para o somatório e usar comb ao invés de COMB.

≪ p p Entre : PV, PMT, n e M p p PROMPT → P V P M T n M


≪ 4 FIX − 2 CF − 3 CF − 105 SF − 103 CF
p
P
(k = 0, 10, comb(n, k) ∗ X ∧ k) − 1 p EVAL
p
P
P V /P M T ∗ X ∗ (k = 0, 10, comb(n + M − 1, k) ∗ X ∧ k) p
EVAL − pX p ZEROS
DUP AXL p vp STO SIZE 1 SWAP
FOR I
IF p 0 < v(I) AND v(I) < 1 p
THEN p v(I) p EVAL
END
NEXT 100 ∗ pp i p p →TAG

Entrando neste programa com os dados (p. 145): PV= 3950, PMT= 120,
n = 42.43 e M = 1 (postecipada); o programa nos devolve a seguinte taxa:
i = 1.2279 (a.m.).

Agora estamos usando M maiúsculo.

149
Pela HP 12C resolvemos este problema digitando as teclas:

[ f ] [ FIN ] [ g ] [ END ] 3950 [ PV ] 120 [ CHS ] [ PMT ] 42.43 [ n ] [ i ] ⇒ 1.1626

Não podemos nem considerar estes valores como aproximados um do


outro. Um ou outro deve estar errado.
Para confirmar isto podemos, por exemplo, calcular o pagamento com
ambas as taxas, na fórmula (M = 1):

i(1 + i)n−1
PMT = PV · (1 + i)M
(1 + i)n − 1

isto é,

1.2279/100 (1 + 1.2279/100)42.43
( HP 12G ) : P M T = 3950 · = 120.00
(1 + 1.2279/100)42.43 − 1
e
1.1626/100 (1 + 1.1626/100)42.43
(HP 12C) : P M T = 3950 · = 118.47
(1 + 1.1626/100)42.43 − 1

E o primeiro valor da taxa nos dá o valor exato do PMT, enquanto o segundo
fornece um valor incorreto.
Vejamos mais um exemplo: Um empréstimo de $ 4 500 por 36 meses
começa a acumular juros 15 dias antes do inı́cio do primeiro perı́odo de
pagamento. Pagamentos de $ 157, 03 são feitos no inı́cio de cada mês. Cal-
cule a taxa de juros do financiamento considerando os dias extras.
Solução: O diagrama de fluxo de caixa é visto a seguir:
VP= $ 4 500

PMT PMT= $ 157, 03

···

p0 p1 p2 p3 p 35
n

15 dias

O número de perı́odos que devemos utilizar no exemplo é:


15
n = 36 + 30 = 36, 5.
Entrando neste programa com os dados: PV= 4500, PMT= 157.03, n = 36.5
e M = 0 (Antecipada); o programa nos devolve a seguinte taxa: i = 1.4366.
Pela HP 12C resolvemos este problema digitando as seguintes teclas:

[ f ] [ FIN ] [ g ] [ BEG ] 4500 [ PV ] 157.03 [ CHS ] [ PMT ] 36.5 [ n ] [i] ⇒ 1.3282

Novamente os resultados fornecidos por ambas as calculadoras são dis-


tintos. Os dois resultados não podem está corretos ao mesmo tempo.

150
Vamos decidir calculando o pagamento com ambas as taxas, na fórmula:

i(1 + i)n−1
PMT = PV · (1 + i)0
(1 + i)n − 1
isto é,

1.4366/100 (1 + 1.4366/100)36.5−1
( HP 12G ) : P M T = 4500 · = 157.03
(1 + 1.4366/100)36.5 − 1
e
1.3282/100 (1 + 1.3282/100)36.5−1
(HP 12C) : P M T = 4500 · = 154.33
(1 + 1.3282/100)36.5 − 1
Novamente a HP 12G forneceu − de volta − um valor exato do PMT en-
quanto a HP 12C um valor incorreto.
Conclusão: Não trabalho no meu dia-a-dia com a HP 12C− tomei uma
emprestada para escrever este capı́tulo do livro − e também não trabalho
com matemática financeira, não é minha especialidade; e, ademais, ad-
mito que possam ter existido “variáveis ocultas” na resolução destes dois
últimos problemas que me passaram despercebidas, entretanto, até prova
em contrário, vou admitir que a HP 12C esteja errada nos seus resultados.
Quando um remédio não produz os efeitos prometidos, ou quando seus
efeitos colaterais vão além dos previstos, os laboratórios responsáveis pela
sua fabricação são obrigados a retirá-lo de circulação, de igual modo, estou
sugerindo que deva acontecer com a calculadora financeira HP 12C.

5.5 Séries Não Uniformes


As séries não uniformes contemplam o estudo de operações matemáticas
financeiras que envolvem fluxos não uniformes de pagamento. Basicamente,
dois critérios são utilizados nas análises: a taxa interna de retorno e o valor
presente lı́quido.
Mais uma vez constataremos a superioridade da HP 50g frente a calcu-
ladora financeira HP 12C em mais este tema da matemática financeira.

5.5.1 Séries com prestações diferentes


As séries não uniformes se caracterizam por lidarem com prestações de
valores diferentes; aqui dois parâmetros de análise são utilizados: o VPL e
a TIR.
− VPL : Valor Presente Lı́quido − na HP 12C NPV, (do inglês Net
Present Value) − que é o valor, na data zero, de todos os fluxos de caixa
da série não uniforme. A VPL também é denominda na literatura de Valor
Atual Lı́quido (VAL).

151
− TIR : Taxa Interna de Retorno − na HP 12C IRR, (do inglês Internal
Rate of Return) − corresponde ao valor da taxa de juros que torna nulo o
valor VPL.
A figura a seguir representa um fluxo de caixa genérico:
CFn
CF0 CF2
CF1
CF3

p p p p p
0 1 2 3 ··· n

Onde:
CF0 : parcela do fluxo de caixa no ponto 0 (Cash Flow no ponto 0);
CF1 : parcela do fluxo de caixa no ponto 1 (Cash Flow no ponto 1);
CF2 : parcela do fluxo de caixa no ponto 2 (Cash Flow no ponto 2); etc.
A parcela CF0 normalmente corresponde ao investimento inicial e, sendo
assim, tem sinal negativo, por representar um desembolso, ou saı́da de caixa.
A taxa de juros utilizada para descontar as parcelas futuras do fluxo de
caixa é denominada taxa de desconto.
Fixada uma taxa de desconto i, o valor presente lı́quido do fluxo de caixa

C1 C2 Cn
V P L = C0 + 1
+ 2
+ ··· + (5.8)
(1 + i) (1 + i) (1 + i)n
Ou, de modo equivalente:
n
X CFj
V PL = (5.9)
(1 + i)j
j =0

Sendo o VPL uma soma algébrica “de entradas e saı́das” no diagrama


de fluxo de caixa, ele indicará o resultado do investimento.
• Se o VPL for positivo, o valor financeiro do ativo do investidor aumen-
tará: O investimento será atrativo em termos financeiros.
• Se o VPL for zero, o valor financeiro do ativo do investidor não mudará:
o investidor será indiferente ao investimento.
• Se o VPL for negativo, o valor financeiro do ativo do investidor será
reduzido: o investimento não será atrativo em termos financeiros.
Comparando os VPLs de investimentos alternativos temos como saber qual
é o mais atrativo: quanto maior for o VPL, maior será o aumento do valor
financeiro do ativo do investidor.
1
Se na equação (5.8) fazemos 1+i = x, resulta:
V P L = C0 + C1 x + C2 x2 + · · · + Cn xn (5.10)
um polinômio de grau n, justamente uma das especialidades da HP 50g .

152
O programa a seguir recebe um vetor e sai com um polinômio cujos
coeficientes são extraı́dos do vetor, assim:

[ −2 3 5 ] → −2 + 3X + 5X 2

≪ → V
p p
≪ −2 CF −3 CF −105 CF 0 P STO
V AXL REVLIST AXL DUP
p p
V STO SIZE OBJ→ DROP DUP
p np STO 1 SWAP
p
FOR I V (I) p EVAL
p
Xp n I − ∧ ∗ P + p
P p STO
NEXT P

Em particular este programa calcula o “polinômio VPL” dado pela


equação (5.10).
O programa seguinte − com uma outra “filosofia” − também recebe um
vetor e sai com um polinômio:

≪ → V
p p
≪ −2 CF −3 CF −105 SF V 1 COL− V 0 STO
p p
DUP STO SIZE OBJ→ DROP p n p STO
V
pV 0 +
P
( I = 1, n, V (I) ∗ X ∧ I) p EVAL


Por exemplo,

[ −2 3 5 ] → − 2. +−3. · X +−5. · X 2.

Esta forma de apresentação do polinômio pela HP as vezes me incomoda,


por ser antiestética.
Consegui resolver este problema com o primeiro programa acima, apenas
com um detalhe adicional: quando digitamos o vetor e pressionamos ENTER
este pode aparecer na pilha de dois modos:

[ −2. 3. 5. ] ou [ −2 3 5 ]

devemos entrar com o vetor no formato da direita.

153
Caso o vetor que consta na pilha esteja no formato da esquerda isto in-
dica que os números (componentes do vetor) estão no formato real (para
a calculadora são números reais). Isto significa que quando o número foi
inserido (digitado) no CAS X − Approx estava assinalado. Sendo este o caso
você deve ir no CAS (p. 86) e desmarcar X − Approx , entre novamente com o
vetor, só então teremos:

[ −2 3 5 ] → −2 + 3 · X + 5 · X 2
Na HP 12C o valor presente lı́quido de um fluxo de caixa, para uma
determinada taxa de desconto i, é obtido pela tecla [NPV], para isto, antes
devemos armazenar os valores de CF0 e CFj , nas teclas (registradores)
correspondentes. Convencionamos que CFj corresponde a qualquer parcela
do fluxo de caixa a partir do final do primeiro perı́odo até o final do último
perı́odo, no diagrama esta convenção fica assim:
CFn
CF0 CF2
CF1
CF3

p p p p p
0 1 2 3 ··· n





























































CFj

A taxa interna de retorno do fluxo de caixa é a taxa de desconto que faz


com que o valor presente lı́quido seja igual a zero. Sendo assim, na equação
(5.8) devemos ter

C1 C2 Cn
V P L = C0 + + + ··· + =0
(1 + i)1 (1 + i)2 (1 + i)n
i =taxa interna
de retorno

Que é equivalente a

V P L = C0 + C1 x + C2 x2 + · · · + Cn xn = 0

A taxa interna de retorno∗ é uma das raı́zes deste polinômio. Uma outra
das especialidades da HP 50g , raı́zes de polinômios.
O valor da TIR comparado com a taxa de desconto do valor presente
também indica o resultado do investimento:
• Se a TIR for maior que a taxa de desconto desejada, o investimento é
atrativo em termos financeiros.
• Se a TIR for igual à taxa de desconto desejada, o investidor é indiferente
ao investimento.

Indicada por IRR, na HP 12C temos a tecla [IRR] para o cálculo desta taxa.

154
• Se a TIR for menor que a taxa de desconto desejada, o investimento
não é atrativo em termos financeiros.
Se vários investimentos estão sendo comparados, o melhor é o que tem a
maior taxa de desconto. Se são empréstimos que estão sendo analisados, o
melhor é o que oferece a menor taxa de desconto.
Exemplo: O estudo de viabilidade econômica de um projeto resulta no
fluxo de caixa indicado na tabela abaixo:

Ano Valor( $ )
0 (−)11.500, 00
1 (+) 2.350, 00
2 (+) 1.390, 00
3 (+) 3.350, 00
4 (+) 4.275, 00
5 (+) 5.350, 00
Soma (+) 5.215, 00

a) Determine o valor presente lı́quido desse fluxo de caixa para as taxas de


desconto de 0, 00% a.a., 10, 00% a.a. e 12, 00% a.a.;
b) encontre a taxa interna de retorno desse fluxo de caixa em % ao ano.
Vamos inicialmente resolver este exemplo pela HP 12C e, posterior-
mente, pela HP 12G , para efeitos de comparação.
Solução: Inicialmente devemos registrar o fluxo de caixas na HP 12C, com
o seguinte procedimento:

[f] REG (apaga os registradores)


1500 [ CHS ] [ g ] [ CF0 ] (parcela do ano 0 = $ -11500, 00)
2350 [ g ] [ CFj ] (parcela do ano 1 = $ 2350, 00)
1390 [ g ] [ CFj ] (parcela do ano 2 = $ 1390, 00)
3350 [ g ] [ CFj ] (parcela do ano 3 = $ 3350, 00)
4275 [ g ] [ CFj ] (parcela do ano 4 = $ 4275, 00)
5350 [ g ] [ CFj ] (parcela do ano 5 = $ 5350, 00)

Para armazenar o fluxo de caixa na HP 12C digitamos 15 teclas∗ . Na


HP 12G guardaremos o fluxo de caixa em um vetor, assim:

[ −11500 2350 1390 3350 4275 5350 ]



Não estamos contando os digitos (valores), estes são comuns nas duas HP’s.

155
a) Cálculo do valor presente lı́quido: para o cálculo do VPL para cada uma
das taxas propostas é suficiente digitar:

0 [ i ] [ f ] [ NPV ] ⇒ 5 215, 00
10 [ i ] [ f ] [ NPV ] ⇒ 543, 84
12 [ i ] [ f ] [ NPV ] ⇒ −156, 65

Observe que o VPL (NPV) para taxa i = 0 é o valor da Soma na tabela


do exemplo. Para ver que não se trata de uma coincidência basta substituir
i = 0 na equação (5.8) (p. 152). O fluxo de caixa continua armazenado nos
registradores da HP 12C, sem nenhuma alteração.
b) Para o cálculo da taxa interna de retorno basta digitar: [ f ] [ IRR ],
para obter: 11.537, isto é, IRR= 11.537% a.a.
Apenas a tı́tulo de complemento, se entrarmos com o vetor

[ −11500 2350 1390 3350 4275 5350 ]

no programa da página 153 recebemos de volta o polinômio:

−11500 + 2350 X + 1390 X 2 + 3350 X 3 + 4275 X 4 + 5350 X 5

Apenas a tı́tulo de verificação, podemos calcular os zeros deste polinômio,


para isto basta digitar: ALPHA X ENTER ZEROS
1
para obter: X = 0.89656, com cinco decimais. Sendo X = 1+i , desta
igualdade retiramos i = 0.11537, o que confirma o valor encontrado.
Programa para o cálculo do valor presente lı́quido
Vamos programar a equação (5.9) (p. 152) no formato seguinte
n
X CFj CF1 CF2 CFn
V PL = j
= CF0 + 1
+ 2
+ ··· +
(1 + i) (1 + i) (1 + i) (1 + i)n
j =0

Entraremos com um vetor contendo o fluxo de caixa assim:

[ CF0 CF1 CF2 . . . CFn ]

e mais a taxa de desconto i. Pois bem, este é o programa:

≪ → CFj i
≪ 2 FIX i 100 / pip STO
p p p p
CFj 1 COL− CF0 STO DUP CFj STO
SIZE OBJ→ DROP p n p STO
p
P
CF0 + ( I = 1, n, CFj(I)/(1 + i) ∧ I p EVAL
p p VPL p p →TAG

≫ 156
Entrando neste programa com os dados

[ −11500 2350 1390 3350 4275 5350 ] 10

recebemos de volta: VPL= 543.84.


Caso se queira calcular o VPL para um mesmo fluxo de caixas e várias
taxas podemos declarar o vetor fluxo de caixas dentro do próprio programa,
assim: (salve uma cópia do programa e altere)

≪ → i
≪ 2 FIX i 100 / pip STO
p
[ −11500 2350 1390 3350 4275 5350 ] CFj p STO
p
CFj 1 COL− CF0 p STO DUP p
CFj p STO
SIZE OBJ→ DROP p n p STO
p
P
CF0 + ( I = 1, n, CFj(I)/(1 + i) ∧ I p EVAL
p p VPL p p →TAG


Feito isto teremos, por exemplo:

i=0 ⇒ VPL: 5 215, 00


i = 10 ⇒ VPL: 543, 84
i = 12 ⇒ VPL: − 156, 65

Para um outro fluxo de caixa basta editar o programa. A HP 12C,


e outras calculadoras finaceiras, tem limites para o número de entradas
diferentes no fluxo de caixa − de no máximo 20 valores diferentes −, observe
que a HP 12G não sofre desta limitação.
Cálculo da taxa interna de retorno
Para o cálculo da taxa intena de retorno (IRR) basta uma modificação
no programa da página 153, assim:

≪ → V
p
≪ −2 CF −3 CF −105 SF V 1 COL− V 0 p STO
p p
DUP STO SIZE OBJ→ DROP p n p STO
V
p
P
V 0 + ( I = 1, n, V (I) ∗ X ∧ I) p EVAL
p
X p ZEROS INV 1 − 100 ∗
3 FIX p p IRR p p →TAG

157
Observe que
1 1
X= ⇒ i= −1
1+i X
Entrando neste programa com o vetor do fluxo de caixa do exemplo
[ −11500 2350 1390 3350 4275 5350 ]
recebemos de volta: IRR= 11.537.
Exemplo: Mostre que o fluxo de caixa, representado a seguir, se anula para
as taxas de 10 % a.a. e 1000 % a.a.

$ 413, 22 $ 5000, 00 $ 5000, 00

p p p anos
0 1 2

Solução: Entrando no programa anterior com o vetor:


[ −413.22 5000 − 5000 ]
recebemos de volta: IRR= { 1, 000.009 10.000 }.
Dependendo das magnitudes e dos sinais dos fluxos de caixa, o cálculo
da IRR pode ter uma solução única, múltiplas soluções, soluções negativas,
complexas ou até nenhuma solução real.
Vejamos alguns resultados úteis da álgebra:
1o ) Teorema Fundamental da Álgebra.
Todo polinômio P (x) de grau n ≥ 1 admite ao menos uma raiz complexa.
2o ) Teorema da decomposição.
Todo polinômio P (x) de grau n ≥ 1:
P (x) = a0 + a1 x + · · · + an−1 xn−1 + an xn
pode ser decomposto em n fatores do primeiro grau, isto é:
P (x) = an (x − r1 )(x − r2 )(x − r3 ) · · · (x − rn )
em que r1 , r2 , r3 , . . . , rn são as raı́zes de P (x).
Decompor (fatorar) polinômios é uma das especialidades da HP. (p. 320)
Corolário: Toda equação polinomial de grau n (n ≥ 1) admite n, e somente
n, raı́zes complexas.
3o ) Teorema das raı́zes conjugadas.
Se um polinômio P (x) de coeficientes reais admite como raiz o número
complexo z = α + β i (β 6= 0), então esse polinômio também admite como
raiz o número z̄ = α − β i, conjugado de z.

158
Corolário: Se um polinômio de coeficientes reais tem grau ı́mpar, então
ele admite um número ı́mpar de raźes reais. Sendo assim, por exemplo, toda
equação ax3 + bx2 + cx + d = 0 (com a, b e c reais) tem uma ou três raı́zes
reais, pois o número de raı́zes complexas (“puras”) é par.
4o ) Teorema de Bolzano.
Sejam P (x) = 0 uma equação polinomial com coeficientes reais e ] a, b [
um intervalo real aberto.
a) Se P (a) e P (b) têm mesmo sinal, então existe um número par de
raı́zes reais ou não existem raı́zes da equação em ] a, b [.
b) Se P (a) e P (b) têm sinais contrários, então existe um número ı́mpar
de raı́zes reais da equação em ] a, b [.
Número de raı́zes reais/A Regra de Sinais de Descartes
Considerando um polinômio ordenado, então o número de raı́zes positivas
do polinômio é igual ao número de permutações de sinal nos coeficientes −
ou é menor por uma diferença par.
Por exemplo, na equação

P (x) = 8 − x − 5x2 + 2x3 = 0

existem duas variações de sinal na sequência dos coeficientes. Pela regra de


Descartes existem duas raı́zes positivas ou nenhuma. Na equação

P (x) = −2 − 3x + x3 = 0

existe uma variação de sinal na sequência dos coeficientes. Pela regra de


Descartes existe uma raiz positiva. Temos

−2 − 3x + x3 = 0 ⇒ (x + 1)2 · (x − 2) = 0

Exemplo-A: Um investidor aplicou um capital de $ 650.000, 00 e recebeu


rendimentos parcelados de acordo com o diagrama a seguir:

$ 650.000
$ 160.000

$ 200.000

$ 490.000
$ 160.000

p p p p p p p p p p meses
0 1 2 3 4 5 6 7 8 9

Calcule a taxa interna de retorno desse investimento.


Vamos inicialmente resolver este exemplo pela HP 12C e, posterior-
mente, pela HP 12G , para efeitos de comparação.

159
Solução: Inicialmente devemos registrar o fluxo de caixas na HP 12C, de-
vemos substituir por 0 as “lacunas” no diagrama.

[f] REG (apaga os registradores)


650.000 [ CHS ] [ g ] [ CF0 ] (parcela do ano 0 = $ -650.000, 00)
0 [ g ] [ CFj ] (“parcela” do ano 1 = $ 0, 00)
0 [ g ] [ CFj ] (“parcela” do ano 2 = $ 0, 00)
160.000 [ g ] [ CFj ] (parcela do ano 3 = $ 160.000, 00)
160.000 [ g ] [ CFj ] (parcela do ano 4 = $ 160.000, 00)
0 [ g ] [ CFj ] (“parcela” do ano 5 = $ 0, 00)
200.000 [ g ] [ CFj ] (parcela do ano 6 = $ 200.000, 00)
0 [ g ] [ CFj ] (“parcela” do ano 7 = $ 0, 00)
0 [ g ] [ CFj ] (“parcela” do ano 8 = $ 0, 00)
490.000 [ g ] [ CFj ] (parcela do ano 9 = $ 490.000, 00)

Para o cálculo da taxa interna de retorno basta digitar: [ f ] [ IRR ],


para obter: 7.065, isto é, IRR= 7, 065% a.m.
Nesta sequência de digitações sempre existe a possibildade de erros, uma
vez que não vemos os digitos nos registradores; por sinal, tive que digitar
duas vezes para obter este valor, que eu já conhecia de antemão.
Para resolver este problema pela HP 12G − e outros do gênero − vamos
alterar o programa dado à p. 157 da seguinte forma:

≪ → V W
≪ −2 CF −3 CF −105 SF −103 CF
p
V 1 COL− V 0 p STO DUP p
V p
STO
p p
SIZE OBJ→ DROP n STO
p p
W 1 COL− DROP W STO
pV 0 +
P
( I = 1, n, V (I) ∗ X ∧ W (I)) p EVAL
p
X p ZEROS INV 1 − 100 ∗
pp pp
3 FIX IRR →TAG

Neste programa, para o cálculo da IRR, entramos com dois vetores de


mesmo comprimento; um contendo os valores presentes no fluxo e o outro
contendo as datas respectivas.

160
Para o exemplo dado, entramos com os vetores

[ −650000 160000 160000 200000 490000 ]


[0 3 4 6 9]

recebemos de volta: IRR= 7.065.


Com poucas alterações no programa anterior obtemos um outro para o
cálculo do VPL, assim:

≪ → V W i
≪ i 100 / pip STO
p p p p
V 1 COL− V0 STO DUP V STO
SIZE OBJ→ DROP p np STO
W 1 COL− DROP W p STO p

p
P
V 0 + ( I = 1, n, V (I)/(1 + i) ∧ W (I)) p EVAL
pp
3 FIX VPL p p →TAG

A precisão da taxa interna de retorno


A taxa IRR calculada no exemplo anterior é apenas uma aproximação
haja vista que o programa calcula as raı́zes (ZEROS) do polinômio
X
V0+ ( I = 1, n, V (I)/(1 + i) ∧ W (I))

e este cálculo não é exato − envolve aproximações.


Para se ter uma idéia desta aproximação vamos inicialmente alterar o
programa do cálculo do VPL (p. 161) para que ele fique apenas em função da
taxa, assim:

≪ → i
≪ i 100 / pip STO MFC →ROW DROP
p p
1 COL− DROP W STO
p p p p
1 COL− V0 STO DUP V STO
p p
SIZE OBJ→ DROP n STO
p
P
V 0 + ( I = 1, n, V (I)/(1 + i) ∧ W (I)) p EVAL
pp
2 FIX VPL p p →TAG

161
Armazene este programa com o nome VPLi. Antes de utilizar o pro-
grama teremos que armazenar o fluxo de caixa em uma matriz. Digite a
seguinte matriz (Exemplo-A, p. 159)

[ [ −650000 160000 160000 200000 490000 ] [ 0 3 4 6 9 ] ]

Colocando na pilha (ENTER), teremos


 
−650000 160000 160000 200000 490000
0 3 4 6 9

Armazene (STO) esta matriz na variável MFC (matriz do fluxo de caixa),


a qual comparece na segunda linha do programa anterior.
Após isto vamos obter o VPL para a taxa 7.065, obtida anteriormente.
Entrando com este valor no programa acima resulta: VPL= −4.49.
Esse resultado mostra que a IRR= 7.065 calculada anteriormente é ape-
nas uma aproximação já que, por definição, a taxa interna de retorno é
aquela que anula o VPL.
An passant, observe que o programa anterior pode ser visto como uma
fórmula (ou função) que nos dá o VPL em função da taxa: VPLi(i), para um
dado fluxo de caixa fixado. Estamos dizendo que o programa é equivalente
à equação:
n
X CFj CF1 CF2 CFn
V P L(i) = j
= CF0 + 1
+ 2
+ ··· +
(1 + i) (1 + i) (1 + i) (1 + i)n
j =0

Por exemplo digite entre plics p VPLi(7.065) p pressione ENTER e EVAL,


para obter VPL= −4.49.
Personalizando a taxa interna de retorno
Com o programa anterior podemos refinar a taxa interna de retorno,
tendo em conta que o objetivo é obter um VPL igual a 0 − ou suficientemente
próximo deste valor.
Antes, vamos modular a última equação acima

CF1 CF2 CFn
|V P L(i)| = CF0 +
+ + ··· +
(1 + i)1 (1 + i)2 (1 + i)n

1 1 1
≤ |CF0 | + |CF1 | + |CF2 | + · · · + |CFn |
(1 + i)1 (1 + i)2 (1 + i)n

Façamos

1 1 1
ki = |CF0 | + |CF1 | + |CF2 | + · · · + |CFn |
(1 + i)1 (1 + i)2 (1 + i)n

162
Onde, para um fluxo de caixa fixado, ki é uma função positiva e decres-
cente de i. Temos

|VPL(i)| ≤ ki ⇐⇒ −ki ≤ VPL(i) ≤ ki

Isto implica em que, se VPL é positivo aumentando a taxa ele diminui, e se


VPL é negativo diminuindo a taxa ele aumenta.
Sendo assim temos o seguinte algoritmo para refinar a taxa interna de
retorno:

VPL > 0 ⇒ (i ↑)
VPL < 0 ⇒ (i ↓)

Ou ainda,

(i↓) (i↑)

p p p
VPL < 0 0 VPL > 0

Isto implica em que como VPL(7.065) = −4.49 < 0, devemos diminuir o


valor de i para o próximo cálculo de VPLi(i).
Utilizando o algoritmo anterior encontrei VPL(7.0648815) = −0.0004;
um valor da taxa com maior precisão que o inicial.
Penso que em transações com altos valores envolvidos o algoritmo para
refinamento da taxa de retorno poderá ser de alguma utilidade.
Observe que na HP 12G podemos obter, se necessário, uma taxa de re-
torno com uma precisão desejada, ao contrário da HP 12C.
Para utilizar o programa (VPLi) para um outro fluxo de caixa basta
alterar a matriz MFC. Para isto, pressione a tecla virtual (menu) MFC
para colocar a matriz na pilha, faça as alterações, após:
p MFC p STO
ENTER ENTER K

Exemplo-B: Numa época em que a taxa de mercado é 6, 2% a.m., qual o


melhor retorno para uma aplicação de $ 500.000, 00:
a) receber $ 700.000, 00 no fim de seis meses;
b) receber duas parcelas trimestrais de $ 330.000, 00;
c) receber três parcelas bimestrais de $ 210.000, 00;
d) receber seis parcelas mensais de $ 100.000, 00?.

163
Solução:
a) Para esta alternativa temos o seguinte diagrama de fluxo:

$ 700.000
$ 500.000

p p p p p p p meses
0 1 2 3 4 5 6

Inicialmente armazenamos na variável MFC a seguinte matriz:


 
−500000 700000
0 6
Após isto, entramos no programa (VPLi) (p. 161) com a taxa 6.2, para obter:
VPL= −12.077, 39
b) Para esta alternativa temos o seguinte diagrama de fluxo:

$ 500.000
$ 330.000 $ 330.000

p p p p p p p meses
0 1 2 3 4 5 6

Sendo assim armazenamos na variável MFC a seguinte matriz:


 
−500000 330000 330000
0 3 6
Após isto, entramos no programa (VPLi) com a taxa 6.2, para obter:
VPL= 5.532, 57
c) Para esta alternativa temos o seguinte diagrama de fluxo:

$ 500.000
$ 210.000 $ 210.000 $ 210.000
p p p p p p p meses
0 1 2 3 4 5 6

Sendo assim armazenamos na variável MFC a seguinte matriz:


 
−500000 210000 210000 210000
0 2 4 6

164
Após isto, entramos no programa (VPLi) com a taxa 6.2, para obter:
VPL= −2.337, 08
d) Para esta alternativa temos o seguinte diagrama de fluxo:
$ 500.000

$ 100.000

$ 100.000

$ 100.000

$ 100.000

$ 100.000
$ 100.000
p p p p p p p meses
0 1 2 3 4 5 6

Sendo assim armazenamos na variável MFC a seguinte matriz:


 
−500000 100000 100000 100000 100000 100000 100000
0 1 2 3 4 5 6

Após isto, entramos no programa (VPLi) com a taxa 6.2, para obter:
VPL= −11.342, 41
Resumindo, temos:


 a) VPL = −12.077, 39



 b) VPL = 5.532, 57
i = 6, 2% :


 c) VPL = −2.337, 08



d) VPL = −11.342, 41

A melhor alternativa é a segunda pois, nesta, VPL > 0. (p. 152)

∗ ∗ ∗

Até então a ciência se caracterizara por duas abordagens. “Aque-


les que trataram de ciência foram ou homens de experimento ou homens
de dogma. Os homens de experimento são como a formiga; apenas col-
hem e usam; os raciocinadores assemelham-se a aranhas, que fazem teias
com sua própria substância. Mas a abelha adota o meio-termo; colhe seu
material das flores do jardim e do campo, mas o transforma e digere por
um poder que lhe é próprio.” ( Paul Strathern/“O sonho de Mendeleiev”)

165
Para finalizar vamos juntar num mesmo programa o cálculo do valor
presente lı́quido (VPL) e da taxa interna de retorno (IRR), assim:

≪ → i
≪ i 100 / pip STO MFC →ROW DROP
p p
1 COL− DROP W STO
p p p p
1 COL− V 0 STO DUP V STO
p p
SIZE OBJ→ DROP n STO
p
P
V 0 + ( I = 1, n, V (I)/(1 + i) ∧ W (I)) p EVAL
p p VPL p p →TAG

−3 CF −105 SF −103 CF
pV 0 +
P
( I = 1, n, V (I) ∗ X ∧ W (I)) p EVAL
p
X p ZEROS INV 1 − 100 ∗
pp pp
2 FIX IRR →TAG

Básicamente acrescentamos no programa anterior (VPLi) as quatro últimas


linhas. Neste programa, tal qual como no anterior, devemos antes armazenar
o fluxo de caixa na variável MFC e, após, é só entrar com a taxa i (desconto).
Rodei os dados do Exemplo-B neste programa e encontrei:

a) VPL = −12.077, 39; IRR = { −205.77 5.77 }


b) VPL = 5.532, 57; IRR = { 6.47 − 181.78 }
c) VPL = −2.337, 08; IRR = { −206.07 6.07 }
d) VPL = −11.342, 41; IRR = { 5.47 − 168.79 }

A taxa de retorno fixada foi de 6, 2% a.m., para análise das alternativas


pela TIR veja comentário à p. 154.

5.5.2 Sistemas de amortização (PRICE)


Nos livros de matemática financeira constam vários sistemas de amor-
tização (pagamento) de dı́vidas; vamos, a tı́tulo de ilustração, programar
apenas um deles:
Sistema PRICE
A “Tabela Price” , como é conhecido o sistema francês de amortização,
foi apresentada em 1771 por Richard Price∗ , este sistema se caracteriza pelo

Richard Price (1803-1812), matemático, filósofo e teólogo inglês.

166
fato de que o devedor salda o empréstimo em prestações iguais (posteci-
padas, final do perı́odo), incluindo, em cada uma delas, uma amortização
parcial do empréstimo e os juros sobre o saldo devedor.
Para a construção da Tabela vamos necessitar da fórmula
i(1 + i)n−1
PMT = PV · (1 + i)m
(1 + i)n − 1
Quando m = 1 temos as séries postecipadas.
Suponhamos um empréstimo P V , feito à taxa i para ser pago em n
prestações, pelo sistema PRICE. As prestações (P M T ) são calculadas na
fórmula acima com m = 1. Vamos utilizar o seguinte quadro demonstrativo:

N PAGAMENTO JUROS AMORTIZAÇÃO SALDO DEVEDOR

0 − − − SD0 = P V
1 PMT J1 A1 SD1
2 PMT J2 A2 SD2
.. .. .. .. ..
. . . . .
n PMT Jn An SDn = 0

As colunas tem os seguintes significados:


PMT: Pagamento de cada prestação;
Juros: O valor dos juros cobrados no perı́odo;
Amortização: O quanto da dı́vida foi paga após ter sido efetuado o
pagamento dos juros do perı́odo;
Saldo Devedor: O quanto da dı́vida está pendente para ser paga.
Para preencher a tabela inicialmente calculamos o P M T , dado por
i(1 + i)n
PMT = PV ·
(1 + i)n − 1
preenchemos a tabela por linha do seguinte modo:

J1 = SD0 i A1 = P M T − J1 SD1 = SD0 − A1


J2 = SD1 i A2 = P M T − J2 SD2 = SD1 − A1
............ .................. ..................
Jn = SDn−1 i An = P M T − Jn SDn = SDn−1 − An

− Observe que, em cada linha, a prestação (P M T ) é igual à amortização


mais os juros.

167
Exemplo: Um empréstimo de $ 100.000, 00 deve ser pago após quatro meses
com juros de 10% a.m. no sistema PRICE, determinar o pagamento mensal
e fazer um demonstrativo do estado da dı́vida nesses quatro meses.
Solução: Inicialmente, temos

i(1 + i)n 0, 1 · (1 + 0, 1)4


PMT = PV · n
= 100.000 · = 31.547, 08
(1 + i) − 1 (1 + 0, 1)4 − 1

Então,

J1 = V P i = 100.000 · 0, 1 = 10.000
A1 = P M T − J1 = 31.547, 08 − 10.000 = 21.547, 08
SD1 = SD0 − A1 = 100.000 − 21.547, 08 = 78.452, 92
······················································
J2 = SD1 i = 78.452, 92 · 0, 1 = 7.845, 29
A2 = P M T − J2 = 31.547, 08 − 7.845, 29 = 23.701, 79
SD2 = SD1 − A2 = 78.452, 92 − 23.701, 79 = 54.571, 13
······················································
J3 = SD2 i = 54.751, 13 · 0, 1 = 5.475, 11
A3 = P M T − J3 = 31.547, 08 − 5.475, 11 = 26.071, 97
SD3 = SD2 − A3 = 54.751, 13 − 26.071, 97 = 28.679, 16
······················································
J4 = SD3 i = 28.679, 16 · 0, 1 = 2.867, 92
A4 = P M T − J4 = 31.547, 08 − 2.867, 92 = 28.679, 16
SD4 = SD3 − A4 = 28.679, 16 − 28.679, 16 = 0
······················································

Demonstrativo:

N PAGAMENTO JUROS AMORTIZAÇÃO SALDO DEVEDOR

0 − − − 10.000, 00
1 31.547, 08 10.000, 00 21.547, 08 78.452, 92
2 31.547, 08 7.845, 29 23.701, 79 54.751, 13
3 31.547, 08 5.475, 11 26.071, 97 28.679, 16
4 31.547, 08 2.867, 92 28.679, 16 0, 00

168
O programa a seguir monta a Tabela PRICE:

≪ → PV i n
p p
≪ −105 SF 2 FIX i 100 / i STO
p p pP M T p
P V ∗ i ∗ (1 + i) ∧ n/((1 + i) ∧ n − 1) EVAL STO
p p
n 1 + 5 2 →LIST 0 CON M P STO
p
PV i ∗ M P (2, 3) p STO PV p
M P (1, 5) p STO
1 n FOR I
I p M P (I + 1, 1) p STO P M T p M P (I + 1, 2) p STO
NEXT
2 n 1 + FOR I
p M P (I − 1, 5) ∗ i p EVAL p M P (I, 3) p STO
p p p
P M T − M P (I, 3) EVAL M P (I, 4) p STO
p
M P (I − 1, 5) − M P (I, 4) p EVAL p
M P (I, 5) p STO
NEXT MP

Nota: Armazene este programa na variável PRICE − para futuras re-


ferências.
Entrando com P V = 100000, i = 10 e n = 4, o programa sai com a
matriz (Tabela-Price):

 
0.00 0.00 0.00 0.00 100, 000.00

 1.00 31, 547.08 10, 000.00 21, 547.08 78, 452.92 


 2.00 31, 547.08 7, 845.29 23, 701.79 54, 751.13 

 3.00 31, 547.08 5, 475.11 26, 071.97 28, 679.16 
4.00 31, 547.08 2, 867.92 28, 679.16 0.00

Aonde:

 
0.00 0.00 0.00 0.00 100, 000.00

 1.00 31, 547.08 10, 000.00 21, 547.08 78, 452.92 


 2.00 31, 547.08 7, 845.29 23, 701.79 54, 751.13 


 3.00 31, 547.08 5, 475.11 26, 071.97 28, 679.16 

 4.00
|{z} 31, 547.08 2, 867.92 28, 679.16 0.00
|{z}

| {z } | {z } | {z }
N Pagamento Juros Amortização Saldo Devedor

Os três tracinhos (−) da Tabela foram substituidos por 0.00.



Para visualizar toda a matriz pressione simultaneamene: .

169
Vamos explicar em detalhes o funcionamento do programa para que ele
possa, se necessário, ser adaptado para outros sistemas de amortização.
Por uma questão didática vamos supor uma matriz de ordem (4 + 1) × 5,
como é a do exemplo visto − embora o número de linhas possa ser maior,
claro.
Pois bem, na terceira linha do programa calculamos o valor de cada
prestação e armazenamos este valor na variável P M T . Na linha seguinte
criamos uma matriz com elementos CONstantes e iguais a 0, armazenamos
na variável M P (Matriz Price), até aqui temos: (Execute-o no DBUG)

 
0.00 0.00 0.00 0.00 0.00

 0.00 0.00 0.00 0.00 0.00 


 0.00 0.00 0.00 0.00 0.00  = MP

 0.00 0.00 0.00 0.00 0.00 
0.00 0.00 0.00 0.00 0.00
Observe que genericamente, temos:
 
M P (1, 1) M P (1, 2) M P (1, 3) M P (1, 4) M P (1, 5)
 M P (2, 1) M P (2, 2) M P (2, 3) M P (2, 4) M P (2, 5) 
 
 M P (3, 1) M P (3, 2) M P (3, 3) M P (3, 4) M P (3, 5) 
 
MP =  
 M P (4, 1) M P (4, 2) M P (4, 3) M P (4, 4) M P (4, 5) 
 
 M P (5, 1) M P (5, 2) M P (5, 3) M P (5, 4) M P (5, 5) 
| {z } | {z } | {z } | {z } | {z }
N Pagamento Juros Amortização Saldo devedor

Após o primeiro FOR-NEXT temos a seguinte área da matriz já preenchida:

 
M P (1, 1) M P (1, 2) M P (1, 3) M P (1, 4) M P (1, 5)

 M P (2, 1) M P (2, 2) M P (2, 3) M P (2, 4) M P (2, 5) 

 M P (3, 1) M P (3, 2) M P (3, 3) M P (3, 4) M P (3, 5) 
 
MP =  
 M P (4, 1) M P (4, 2) M P (4, 3) M P (4, 4) M P (4, 5) 
 
 M P (5, 1) M P (5, 2) M P (5, 3) M P (5, 4) M P (5, 5) 
| {z } | {z } | {z } | {z } | {z }
N Pagamento Juros Amortização Saldo devedor

O segundo FOR-NEXT calcula os elementos restantes tendo em conta


que:

M P (I − 1, 5) ∗ i = M P (I, 3) ⇐⇒ SDn−1 · i = Jn
P M T − M P (I, 3) = M P (I, 4) ⇐⇒ P M T − Jn = An
M P (I − 1, 5) − M P (I, 4) = M P (I, 5) ⇐⇒ SDn−1 − An = SDn

Até aqui já foi possı́vel observar, como foi afirmado na introdução deste
capı́tulo, como o recurso de matrizes facilita tanto a inserção quanto a apre-
sentação de dados.

170
Exemplo: Um empréstimo de $ 20.000, 00 deve ser quitado após oito meses
com uma taxa de juros de 4% a.m., no sistema PRICE. Exibir a Tabela de
demonstrativos deste financiamento.
Solução: Entrando com P V = 20000, i = 4 e n = 8, o programa sai com a
matriz (Tabela-Price):
 
0.00 0.00 0.00 0.00 20, 000.00
 1.00 2, 970.56 800.00 2, 170.56 17, 829.44 
 
 2.00 2, 970.56 713.18 2, 257.38 15, 572.06 
 
 3.00 2, 970.56 622.88 2, 347.67 13, 224.39 
 
 4.00 2, 970.56 528.98 2, 441.58 10, 782.81 
 
 5.00 2, 970.56 431.31 2, 539.24 8, 243.57 
 
 
 6.00 2, 970.56 329.74 2, 640.81 5, 602.75 
 
 7.00 2, 970.56 224.11 2, 746.45 2, 856.30 
 
8.00
 |{z} 2, 970.56
| {z }
114.25
| {z } 2, 856.30
| {z } | {z − 7}
3.30E 
N Pagamento Juros Amortização Saldo devedor

Observe que nosso programa PRICE pode ser visto como uma “trans-
formação” (sinônimo de função) com domı́nio e contradomı́nio dados assim:

PRICE : ] 0, +∞ [ × ] 0, +∞ [ × N −→ M(n+1)×5
(P V, i, n) [···]

(Evidentemente que existem limitações de memória) Ou seja, o programa


associa a cada terna de números (P V, i, n) uma matriz do conjunto M(n+1)×5
das matrizes com (n + 1) linhas e 5 colunas.
Diferentemente de todas as outras calculadoras financeiras, assim creio,
a HP 12G gera a Tabela-Price com o toque de apenas “duas teclas” :
p
PRICE(P V, i, n) p EVAL N

∗ ∗ ∗
[. . .] Sim, de fato ele [Leibniz] percebeu no bit 0 e no bit 1 o poder
combinatório para criar o universo inteiro, que é exatamente o que acon-
tece nos modernos computadores digitais eletrônicos e no restante de
nossa tecnologia de informação digital: CDS, DVDS, câmeras digitais,
PCS. . . Tudo isso é 0’s e 1’s, e esta é a nossa imagem do mundo! Você
combina apenas 0’s e 1’s e você consegue tudo. [. . .]
A despeito da crı́tica de Laplace, a visão de Leibniz, pela qual o mundo
é criado a partir dos 0’s e 1’s, recusa-se a sair de cena. De fato, ela
começou a inspirar alguns fı́sicos contemporâneos, que provavelmente
nunca ouviram falar de Leibniz. (Gregory Chaitin/Metamat!/p.’s 99-101)

171
Conclusão: Cremos que os programas implementados até aqui são mais
do que suficientes para ilustrar como podemos transferir − com vantagens
mil − a HP 12C para dentro da HP 12G . Ademais, um outro aspecto no
qual a HP 12G leva vantagens frente a HP 12C (e às outras calculadoras
financeiras) diz respeito a parte de Estatı́stica∗ , no cap. 6 desenvolvemos
vários programas desta disciplina que podem ser incorporados na HP 12G .
Por exemplo, da seguinte forma:

HP 50g

HOME
HP 12G
MAT.FIN.
ESTAT.

ou seja, por enquanto nossa calculadora comporta uma parte (subdiretório)


de matemática financeira e uma outra de estatı́stica; e esta árvore poderá
se desenvolver de acordo com as necessidades individuais − com galhos
ramificando-se em todas as direções. Programas para serem incorporados à
HP 12G podem ser trocados via internet e assim teremos, ao final, “a maior,
a mais versátil e a mais completa calculadora financeira do mundo! ”.
(Até prova, em contrário!)

De fato, como já mencionei na introdução deste trabalho, consultei −


via internet − os manuais das principais calculadoras financeiras, tais como:
BA II PLUSTM (Texas), HP-19B (HP), HF 100F (Dismac), EL-735 (Sharp),
etc., em determinada etapa de desenvolvimento do presente trabalho me dei
conta de algo deveras interessante: As indústrias das respectivas calculado-
ras mencionadas mobilizaram equipes e mais equipes de desenvolvimento
(projetos) das mesmas, investiram pesado em várias frentes − por suposto
−, inclusive em hardware. Pois bem, numa primeira avaliação creio que eu,
sózinho, seja capaz de criar uma calculadora financeira superior a muitas
das que se encontram no mercado e com investimento quase nulo − como
dei uma ligeira mostra aqui.
Não deixa de ser irônico!


Isto decorre das diferenças já mencionadas: programável, tela plana; incorpora listas,
vetores e matrizes, etc.

172
Capı́tulo 6
APLICAÇÕES À ESTATÍSTICA
A fı́sica precisa limitar-se à descrição das relações entre as per-
cepções. A coisa em si não lhe é acessı́vel, apenas as relações entre as
coisas. (Jürgen Neffe)

Introdução:
Este não é um capı́tulo de Estatı́stica mas de aplicações à Estatı́stica.
Aqui desenvolvemos programas concernentes a vários tópicos da Estatı́stica
− sugerimos ao leitor ter em mãos, concomitantemente, um livro do assunto.
Em nossas referências consta um livro de Estatı́stica donde programamos a
maioria dos exemplos.
Definição 8 (Dados Brutos). Dados brutos é uma sequência de valores
numéricos não organizados, obtidos diretamente da observação de um fenô-
meno coletivo.
Quando os dados coletados são organizados na forma crescente ou de-
crescente, os Dados Brutos passam a se chamar Rol.
Definição 9 (Rol). Rol é uma sequência ordenada dos Dados brutos.
Entrada de dados na HP 50g : Quanto aos programas que desen-
volveremos subsequentemente podemos optar por três formas de entradas
de dados:
− Listas, como por exemplo: (p. 35, p. 38)

{2 5 0 1 8 4}
− Vetores ou Matrizes, como por exemplo: (p. 38)
 
0 8
[2 5 0 1 8 4] ou  1 5 
2 5
Sugerimos ao leitor abrir uma nova pasta (p. 23) para conter os programas
de Estatı́stica.

173
6.1 Séries Estatı́sticas
O programa a seguir recebe uma lista de dados e um elemento da lista e
sai com a frequência do elemento.

≪ → L n
≪ L DUP SIZE pN p STO AXL
p p p p
V STO 0 J STO
1 N FOR I
IF pV (I) == n p
THEN J 1 + pJ p STO
END
NEXT J

A segunda linha do programa duplica a lista pega o seu comprimento e


armazena em N em seguida transforma a lista em um vetor (AXL, p. 46).
Na terceira linha o vetor é armazenado em V e iniciamos um contador
J com 0.
Na quarta linha do programa (FOR) faremos a variável I percorrer (ou
varrer) todos os elementos do vetor (lista inicial) comparando-os com o ele-
mento de entrada n; sempre que houver coincidência incrementamos o con-
tador J com uma unidade.
Ao final o programa disponibiliza na pilha a frequência do elemento n.
Armazene este programa na variável PE1 − será subrotina de um outro.
Por exemplo, entrando com: { 2 4 3 4 2 5 1 } 4, o programa nos
devolve 2. Que é a frequência com que o 4 ocorre na lista acima.

6.1.1 Distribuição de frequência-variável discreta


O programa a seguir encontra a distribuição de frequência
≪ → L
p
≪ −2 CF −3 CF L SORT L p STO
WHILE L {} =
6
p
REPEAT L DUP HEAD DUP xi p STO
p
PE1 DUP f p STO 1 SWAP
FOR I
L TAIL p Lp STO
p p
NEXT xi f 2 →ARRY
END DEPTH ROW→

≫ 174
Para o entendimento deste programa sugerimos ao leitor executá-lo no
DBUG.
Armazene este programa na variável PE2 − será subrotina de um outro.
Como um exemplo: a sequência abaixo representa a observação do número
de acidentes por dia, em uma rodovia, durante 20 dias.

0, 2, 0, 1, 1, 0, 0, 0, 3, 2, 1, 0, 1, 2, 0, 1, 3, 2, 2, 0

Entrando com a lista:

{0 2 0 1 1 0 0 0 3 2 1 0 1 2 0 1 3 2 2 0}

recebemos de volta a tabela (matriz):

  xi fi
0 8
 1 5  0 8

 2
 ⇒ 1 5
5 
2 5
3 2
3 2

Nota: Se a lista de dados for grande podemos, alternativamente, digitar


os dados em várias listas (a critério) e depois somamos ( + ) as listas até
obter apenas uma.
Para os dados acima, por exemplo, temos

{0 2 0 1 1 0 0 0 3 2}

{1 0 1 2 0 1 3 2 2 0}

Conferimos cada lista individualmente e depois somamos ( + ) para obter


apenas uma, que será a entrada do programa.
Vejamos mais um exemplo: na sequência abaixo listamos as notas de 30
alunos:

3.5, 5, 4.5, 4, 4.5, 5, 3.5, 4, 4, 5

2, 3, 4.5, 3.5, 4, 4.5, 3, 4, 3, 4

3.5, 3.5, 3.5, 4, 4, 3, 4, 4, 5, 3

podemos, alternativamente, alocar estes dados em três listas:

{ 3.5 5 4.5 4 4.5 5 3.5 4 4 5 }

{ 2 3 4.5 3.5 4 4.5 3 4 3 4 }

{ 3.5 3.5 3.5 4 4 3 4 4 5 3 }

175
Somando duas vezes ( + + ) obtemos uma lista, entrando no programa, obte-
mos:

  xi fi
2 1
 3 5  2 1
  3 5
 3.5 6 
  ⇒ 3.5 6

 4 10 
 4 10
 4.5 4 
4.5 4
5 4
5 4

Para implementar o próximo programa iremos considerar a figura

qa qa qa aq4 ··· aqI ··· aqN


1 2 3

na qual estão alocadas as classes. A sequência (a1 , a2 , a3 , . . .) dos pontos


extremos das classes está em progressão aritmética de primeiro termos a1 e
razão r = h = a2 − a1 , então:

an = a1 + (n − 1) r
= a1 + (n − 1) (a2 − a1 )

O programa a seguir recebe uma lista com dois elementos (primeira classe)
e N (número de classes) e sai com uma lista cujos elementos são listas de
dois elementos contendo os extremos das classes.

≪ → L1 N
≪ {} N 1 + + 0 CON p ap STO
p p p
L1 OBJ→ DROP a(2) STO a(1) p STO
3 N 1 + FOR n
p a(1) + (n − 1) ∗ (a(2) − a(1)) p EVAL
p a(n) p STO
NEXT
1 N FOR I
p a(I) p EVAL p a(I + 1) p EVAL
2 →LIST
NEXT N →LIST

176
Armazene este programa na variável PE3 − será subrotina de um outro.
Por exemplo, entrando com: { 2 4 } 4
O programa nos devolve: { { 2 4 } { 4 6 } { 6 8 } { 8 10 } }
Geometricamente, temos

{2 4} {6 8}

q q q q q
2 4 6 8 10

{4 6} { 8 10 }

Agora temos um problema matemático a resolver: Em uma distribuição


de frequência com N classes, dada a primeira classe e um valor (elemento) x
determinar a que classe I este elemento pertence. Geometricamente, temos:

x
qa qa ··· qa qa ··· qa qa
1 2 I I+1 N N+1




I= ?

Temos
aI ≤ x < aI+1
Ou ainda 
a1 + (I − 1) r ≤ x < a1 + (I + 1) − 1 r
Desenvolvendo as desigualdades
(
x ≥ a1 + Ir − r
x < a1 + Ir

Encontramos
x − a1 < Ir ≤ x − a1 + r
Como r = a2 − a1 > 0, dividindo por r, obtemos
x − a1 x − a1
< I ≤ +1
r r
Sendo assim, podemos escrever
   
x − a1 x − a1
I= +1 = +1
r r

Nota: ⌊ · ⌋ é a função maior inteiro (ou função piso).


Por exemplo, ⌊ 3.9 ⌋ = 3, ou ⌊ 1.99 ⌋ = 1. Na HP você acessa esta função
com o comando FLOOR (ver tabela dos reais, p. 13).
Este resultado será utilizado no próximo programa.

177
6.1.2 Distribuição de frequência-variável contı́nua
O programa seguinte recebe uma lista de dados e sai com a distribuição
de frequência − variável contı́nua.
≪ → L
p
≪ −3 CF L DUP SIZE n p STO
p
SORT DUP HEAD m p STO
REVLIST HEAD pM p STO L PE2
ROW→ →LIST p LH p STO m M R→C
1000 4 BEEP
p p (Xmin, Xmax) p p →TAG
n p pn p p →TAG
p p Entre C1 e NC p p HALT
p p p
N STO C1 p STO DROP DROP DROP
N 2 2 →LIST 0 CON p MC p STO C1 OBJ→
DROP SWAP DUP p a1 p STO − prp STO
WHILE LH { } =
6
REPEAT LH HEAD OBJ→ DROP
pf p STO p xp STO LH TAIL p LH p STO
p FLOOR((x − a1)/r) + 1p EVAL
p p p p p
nc STO MC(nc, 2) + f EVAL MC(nc, 2) p STO
END C1 N PE3 p LC p STO
1 N FOR k
p
k LC k GET OBJ→ DROP MC(k, 2) p EVAL
4 →ARRY
NEXT N ROW→


Alguns comentários: na segunda linha n guardará o número de elementos
da lista; na terceira linha m guardará o menor valor da lista; na quarta linha
M guardará o maior valor da lista. Na quarta linha a subrotina PE2 será
acionada.
Na sexta linha o programa emitirá um beep e em seguida exibirá − em
um par ordenado − o menor e o maior valor da lista, bem como o número
n de elementos da mesma.
Em seguida pede que se entre com a primeira classe (que será armazenada
em C1) e o número de classes (que será armazenado em N ). A execução do
programa será suspensa (HALT) até que estes valores sejam fornecidos.

178
Vejamos um exemplo: na sequência abaixo listamos as notas de 30
alunos:

3, 4, 2.5, 4, 4.5, 6, 5, 5.5, 6.5, 7

7.5, 2, 3.5, 5, 5.5, 8, 8.5, 7.5, 9, 9.5

5, 5.5, 4.5, 4, 7.5, 6.5, 5, 6, 6.5, 6

Entrando com estes dados em uma lista:

{ 3 4 2.5 4 4.5 6 5 5.5 6.5 7 7.5 2 3.5 5 5.5


8 8.5 7.5 9 9.5 5 5.5 4.5 4 7.5 6.5 5 6 6.5 6 }

Após o beep a calculadora exibirá:

(Xmin, Xmax) : (2., 9.5)


n : 30.
“Entre C1 e NC”

O que significa que o menor valor encontrado na lista é 2 e o maior valor é


9.5; o número de elementos na lista é 30.
O usuário deverá fornecer a primeira classe e o número de classes, por
exemplo, entre com: { 2 4 } 4
Nota: a calculadora poderá até ser desligada enquanto tomamos a de-
cisão quanto às classes.
Após entrar com os dados acima deveremos dar Continue:

CONT
ON

O resultado será:

  Classe Notas fi
1 2 4 4
 2 4 6 12  1 2 4 4

 3
 ⇒ 2 4 6 12
6 8 10 
3 6 8 10
4 8 10 4
4 8 10 4

Para o entendimento deste programa sugerimos ao leitor executá-lo no


DBUG.

179
Vejamos mais um exemplo: Os dados abaixo referem-se a uma coleta de
dados relativos às estaturas (cm) de quarenta alunos:

166, 160, 161, 150, 162, 160, 165, 167, 164, 160

162, 161, 168, 163, 156, 173, 160, 155, 164, 168

155, 152, 163, 160, 155, 155, 169, 151, 170, 164

154, 161, 156, 172, 153, 157, 156, 158, 158, 161

Entrando com estes dados em uma lista, após o beep teremos:

(Xmin, Xmax) : (150, 173)


n : 40.
“Entre C1 e NC”

O que significa que o menor valor encontrado na lista é 150 e o maior valor
é 173; o número de elementos na lista é 40.

Nota: Para ver Xmax digite: ROT ENTER e, após, ENTER .
O usuário deverá fornecer a primeira classe e o número de classes, diga-
mos, entre com: { 150 154 } 6
Após entrar com os dados acima deveremos dar Continue:

CONT
ON

O resultado será:

  Classe Estaturas (cm) fi


1 150 154 4
 2 154 158 9  1 150 154 4
  2 154 158 9
 3 158 162 11 
  ⇒ 3 158 162 11

 4 162 166 8  4 162 166 8
 5 166 170 5 
5 166 170 5
6 170 174 3
6 170 174 3

180
6.1.3 Frequência relativa de um elemento da série − fr
É a divisão da frequência simples deste elemento pelo número total de
elementos da série.
f f
f ri = i ou fri = i × 100 %
n n
O programa seguinte recebe duas listas (xi e fi ) e sai com uma matriz
contendo na terceira coluna a frequência relativa dos elementos.

≪ → xi fi
P
≪ −3 SF fi DUP LIST / 100 ∗
AXL fi AXL
SWAP xi AXL
ROT ROT 3 COL→

Por exemplo, para a seguinte tabela de variável discreta

xi fi
2 3
3 7
4 8
6 6
7 1

Entramos no programa com as duas listas:


{2 3 4 6 7}
{3 7 8 6 1}
O programa nos devolve a seguinte matriz:

xi fi f ri %
 
2 3 12 2 3 12
 3 7 28  3 7 28
 
 4 8 32


 ⇒ 4 8 32
 6 6 24  6 6 24
7 1 4 7 1 4

181
6.1.4 Frequência acumulada de um elemento da série − Fi
É a soma da frequência simples deste elemento com as frequências simples
dos elementos que o antecedem.

Fi = f1 + f2 + · · · + fi

O programa seguinte − uma adaptação do anterior − recebe duas listas


(xi e fi ) e sai com uma matriz contendo na quarta coluna a frequência
acumulada dos elementos.

≪ → xi fi
P
≪ −3 SF fi DUP LIST / 100 ∗
AXL fi AXL SWAP xi AXL
ROT ROT 3 COL→ pA p STO
1 xi SIZE FOR I
p
P
( j = 1, I, A(j, 2)) p EVAL
NEXT DEPTH →ARRY
A SWAP 4 COL+

Por exemplo, para a seguinte tabela de variável discreta

xi fi
2 3
3 7 {2 3 4 6 7 }
4 8
6 6 {3 7 8 6 1 }
7 1

Entramos no programa com as duas listas à direita.


O programa nos devolve a seguinte matriz:

xi fi f ri % Fi
 
2 3 12 3 2 3 12 3
 3 7 28 10  3 7 28 10
 
 4 8 32
 18 
 ⇒ 4 8 32 18
 6 6 24 24  6 6 24 24
7 1 4 25 7 1 4 25

182
6.1.5 Frequência acumulada relativa de um elemento da série
− FRi
É a divisão da frequência acumulada deste elemento, pelo número total de
elementos da série:
Fi Fi
FRi = ou FRi = × 100 %
n n
O programa seguinte − uma adaptação do anterior − recebe duas listas
(xi e fi ) e sai com uma matriz contendo na quinta coluna a frequência
acumulada relativa dos elementos.

≪ → xi fi
P
≪ −3 SF fi DUP LIST / 100 ∗
AXL fi AXL SWAP xi AXL
ROT ROT 3 COL→ pA p STO
1 xi SIZE FOR I
p
P
( j = 1, I, A(j, 2)) p EVAL
NEXT DEPTH →ARRY
A SWAP 4 COL+
DUP 4 COL− SWAP DROP
P
fi LIST / 100 ∗ 5 COL+

Por exemplo, para a seguinte tabela de variável discreta

xi fi
2 3
3 7
4 8
6 6
7 1

Entramos no programa com as duas listas:

{2 3 4 6 7}
{3 7 8 6 1}

O programa nos devolve a seguinte matriz:

183
xi fi f ri % Fi FRi %
 
2 3 12 3 12 2 3 12 3 12
 3 7 28 10 40  3 7 28 10 40
 
 4 8 32
 18 72 
 ⇒ 4 8 32 18 72
 6 6 24 24 96  6 6 24 24 96
7 1 4 25 100 7 1 4 25 100

6.1.6 Frequência relativa de um elemento da série − fr


É a divisão da frequência simples desta classe pelo número total de ele-
mentos da série.
fi fi
f ri = ou f ri = × 100 %
n n

6.1.7 Frequência acumulada de uma classe − Fi


É a soma da frequência simples desta classe com as frequências simples
das classes anteriores: Fi = f1 + f2 + · · · + fi .

6.1.8 Frequência acumulada relativa de uma classe − fRi


É a divisão da frequência acumulada desta classe pelo número total de
elementos da série:
Fi Fi
FRi = ou FRi = × 100 %
n n
O programa da página seguinte recebe uma matriz, oriunda de uma dis-
tribuição de frequência de uma variável contı́nua, e sai com uma matriz
contendo todas as frequências listadas acima − veremos um exemplo.

Desafio - I (Dirigido a todos os matemáticos)

Construir uma transformação:


λ : [ 0, 1 [ −→ [ 0, 1 [ × [ 0, 1 [

Satisfazendo as duas seguintes condições:


1a ) A transformação deverá ser sobrejetiva;
2a ) Deverá ser contı́nua.
(Gentil, o taumaturgo)

184
≪ → A
≪ −3 SF A 4 COL− SWAP
DROP DUP AXL
P p
LIST DUP n p STO /

100 ∗ A SWAP 5 COL+ DUP


pA p STO SIZE OBJ→ DROP
p p
DROP NL STO
1 NL FOR I
p
P
( j = 1, I, A(j, 4)) p EVAL
NEXT NL →ARRY
A SWAP 6 COL+ DUP
6 COL− SWAP DROP n
/ 100 ∗ 7 COL+

Vejamos um exemplo. Para a distribuição a seguir:

Classe Notas fi  
1 2 4 6
1 2 4 6  2 4 6 18 
2 4 6 18 ⇒ 
 3

6 8 10 
3 6 8 10
4 8 10 6
4 8 10 6














Entrada

Entrando com a matriz à direita, recebemos de volta a seguinte matriz:

 
1 2 4 6 15 6 15
 2 4 6 18 45 24 60 
 
 3 6 8 10 25 34 85 
4 8 10 6 15 40 100

Classe Notas fi f ri % Fi FR %
i

1 2 4 6 15 6 15
2 4 6 18 45 24 60
3 6 8 10 25 34 85
4 8 10 6 15 40 100

185
6.2 Medidas de Tendência Central
As principais medidas de tendência central são: média, mediana e moda.
O que vem a seguir constitui-se em prerrequisito para o cálculo das me-
didas acima referidas.
P
6.2.1 Somatório − notação sigma ( )
A soma de n parcelas, tipo

x1 + x2 + · · · + xn−1 + xn

Será escrita numa notação mais compacta (simplificada), como:


n
X
x1 + x2 + · · · + xn−1 + xn = xi
i=1

Quando a variação do somtório for de i = 1 a i = n, podemos simplificar


ainda mais a notação, assim:
n
X X
x1 + x2 + · · · + xn−1 + xn = xi = xi
i=1

A tı́tulo de ilustração, vejamos como calcular alguns somatórios com a


HP 50g .
Exemplo: Calcule para a tabela abaixo, o valor numérico das somas indi-
cadas:

i xi fi
1 3 2
2 4 5
3 6 3
4 8 2

P P P
a) i b) xi c) fi
P P P
d) xi f i e) i xi f) x2i fi
P P x i fi
 P
g) (xi − 10)2 fi h) i i) |xi − i| fi

Solução:
a) Aqui deveremos somar todos os ı́ndices. Entre com os ı́ndices na pilha
em uma lista, assim:
{1 2 3 4}

186
Agora digite a seguinte sequência de teclas:
MTH LIST P
LIST

para obter: 10. O que significa que

X 4
X
i= i = 1 + 2 + 3 + 4 = 10
i=1

b) Aqui deveremos somar todos os termos da segunda coluna da tabela.


Entre com os termos na pilha em uma lista, assim:

{3 4 6 8}

Agora digite (se necessário) a mesma sequência de teclas do ı́tem anterior:


MTH LIST P
LIST

para obter: 21. O que significa que

X 4
X
xi = xi = 3 + 4 + 6 + 8 = 21
i=1

c) Aqui deveremos somar todos os termos da terceira coluna da tabela. Entre


com os termos na pilha em uma lista, assim:

{2 5 3 2}

Agora digite (se necessário) a mesma sequência de teclas do ı́tem anterior:


MTH LIST P
LIST

para obter: 12. O que significa que

X 4
X
fi = fi = 2 + 5 + 3 + 2 = 12
i=1

d) Aqui o somatório significa


X
xi f i = x1 f 1 + x2 f 2 + x3 f 3 + x4 f 4

Entre com a segunda e terceira colunas em duas listas, assim:

{3 4 6 8}
{2 5 3 2}

187
Multiplique estas listas ( × ) como se fosse multiplicar dois números∗ e de-
pois some a lista resultante − como nos ı́tens anteriores, para obter: 60.
e) Procedimento análogo ao anterior − para obter: 61.
f) Aqui o somatório significa
X
x2i fi = x21 f1 + x22 f2 + x23 f3 + x24 f4

Inicialmente entre com a segunda coluna:

{3 4 6 8}

Eleve esta lista ao quadrado − como se fosse elevar um número. Em seguida,


entre com a terceira coluna em uma lista, obtendo nos nı́veis 1 e 2 da pilha:

{ 9 16 36 64 }
{2 5 3 2}

Multiplique e some a lista resultante para obter: 334.


Podemos, alternativamente, obter o mesmo resultado pelo programa a
seguir:

p
P
≪ → x f ( I = 1, 4, x(I) ∧ 2 ∗ f(I) p ≫

Armazene este programa em uma variável e entre com a segunda e ter-


ceira colunas em dois vetores, assim:

[3 4 6 8]
[2 5 3 2]

Nota: No programa acima a letra i que consta no somatório deve ser digitada
em maiúsculo (I), pois o i minúsculo a calculadora reserva para a unidade
imaginária dos complexos.
g) Aqui o somatório significa
X
(xi − 10)2 fi = (x1 − 10)2 f1 + (x2 − 10)2 f2 + (x3 − 10)2 f3 + (x4 − 10)2 f4

O programa seguinte resolve nosso problema:

p
P
≪ → x f ( I = 1, 4, (x(I) − 10) ∧ 2 ∗ f(I) p ≫

A lista resultante contém o produto termo a termo das listas.

188
Armazene este programa em uma variável (ou apenas altere o programa
anterior) e entre com a segunda e terceira colunas em dois vetores, assim:

[3 4 6 8]
[2 5 3 2]

Para obter: 334.


h) Aqui o somatório significa
Xx f  x f x f x f x f
i i
= 1 1 + 2 2 + 3 3 + 4 4
i 1 2 3 4
O programa seguinte resolve nosso desafio:

p
P
≪ → x f ( I = 1, 4, x(I) ∗ f(I)/I p ≫

Armazene este programa em uma variável (ou apenas altere o programa


anterior) e entre com a segunda e terceira colunas em dois vetores, assim:

[3 4 6 8]
[2 5 3 2]

Para obter: 26.


i) Aqui o somatório significa
X
|xi − i| fi = |x1 − 1| f1 + |x2 − 2| f2 + |x3 − 3| f3 + |x4 − 4| f4

O programa seguinte resolve nosso desafio:

p
P
≪ → x f ( I = 1, 4, ABS(x(I) − I) ∗ f(I)) p ≫

Armazene este programa em uma variável (ou apenas altere o programa


anterior) e entre com a segunda e terceira colunas em dois vetores, assim:

[3 4 6 8]
[2 5 3 2]

Para obter: 31.

189
6.3 Médias
6.3.1 Média aritmética simples
Para calcular a média aritmética simples de uma sequência numérica com
“n entradas”:
x1 , x2 , . . . , xn
que denotaremos por P
xi
x̄ =
n
entraremos com os dados em uma lista

{ x1 x2 . . . xn }

no seguinte programa

≪ → L
P
≪ L LIST L SIZE /


6.3.2 Média aritmética ponderada


Definimos como média aritmética ponderada de uma sequência

x1 , x2 , . . . , xn

afetada por pesos


p1 , p2 , . . . , pn
respectivamente, o seguinte resultado
P
x p
X̄ = P i i (6.1)
pi

Ou ainda − abrindo os somatórios:


x1 p 1 + x2 p 2 + · · · + xn p n
X̄ =
p1 + p2 + · · · + pn

No programa entraremos com duas listas, assim:

{ x1 x2 . . . xn }
{ p1 p2 . . . pn }

Eis o programa que implementa a equação (6.1):

190
≪ → L1 L2
P P
≪ L1 L2 ∗ LIST L2 LIST /


Exemplo: Entrando no programa com os dados

{2 5 6 8}
{1 4 3 2}

onde, a primeira lista refere-se aos xi e a segunda aos pi , o programa nos


devolve: 5.6 − como sendo a média aritmética ponderada.

6.3.3 Mediana
Veja a definição de mediana em um livro de Estatı́stica.
O programa seguinte recebe uma lista − com os dados brutos − e nos
devolve a mediana.

≪ → L
≪ L SORT DUP p Lp STO SIZE pN p STO
p p
IF F P (N/2) == 0
THEN L DUP N 2 / GET SWAP
N 2 / 1 + GET + 2 /

p p Mediana p p →TAG
ELSE L N 1 + 2 / GET
p p Mediana p p →TAG
END

Exemplo: Entrando com a lista { 5 13 10 2 18 15 6 16 9 };


recebemos de volta: Mediana: 10.
Entrando com a lista { 2 6 7 21 12 13 18 10 }; recebemos de volta:
Mediana: 11.

191
Mediana-variável discreta
O programa a seguir calcula a mediana a partir da tabela de distribuição
de frequência.

≪ → xi fi
≪ −3 SF xi AXL fi AXL
p p p
2 COL→ A STO 1 xi SIZE DUP N p STO
FOR I
p
P
( j = 1, I, A(j, 2)) p EVAL
NEXT DEPTH →ARRY
A SWAP 3 COL+ pA p STO
p
P
( j = 1, N, A(j, 2))/2 p EVAL p m p STO
A 3 COL− SWAP DROP
p p
AXL m POS k STO
p p
IF k == 0
THEN 1 p Ip STO
p
WHILE A(I,3) ≤ m p
p p
REPEAT I 1 + I STO
END p A(I,1) p EVAL p p Mediana p p →TAG
ELSE
p
(A(k,1)+A(k+1,1))/2 p EVAL p p Mediana p p →TAG
END

Para um melhor entendimento do programa execute-o no DBUG. Por


exemplo, para a distribuição a seguir

xi fi
2 1
5 4
8 10
10 6
12 2

192
Entramos no programa com as duas listas:

{ 2 5 8 10 12 }
{ 1 4 10 6 2 }

O programa nos devolve: Mediana: 8.


Vejamos ainda um outro exemplo. Para a distribuição a seguir

xi fi
12 1
14 2
15 1
16 2
17 1
20 1

Entramos no programa com as duas listas:

{ 12 14 15 16 17 20 }
{1 2 1 2 1 1}

O programa nos devolve: Mediana: 15.5.

Desafio - II (Dirigido a todos os matemáticos)

Construir uma transformação:


γ : [ 0, 1 [ × [ 0, 1 [ −→ [ 0, 1 [

Satisfazendo as duas seguintes condições:


1a ) A transformação deverá ser injetiva e não sobrejetiva;
2a ) Deverá ser contı́nua.
(Gentil, o taumaturgo)

Dogmas são prisões, um espı́rito que


queira realizar belas obras, que também
queira os meios necessários, tem de ser
cético. Estar livre de toda forma de
crença pertence à força, ao poder de ver
sem algemas. (Nietzsche)

193
Mediana-variável contı́nua
O programa a seguir calcula a mediana a partir da tabela de distribuição
de frequência.

≪ → A
p
≪ −3 SF A SIZE OBJ→ DROP DROP N p STO
1 N FOR I
p
P
( j = 1, I, A(j, 4)) p EVAL
NEXT N →ARRY
A SWAP 5 COL+ pA p STO
p
P
( j = 1, N, A(j, 4))/2 p EVAL p m p STO
A 5 COL− SWAP DROP
p p
AXL m POS k STO
p p
IF k == 0
p p
THEN 1 I STO
WHILE p A(I,5) ≤ mp
p p
REPEAT I 1 + I STO
END
p A(I,2)+(m-A(I-1,5))*(A(I,3)-A(I,2))/A(I,4) p

EVAL p p Mediana p p →TAG


ELSE
p
A(k,3) p EVAL p p Mediana p p →TAG
END

Para um melhor entendimento do programa execute-o no DBUG. Ve-


jamos um exemplo, para a distribuição a seguir:

Classe Notas fi
 
1 3 6 2 1 3 6 2
2 6 9 5

 2 6 9 5 

3 9 12 8 ⇒ 
 3 9 12 8 

4 12 15 3  4 12 15 3 
5 15 18 1 5 15 18 1














Entrada

194
entrando no programa com a matriz à direita, recebemos de volta (com 4
decimais fixadas): Mediana: 9.9375.
Vejamos mais um exemplo, para a distribuição a seguir:

Classe Notas fi 
1 0 10 1

1 0 10 1

 2 10 20 3 

2 10 20 3
 3 20 30 9 
⇒  
3 20 30 9

 4 30 40 7 

4 30 40 7
 5 40 50 4 
5 40 50 4 6 50 60 2
















6 50 60 2
Entrada

entrando no programa com a matriz à direita, resulta: Mediana: 30.

6.3.4 Moda
Definição 10. É o valor de maior frequência em um conjunto de dados.

Cálculo da moda
No caso de dados brutos ou rol sugerimos − se necessário − a utilização do
programa à p. 174 para a obtenção da tabela de distribuição de frequência.
Por exemplo, para a tabela da esquerda

xi fi xi fi xi fi
0 2 1 2 3 1
2 5 2 5 5 1
3 10 3 4 8 1
4 3 4 5 10 1
5 4 5 3 12 1

a maior frequência observada na segunda coluna vale 10 que corresponde ao


termo 3 da série. Portanto, a moda vale mo = 3.
Para a tabela do centro a maior frequência observada na segunda coluna
é 5 que corresponde a dois termos da série, 2 e 4. Dizemos que esta é uma
série com duas modas, ou bimodal: mo = 2 e mo = 4.
Podemos encontrar séries nas quais não exista nenhum valor que apareça
mais vezes que outros, neste caso dizemos que a série não possui moda, ou
que é amodal. É o caso da série que comparece na tabela da direita.

195
Variável contı́nua
Para a determinação da moda a partir de uma distribuição de frequência
em variável contı́nua como a a seguir

Classe Notas fi
1 0 10 1
2 10 20 3
3 20 30 6
4 30 40 2

existem vários métodos, dentre os quais o algoritmo (fórmula) de Czuber


dado a seguir:

fmo − fant
mo = lmo + ·h (6.2)
2fmo − ( fant + fpost )

Onde:
lmo : limite inferior da classe modal;
fmo : frequência simples da classe modal;
fant : frequência simples da classe anterior à modal;
fpost : frequência simples da classe posterior à modal;
h : amplitude do intervalo de classe.
A classe modal, na apresentação da variável contı́nua, é a classe que
apresenta a maior frequência. No caso da tabela acima é a terceira classe.
Calculemos a moda para a distribuição exemplificada acima:
6−3
mo = 20 + · 10 = 24.29
2 · 6 − (3 + 2)

Se a classe modal for a primeira classe, considera-se fant = 0 e se a classe


modal for a última consideramos fpost = 0.

∗ ∗ ∗
O matemático, como o pintor ou
o poeta, é um desenhista. Se os seus de-
senhos são mais duradouros que os deles,
é porque são feitos com idéias.
(G.H. Hardy)

196
O programa a seguir calcula a moda para uma distribuição de frequência
em variável contı́nua.

≪ → A
≪ −3 CF −105 CF A 4 COL− SWAP DROP AXL
DUP SIZE p Np STO DUP p LF p STO OBJ→ DROP
1 N 1 − FOR I
MAX
NEXT LF SWAP POS p k p STO −3 SF
p p
IF k == 1
THEN
p
A(k,2)+(A(k,4)−0)/(2 ∗ A(k,4) − (0 + A(k+1,4))) ∗ (A(1,3) − A(1,2)) p
EVAL p p Moda p p →TAG
ELSE
IF p k == N p
THEN
p A(k,2)+(A(k,4)−A(k-1,4))/(2 ∗ A(k,4) − (A(k-1,4) + 0)) ∗ (A(1,3) − A(1,2)) p
EVAL p p Moda p p →TAG
ELSE
p A(k,2)+(A(k,4)−A(k−1,4))/(2∗A(k,4)−(A(k-1,4)+A(k+1,4)))∗(A(1,3)−A(1,2))p

EVAL p p Moda p p →TAG


END
END

Para a distribuição a seguir

Classe Notas fi  
1 0 10 1
1 0 10 1  2 10 20 3 
2 10 20 3 ⇒  
 3 20 30 6 
3 20 30 6
4 30 40 2
4 30 40 2














Entrada

entramos no programa com a matriz da direita. O programa nos devolve:


Moda: 24.29.

197
Faremos alguns comentários sobre o programa. Inicialmente observe −
no caso particular do exemplo dado − que

   
1 0 10 1 A11 A12 A13 A14
 2 10 20 3   A21 A22 A23 A24 
 3 20 30 6  =  A31
   
A32 A33 A34 
4 30 40 2 A41 A42 A43 A44
















Entrada

Por exemplo, a amplitude de classe: h = 10 − 0 = A13 − A12 .


A classe modal encontra-se na terceira linha da matriz: [ 20, 30 [.
A fórmula (6.2) (p. 196), fica assim:

fmo − fant
mo = lmo + ·h
2fmo − ( fant + fpost )

A34 − A24
= A32 + · (A13 − A14 )
2 A34 − (A24 + A44 )

O FOR-NEXT encontra a maior frequência. A função MAX encontra o


maior de dois números − veja tabela dos reais (p. 13).
Ao sair do laço, na sexta linha do programa:
NEXT LF SWAP POS p k p STO −3 SF
encontramos o ı́ndice (número) da classe modal e guardamos o valor na
variável k. Na elaboração do programa tive a oportunidade de perceber o
seguinte: ao pedir a posição (POS) do elemento 6 (resultado do FOR-NEXT)
na lista de frequências:
{1 3 6 2}
se o seis estiver com um ponto decimal, isto é, 6., a HP interpretará como se
este número não estivesse na lista acima e retorna 0 como posição − sendo
que deveria ser 3. Isto causará um erro na execução. A solução que eu
encontrei foi desativar os sinalizadores 3 e 105, o que foi feito na segunda
linha do programa. Na sexta linha do programa o sinalizador 3 volta a
ser ativado para que o resultado de uma eventual fração seja escrito como
decimal (e não no modo simbólico, p. ex., 23 ).
O primeiro IF pergunta se a classe modal é a primeira, se for este o caso,
faz fant = 0 na fórmula de Czuber. O segundo IF, mais interno, pergunta
se a classe modal é a última, se for este o caso, faz fpost = 0 na fórmula de
Czuber.

198
Vejamos mais dois exemplos de aplicação do programa. Para a dis-
tribuição a seguir

Classe Notas fi  
1 0 2 20
1 0 2 20  2 2 4 6 
2 2 4 6 ⇒ 
 3

4 6 3 
3 4 6 3
4 6 8 1
4 6 8 1
















Entrada

entramos no programa com a matriz da direita. O programa nos devolve:


Moda: 1.18.

Para a distribuição a seguir

Classe Notas fi 
1 0 1 12

1 0 1 12

 2 1 2 15 

2 1 2 15 ⇒ 
 3 2 3 21 

3 2 3 21
 4 3 4 32 
4 3 4 32 5 4 5 54















5 4 5 54
Entrada

entramos no programa com a matriz da direita. O programa nos devolve:


Moda: 4.29.

∗ ∗ ∗

0 0 0
.. 1 0 0
.
0 1 0 No Nada as possibilidades contraditórias
1 1 0 são simultâneas, e por isso se anulam reci-

0 0 1 procamente. O Nada é, assim, a totalidade


simultânea das possibilidades contraditórias.
1 0 1
.. (Marcelo Malheiros/filósofo)
. 0 1 1
1 1 1

199
6.4 Medidas de Dispersão
6.4.1 Desvio médio simples
O desvio médio simples − indicado por DMS − é definido como sendo
uma média aritmética dos desvios de cada elemento da série para a média
da série.
Cálculo do desvio médio simples
1o ) Caso − Dados brutos ou rol.
Consideremos a sequência de dados representada por: x1 , x2 , . . . , xn .
Neste caso aplicamos a seguinte fórmula:

P
|xi − x̄|
DMS = (6.3)
n

x1 +x2 +···+xn
onde: x̄ = n é a média aritmética simples.
O programa que implementa a fórmula anterior a princı́pio deveria ser o
seguinte. (Digite este programa)

≪ → L
p
≪ L DUP SIZE n p STO
P p x̄ p
LIST n / STO
L AXL p xp STO
p
P
( I = 1, n, ABS(x(I) − x̄)) p EVAL
n / p p DMS p p →TAG

Nota: O x barrado (x̄), que comparece na terceira linha do programa, pode


ser acessado em CHARS (caracteres) acima de EVAL N . Após a execução do
programa x̄ aparecerá no menu, podendo ser acessado a partir deste.
Quando da tentativa de utilização do programa acima tive a oportunidade
de aprender um pouco mais sobre a programação da HP 50g , aprendizado
este que eu gostaria de compartilhar com o amigo leitor.
Pois bem, entrando no programa com a lista { 2 8 5 6 } o programa nos
devolve 0 como o desvio médio simples. Acontece que o resultado correto,
calculado pela fórmula (6.3), é 1. 75.
Fiquei intrigado, executei o programa no DBUG para tentar descobrir o
erro. Percebi que o resultado do somatório na quinta linha do programa era
0, quando não deveria ser. Fiz algumas trocas de nomes de variáveis, nada
adiantou, o erro persistia.

200
Posteriormente, após algumas simulações e ainda sem entender o que
estaria acontecendo, percebi que a HP estava simplesmente ignorando o
módulo (ABS), digo, sendo

X n
X
( I = 1, n, ABS(x(I) − x̄)) = |xi − x̄|
i=1

a HP na verdade estava calculando


4
X
|xi − x̄| = x1 − x̄ + x2 − x̄ + x3 − x̄ + x4 − x̄
i=1

= x1 + x2 + x3 + x4 − 4 x̄ = 0

Por um momento me senti desapontado por não entender o que estava


acontecendo, cheguei até a imaginar uma possı́vel falha dos engenheiros que
projetaram a HP 50g .
A parte da estatı́stica que antes eu havia imaginado que seria a mais
fácil de programar (apenas fórmulas) estava agora se tornando a mais difı́cil
por conta deste pequeno “probleminha”.
A princı́pio tentei reescrever o programa evitando o somatório na quinta
linha, por exemplo trabalhando apenas com listas, ao invés de vetor (linha
quatro).
O programa resultou complicado e antiestético, foi quando lembrei-me
de que √
|x| = x2
Alterei o programa para

≪ → L
≪ L DUP SIZE p np STO
P p p
LIST n / x̄ STO
p p
L AXL x STO
p
P
( I = 1, n, (x(I) − x̄) ∧ 2) p EVAL
n / p p DMS p p →TAG

Funcionou! . . . Posteriormente, lembrei-me de que também

|x| = max{ x, −x }

201
Alterei o programa para

≪ → L
p
≪ L DUP SIZE n p STO
P p x̄ p
LIST n / STO
p p
L AXL x STO
p
P
( I = 1, n, MAX(x(I) − x̄, x̄ − x(I))) p EVAL
n / p p DMS p p →TAG

Também funcionou!
Não obstante este relativo êxito, à noite fui para a cama ainda com um
resquı́cio de frustração por não ter entendido o que estaria acontecendo com
o primeiro programa, por que ele não funcionava . . .
Ao amanhecer do dia finalmente a solução do problema me veio à mente:
Eu já havia concluido a redação do capı́tulo seguinte há algum tempo atrás,
lembrei-me de que já havia escrito alguma coisa a respeito da função módulo;
de fato, no CAS (p. 342) (sistema algébrico computacional) da calculadora
deveria ativar o modo X − Rigorous (p. 347).
Ora, mas este procedimento equivale a desativar o sinalizador 119, de
sorte que, finalmente, o programa que implementa a fórmula (6.3) (p. 200)
fica assim: (ver programa p. 200)

≪ → L
≪ −119 CF L DUP SIZE p np STO
P p p
LIST n / x̄ STO
p p
L AXL x STO
p
P
( I = 1, n, ABS(x(I) − x̄)) p EVAL
n / p p DMS p p →TAG

202
2o ) Caso − Variável discreta.
Para uma distribuição de frequência como a seguinte

xi fi
1 2
3 5
4 2
5 1

a fórmula para o desvio médio simples é dada por:

P
|xi − x̄| fi
DMS = P (6.4)
fi

onde, desta vez, x̄ é uma média aritmética ponderada, dada assim:


P
xf
x̄ = P i i
fi
Nos livros de estatı́stica, para o cálculo do DMS, são feitos vários cálculos
intermediários acrescentando-se mais colunas à tabela anterior.
Aqui basta digitarmos o programa seguinte e calcularemos “todos” os
DMS “de uma vez por todas”.

≪ → x f
≪ −119 CF x SIZE OBJ→ DROP p N p STO
p
P P
( I = 1, N, x(I) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL p x̄ p STO
p
P P
( I = 1, N, ABS(x(I) − x̄) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL
p p DMS p p →TAG

Entramos com os dados (colunas da tabela) em dois vetores. Para a


tabela exibida acima entramos com:

[1 3 4 5]
[2 5 2 1]

O programa nos devolve: DMS: 0. 80.

203
3o ) Caso − Variável contı́nua.
Para uma distribuição de frequência como a seguinte

Classe Notas fi
1 2 4 5
2 4 6 10
3 6 8 4
4 8 10 1

a fórmula para o desvio médio simples é dada por:

P
|xi − x̄| fi
DMS = P (6.5)
fi

onde, desta vez, x̄ é uma média aritmética ponderada, dada assim:


P
xf
x̄ = P i i
fi
Nestas fórmulas xi é o ponto médio da classe i.
O programa que implementa a fórmula (6.5) é o seguinte:

≪ → A
≪ −119 CF A SIZE OBJ→ DROP DROP
p p p p
N STO A 4 COL− f STO DROP
1 N FOR k
p (A(k, 2) + A(k, 3))/2 p EVAL
p p
NEXT →ARRY x STO
N
p
P P
( I = 1, N, x(I) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL p x̄ p STO
p
P P
( I = 1, N, ABS(x(I) − x̄) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL
p p DMS p p →TAG

204
Por exemplo, para a distribuição dada acima:

Classe Notas fi  
1 2 4 5
1 2 4 5  2 4 6 10 
2 4 6 10 ⇒ 
 3

6 8 4 
3 6 8 4
4 8 10 1
4 8 10 1
















Entrada

entrando com a matriz à direita o programa nos devolve: DMS: 1. 15.

6.4.2 Variância e Desvio Padrão


Se substituirmos nas fórmulas do DMS a distância | xi − x̄ | por ( xi − x̄ )2 ,
obteremos uma nova medida de dispersão conhecida como variância.
O desvio-padrão é definido como a raiz quadrada da variância.
Quando a sequência de dados representa uma População∗ a variância será
denotada por σ 2 (x) e o desvio-padrão por σ(x).
Quando a sequência de dados representa uma Amostra† a variância será
denotada por s2 (x) e o desvio-padrão por s(x).
Cálculo da variância e desvio-padrão
1o ) Caso − Dados brutos ou rol.
Consideremos a sequência de dados representada por: x2 , . . . , xn .
Se a sequência representa uma população a equação (6.2) (p. 196) é modi-
ficada como a seguir, para o cálculo da variância:

P
( xi − x̄ )2
σ 2 (x) = (6.6)
n

x1 + x2 + · · · + xn
onde: x̄ = é a média aritmética simples.
n
Para a construção do programa que implementa esta fórmula basta uma
pequena alteração no programa dado à p. 202, assim:


População: é o conjunto de todos os itens (pessoas, coisas, objetos) portadores de,
pelo menos, uma caracterı́stica comum.

Amostra: é qualquer subconjunto finito e não vazio de uma População.

205
≪ → L
≪ L DUP SIZE p np STO
P p p
LIST n / x̄ STO
p p
L AXL x STO
p
P
( I = 1, n, (x(I) − x̄) ∧ 2) p EVAL
n / pp σ(x) ∧ 2 p p →TAG

Por exemplo, para a sequência: { 4 5 8 5 }, teremos: σ 2 (x) : 2. 25.


2o ) Caso − Variável discreta.
Para uma distribuição de frequência como a seguinte

xi fi
2 3
3 5
4 8
5 4

a fórmula para o cálculo da variância é dada por:

P
2 ( xi − x̄ )2 fi
σ (x) = P (6.7)
fi

onde, como antes, x̄ é uma média aritmética ponderada, dada assim:


P
xf
x̄ = P i i
fi
Para implementar esta fórmula basta alterar o programa dado na p. 203
da seguinte forma:

≪ → x f
≪ x SIZE OBJ→ DROP p N p STO
p
P P
( I = 1, N, x(I) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL p x̄ p STO
p
P P
( I = 1, N, (x(I) − x̄) ∧ 2) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL
pp σ(x) ∧ 2 p p →TAG


206
Entramos com os dados (colunas da tabela) em dois vetores. Para a
tabela exibida acima entramos com: [ 2 3 4 5 ] [ 3 5 8 4 ].
O programa nos devolve: σ 2 (x) : 0. 9275.
3o ) Caso − Variável contı́nua.
Para uma distribuição de frequência como a seguinte

Classe Notas fi
1 0 4 1
2 4 8 3
3 8 12 5
4 12 16 1

a fórmula para a variância é dada por:

P
2 ( xi − x̄ )2 fi
σ (x) = P (6.8)
fi

onde, como antes, x̄ é uma média aritmética ponderada, dada assim:


P
xf
x̄ = P i i
fi
Nestas fórmulas xi é o ponto médio da classe i.
Para construir o programa que implementa a fórmula (6.8) basta uma
ligeira alteração no programa dado à p. 204, assim:

≪ → A
≪ A SIZE OBJ→ DROP DROP
p Np STO A 4 COL− pfp STO DROP
1 N FOR k
p
(A(k, 2) + A(k, 3))/2 p EVAL
p p
NEXT →ARRY x STO
N
p
P P
( I = 1, N, x(I) ∗ f (I))/ ( I = 1, N, f (I)) p EVAL p x̄ p STO
p
P P
( I = 1, N, (x(I) − x̄) ∧ 2 ∗ f (I))/ ( I = 1, N, f (I)) p EVAL
pp σ(x) ∧ 2 p p →TAG

207
Por exemplo, para a distribuição dada acima:

Classe Notas fi  
1 0 4 1
1 0 4 1  2 4 8 3 
2 4 8 3 ⇒ 
 3 8 12 5 

3 8 12 5
4 12 16 1
4 12 16 1
















Entrada

entrando com a matriz à direita o programa nos devolve: σ 2 (x) : 10. 24.

6.5 Ajustamento de Reta e Correlação

Há um tópico na estatı́stica que consiste no “ajustamento” de uma reta


a um conjunto de pontos dados: { (xi , yi ) : i = 1, 2, . . . , n }.
A plotagem destes pontos num sistema cartesiano resulta no diagrama
de dispersão do conjunto.

r
yn r
..
.
y2 r
y3 r
y1 r

x
0 x1 x2 x3 · · · xn−1 xn
− Diagrama de Dispersão

O objetivo é encontrar a reta Y = a + bX que melhor se ajusta aos


pontos dados. Melhor se ajusta segundo um dado critério.

6.5.1 A reta de mı́nimos quadrados

O método mais utilizado é conhecido como método dos mı́nimos quadra-


dos que consiste em minimizar a soma dos quadrados das distâncias (verti-
cais) da reta aos pontos, como na figura seguir:

208
y
Y
r
yi r r
di l
r
r
r

x
0 xi

Tendo em conta que Y = a + bX, temos:

di = yi − Y (xi ) ⇒ di = yi − (a + bxi )

Então,
X X X X
d2i = (yi − a − bxi )2 ⇒ min d2i = min (yi − a − bxi )2

Observe que temos que minimizar uma função de duas variáveis, que são
os parâmetros a e b a serem ajustados.
Ou ainda, a função a ser minimizada é
X
f (a, b) = d2i = (y1 − a − bx1 )2 + (y2 − a − bx2 )2 + · · · + (yn − a − bxn )2

Para encontrar o mı́nimo desta função, o primeiro procedimento é igualar


as derivadas parciais a zero, isto é:

∂ X 2 ∂ X 2
di = 0 e di = 0
∂a ∂b
A primeira derivada fica:

2 (y1 − a − bx1 )(−1) + 2 (y2 − a − bx2 )(−1) + · · · + 2 (yn − a − bxn )(−1) = 0

A segunda derivada fica:

2 (y1 − a − bx1 )(−x1 ) + 2 (y2 − a − bx2 )(−x2 ) + · · · + 2 (yn − a − bxn )(−xn ) = 0

Destas duas igualdades resulta o sistema:


P P
 yi = na + b xi
 P x y = a P x + b P x2
i i i i

209
P
Multiplicando a primeira equação por xi e a segunda por −n e so-
mando eliminamos o a, obtendo:
P P P
n xi y i − xi · y i
b= P 2 P 2
n xi − xi
Substituimos o valor encontrado para b na primeira equação do sistema
e determinamos a:
P P
y i − b xi
a= ⇒ a = ȳ − bx̄
n
P P
Onde: x̄ = xi /n e ȳ = yi /n.
Para simplificar a programação podemos fazer a seguinte manipulação
em b: P P
P x y
n xi y i − n 2 n i · n i
b= P
P 2 x 2
n xi − n 2 n i
Ou ainda: P
x y − n x̄ ȳ
b = P i 2i
xi − n x̄2
O programa a seguir encontra os coeficientes da reta Y = a + bX:

≪ → x y
≪ x SIZE OBJ→ DROP p N p STO
p
P
(I = 1, N, x(I))/N p EVAL p xm p STO
p
P
(I = 1, N, y(I))/N p EVAL p ym p STO
p
P
(I = 1, N, x(I) ∗ y(I)) − N ∗ xm ∗ ym p EVAL
p
P
(I = 1, N, x(I) ∧ 2) − N ∗ xm ∧ 2 p EVAL
/ p bp STO p ym − b ∗ xm p EVAL DUP p ap STO
p pa p p →TAG b p pb p p →TAG

Devemos entrar com dois vetores: [ xi ] e [ yi ].


Exemplo: Obter a equação da reta de mı́nimos quadrados para os seguintes
pontos oriundos de uma experiência:

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

Traçar a reta no diagrama de dispersão.

210
Solução: Fornecendo ao programa anterior os seguintes dados de entrada:

[1 2 3 4 5 6 7 8]
[ 0.5 0.6 0.9 0.8 1.2 1.5 1.7 2.0 ]

Obtemos: a = 0.175 e b = 0.217. Portanto, Y = 0.175 + 0.217X é a


equação da reta pedida. Graficamente, temos:

y
Y
2 r
p

r
r
r
1
p

r
r
r
r

p p p p p p p p x
0 1 2 3 4 5 6 7 8

− Reta de mı́nimos quadrados

6.5.2 Correlação linear


Anteriormente vimos como determinar uma função (afim, ou linear por
um abuso de linguagem) relacionando duas variáveis que podem estar ligadas
a dados experimentais. Agora estamos interessados em verificar exatamente
o quanto os pontos, no diagrama de dispersão, se aproximam de uma reta,
isto é feito com o conceito de correlação linear. Conquanto existam vários
tipos de correlação, aqui nos deteremos em apenas um. Para medir o grau de
correlação linear entre duas variáveis, ou seja, medir o grau de ajustamento
dos valores em torno de uma reta, usaremos o coeficiente de correlaç~ ao
linear de Pearson, dado por:
P P P
n xi y i − xi · y i
r = q P P 2  P 2 P 2 
n x2i − xi n yi − yi

onde n é o número de observações. Pode-se demonstrar que −1 ≤ r ≤ 1.


Alternativamente, podemos multiplicar o valor encontrado de r por 100,
obtendo a resposta em porcentagem.
A figura abaixo mostra algumas relações entre o coeficiente de Pearson e
o diagrama de dispersão:

211
y y
r

r
r

r
r

r
r

r
r

r
r
r=1 x r = −1 x

Correlação linear perfeita (positiva) Correlação linear perfeita (negativa)

y r y

r
r r

r
r
r r

r
r>0 r<0
r
x x

Forte correlação linear positiva Forte correlação linear negativa

y y
r
r

r r r
r
r

r r r
r

r r
r
r

r
r

r
r r>1 x r<0 x

Fraca correlação linear positiva Fraca correlação linear negativa

O programa a seguir encontra o coeficiente de Pearson:

≪ → x y
≪ x SIZE OBJ→ DROP p N p STO
pN ∗
P P P
(I = 1, N, x(I) ∗ y(I)) − (I = 1, N, x(I)) ∗ (I = 1, N, y(I)) p
P P
EVAL p N ∗ (I = 1, N, x(I) ∧ 2) p EVAL p (I = 1, N, x(I)) ∧ 2 p
P P
EVAL − p N ∗ (I = 1, N, y(I) ∧ 2) p EVAL p (I = 1, N, y(I)) ∧ 2 p

EVAL − ∗ / pp r p p →TAG

212
Devemos entrar com dois vetores: [ xi ] e [ yi ].
Para o exemplo dado na p. 210, encontramos r = 0.978. Esse valor
significativo (97.8%) do coeficiente de Pearson implica que a reta de mı́nimos
quadrados se ajusta bem ao conjunto de pontos, como pode ser observado
na figura.

∗ ∗ ∗

O programa a seguir multiplica dois hipercomplexos, conforme (3.5)(p. 82)

≪ → a b c d
p
≪ IF a ∗ c ≥ 0p
THEN p a ∗ c − b ∗ d p EVAL
p
ABS(a) ∗ d + b ∗ ABS(c) p EVAL
R→C
ELSE a ∗ c + b ∗ d p EVAL
p
p ABS(a) ∗ d + b ∗ ABS(c) p EVAL

R→C
END

Proposição 5. A operação de multiplicação em H verifica as seguintes pro-


priedades: (Exercı́cio)

M1) Propriedade comutativa;


M2) não associativa;
M3) existência do elemento neutro;
M4) existência do elemento inverso;
M5) não distributiva em relação à adição.

Devido a existência do inverso multiplicativo podemos definir em H a


operação de divisão. Dado w = (a, b), deixamos como exercı́cio provar que
seu inverso é dado por

a −b 
w′ = , 2
a2 + b a + b2
2

w′ multiplicado por w = (a, b) dá como resultado 1 = (1, 0).


Faça um programa para dividir dois hipercomplexos.
Vamos agora ressaltar algumas diferenças entre H e C.
Em H existe um número, j = (0, 1), o qual possui duas propriedades
que, em conjunto, não são partilhadas por nenhum número complexo,

213
quais sejam, (
j 2 = −1,
−1 · j = j
Como consequência destas propriedades existem problemas sem solução
em C mas com soluão em H. Por exemplo
(
x2 + 1 = 0,
−1 · x − x = 0
Ou seja, não existe nenhum número complexo x satisfzendo, simultâneamente,
as duas condições à direita.
Vejamos mais um exemplo, o sistema a seguir:
x+y =0
(−1 · x − y) · y = 2
não tem solução no corpo complexo C, em H sim.
Das duas equações abaixo:
x2 + 1 = 0

(−1 · x + x) · x + 1 = 0
Com o número i (complexo) resolvemos apenas a primeira, ao passo que,
com o número j resolvemos as duas − prove isto!
A interpretação geométrica do produto complexo, como se sabe, é a de
uma rotação; a do produto hipercomplexo, como pode ser mostrado, com-
bina as transformações: rotação, reflexão e oscilação.
Ademais, podemos mostrar que os Reais passam a ser um “subconjunto”
de H. Vale a identificação: k = (k, 0).
Deixamos como exercı́cio, a quem interessar possa, a prova da seguinte
Proposição 6. Para todo k ∈ R, e para todo w = (a, b) em H, a seguinte
identidade
(
(k a, k b), se k ≥ 0;
k · (a, b) = ( k a, |k| b ) =
(k a, −k b), se k < 0.
se verifica.
Como um corolário desta proposição concluimos que em H não vale a
identidade: −1 · x = −x, ∀ x ∈ H.
Exercı́cio: Resolva, em H, as seguintes equações do pimeiro grau (a w = b):
( a ) (1, 1) · (x, y) = (3, 1).
( b ) (−1, 1) · (x, y) = (1, 2).
Nota: Continua na página 280.

214
Capı́tulo 7
APLICAÇÕES AO CÁLCULO
NUMÉRICO

[. . .] sugere que o vácuo pode não estar preenchido apenas de energia


ponto-zero, que pode ser medida objetivamente com técnicas da fı́sica,
mas também permeado de consciência, que pode ser experienciada sub-
jetivamente com técnicas de introspecção.
(B. Alan Wallace/Dimensões Escondidas, p. 54)

7.1 Interpolação
Introdução:
Em muitas situações de interesse necessitamos aproximar uma função
de “aspecto complicado” , como por exemplo∗ ,
Z θ
−3 x3
C(θ) = 3θ x
dx
0 e −1

por uma outra função mais simples de manipular. A integral a seguir†


Z 1r
1 + (k2 − 1)x2
dx
0 1 − x2
é conhecida como integral elı́tica, para 0 < k < 1 é impossı́vel encontrar
explicitamente uma primitiva da função
r
1 + (k2 − 1)x2
f (x) =
1 − x2

Esta é conhecida como função de Debye, encontrada em Termodinâmica Estatı́stica
no cálculo do calor especı́fico a volume constante de certas substâncias.

Que representa a quarta parte do perı́metro da elipse de semieixo maior 1 e semieixo
menor k.

215
Ainda em outras situações, dispomos apenas de um conjunto de dados
tabelados − colhidos “no campo” −, como por exemplo, os dados a seguir

x 0 3 6 9 12 15 18 21 24 27 30
y 2, 38 7, 78 11, 43 13, 57 15, 79 12, 78 10, 31 6, 88 4, 44 2, 98 1, 35

para o cálculo da abscissa x̄ do centro de gravidade de uma placa, dado pela


fórmula,
Z b
xy dx
a
x̄ = Z b
y dx
a

Em situações tais como estas − e em muitas outras − necessitaremos do


importante conceito de

Interpolação Polinomial
Considere uma função f (x) conhecida (ou “amostrada”) em n + 1 pontos
distintos: x0 , x1 , . . . , xn , de um intervalo [ a, b ] contido em seu domı́nio.
Tomemos a seguinte notação yi = f (xi ), i = 0, 1, . . . , n; como no gráfico a
seguir,

f
yn s
p

..
.
y1 s
p

y0 s
p

p p p p x
0 ···
x0 = a x1 x2 xn = b

Interpolar por um polinômio a função f − com x0 , x1 , . . . , xn ∈ [ a, b ],


n + 1 pontos distintos − significa determinar um polinômio P (x), de grau
menor ou igual a n, que coincida com f em todos estes pontos, isto é, tal
que:
P (xi ) = f (xi ) = yi , para i = 0, 1, . . . , n.
Geometricamente, temos

216
y

yn s

p
..
.
y1 s s f

p
···
y0 p s
P

p p p p x
0 ···
x0 = a x1 x2 xn = b

O teorema a seguir afirma a existência e unicidade do polinômio inter-


polante.

Teorema 8 (Existência e unicidade). Seja f (x) definida em x0 , x1 , . . . ,


xn , (n + 1) pontos distintos de um intervalo [ a, b ], então existe um único
polinômio P (x) de grau menor ou igual a n de modo que

P (xi ) = f (xi ) = yi , para i = 0, 1, . . . , n. (7.1)

Prova: Considere o polinômio P (x), de grau n, da forma

P (x) = an xn + an−1 xn−1 + · · · + a1 x + a0

Vamos provar que existem (e são únicos) os coeficientes an , an−1 , . . . , a1 ,


a0 , tais que P (x) satisfaz as condições dadas em (7.1), isto é

i=0 ⇒ an xn0 + an−1 x0n−1 + · · · + a1 x0 + a0 = y0


| {z } |{z}
P (x0 ) f (x0 )

i=1 ⇒ an xn1 + an−1 x1n−1 + · · · + a1 x1 + a0 = y1


| {z } |{z}
P (x1 ) f (x1 )

............................................................

i=n ⇒ an xnn + an−1 xnn−1 + · · · + a1 xn + a0 = yn


| {z } |{z}
P (xn ) f (xn )

217
Sendo assim, temos:


 an xn0 + an−1 x0n−1 + · · · + a1 x0 + a0 = y0




 an x n + a
 n−1 + · · · + a x + a = y
1 n−1 x1 1 1 0 1




 ·············································




an xnn + an−1 xnn−1 + · · · + a1 xn + a0 = yn

Ou ainda,
   
  an y0
xn0 x0n−1 · · · x0 1    
  an−1   y
 1

 xn xn−1 · · · x 1   
 1 1 1    
  ....  =  .... 
 ......................    
 
 a1



 yn−1


xnn xnn−1 · · · xn 1
   
a0 yn

No que resulta em um sistema de equações lineares da forma AX = B, onde


A é a matriz dada por:
 n 
x0 x0n−1 · · · x0 1
 
 xn xn−1 · · · x 1 
 1 1 1 
A= 
 ...................... 
 
xnn xnn−1 · · · xn 1

O determinante da matriz A é conhecido como


Y determinante das potências
ou de Vandermonde e, é dado por: det A = (xi − xj ).
i<j
Como, por hipótese, os pontos xi , i = 0, 1, . . . , n, são distintos dois a
dois, segue que detA 6= 0, donde concluimos que o sistema linear possui uma
única solução.
Isto é, os coeficientes do polinômio em (an , an−1 , . . . , a1 , a0 ) são únicos
e podem ser calculados pela resolução deste sistema; sendo assim demons-
tramos que o polinômio P (x) existe e é único. 
Considerações sobre erros
Pela construção do polinômio interpolante P (x) dada no teorema 8 temos
que este coincide com a função f (x) em todos os pontos x0 , x1 , . . . , xn ,
fora destes pontos certamente estaremos cometendo um erro porquanto, é
de se esperar que P (x̄) 6= f (x̄) para x̄ 6= xi , i = 0, 1, . . . , n.
Definimos o erro cometido na aproximação por

E(x̄) = f (x̄) − P (x̄), onde x̄ ∈ [ a, b ].

218
Geometricamente fica assim:

yn s
p

.. f
. s s

E(x̄) = f (x̄) − P (x̄)


y0 s P
p

p p p x
0 ···
x0 = a x̄ xn = b

Teorema 9 (Erro na interpolação). Seja f (x) definida em x0 , x1 , . . . ,


xn , (n + 1) pontos distintos de um intervalo [ a, b ], e, ademais, contı́nua e
(n + 1) vezes diferenciável. Se P (x) interpola f (x) nestes pontos, então o
erro cometido E(x) é calculado por:
n
Y
(x − xi )
i=0
E(x) = f (x) − P (x) = f (n+1) (ξ) (7.2)
(n + 1)!

onde ξ ∈ [ x0 , xn ].
Prova: Veja, por exemplo, [10]. 
Observe que quando x = xi , i = 0, 1, . . . , n, o erro cometido é nulo,
como era de se esperar.
Limitante superior para o erro
A existência do ponto ξ que comparece em (7.2) é garantida pelo Teorema
de Rolle do Cálculo∗ , no entanto não existe uma regra para encontrarmos
este ponto o que tem como consequência a impossibilidade de calcularmos
o erro cometido, no entanto podemos determinar uma estimativa superior,
como segue: “modulando” a equação (7.2), temos
n
Y Yn Yn

(x − xi ) (x − x i ) (x − x )
i

|E(x)|= i = 0(n+1)! f (n+1) (ξ) = i = 0(n+1)! |f (n+1) (ξ)| ≤ i = 0(n+1)! M

0nde estamos convencionando que M = max f (n+1) (x) : x ∈ [ x0 , xn ] .

Se a função f é contı́nua no intervalo [ a, b ] e diferenciável no intervalo ] a, b [ e
f (a) = f (b), então existe um ξ ∈ ] a, b [ tal que f ′ (ξ) = 0.

219
A existência do máximo é assegurada pelo Teorema de Weierstrass∗ dado
a seguir:

Teorema 10 (Weierstrass). Toda função contı́nua f : [ a, b ] −→ R é limi-


tada e assume valores máximo e mı́nimo.

Sabemos do Cálculo que diferenciabilidade implica em continuidade, daı́


a exigência no enunciado do teorema 9 de que f seja (n + 1) vezes dife-
renciável.
Lembramos que a HP 50g calcula derivadas de qualquer ordem − o que
pode facilitar no cálculo de M , como estaremos mostrando oportunamente.
Ademais, observe que somente podemos calcular uma estimativa para
o erro quando dispomos da expressão analı́tica da função f ; nos casos em
que temos apenas a função tabelada em um número finito de pontos não
podemos estimar o erro.
A prova do teorema 8 (p. 217) é construtiva no sentido de que nos mostra
como obter o polinômio interpolatório, no entanto existem outras técnicas
− computacionalmente mais eficientes − para o cálculo do polinômio.
Observe que qualquer que seja a técnica escolhida obteremos sempre o
mesmo polinômio interpolador uma vez que o já citado teorema nos garante
um único polinômio.
Na sequência estudaremos três das mencionadas técnicas: Lagrange,
Newton e Gregory-Newton.

7.1.1 Interpolação de Lagrange


Seja f (x) definida em x0 , x1 , . . . , xn , (n + 1) pontos distintos de um
intervalo [ a, b ] e yi = f (xi ), i = 0, 1, . . . , n; a fórmula de Lagrange para
o polinômio interpolador de grau menor ou igual a n é dada assim:
n n
X Y (x − xj )
Pn (x) = yi · (7.3)
i=0 j=0
(x i − xj )
j 6= i

Para demonstração desta fórmula, veja, por exemplo, [8].


Vamos abrir esta fórmula tomando n = 3, por exemplo. Então, para
i = 0, 1, 2, 3; expandindo apenas o somatório,temos


Karl Weierstrass (1815 − 1897) foi durante muitos anos professor em Berlim, e exerceu
profunda influência no desenvolvimento da Análise. Sempre insistindo em demonstrações
rigorosas, elaborou, mas não publicou, uma introdução ao sistema de números reais. Deu
também importantes contribuições à Análise Real e Complexa, às equações diferenciais e
ao cálculo das variações.

220
3 3 3
Y (x − xj ) Y (x − xj ) Y (x − xj )
P3 (x) = y0 · + y1 · + y2 · +
j= 0
(x0 − xj ) j= 0
(x1 − xj ) j= 0
(x2 − xj )
j6=0 j6=1 j6=2

3
Y (x − xj )
+ y3 ·
j= 0
(x3 − xj )
j6=3

Agora, expandindo todos os produtórios, temos

(x − x1 )(x − x2 )(x − x3 )
P3 (x) = y0 · +
(x0 − x1 )(x0 − x2 )(x0 − x3 )

(x − x0 )(x − x2 )(x − x3 )
+ y1 · +
(x1 − x0 )(x1 − x2 )(x1 − x3 )

(x − x0 )(x − x1 )(x − x3 )
+ y2 · +
(x2 − x0 )(x2 − x1 )(x2 − x3 )

(x − x0 )(x − x1 )(x − x2 )
+ y3 ·
(x3 − x0 )(x3 − x1 )(x3 − x2 )

∗ ∗ ∗

De acordo com Wheeler, a lição a ser aprendida dessa evolução da


fı́sica é que a “lei não pode ficar gravada em uma placa ou rocha por toda
a eternidade. . . Tudo é mutável”. O fı́sico Paul C.W. Davies comenta:
“A esse respeito, Wheeler estava quebrando uma tradição cientı́fica de
quatrocentos anos de considerar a natureza sujeita a leis eternas. Se-
gundo, a própria aparência real de comportamento semelhante à lei na
natureza pode estar ligada de alguma forma a nossas observações da (John Wheeler)
natureza − sujeito e objeto, observador e observado, entrelaçados. Essas eram de fato ideias radi-
cais.” (B. Alan Wallace)

A propósito, Allan Kardec − influenciado pela ciência de seu tempo −


acreditava que as leis de Deus são perfeitas e imutáveis. Penso que já passa
da hora de seus seguidores atualizarem suas bı́blias (“codificação”) posto
que o Espiritismo, segundo eles, caminha de “mãos dadas” com a ciência.

221
Implementação do polinômio interpolador de Lagrange
O programa seguinte recebe como dados de entrada dois vetores, um con-
tendo os xi (i = 0, 1, . . . n) e o outro contendo os yi (i = 0, 1, . . . n), e sai
com o polinômio de Lagrange dado pela fórmula (7.3):

≪ → x y
≪ −2 CF − 3 CF − 105 SF
x SIZE OBJ → DROP pN p STO 0 pSp STO
p p p p
0 N 1 − FOR I y(I + 1) EVAL P STO
0 N 1 − FOR J
IF p J 6= I p
THEN p X p p x(J + 1) p EVAL −
p
x(I + 1) − x(J + 1) p EVAL
p
/ P * P p STO
END
p p
NEXT S P + S STO
p p
NEXT S X PURGE
p p
EXPAND SIMPLIFY DUP S STO

Antes de executar o programa anterior, vejamos alguns comentários:


A segunda linha do programa desativa os sinalizadores 02 e 03 e ativa
o sinalizador 105.
O sinalizador 03, que deve estar assim:
03 Function → symb
Isto para que o programa interprete o X após o THEN, isto é
THEN p X p p x(J + 1) p EVAL −

como um sı́mbolo; caso contrário, isto é, se o sinalizador estiver ativado,


X 03 Function → num
a variável X será substituı́da por um número − que eventualmente esteja
armazenado nela.
Também desativamos o sinalizador 02 para não haver problema quando
o polinômio S for expandido na última linha. Observe, ademais, que na
penúltima linha apagamos (PURGE) a variável X, isto porque se existe al-
gum valor armazenado nela teremos problemas na expansão de S.

222
Importante: O sinalizador 105 deve estar ativo para evitar problemas
quando da expansão do polinômio − na última linha do programa. (p. 86)
− A primeira linha do programa guarda os vetores de entrada nas variáveis
x e y, respectivamente, assim:
[ x0 x1 x2 . . . xn ] → x e [ y0 y1 y2 . . . yn ] → y
Nota: Para evitar problemas digite x e y como minúsculas.
− Na terceira linha obtemos o número de elementos no vetor x (número
de pontos) e guardamos esta informação na variável N . E iniciamos um
somatório (S) com zero.
− Na quarta linha fazemos I variar de 0 a N − 1; isto porque na HP a con-
tagem dos ı́ndices nos vetores inicia em 0; então, observe a correspondência:

I : 0, 1, 2, . . . , N − 1
↓ ↓ ↓ ··· ↓
y(I + 1) : [ y(1) y(2) y(3) . . . y(N ) ] → y

A variável P em cada ciclo acumula os produtos e a variável S acumula


toda a soma − ao final o polinômio encontra-se na variável S.
Observe isto em um caso particular:

(x − x1 )(x − x2 )(x − x3 ) (x − x0 )(x − x2 )(x − x3 )


P3 (x) = y0 · + y1 · + ···
(x0 − x1 )(x0 − x2 )(x0 − x3 ) (x1 − x0 )(x1 − x2 )(x1 − x3 )
| {z } | {z }
P P

e
(x − x1 )(x − x2 )(x − x3 ) (x − x0 )(x − x2 )(x − x3 )
P3 (x) = y0 · + y1 · + ···
(x0 − x1 )(x0 − x2 )(x0 − x3 ) (x1 − x0 )(x1 − x2 )(x1 − x3 )
| {z }
S

Vamos fazer um teste com três exemplos.


1o ) Encontre uma lei algébrica para a tabela abaixo

i xi yi
0 0, 0 −0, 5
1 0, 1 0, 0
2 0, 3 0, 2
3 0, 5 1, 0

Neste caso entramos com os vetores: [ 0 0.1 0.3 0.5 ] e [ −0.5 0 0.2 1 ],
para obter o seguinte polinômio: 125 3 2 91
3 · X − 30 · X + 12 · X − 2 .
1

223
2o ) Encontre o polinômio de Lagrange para a tabela abaixo

i xi yi
0 0, 0 0, 000
1 0, 2 2, 008
2 0, 4 4, 064
3 0, 5 5, 125

Neste caso entramos com os vetores:

[ 0 0.2 0.4 0.5 ] e [ 0 2.008 4.064 5.125 ]


1
para obter o seguinte polinômio: 1 · X 3 + 500000000000 · X 2 + 10 · X.
O coeficiente de X 2 neste polinômio pode ser considerado 0, o que nos
dá X 3 + 10X.
Nota: A calculadora nos fornece a opção para que polinômios sejam listados
com as potências, na variável independente, aumentando ou diminuindo −
para isto, veja p. 342 e p. 347.
A função EPSX0 e EPS
A variável ε (épsilon) é tipicamente usado nos livros de matermática para
representar um número real positivo arbitrariamente fixado que, em particu-
lar, pode ser feito arbitrariamente pequeno. O CAS da calculadora cria uma
variável EPS, com o valor padrão 0.0000000001 = 10−10 , quando você usa
a função EPSX0. Você pode alterar este valor, quando criado, se preferir
um valor diferente para EPS. A função EPSX0, quando aplicada em um
polinômio, substituirá todos os coeficientes cujo valor absoluto for menor
do que EPS com um zero. A função EPSX0 deve ser acessada através do
catálogo de funções ( SYMB P ), ou digitada diretamente.

Exemplo:
Entre na pilha com o polinômio: p X ∧3 + 1.2E − 12∗X + 1,p vá no catálogo
de funções (ou digite) selecione EPSX0 e pressione OK , teremos na pilha
X 3 + 0 · X + 1, em seguida pressione EVAL N para obter X 3 + 1.
A última linha do programa (p. 222): EXPAND →Q DUP p S p STO ,
pode ser alterada para: EXPAND DUP p S p STO EPSX0 →Q EVAL.
Fazendo esta alteração e rodando novamente o programa com os dados
do exemplo 2o ), teremos na pilha o polinômio: X 3 + 10X.
3o ) Com este exemplo vejamos como a HP pode nos auxiliar no cálculo da
x+3
estimativa do erro. Considere a funçao f dada por f (x) = , amostrada
x+1
nos pontos da tabela abaixo:

xi 0, 1 0, 2 0, 4
f (xi ) 2, 82 2, 67 2, 43
224
Determine o polinômio interpolador de Lagrange, avalie f (0, 25) e um
limitante superior para o erro.
Solução: Entrando com os dados da tabela, o programa devolve o seguinte
polinômio: X 2 − 1.8 · X + 3. Então:

f (0, 25) ∼
= P (0, 25) = 0, 252 − 1.8 · 0, 25 + 3 = 2, 6125

Por outro lado temos que (p. 219)

n
Y

(x − xi )
i=0
|E(x)| ≤ M
(n + 1)!

Onde: M = max f (n+1) (x) : x ∈ [ a, b ] .
Adaptando ao nosso problema em particular (n = 2), temos
2
Y

(x − xi )
i=0
|E(x)| ≤ M
(2 + 1)!

Onde: M = max f (3) (x) : x ∈ [ a, b ] .
Isto é,
|(x − x0 )(x − x1 )(x − x2 )|
|E(x)| ≤ M
3!
Substituindo todos os pontos, temos
|(0, 25 − 0, 1)(0, 25 − 0, 2)(0, 25 − 0, 4)|
|E(0, 25)| ≤ M
6
Ainda,
3
|E(0, 25)| ≤
M (7.4)
16000
Na sequência vamos necessitar da terceira derivada da função f . Digite:
CALC
p
(X + 3)/(X + 1) p ENTER 4 DERVX DERVX DERVX

−3·22 −12
obtemos: (x+1)4
, ou seja, f (3) (x) = (x+1)4
. (sinalizadores 03 e 105 desativados)
12
A função que nos interessa é: |f (3) (x)|
= (x+1) 4 . Vamos obter a tabela

de variação (TABVAR, p. 337) para esta função, para isto entre com∗ :
CALC
p 12 ∗ X/(X + 1) ∧ 4 p GRAPH NXT TABVA
ENTER 4 L


Antes certifique-se de que na sua calculadora os sinalizadores 03 e 105 estejam desati-
vados.

225
Nota: No menu irá constar dois TABVA , pressione o da direita.

Com o botão (“para baixo”) desloque-se até a parte inferior do visor,
na qual constará a seguinte tabela:
Variation table:
" #
−∞ + −1 − +∞ X
0 ↑ ∞ ↓ 0 F

Esta tabela nos mostra como a função (módulo da terceira derivada)


varia (crescimento e decrescimento) em função da variável independente X,
assim: a função é crescente desde −∞ (onde vale 0) até X = −1, onde
vale ∞, após o que começa a decrescer até X = +∞ (onde vale 0). A rigor,
diriamos: lim F (X) = 0. Descontando a limitação técnica dos traçadores
X→±∞
de gráficos, temos:

|f (3) (x)|

3
p

2
p

1
p

p p p p x
−2 −1 0 1 2

Na figura da direita plotamos o mesmo gráfico, sem os eixos coordenados.


Todavia, o intervalo de análise que nos interessa é [ 0, 1; 0, 4 ] (tab. p. 224),
sendo a função decrescente neste intervalo o máximo que a função assume
ocorre no extremo esquerdo, isto é:

n o 12
(3)
M = max f (x) : x ∈ [ 0, 1; 0, 4 ] = = 8, 1962
(0, 1 + 1)4

Substituindo este valor na desigualdade (7.4) (p. 225), temos:


3
|E(0, 25)| ≤ · 8, 1962 = 0, 0015
16000

226
7.1.2 Interpolação de Newton
Conceito de Diferença Dividida
Nesta seção estudaremos uma fórmula, alternativa à de Lagrange, para a
construção do polinômio interpolatório − a fórmula de Newton − que fará
uso das diferenças divididas.
Seja f (x) uma função contı́nua, (n + 1) vezes diferenciável e definida em
x0 , x1 , . . . , xn , (n + 1) pontos distintos do intervalo [ a, b ].

Definição 11 (Diferença dividida de ordem zero). Definimos diferença


dividida de ordem zero de uma função f (x) definida nos pontos xi , i =
0, 1, . . . , n por:

∆0 f (xi ) = f (xi ) = yi i = 0, 1, . . . , n.

A diferença dividida de primeira ordem é definida em função da diferença


dividida de ordem zero, assim:

∆0 yi+1 − ∆0 yi
∆ yi = f [ xi , xi+1 ] =
xi+1 − xi

Nota: f [ · ] é uma outra notação para diferença dividida.


As diferenças divididas de ordens superiores são definidas recursivamente,
como segue:

Definição 12 (Diferença dividida de ordem n). Definimos diferença divi-


dida de ordem n de uma função f (x) definida nos pontos xi , i = 0, 1, . . . , n
por:

∆n yi = f [ xi , xi+1 , . . . , xi+n ]

f [ xi+1 , xi+2 , . . . , xi+n ] − f [ xi , xi+1 , . . . , xi+n−1 ]


=
xi+n − xi

∆n−1 yi+1 − ∆n−1 yi


=
xi+n − xi

Podemos dispor as diferenças divididas em uma tabela, observando que


as diferenças de ordem 1 são calculadas a partir das diferenças de ordem
zero, as diferenças de ordem 2, a partir das diferenças de ordem 1 e, assim
sucessivamente, veja:

227
i xi Ordem 0 Ordem 1 Ordem 2 Ordem 3
0 x0 f [x0 ]
f [x0 , x1 ]
1 x1 f [x1 ] f [x0 , x1 , x2 ]
f [x1 , x2 ] f [x0 , x1 , x2 , x3 ]
2 x2 f [x2 ] f [x1 , x2 , x3 ]
f [x2 , x3 ]
3 x3 f [x3 ]

As diferenças sendo calculadas assim:


f [x1 ] − f [x0 ] f [x2 ] − f [x1 ] f [x3 ] − f [x2 ]
f [x0 , x1 ] = , f [x1 , x2 ] = , f [x2 , x3 ] =
x1 − x0 x2 − x1 x3 − x2
e,
f [x1 , x2 ] − f [x0 , x1 ] f [x2 , x3 ] − f [x1 , x2 ]
f [x0 , x1 , x2 ] = , f [x1 , x2 , x3 ] =
x2 − x0 x3 − x1
ainda,
f [x1 , x2 , x3 ] − f [x0 , x1 , x2 ]
f [x0 , x1 , x2 , x3 ] =
x3 − x0
Veja se a figura seguinte ajuda a divisar um padrão no cálculo das
diferenças acima:

i xi Ordem 0 Ordem 1 Ordem 2 Ordem 3


0 x0 f [x0 ]
f [x0 , x1 ]
1 x1 f [x1 ] f [x0 , x1 , x2 ]
f [x1 , x2 ] f [x0 , x1 , x2 , x3 ]
2 x2 f [x2 ] f [x1 , x2 , x3 ]
f [x2 , x3 ]
3 x3 f [x3 ]

Exemplo: Construir a tabela de diferenças divididas da função f dada


por f (x) = 1/x para os pontos x0 = 1, x1 = 2, x2 = 4 e x3 = 5.
Solução: Diferenças divididas de ordem zero:
f [x0 ] = f (x0 ) = f (1) = 1
f [x1 ] = f (x1 ) = f (2) = 1/2
f [x2 ] = f (x0 ) = f (4) = 1/4
f [x3 ] = f (x1 ) = f (5) = 1/5

228
Isto é suficiente para construirmos a tabela − conforme algoritmo dado
anteriormente:

i xi Ordem 0 Ordem 1 Ordem 2 Ordem 3


0 1 1 1
−1
2
2−1 = − 12
1 − 18 −(− 21 ) 1
1 2 2 1 1 4−1 = 8 1
− −1
4 2
4−2 = − 81 1
40 8
5−1
1
= − 40
1 − 20 −(− 81 ) 1
2 4 4 1 1 5−2 = 40
− 1
5 4
5−4 = − 20
1
3 5 5

Teorema 11. Seja f (x) uma função contı́nua, (n + 1) vezes diferenciável


no intervalo [ a, b ]. Sejam x0 , x1 , . . . , xn , (n + 1) pontos distintos de [ a, b ].
Nestas condições temos:

n
X f (xj )
∆n y0 = f [ x0 , x1 , . . . , xn ] = n (7.5)
Y
j= 0 (xj − xk )
k= 0
k6=j

Prova: Veja [10]. 


A tı́tulo de ilustração, vamos abrir esta fórmula para n = 3, por exemplo:
3
X f (xj )
∆3 y0 = f [ x0 , x1 , x3 ] = 3
j= 0
Y
(xj − xk )
k= 0
k6=j

Então,
f (x0 ) f (x1 ) f (x2 ) f (x3 )
∆3 y0 = 3
+ 3
+ 3
+ 3
Y Y Y Y
(x0 − xk ) (x1 − xk ) (x2 − xk ) (x3 − xk )
k= 0 k= 0 k= 0 k= 0
k6=0 k6=1 k6=2 k6=3

Ou ainda,
y0 y1
∆3 y0 = + +
(x0 − x1 )(x0 − x2 )(x0 − x3 ) (x1 − x0 )(x1 − x2 )(x1 − x3 )

y2 y3
+ +
(x2 − x0 )(x2 − x1 )(x2 − x3 ) (x3 − x0 )(x3 − x1 )(x3 − x2 )

229
O programa a seguir implementa a fórmula (7.5).

≪ → x y
p p p p
≪ x SIZE OBJ → − n STO 0 S STO
p
0 n FOR j 1 P p STO
0 n FOR k
IF p k 6= j p
THEN p x(j + 1) − x(k + 1) p EVAL
p
P * P p STO
END
p
NEXT S y(j + 1) p EVAL
P / + p S p STO
NEXT S 3 RND

Armazene o programa acima na variável DDYO, pois será utilizado sub-


sequentemente como subrotina de um outro programa. Na última linha
arredondamos o resultado para três casas decimais − a critério. (p. 13)

Para implementar a fórmula de Newton posteriormente, iremos necessitar


das seguintes diferenças:

∆1 y0 , ∆2 y0 , ∆3 y0 , . . . , ∆n y0 (7.6)

Para encontrar cada uma destas diferenças iremos necessitar dos seguintes
vetores de pontos:

[ x0 , x1 ] ⇒ ∆1 y0
[ x0 , x1 , x2 ] ⇒ ∆2 y0
[ x0 , x1 , x2 , x3 ] ⇒ ∆3 y0
..............................

Além do vetor correspondente [ yi ], claro.


O programa seguinte recebe os vetores [ xi ] e [ yi ] e sai com um vetor
contendo todas as diferenças divididas em (7.6).

230
≪ → x y
p p
≪ x SIZE OBJ → − n STO
1 n FOR m
p
0 m FOR k x(k + 1) p EVAL
NEXT m 1 + ROW→
p
0 m FOR k y(k + 1) p EVAL
NEXT m 1 + ROW→
DDYO
NEXT n ROW→


Armazene o programa acima na variável DDTO − será uma subrotina.
Por exemplo, para a tabela a seguir:

i xi yi ∆ yi ∆2 yi ∆3 yi ∆4 yi
0 0, 00 1, 000 10, 010 1, 300 10, 000 10, 000
1 0, 10 2, 001 10, 400 7, 300 20, 000 −−
2 0, 30 4, 081 14, 050 25, 300 −− −−
3 0, 60 8, 296 31, 760 −− −− −−
4 1, 00 21, 000 −− −− −− −−

Entrando com os vetores:


[ 0. 00 0. 10 0. 30 0. 60 1. 00 ] → x
[ 1. 000 2. 001 4. 081 8. 296 21. 000 ] → y
Recebemos de volta o vetor: [ 10. 01 1. 3 10. 10. ].

Fórmula de Newton
A fórmula de Newton para o polinômio interpolador é dada assim:
n
X i−1
Y
Pn (x) = y0 + ∆i y0 (x − xj ) (7.7)
i= 1 j= 0

Para demonstração desta fórmula, veja, por exemplo, [8].


Vamos abrir esta fórmula tomando n = 3, por exemplo.
3
X i−1
Y
i
P3 (x) = y0 + ∆ y0 (x − xj )
i= 1 j= 0

231
Ou ainda,
1−1
Y 2−1
Y 3−1
Y
P3 (x) = y0 + ∆1 y0 (x − xj ) + ∆2 y0 (x − xj ) + ∆3 y0 (x − xj )
j= 0 j= 0 j= 0

Então,

P3 (x) = y0 + ∆ y0 (x−x0 ) + ∆2 y0 (x−x0 )(x−x1 ) + ∆3 y0 (x−x0 )(x−x1 )(x−x2 )

O programa seguinte implementa a fórmula de Newton; recebe os vetores


[ xi ] e [ yi ] e sai com o polinômio dado por (7.7).

≪ → x y
≪ −2 CF − 3 CF − 103 SF − 105 SF
p p
x SIZE OBJ → − n STO
x y DDTO p∆p STO
p y(1) p EVAL pS p STO 1 pP p STO
1 n FOR i
0 i 1 − FOR j
pX p p x(j + 1) p EVAL −
p p
P * P STO
p p
NEXT ∆(i) EVAL P *
p p p p
S + S STO 1 P STO
NEXT S EXPAND EPSX0 EVAL

A seguir apresentamos o fluxograma da implementação do “método de


Newton” :

Newton
[ xi ], [ yi ] Equação (7.7) Pn (x)
(p. 231)

x, y [ ∆1 y0 , . . . , ∆n y0 ]
Subrotina [ xk ], [ yk ]
Subrotina
DDYO
DDTO
Equação (7.5), p. 229 ∆k y0

232
Exemplo: Para a tabela a seguir:

x 3 −2 0 9 4
y 15 5 3 687 47

O programa devolve o seguinte polinômio: X 3 − 5 · X + 3.


Já para esta outra tabela:

x −2 1 2 4 5
y 16 −2 −4 −2 2

O programa devolve o seguinte polinômio: X 2 − 5 · X + 2.

7.1.3 Interpolação de Gregory-Newton


Conceito de Diferença Finita
I) de ordem zero: ∆0 y i = y i
II) de primeira ordem: ∆ yi = yi+1 − yi
III) de segunda ordem: ∆2 yi = ∆ yi+1 − ∆ yi
IV) de ordem n: ∆n yi = ∆n−1 yi+1 − ∆n−1 yi

Em nosso livro ([4]) (p. 69) demonstramos a fórmula a seguir para o cálculo
direto da n-ésima diferença finita − i.e., sem passar pela recursividade.

n  
n
X n
k
∆ f (i) = (−1) f (i − k + n) (7.8)
k
k=0

Esta fórmula será útil para efeitos de programação. Por exemplo, a


segunda diferença fica assim:
2  
X 2
∆2 y i = (−1)k y
k i−k+2
k=0
     
2 0 1 2 2 2
= (−1) y + (−1) y + (−1) y
0 i−0+2 1 i−1+2 2 i−2+2

= yi+2 − 2 yi+1 + yi

Como exemplo, vamos obter as diferenças finitas para a seguinte tabela:

233
i xi yi
0 3, 5 9, 82
1 4, 0 10, 91
2 4, 5 12, 05
3 5, 0 13, 14
4 5, 5 16, 19

Vejamos um algoritmo para encontrarmos todas as diferenças finitas:


iniciamos com os dados yi na horizontal, assim:

9, 82 10, 91 12, 05 13, 14 16, 19

Em seguida vamos fazendo diferenças sucessivas entre termos consecutivos,


até obtermos um único número, veja:

9, 82 10, 91 12, 05 13, 14 16, 19 : ∆0 yi


− − − −
1, 09 1, 14 1, 09 3, 05 : ∆1 yi
− − −
0, 05 − 0, 05 1, 96 : ∆2 yi
− −
−0, 10 2, 01 : ∆3 yi

2, 11 : ∆4 yi

Estas diferenças podem ser alocadas em uma tabela assim:

i xi yi ∆ yi ∆2 y i ∆3 y i ∆4 y i
0 3, 5 9, 82 1, 09 0, 05 −0, 10 2, 11
1 4, 0 10, 91 1, 14 −0, 05 2, 01 −−
2 4, 5 12, 05 1, 09 1, 96 −− −−
3 5, 0 13, 14 3, 05 −− −− −−
4 5, 5 16, 19 −− −− −− −−

O nosso objetivo agora será “automatizar” o cálculo destas diferenças


finitas − as quais serão utilizadas oportunamente na obtenção do polinômio
interpolante de Gregory-Newton.
Para uma melhor compreensão dos programas vamos passo-a-passo. O
programa a seguir recebe o vetor [ yi ] e sai com um vetor contendo a primeira
diferença, segundo a fórmula dada em (7.8) − a qual repetimos aqui para o

234
caso n = 1:
1  
1
X 1k
∆ y(i) = (−1) y(i − k + 1)
k
k=0

≪ → y
≪ y SIZE OBJ → SWAP 1 −
FOR i
p
P
(k = 0, 1, (−1) ∧ k ∗ COMB(1, k) ∗ y(i − k + 1) ) p EVAL
NEXT DEPTH ROW→

Se necessário, execute-o no DBUG. Para o caso da tabela anterior, en-


trando com o vetor: [ 9. 82 10. 91 12. 05 13. 14 16. 19 ];
recebemos de volta o vetor: [ 1. 09 1. 14 1. 09 3. 05 ], veja:

i xi yi ∆ yi ∆2 y i ∆3 y i ∆4 y i
0 3, 5 9, 82 1, 09 0, 05 −0, 10 2, 11
1 4, 0 10, 91 1, 14 −0, 05 2, 01 −−
2 4, 5 12, 05 1, 09 1, 96 −− −−
3 5, 0 13, 14 3, 05 −− −− −−
4 5, 5 16, 19 −− −− −− −−

Observe que a fórmula (7.8) (p. 233) pode ser vista como uma “matriz”
que calcula todas as diferenças finitas; como, por exemplo, a “matriz” vista
a seguir: (p. 234)

9, 82 10, 91 12, 05 13, 14 16, 19 : ∆0 yi

1, 09 1, 14 1, 09 3, 05 : ∆1 yi

0, 05 − 0, 05 1, 96 : ∆2 yi

−0, 10 2, 01 : ∆3 yi

2, 11 : ∆4 yi

Naquela fórmula temos a seguinte variação para os ı́ndices: n = 0, 1, 2, 3, . . .


e i = 1, 2, 3, . . ., (n linha, i coluna), veja:

235
(n, i) i

n (0, 1) (0, 2) (0, 3) (0, 4) · · · ∆0 y i


(1, 1) (1, 2) (1, 3) (1, 4) · · · ∆1 y i
(2, 1) (2, 2) (2, 3) (2, 4) · · · ∆2 y i
(3, 1) (3, 2) (3, 3) (3, 4) · · · ∆3 y i
..........................................

Nos valendo desta observação, construimos o programa a seguir que re-


cebe o vetor [ yi ] e sai com uma lista cujos elementos são vetores contendo
todas as diferenças finitas.

≪ → y
p
≪ −103 SF − 105 SF { } LDF p STO
p
y SIZE OBJ → DROP N p STO
1 N 1 − FOR n
1 N n − FOR i
p
P
(k = 0, n, (−1) ∧ k ∗ COMB(n, k) ∗ y(i − k + n) ) p EVAL
NEXT DEPTH ROW→
LDF + p LDF p STO
NEXT LDF REVLIST

Observe que N é o número de pontos no vetor [ yi ]. O primeiro laço

1 N 1 − FOR n

NEXT

Calcula as diferenças ∆1 , ∆2 , . . . , ∆N −1 . O segundo laço

1 N n − FOR i

NEXT

calcula, em cada diferença, todos os termos. Se necessário, execute-o no


DBUG.

236
Para o caso da tabela anterior, entrando com o vetor
[ 9. 82 10. 91 12. 05 13. 14 16. 19 ]
recebemos de volta a lista:
{ [ 1. 09 1. 14 1. 09 3. 05 ] [ 0. 05 − 0. 05 1. 96 ] [ −0. 01 2. 01 ] [ 2. 11 ] }
Na qual temos:
{ [ 1. 09 1. 14 1. 09 3. 05 ] [ 0. 05 − 0. 05 1. 96 ] [ −0. 01 2. 01 ] [ 2. 11 ] }
| {z } | {z } | {z } | {z }
∆ yi ∆ 2 yi ∆ 3 yi ∆ 4 yi

Fórmula de Gregory-Newton
No caso em que os nós da interpolação x0 , x1 , . . . , xn são igualmente
espaçados∗ inicialmente procedemos a uma mudança de variável, assim:
x − x0
z= , ou ainda x = x0 + zh
h
Observe a correspondência entre os ı́ndices nas duas variáveis:

h h h














x
p p p p
x0 x1 x2 ··· xn−1 xn

h=1




z
p p p p
0 1 2 ··· n−1 n

Os pontos x0 , x1 , . . . , xn , com espaçamento h, possuem uma corres-


pondência única (bijeção) com os pontos 0, 1, . . . , n, com espaçamento h =
1, o que acarreta simplicidade nos cálculos − e na programação.
Com esta mudança de variável o polinômio de Newton (eq. (7.7), p. 231)
toma a seguinte forma:
∆ y0 ∆ 2 y0 ∆ n y0
Pn (x) = y0 + z · 1! + z(z − 1) · 2! + · · · + z(z − 1) . . . (z − (n − 1)) · n!

Para a dedução desta fórmula, veja, por exemplo, [8].


A fórmula anterior pode ser reescrita de forma compacta, assim:
i−1
n Y
X ∆i y 0
Pn (x) = y0 + (z − j) · (7.9)
i!
i= 1 j=0

Observe que vamos necessitar apenas do primeiro termo de todas as


diferenças finitas; por exemplo, veja isto no caso da tabela da p. 234, →

Isto é, xi+1 − xi = h, para i = 0, 1, 2, . . . , n, sendo h uma constante.

237
i xi yi ∆ yi ∆2 y i ∆3 y i ∆4 y i
0 3, 5 9, 82 1, 09 0, 05 −0, 10 2, 11
1 4, 0 10, 91 1, 14 −0, 05 2, 01 −−
2 4, 5 12, 05 1, 09 1, 96 −− −−
3 5, 0 13, 14 3, 05 −− −− −−
4 5, 5 16, 19 −− −− −− −−

Isto significa que podemos fixar i = 1 (primeira coluna na matriz da p. 235) na


equação (7.8) (p. 233) que, para os nossos propósitos, toma a forma
n  
n
X n k
∆ y1 = (−1) y (7.10)
k 1−k+n
k=0

Nota: O ı́ndice i na fórmula (7.8) é contado a partir de 1 (i = 1, 2, 3, . . .),


enquanto nas tabelas do Cálculo Numérico (como a tabela anterior) é con-
tado a partir de 0 (i = 0, 1, 2, . . .).
O programa a seguir recebe o vetor [ yi ] e sai com um vetor contendo o
primeiro termo de todas as diferenças, segundo a fórmula anterior,
≪ → y
≪ y SIZE OBJ → SWAP 1 −
FOR n
p
P
(k = 0, n, (−1) ∧ k ∗ COMB(n, k) ∗ y(1 − k + n) ) p EVAL
NEXT DEPTH ROW→


Nota: Armazene este programa com o nome de PTDF (subrotina).

Para o cálculo do polinômio de Gregory-Newton, os livros de Cálculo


Numérico, calculam todas as diferenças finitas (como na tabela da p. 234);
ora, mas isto não é necessário uma vez que só utilizamos o primeiro termo
de todas as diferenças e, estes, podem ser calculados pela fórmula (7.10).
Isto significa, no caso a seguir, (p. 234)

9, 82 10, 91 12, 05 13, 14 16, 19 : ∆0 yi

1, 09 1, 14 1, 09 3, 05 : ∆1 yi

0, 05 − 0, 05 1, 96 : ∆2 yi

−0, 10 2, 01 : ∆3 yi

2, 11 : ∆4 yi
238
que para encontrarmos os termos em destaque na vertical, só necessitamos
do termos yi − em destaque na horizontal.
O programa a seguir recebe o vetor [ yi ], o primeiro termo xi , isto é, x0 ,
e o passo h; e sai com o polinômio de Gregory-Newton,
≪ → y x0 h
≪ −103 SF − 105 SF y PTDF DUP pDp STO
p p
SIZE OBJ → DROP N STO
p p p p
y(1) EVAL S STO 1 P p STO p

1 N FOR I
p D(I) p EVAL I ! / P * p P p STO
0 I 1 − FOR J
p
Z p J − P * p P p STO
NEXT S P + p Sp STO 1 p P p STO
NEXT S SIMPLIFY
p
Z = (X − x0)/h p SUBST SIMPLIFY →Q


Alguns comentários:
− PTDF (segunda linha) é o programa anterior que aqui funciona como
subrotina;
− Observe que N é o comprimento do vetor dos primeiros termos das
diferenças, que é igual ao número de pontos menos um − que é igual ao
grau do polinômio;
− Não necessitamos entrar com todo o vetor [ xi ], é suficiente o primeiro
termo x0 (x0, com x minúsculo, observamos) e o passo h;
− No final o programa devolve o polinômio na variável X; caso se deseje
avaliá-lo, para um dado valor de X, basta (com o polinômio no nı́vel 1 da
pilha) colocar na pilha p X = 0. 25 p (estamos supondo, a tı́tulo de exemplo,
que este seja o valor) e, em seguida, pressionar

4 NXT SUBST
L

Vejamos alguns exemplos:


a ) Para a tabela do exemplo da p. 233 entramos com

[ 9. 82 10. 91 12. 05 13. 14 16. 19 ] 3. 5 0. 5

O programa nos devolve o polinômio:


211 4 −3607 3 91961 2 −257639 45509
·x + ·x + ·x + ·x +
150 150 600 600 100

239
b ) Para a tabela a seguir

i xi yi
0 0 1, 00
1 1 1, 50
2 2 2, 20
3 3 3, 10
4 4 4, 60

Entramos com os dados


[ 1. 00 1. 50 2. 20 3. 10 4. 60 ] 0 1
O programa nos devolve o polinômio:
1 −1 3 17 2 18
· x4 + ·x + ·x + ·x + 1
60 10 60 60
c ) Para a tabela a seguir

i xi yi
0 1 5
1 4 9
2 7 18
3 10 32

Entramos com os dados


[ 5 9 18 32 ] 1 3
O programa nos devolve o polinômio:
5 −1 43
· x2 + ·x +
18 18 9
Limitante superior para o erro para pontos equidistantes
Nas mesmas condições (hipóteses) do teorema 9 (p. 219) temos o seguinte
atalho para o cálculo de um limitante superior para o erro, para pontos
equidistantes: ([10], p. 137)

hn+1
|E(x)| ≤ M
4(n + 1)
onde, n o
(n+1)
M = max f (x) : x ∈ [ x0 , xn ]
Compare este resultado com o dado na p. 219.

240
7.2 Integração
Introdução: Nesta seção implementaremos as principais regras de inte-
gração numérica − as quais constam nos livros de Cálculo Numérico. Para
a dedução das fórmulas consulte um dos livros de nossas referências.
No cálculo numérico de integrais,
Z b
I= f (x) dx
a
efetuamos uma partição do intervalo [ a, b ] em n subintervalos e “amostramos”
a função f no pontos desta partição, assim:
yn−1
y3
y0
y2 yn−2
y1 yn
y4

p p p p p p
x0 = a x1 x2 x3 x4 ··· xn−2 xn−1 xn = b

Onde:
y0 = f (x0 ), y1 = f (x1 ), y2 = f (x2 ), . . . , yn−1 = f (xn−1 ), yn = f (xn )

f (x)

h h ... h

x
0 a = x0 x1 x2 xn−1 xn = b

7.2.1 Regra dos trapézios


A fórmula para a regra dos trapézios generalizada é como a seguir:
Z xn
h
f (x) dx ∼
= [ f (x0 ) + 2f (x1 ) + 2f (x2 ) + · · · + 2f (xn−1 ) + f (xn ) ]
x0 2

Erro:
h2
Et = − (x − x0 ) f (2) (ξ) , ξ ∈ [ x0 , xn ]
12 n

241
Limitante superior para o erro:
O ponto ξ no intervalo [ a, b ] não tem como ser determinado, razão porque
o erro não pode ser calculado com precisão, no entanto, podemos calcular
um limitante superior para o erro:

h2 n o
(xn − x0 ) max f (2) (x) : x0 ≤ x ≤ xn

|Et | ≤
12
Implementação da regra dos trapézios generalizada
O programa seguinte

≪ → n
≪ 1 1 n 1 −
FOR I
2
NEXT 1 n 1 + →ARRY


recebe n (o número de subintervalos) e sai com um vetor contendo os coefi-
cientes numéricos em destaque na expressão:

1f (x0 ) + 2f (x1 ) + 2f (x2 ) + · · · + 2f (xn−1 ) + 1f (xn )

Nota: Armazene este programa na variável CRTG, pois será referenciado


como subrotina do próximo programa.
Por exemplo,

n=2 ⇒ [1 2 1]
n=3 ⇒ [1 2 2 1]
n=4 ⇒ [1 2 2 2 1]
R4 √
Vamos exemplificar a regra dos trapézios para a integral: 1 x dx.

Antes vamos armazenar f (x) = x numa variável, isto pode ser feito
assim: √
≪→ x p xp ≫
Armazene este programa na variável FUNC (função).
Pois bem, a regra dos trapézios generalizada:
Z xn
h
f (x) dx ∼
= [ f (x0 ) + 2f (x1 ) + 2f (x2 ) + · · · + 2f (xn−1 ) + f (xn ) ]
x0 2

está implementada pelo seguinte programa:

242
≪ → a b n
≪ p (b − a)/n p EVAL ph p STO
a b FOR x
x FUNC
h STEP n 1 + →ARRY
n CRTG DOT h 2 / ∗

A instrução x FUNC (dentro do FOR - STEP) coloca x na pilha e


calcula o valor da função (previamente armazenada na variável FUNC).
Ao sair do laço existem n + 1 valores de y = f (x) na pilha, os quais são
colocados em um vetor, assim:

[ y0 y1 y2 y3 y4 . . . yn−2 yn−1 yn ]

Em seguida, o programa coloca n na pilha e chama a subrotina CRTG


(programa dado na p. 242) para gerar o seguinte vetor:

[1 2 2 2 2 ... 2 2 1]

Dados dois vetores x = [ a1 a2 . . . an ] e y = [ b1 b2 . . . bn ] a


instrução DOT realiza o produto interno entre estes vetores, assim:

x · y = a 1 · b1 + a 2 · b2 + · · · + a n · bn

Portanto, após o DOT − no nosso programa − obtemos a soma:

1 · y0 + 2 · y1 + 2 · y2 + 2 · y3 + 2 · y4 + · · · + 2 · yn−2 + 2 · yn−1 + 1 · yn

Para usar o programa para uma outra função basta editar a variável
FUNC.
Para a = 1, b = 4 e n = 6 (subintervalos), o programa nos devolve:
4.6615.
Limitante superior para o erro
Vamos calcular um limitante superior para o erro, segundo a desigual-
dade:
h2 n o
(xn − x0 ) max f (2) (x) : x0 ≤ x ≤ xn

|Et | ≤
12
Para este caso particular, temos: h = (b − a)/n = (4 − 1)/6 = 0.5.
Substituindo os valores já disponı́veis, obtemos:

0.52 n o
(4 − 1) max f (2) (x) : 1 ≤ x ≤ 4

|Et | ≤
12

243
Ou ainda, n o
(2)
|Et | ≤ 0.0625 · max f (x) : 1 ≤ x ≤ 4
(7.11)

Na sequência vamos necessitar da segunda derivada da função f (x) = x.
Digite: √ CALC
p
X p ENTER 4 DERVX DERVX
√ √
− X − X
obtemos: 4·X 2
, ou seja, f (2) (x) = 4·X 2
. (sinalizadores 03 e 105 desativados)

A função que nos interessa é: = 4·XX2 . Vamos obter a tabela de
|f (2) (x)|
variação (TABVAR, p. 337) para esta função, para isto entre com:
√ CALC
p
X/(4 ∗ X ∧ 2) p ENTER 4 GRAPH NXT TABVA
L

Nota: No menu irá constar dois TABVA , pressione o da direita.



Com o botão (“para baixo”) desloque-se até a parte inferior do visor,
na qual constará a seguinte tabela:

Variation table:
" #
−∞ ? 0+ 0 − +∞ X
? ? ∞ ↓ +: 0 F

Esta tabela nos mostra como a função (módulo da segunda derivada)


varia (crescimento e decrescimento) em função da variável independente X,
assim: a função não está definida para valores negativos de X; à direita de
0 a função vale ∞; isto é,

X 1
lim 2
= lim =∞
X→0+ 4 · X X→0+ 4 · X 3/2

À direita de 0 a função é decrescente. Graficamente, temos:

|f (2) (x)|

3
p

2
p

1
p

p p p p x
0 1 2 3 4

244
O intervalo de análise que nos interessa é [ 1, 4 ], sendo a função de-
crescente neste intervalo o máximo que a função assume ocorre no extremo
esquerdo, isto é:

n o
(2)
M = max f (x) : x ∈ [ 1, 4 ]
 √  √
x 1
= max : x ∈ [ 1, 4 ] = = 0.25
4 · x2 4 · 12

Substituindo este valor na desigualdade (7.11) (p. 244), temos:

|Et | ≤ 0.0625 · 0.25 = 0.0156

7.2.2 Primeira regra de Simpson


A primeira regra de Simpson generalizada − ou regra 1/3 de Simpson −
estabelece que, (p. 241)

Rx
n
x0 f (x) dx ∼
= h
3
[ f (x0 ) + 4f (x1 ) + 2f (x2 ) + 4f (x3 ) + ··· +2f (xn−2 ) + 4f (xn−1 ) + f (xn ) ]

h 4
Com erro dado por: Et = − 180 (xn − x0 ) f (4) (ξ) , ξ ∈ [ x0 , xn ].
xn −x0
Ou, alternativamente, tendo em conta que: h = n ,

(xn − x0 )5 (4)
Et = − f (ξ) , ξ ∈ [ x0 , xn ]
180 n4
Limitante superior para o erro: Como ξ ∈ [ x0 , xn ] não é conhecido, pode-
mos, no entanto, calcular um limitante superior para o erro:

h4 n o
(xn − x0 ) max f (4) (x) : x0 ≤ x ≤ xn

|Et | ≤
180
Implementação da regra de Simpson generalizada
Inicialmente vamos determinar uma fórmula para gerar os coeficientes
numéricos em destaque na expressão:

1f (x0 ) + 4f (x1 ) + 2f (x2 ) + 4f (x3 ) + · · · + 2f (xn−2 ) + 4f (xn−1 ) + 1f (xn )

Uma fórmula para o termo geral desta sequência é:



1, se I = 0 ou I = n;
aI =
3 − (−1)I , se 1 ≤ I ≤ n − 1

O programa seguinte

245
≪ → n
≪ 1 1 n 1 −
FOR I
p
3 − (−1) ∧ I p EVAL
NEXT 1 n 1 + →ARRY


recebe n e devolve um vetor contendo os termos da sequência acima.
Nota: Armazene este programa na variável CPRS, pois será referenciado
por um outro programa. Não esquecer que n deve ser um múltiplo de 2.
Vamos tomar como exemplo o cálculo da seguinte integral,
Z b
1
dx (7.12)
a 1 + x2
Antes vamos armazenar f (x) numa variável, isto pode ser feito assim:

≪→ x p 1/(1 + x ∧ 2)p ≫

Armazene este programa na variável FUNCA (função). Pois bem, a regra


de Simpson generalizada está implementada pelo seguinte programa:

≪ → a b n
≪ p (b − a)/n p EVAL p h p STO
a b FOR x
x FUNCA
h STEP n 1 + →ARRY
n CPRS DOT h 3 / ∗

O funcionamento deste programa é análogo ao já visto para a regra dos


trapézios. Para a = 0, b = 1 e n = 8, o valor da integral (7.12) é: 0.785398.

7.2.3 Segunda regra de Simpson


Segunda regra de Simpson ou Regra 3/8 de Simpson.
A segunda regra de Simpson generalizada estabelece que,
Rx
n
x0
f (x) dx ∼
= 3h
8
[ y0 + 3y1 + 3y2 + 2y3 + 3y4 + 3y5 + 2y6 + ··· + 3yn−2 + 3yn−1 + yn ]

Onde: n deve ser um múltiplo de 3 e h = (b − a)/n. O erro é dado por,


h4
Et = − (x − x0 ) f (4) (ξ) , ξ ∈ [ x0 , xn ]
80 n

246
Antes de implementar esta fórmula vamos fazer um programa para gerar
a sequência dos coeficientes:

I:0 1 2 3 4 5 6 ... n−2 n−1 n


(7.13)
aI : 1 3 3 2 3 3 2 ... 3 3 1

Esta sequência é gerada com o seguinte programa:

≪ → n
≪ 1 1 n 1 −
FOR I
IF pF P (I/3) == 0 p
THEN 2
ELSE 3
END
NEXT 1 n 1 + →ARRY

Nota: Armazene este programa na variável CSRS, pois será referenciado


por um outro programa. Não esquecer que n deve ser um múltiplo de 3.
− Implementando a Segunda Regra de Simpson. Como exemplo, vamos
fazer um programa para calcular a integral,
Z b p
ln(x3 + (ex + 1)) dx
a

Antes vamos armazenar f (x) numa variável, isto pode ser feito assim:
p
≪→ x LN(x ∧ 3 + (EXP(x) + 1))p ≫

Armazenamos este programa em FNC. O programa muda muito pouco em


relação ao da primeira regra de Simpson (p. 246), assim:

≪ → a b n
≪ p (b − a)/n p EVAL ph p STO
a b FOR x
x FNC
h STEP n 1 + →ARRY
n CSRS DOT 3 h ∗ 8 / ∗


Para a = 1, b = 4 e n = 9, o valor da integral resulta: 8.5620.

247
7.2.4 Quadratura gaussiana
A fórmula de quadratura de Gauss, ou simplesmente quadratura gaus-
siana, é mais uma alternativa que se conta para o cálculo numérico de inte-
grais:
Z b
I= f (x) dx
a
Este método fornece um resultado bem mais preciso que os anteriores −
embora só possa ser aplicado quando se conhece a função dada por f (x);
não se aplica a partir de pontos definidos por experimentos (tabelados).
Inicialmente, o intervalo de integração [ a, b ] deve ser “transladado” para
o intervalo [ −1, 1 ]; isto se consegue através de uma mudança de variável,
fornecida pela seguinte bijeção:

x(t)
b−a
x−a = 1−(−1) (t − (−1))

b (1, b)
[

(−1, a) a
[

t
−1 p 0 p1

Encontrando a equação da reta por dois pontos, temos:


1 1 1
x= (b − a) t + (b + a) ⇒ dx = (b − a) dt
2 2 2
Sendo assim, temos:
Z b Z 1
I= f (x) dx = F (t) dt
a −1

Onde:
1 1 1 
F (t) = (b − a) · f (b − a)t + (b + a) (7.14)
2 2 2
A fórmula de Gauss para n + 1 pontos é da forma:
Z 1
I= F (t) dt = A0 F (t0 ) + A1 F (t1 ) + · · · + An F (tn )
−1

Onde os coeficientes Ai e os pontos ti (i = 0, 1, . . . , n) são incógnitas a


serem determinadas.
Observe que temos 2n + 2 incógnitas: A0 , A1 , . . . , An ; t0 , t1 , . . . , tn .

248
Escolheremos os coeficientes Ai e os pontos ti de tal forma que a fórmula
forneça um valor exato da integral para polinômios de graus ≤ 2n + 1.
Vamos por partes, para dois pontos, a fórmula de Gauss é:
Z 1
I= F (t) dt = A0 F (t0 ) + A1 F (t1 ) (7.15)
−1
Neste caso os parâmetros A0 , A1 , t0 , t1 , devem ser determinados de modo
que esta fórmula seja exata para polinômios de graus ≤ 2 · 1 + 1 = 3.
Sendo assim, basta exigir que seja exata para os polinômios∗
F0 (t) = 1, F1 (t) = t, F2 (t) = t2 , F3 (t) = t3 . (7.16)
tendo em vista que qualquer outro polinômio de grau ≤ 3 pode ser escrito
como: (combinação linear)

P3 (t) = a0 + a1 t + a2 t2 + a3 t3

= a0 F (t0 ) + a1 F (t1 ) + a2 F (t2 ) + a3 F (t3 )


Sendo assim, se a fórmula
Z 1
Fk (t) dt = A0 Fk (t0 ) + A1 Fk (t1 ), k = 0, 1, 2, 3
−1
é exata para estes polinômios, então teremos: (prove isto)
Z 1
P3 (t) dt = A0 P3 (t0 ) + A1 P3 (t1 )
−1

Ou seja, a fórmula também é exata para P3 (t).


Portanto, considerando os polinômios dados em (7.16) as quatro incógnitas
A0 , A1 , t0 , t1 podem ser encontradas por:
Z 1
tk dt = A0 tk0 + A1 tk1 , k = 0, 1, 2, 3.
−1
Desdobrando, temos:
Z 1
k=0 ⇒ t0 dt = A0 t00 + A1 t01
−1
Z 1
k=1 ⇒ t1 dt = A0 t10 + A1 t11
−1
Z 1
k=2 ⇒ t2 dt = A0 t20 + A1 t21
−1
Z 1
k=3 ⇒ t3 dt = A0 t30 + A1 t31
−1

São os polinômios da base canônica: B = { 1, t, t2 , t3 }, na linguagem da Álgebra
Linear.

249
Resolvendo as integrais obtemos o seguinte sistema de equações não-lineares:

A0 + A1 = 2 (7.17)

A0 t0 + A1 t1 = 0 (7.18)

A0 t20 + A1 t21 = 2/3 (7.19)

A0 t30 + A1 t31 = 0 (7.20)

De (7.18), obtemos, t0 /t1 = −A1 /A0 . De (7.20), obtemos, ( t0 /t1 )3 =


−A1 /A0 . Destas igualdades segue que

t0 = ± t1 e A0 = ± A1

De (7.18) concluimos que só pode ser A0 = A1 . Logo, A0 = A1 = 1.


Este resultado nos permite concluir que

 t0 + t1 = 0
 t2 + t2 = 2/3
0 1

Daqui concluimos que só pode ser t0 = −t1 . √Substituindo este resultado na
segunda equação acima, obtemos: t1 = ± 1/ 3.
Da fórmula (7.15) (p. 249) concluimos que
Î irrelevante qual sinal tomamos

para t1 , sendo assim escolheremos t1 = 1/ 3, do que resulta t0 = −1/ 3.
A fórmula de Gauss para dois pontos resulta
Z 1 √ √
3 3
IG = F (t) dt = F − +F (7.21)
−1 3 3

Esta fórmula é exata para polinômios de grau ≤ 3, por construção.


Exemplo: Calcular,
Z utilizando a quadratura gaussiana para dois pontos, o
2
2 /2
valor da integral e−x dx.
−2
Solução: Inicialmente procedemos à mudança de variável. Do enunciado
2
retiramos: a = −2, b = 2 e f (x) = e−x /2 .
Substituindo na equação (7.14) (p. 248), temos:
1 1 1 
F (t) = (b − a) · f (b − a)t + (b + a)
2 2 2
1   1  1 
= 2 − (−2) · f 2 − (−2) t + 2 + (−2)
2 2 2
Sendo assim:
2 /2 2
F (t) = 2 f (2t) = 2 e−(2t) = 2 e−2t

250
Logo, √ √
√ √
3 3 2 3 3 2
F − = 2 e−2 (− 3 ) ; F = 2 e−2 ( 3 )
3 3
Substituindo em (7.21) resulta

IG = 4 e−2/3 = 2.05367

O erro para o algoritmo de Gauss é dado por:


22n+1 (n!)4 (2n)
En = 3 · F (ξ), −1 < ξ < 1.
(2n + 1) · (2n)!
Se tentarmos obter a fórmula de Gauss para três pontos
Z 1
I= F (t) dt = A0 F (t0 ) + A1 F (t1 ) + A3 F (t3 )
−1

teremos um sistema não-linear com seis incógnitas: A0 , A1 , A3 ; t0 , t1 , t3 ,


que certamente é de difı́cil resolução.
Essa dificuldade pode ser contornada (minimizada) utilizando a teoria
dos polinômios ortogonais, definidos a seguir:
Definição 13 (Conjunto ortogonal). Um conjunto de polinômios

P = pn (x) : n = 0, 1, 2, . . . ,

onde n é o grau do polinômio, é dito ortogonal em relação à função peso


ω(x), num intervalo [ a, b ] se:
Z b
ω(x) pm (x) pn (x) dx = 0 para m 6= n
a

Existem vários conjuntos de polinômios ortogonais − como, p. ex.


polinômios de Hermite (p. 326), de Laguerre e de Legendre (p. 327) −, de-
pendendo da escolha da função peso ω(x).
Quando ω(x) = 1 e o intervalo de integração [ a, b ] é o intervalo
[ −1, 1 ], os polinômios são chamados polinômios de Legendre − disponı́veis
na HP 50g (p. 327).
O seguinte teorema é de importância decisiva para o algoritmo de Gauss.
Teorema 12. Fixado arbitrariamente um natural n, o ponto ti para a
quadratura gaussiana é a i - ésima raiz (zero) do polinômio de Legendre de
ordem n: pn (t). Os coeficientes Ai , são obtidos pela fórmula:
2
Ai = (7.22)
(1 − t2i ) · [ p′n (ti ) ]2
onde p′n (ti ) é o valor da derivada de pn (t) avaliada no ponto ti .
Prova: [11]. 

251
O nosso objetivo agora será implementar (programar) a quadratura gaus-
siana. Bem, posto o nosso problema vejamos agora alguns recursos que a
calculadora nos fornece para resolvê-lo:
O menu ARITHMETIC é ativado através da combinação de teclas (p. 323)

ARITH

Ao pressionar: POLY NXT L


NXT temos acesso aos polinômios de Legendre.
L
Para obter o polinômio de ordem 4, por exemplo, basta colocar 4 na pilha
e pressionar a tecla virtual LEGEN . Se necessário, podemos plotar o gráfico
destes polinômios (p. 327).
Vamos nos concentrar na equação (7.22), então necessitaremos dos zeros
do polinômio de Legendre e também de sua derivada.
Antes, certifique-se de que os sinalizadores 03 e 105 estejam desativados
em sua calculadora.
Por exemplo, coloque p3 (x) na pilha∗ ,

5x3 − 3x
2
Para obter os zeros deste polinômio inicialmente coloque a variável X na
pilha e depois digite ZEROS (p. 349; ou Catálogo, p. 46); a calculadora nos dará
os zeros em uma lista: √ √ o
n 15 15
0 −
5 5
Coloque novamente P3 (x) na pilha para calcularmos sua derivada. Agora,
pressione: CALC DERVX para obter,

(5x2 − 1) · 3
2
Programando a fórmula da quadratura gaussiana
Creio que já dispomos das principais ferramentas para implementar a
quadratura gaussiana. Como exemplo, vamos resolver a integral:
Z b
log x + x2
dx
a (x + 3)2

Antes vamos armazenar f (x) numa variável, isto pode ser feito assim:

≪→ x p ( LOG(x) + x ∧ 2 )/(x + 3) ∧ 2 p ≫

Armazene este programa na variável FUNC (função).



Para isto digite, se necessário, a sequência de teclas:
ARITH NXT NXT
POLY L L 3 LEGEN .

252
Agora faremos uma subrotina que recebe n (a ordem do polinômio de
Legendre) e calcula as raizes deste polinômio e, ademais, os respectivos
coeficientes, segundo a fórmula (7.22). (p. 251)
Então,
≪ → n
≪ −2 CF −3 CF −105 SF −103 CF
n LEGENDRE DUP DERVX SWAP
p
Xp ZEROS DUP p ti p STO
SWAP MAP XNUM 2 ∧ ti p 1− X ∧2 p
MAP XNUM ∗ 2 SWAP / p Ai p STO

Armazene (STO) esta subrotina como: p tiAi p . Se o leitor quiser ter acesso
à lista com as raizes ti e à lista Ai , com os respectivos coeficientes pressione,
se necessário, a tecla VARJ
e procure, estas listas, no menu.
A função MAP encontra-se na p. 315. Para melhor entendimento,
execute-o no DBUG.
Finalmente, o programa principal fica assim:

≪ → a b n
≪ n tiAi ti
p (b − a)/2 ∗ FUN((b − a)/2 ∗ X + (b + a)/2) p
P
MAP XNUM Ai ∗ LIST


P
A instrução LIST, acessada com a seguinte sequência de teclas:
MTH LIST P
, calcula a soma de todos os elementos de uma lista.
LIST
Se necessário, execute-o no DBUG. Para o cálculo da integral de nosso
exemplo, entrando com: 2 4 8, (isto é, a = 2, b = 4 e n = 8) obtemos
IG = 0.521284.
Em FILES podemos ter acesso ao tamanho (em bytes) de cada um

dos nossos programas para a quadratura gaussiana, temos:


FUNC → 58
tiAi → 181
QGAUSS → 157
de sorte que os três programas somam 396 bytes.
Enfatizando: Na HP 50g implementamos a quadratura gaussiana com a
bagatela de 396 bytes!

253
7.2.5 Integração dupla
Seja o problema de calcular a integral dupla a seguir:
Z Z
I= f (x, y) dx dy
D

onde D é o retângulo delimitado por:


a≤x≤b
c≤y≤d
Veremos que as regras apresentadas anteriormente podem ser usadas aqui.
Inicialmente fazemos uma partição do retângulo anterior em nx subinterva-
los em [ a, b ] e em ny subintervalos em [ c, d ], assim:
y

yn = d
p

yn−1
p

.. ..
. . (xi , yj )
yj s
p

.. .. ··· ···
. .
y1
p

y0 = c
p

p p p p p p x
x0 = a x1 x2 ··· xi ··· xn−1 xn = b

Na verdade o n que comparece no eixo x é nx e o n que comparece no


eixo y é ny (não são necessáriamente iguais). Pois bem, temos
Z Z Z b Z d
I= f (x, y) dx dy = dx f (x, y) dy
D a c
Rd
Chamando c f (x, y) dy de G(x), isto é,
Z d
G(x) = f (x, y) dy (7.23)
c

podemos escrever:
Z b
I= G(x) dx
a
Para resolver esta integral simples aplicaremos a segunda regra de Simpson,
assim: (p. 246)

254
3h
I= G(x0 ) + 3G(x1 ) + 3G(x2 ) + 2G(x3 ) + 3G(x4 ) + 3G(x5 ) + 2G(x6 )
8

· · · + 3G(xn−2 ) + 3G(xn−1 ) + G(xn ) (7.24)

Da equação (7.23), temos:


Z d
G(xi ) = f (xi , y) dy; (i = 0, 1, 2, . . . , nx) (7.25)
c

Para cada i fixo, devemos calcular a integral da função (de uma única
variável) f (xi , y) no intervalo [ c, d ] (veja partição do retângulo).
Para resolver esta integral em y utilizaremos a primeira regra de Simpson:
h
G(xi ) = f (xi , y0 ) + 4f (xi , y1 ) + 2f (xi , y2 ) + 4f (xi , y3 ) + 2f (xi , y4 )+
3

· · · + 2f (xi , yn−2 ) + 4f (xi , yn−1 ) + f (xi , yn ) (p. 245)

Observe que temos nx+1 desta equações (veja equação (7.25)). Ademais, observe
que como estamos particionando o intervalo [ c, d ] em ny subintervalos a
rigor temos, (i = 0, 1, 2, . . . , nx)

h
G(xi ) = f (xi , y0 ) + 4f (xi , y1 ) + 2f (xi , y2 ) + 4f (xi , y3 ) + 2f (xi , y4 )+
3

· · · + 2f (xi , yny−2 ) + 4f (xi , yny−1 ) + f (xi , yny )

Pois bem, substituindo estas nx+1 equações na equação (7.24), obtemos:


 hy 
I= 3hx
8 3
F (x0 , y0 ) + 4F (x0 , y1 ) + 2F (x0 , y2 ) + 4F (x0 , y3 ) + ···+ 4F (x0 , yn−1 ) + F (x0 , yn )

+ 3· hy
3
F (x1 , y0 ) + 4F (x1 , y1 ) + 2F (x1 , y2 ) + 4F (x1 , y3 ) + ···+ 4F (x1 , yn−1 ) + F (x1 , yn )

+ 3· hy
3
F (x2 , y0 ) + 4F (x2 , y1 ) + 2F (x2 , y2 ) + 4F (x2 , y3 ) +···+ 4F (x2 , yn−1 ) + F (x2 , yn )

+ 2· hy
3
F (x3 , y0 ) + 4F (x3 , y1 ) + 2F (x3 , y2 ) + 4F (x3 , y3 )+···+ 4F (x3 , yn−1 ) + F (x3 , yn )

+ 3· hy
3
F (x4 , y0 ) + 4F (x4 , y1 ) + 2F (x4 , y2 ) + 4F (x4 , y3 )+···+ 4F (x4 , yn−1 ) + F (x4 , yn )

+ 3· hy
3
F (x5 , y0 ) + 4F (x5 , y1 ) + 2F (x5 , y2 ) + 4F (x5 , y3 )+···+ 4F (x5 , yn−1 ) + F (x5 , yn )

+ 2· hy
3
F (x6 , y0 ) + 4F (x6 , y1 ) + 2F (x6 , y2 ) + 4F (x6 , y3 )+···+ 4F (x6 , yn−1 ) + F (x6 , yn )
·····································································
hy

+ 3· 3
F (xn−2 , y0 ) + 4F (xn−2 , y1 ) + 2F (xn−2 , y2 ) + 4F (xn−2 , y3 )+···+ F (xn−2 , yn )

+ 3· hy
3
F (xn−1 , y0 ) + 4F (xn−1 , y1 ) + 2F (xn−1 , y2 ) + 4F (xn−1 , y3 )+···+ F (xn−1 , yn )

hy

+ 3
F (xn , y0 ) + 4F (xn , y1 ) + 2F (xn , y2 ) + 4F (xn , y3 )+···+ 4F (xn , yn−1 ) + F (xn , yn )

255
Arrumando a casa obtemos:
hy
 
I= 3hx
8
· 3
1· F (x0 , y0 ) + 4F (x0 , y1 ) + 2F (x0 , y2 ) + 4F (x0 , y3 ) + ···+ 4F (x0 , yn−1 ) + F (x0 , yn )

+ 3· F (x1 , y0 ) + 4F (x1 , y1 ) + 2F (x1 , y2 ) + 4F (x1 , y3 ) + ···+ 4F (x1 , yn−1 ) + F (x1 , yn )

+ 3· F (x2 , y0 ) + 4F (x2 , y1 ) + 2F (x2 , y2 ) + 4F (x2 , y3 ) +···+ 4F (x2 , yn−1 ) + F (x2 , yn )

+ 2· F (x3 , y0 ) + 4F (x3 , y1 ) + 2F (x3 , y2 ) + 4F (x3 , y3 )+···+ 4F (x3 , yn−1 ) + F (x3 , yn )

+ 3· F (x4 , y0 ) + 4F (x4 , y1 ) + 2F (x4 , y2 ) + 4F (x4 , y3 )+···+ 4F (x4 , yn−1 ) + F (x4 , yn )

+ 3· F (x5 , y0 ) + 4F (x5 , y1 ) + 2F (x5 , y2 ) + 4F (x5 , y3 )+···+ 4F (x5 , yn−1 ) + F (x5 , yn )

+ 2· F (x6 , y0 ) + 4F (x6 , y1 ) + 2F (x6 , y2 ) + 4F (x6 , y3 )+···+ 4F (x6 , yn−1 ) + F (x6 , yn )
·····································································

+ 3· F (xn−2 , y0 ) + 4F (xn−2 , y1 ) + 2F (xn−2 , y2 ) + 4F (xn−2 , y3 )+···+ F (xn−2 , yn )

+ 3· F (xn−1 , y0 ) + 4F (xn−1 , y1 ) + 2F (xn−1 , y2 ) + 4F (xn−1 , y3 )+···+ F (xn−1 , yn )

+ 1· F (xn , y0 ) + 4F (xn , y1 ) + 2F (xn , y2 ) + 4F (xn , y3 )+···+ 4F (xn , yn−1 ) + F (xn , yn )

No “quadro” acima podemos obervar, pelos ı́ndices de yj , que temos


ny + 1 parcelas em cada linha e, pelos ı́ndices de xi , observamos que temos
nx + 1 linhas.
Para programar esta equação vamos, antes, fazer um programa que cal-
cule uma matriz com os valores da função em todos os vértices da malha de
partição, digo,

F (xi , yj ) ; (i = 0, 1, 2, . . . , nx), (j = 0, 1, 2, . . . , ny) (7.26)

Ou ainda,

 
F (x0 , y0 ) F (x0 , y1 ) F (x0 , y2 ) ... F (x0 , yny )
 
 F (x , y ) F (x , y ) F (x , y ) . . . F (x1 , yny ) 
 1 0 1 1 1 2 
 

 ... ... ... ... ... 

F (xnx , y0 ) F (xnx , y1 ) F (xnx , y2 ) . . . F (xnx , yny )

Vamos tomar como exemplo o cálculo da seguinte integral:


Z π/2 Z 0,4 (
0 ≤ y ≤ 0, 4
I= (y 2 + y) cos x dy dx,
0 0 0 ≤ x ≤ π/2

Inicialmente armazenamos F (x, y) = (y 2 + y) cos x, isto pode ser feito


assim:
≪ → x y p (y ∧ 2 + y) ∗ cos(x)p ≫

256
Armazene este programa na variável FC (função). Pois bem, o programa
para o cálculo da matriz acima é dado a seguir:

≪ → a b c d nx ny
≪ −3 CF p (b − a)/nx p EVAL p hx p STO
p (d − c)/ny p EVAL p hy p STO
c d FOR y
a b FOR x
x y FC EPSX0
hx STEP nx 1 + →ARRY
hy STEP ny 1 + ROW→ TRN

Nota: Armazene este programa na variável FDV, pois será referenciado


por um outro programa.
Comentários:

a) Este programa calcula a matriz F (xi , yj ) para: a ≤ x ≤ b, c ≤ y ≤ d.
nx e ny é o número de subintervalos nos intervalos [ a, b ] e [ c, d ], respecti-
vamente.
b) Desativamos o sinalizador 03, pois no cálculo da função (FC) pode
dá problemas. Por exemplo, se este sinalizador estiver ativado, cos π2 =
−5.1034 × 10−12 e não 0 como deveria ser.
c) Para a função EPSX0, veja p. 224. TRN, na última linha, calcula (efe-
tua) a transposta de uma matriz (p. 43).
Por exemplo, entrando no programa anterior com os seguintes dados:

→ 0 π/2 0 0.4 3 4

recebemos na saida a seguinte matriz:


 
0.0000 0.1100 0.2400 0.3900 0.5600
 
 0.0000 0.0953 0.2078 0.3377 0.4850 
 
 0.0000 0.0550 0.1200 0.1950 0.2800 
 
0.0000 0.0000 0.0000 0.0000 0.0000

com 4 casas decimais.


− Na figura a seguir plotamos (esquerda) a malha da partição e, na figura
da direita, os valores f (xi , yj ) de acordo com a matriz anterior, assim:

257
f (x, y) f (x, y)

0,1 0,2 0,3 0,4


0 r r r r r y r y

π r r r r r π r
6 6

π r r r r r π r
3 3

π r r r r r π r r r r r
2 2
x x

Nota: Na página 314 mostramos como plotar o gráfico da superfı́cie f (x, y).
Finalmente, o programa que nos interessa é dado a seguir:
≪ → a b c d nx ny
≪ nx 1 + 1 → LIST 0 CON p V L p STO
a b c d nx ny FDV p MF p STO
nx CSRS p V x p STO
ny CPRS p V y p STO
1 nx 1 + FOR I
MF I ROW− SWAP DROP
Vy DOT V L I ROT PUT
p V L p STO

NEXT V L V x DOT
3 hx ∗ 8 / hy 3 / ∗ ∗

Comentários:
a) Os dados de entrada para este programa é o retângulo [ a, b ] × [ c, d ] e
o número de subretângulos, nx × ny, da partição.
b) A segunda linha do programa cria um vetor, de comprimento nx + 1,
com a constante 0:

[0 0 0 0 ... 0] (comprimento deste vetor = nx + 1)

Este vetor é guardado na variável VL. Observe que nx + 1 é igual ao número


de linhas no “quadro” da p. 256;
c) A terceira linha do programa  disponibiliza os dados da subrotina FDV
que calcula a matriz F (xi , yj ) e guarda-a na variável MF;

258
d) A quarta linha do programa disponibiliza os dados da subrotina CSRS
(p. 247) que calcula os coeficientes da segunda regra de Simpson e os guarda
no vetor V x;
e) A quinta linha do programa disponibiliza os dados da subrotina CPRS
(p. 246)que calcula os coeficientes da primeira regra de Simpson e os guarda
no vetor V y;

f ) Agora o FOR-NEXT vai extrair cada uma das linhas da matriz F (xi , yj )
e fazer o produto interno, de cada linha, com o vetor dos coeficientes V y,
conforme “quadro” à p. 256; observe que o resultado de cada um destes
produtos internos vai sendo guardado no vetor V L que estava inicialmente
“vazio”. Ao sair do laço o vetor V L guarda, em sua posição i, a soma da
linha i do “quadro” (apenas as somas entre os dois parêntesis maiores);
g) Agora calculamos o produto interno entre os vetores V L e V x e, para
hy
finalizar, multiplicamos o resultado por 3hx
8 · 3 .
Por exemplo, entrando no programa anterior com os seguintes dados:

→ 0 π/2 0 0.4 3 4

recebemos de volta: 0.1014, como valor para a integral dupla da p. 256.

∗ ∗ ∗

Que o meu pensamento quis Se quisermos procurar “Deus” na


aproximar-se dos problemas do espı́rito fı́sica, o vácuo é o melhor lugar onde fazê-
pela via de uma diversa experimentação lo. Enquanto estado básico subjacente
de caráter abstrato, especulativo, resul- de tudo que existe, o vácuo tem todas as
tante das conclusões de processos lógicos caracterı́sticas do Deus imanente ou da
da mais moderna fı́sico-matemática. ր divindade de que falam os mı́sticos.
(Pietro Ubaldi/Ascensões Humanas) (Danah Zohar/fı́sica e filósofa)

1 0 0
0 1 0
1 1 0
0 0 0 = {}
0 0 1
(Universo)
1 0 1
0 1 1
1 1 1
+

Assim como um dia a explosão aconteceu e milhões de coisas nasce-


ram a partir do nada, da mesma maneira, quando a implosão acontece,
formas e nomes desaparecem, e novamente o nada nasce daı́. O cı́rculo
está completo. (Osho/Buda, p. 112)

259
7.3 Equações Diferenciais Ordinárias
Introdução: Nesta seção implementaremos as principais regras para a reso-
lução numérica de equações diferenciais ordinárias− as quais constam nos
livros de Cálculo Numérico.
Antes, veremos alguns resultados do Cálculo que serão necessários pos-
teriormente.
Regra da Cadeia Para Derivadas
Teorema 13 (Regra da Cadeia de Duas Variáveis). Se x = x(t) e y =
y(t) forem diferenciáveis
 em t e se z = f (x, y) for diferenciável no ponto
(x, y) = x(t), y(t) , então z = f (x(t), y(t)) é diferenciável em t e

dz ∂z dx ∂z dy
= +
dt ∂x dt ∂y dt
onde as derivadas ordinárias são calculadas em t e as derivadas parciais em
(x, y).
Derivação implı́cita
Considere o caso especial em que z = f (x, y) é uma função de x e y e
y é uma função diferenciável de x. Então a equação anterior passa a ser:
dz ∂f dx ∂f dy ∂f ∂f dy
= + = + (7.27)
dx ∂x dx ∂y dx ∂x ∂y dx
Polinômios e Séries de Taylor e Maclaurin
Definição 14 (Polinômio de Maclaurin). Se f puder ser diferenciada n
vezes em 0, então defini-se o enésimo polinômio de Maclaurin para f
como sendo
f ′′ (0) 2 f ′′′ (0) 3 f (n) (0) n
pn (x) = f (0) + f ′ (0)x + x + x + ··· + x
2! 3! n!
Este polinômio tem a propriedade de que seu valor e o de suas n primeiras
derivadas coincidem com os valores de f e o de suas n primeiras derivadas
em x = 0.
Os polinômios de Maclaurin aproximam uma função f na vizinhança
de x = 0. Vamos agora considerar o caso mais geral de aproximar f nas
proximidades de um ponto arbitrário x0 do domı́nio.
Definição 15 (Polinômio de Taylor). Se f puder ser diferenciada n vezes
em x0 , então defini-se o enésimo polinômio de Taylor para f em torno
de x = x0 como sendo

f ′′ (x0 ) f (n) (x0 )


pn (x) = f (x0 ) + f ′ (x0 )(x − x0 ) + (x − x0 )2 + · · · + (x − x0 )n
2! n!

260
Enésimo resto
Denotamos por Rn (x) o erro da aproximação f (x) ∼ = pn (x), que consiste
na diferença entre f (x) e seu enésimo polinômio de taylor, ou seja,
n
X f (k)(x0 )
Rn (x) = f (x) − pn (x) = f (x) − (x − x0 )k
k!
k=0

Ou, de modo equivalente,


n
X f (k) (x0 )
f (x) = pn (x) + Rn (x) = (x − x0 )k + Rn (x)
k!
k=0

A função Rn (x) é denominada enésimo resto da série de Taylor de f e


a fórmula acima é chamada de fórmula de Taylor com resto.
O próximo teorema nos fornece uma cota para Rn (x) que dá uma in-
dicação da precisão da aproximação f (x) ∼
= pn (x).

Teorema 14 (Teorema da Estimativa do Resto). Se a função f puder ser


derivada n + 1 vezes num intervalo I contendo o ponto x0 , e se M for uma
cota superior para |f (n+1) (x)| em I, ou seja, se |f (n+1) (x)| ≤ M para todo
x em I, então
M
|Rn (x)| ≤ |x − x0 |n+1
(n + 1)!
para todo x em I.

Definição 16 (Série de Taylor e de Maclaurin). Se a função f possuir


derivadas de todas as ordens em x0 , então dizemos que a série

X f (k) (x0 ) f ′′ (x0 )
(x − x0 )k = f (x0 ) + f ′ (x0 )(x − x0 ) + (x − x0 )2
k! 2!
k=0

f (k) (x0 )
+ ··· + (x − x0 )k + · · ·
k!
é a série de Taylor para f em torno de x = x0 . No caso particular em
que x0 = 0, essa série se torna

X f (k)(0) k f ′′ (0) 2 f (k) (0) k
x = f (0) + f ′ (0)x + x + ··· + x + ···
k! 2! k!
k=0

caso em que é chamada série de Maclaurin para f .

261
Definição 17. Uma equação diferencial ordinária de ordem n é uma equação
da seguinte forma

F x, y(x), y ′ (x), y ′′ (x), . . . , y (n) (x) = 0

onde constam a função incógnita y = y(x) e suas derivadas até a ordem n.

Exemplos: A seguir vemos algumas equações diferenciais ordinárias, onde:

dy d2 y
y′ = , y ′′ = 2 , . . .
dx dx
dy
a) = 2x + 3, de ordem 1;
dx

d2 y dy
b) y 2
+ 3x = x − 2, de ordem 2;
dx dx

d2 θ g
c) + sen θ = 0.
dt2 L
Esta equação, de ordem 2, e não linear − devido a presença do termo
sen θ − modela a oscilação de um pêndulo.

d4 y d3 y d2 y dy
d) + + + + y = 1, de ordem 4.
dx4 dx3 dx2 dx

7.3.1 Problema de valor inicial (PVI)


Definição 18. Um problema de Valor Inicial (PVI) de primeira ordem
consiste de uma equação diferencial y ′ = f (x, y), x ≥ x0 , e uma condição
inicial y(x0 ) = y0 , onde y0 é um valor dado, chamado de valor inicial.

Resumimos da seguinte forma:


(
y ′ = f (x, y)
PV I : (7.28)
y(x0 ) = y0

Não é possı́vel, em geral, encontrar a solução analı́tica y = y(x) do


PVI por manipulação simbólica da equação diferencial, daı́ a necessidade
de métodos numéricos como os que serão aqui desenvolvidos.
Para resolver numericamente um PVI devemos inicialmente discretizar o
intervalo [ a, b ]:

a = x0 < x1 < x2 < · · · < xn−1 < xn = b

Ao conjunto acima denomina-se uma partição do intevalo [ a, b ].

262
Para obter uma partição (regular) do intervalo [ a, b ] em N subintervalos
de mesmo comprimento, fazemos h = b−a N , no que resulta

xn = x0 + n h, n = 0, 1, 2, . . . , N.

[ ] x
a = x0 x1 x2 ... xn−1 xn = b
h h h

Importante: Convenciona-se usar a notação y(xn ) (n = 0, 1, 2, . . .)


para indicar a solução exata do PVI nos pontos da partição, graficamente:

f (x)

y(xn ) y(x)

y(x0 )

h h ... h

x
0 a = x0 x1 x2 xn−1 xn = b

Por outro lado a notação yn (x) é reservada para a solução numérica


aproximada do PVI.

f (x)
y(x) solução exata
ւ
y(xn )
←− yn (x) solução aproximada

y(x0 ) = y0

...

x
0 a = x0 x1 x2 xn−1 xn = b

A solução numérica yn (x) é a funçao linear por partes, cujo gráfico é uma
poligonal com vétices nos pontos (xn , yn ), onde yn será calculado utilizando-
se algum dos métodos numéricos que serão dados logo mais.

263
Nota: É um resultado da Análise Matemática que dada qualquer função
contı́nua em um intervalo fechado [ a, b ] esta função pode ser aproximada −
com qualquer precisão que se deseje − por uma “função poligonal”.
De outro modo: dada qualquer f , contı́nua em um intervalo [ a, b ], existe
uma poligonal g arbitrariamene próxima de f no seguinte sentido:

d(f, g) = max |f (x) − g(x)| : x ∈ [ a, b ] < ε

onde ε > 0 é qualquer precisão arbitrariamene fixada. d(f, g) é a distância


entre as funções f e g. (p. ex., veja [12], p. 223)
Erro local: o erro local, cometido nas aproximações em cada ponto da
partição, é a diferença entre o valor exato da solução da equação diferencial
e o valor numérico aproximado, isto é:

e(xn ) = y(xn ) − yn , n = 0, 1, 2, . . . , N. (7.29)

Observe a “geometria do erro” no gráfico anterior.

7.3.2 Métodos baseados em série de Taylor


Vamos adaptar os resultados da série de Taylor, vista anteriormente, aos
nossos propósitos. Considere f uma função contı́nua e, ademais, supon-
hamos que todas as suas derivadas existam no ponto x = x0 = xn . A série
de Taylor nas vizinhanças do ponto x0 = xn é reescrita como∗

f ′′ (xn )
f (x) = f (xn ) + f ′ (xn )(x − xn ) + (x − xn )2
2!
f (k) (xn )
+ ··· + (x − xn )k + · · ·
k!
Vamos truncar o desenvolvimento da série de Taylor no p-ésimo termo, e,
por um “abuso de notação”, vamos continuar usando o sinal de igualdade,
assim:

f ′′ (xn ) f (p) (xn )


f (x) = f (xn ) + f ′ (xn )(x − xn ) + (x − xn )2 + · · · + (x − xn )p
2! p!
Vamos agora considerar nesta expressão x = xn+1 = xn + h, ou ainda,
x − xn = h, então:

f ′′ (xn ) 2 f (p) (xn ) p


f (xn+1 ) = f (xn ) + f ′ (xn ) h + h + ··· + h (7.30)
2! p!


Há um teorema do Cálculo que afirma que a igualdade em questão é verdadeira em
um ponto x se e somente se lim Rn (x) = 0. Portanto, estamos admitindo que este seja
n → +∞
o caso.

264
Vamos reconsiderar o PVI:
(
y ′ = f (x, y)
y(x0 ) = y0
Admitindo como hipótese que a solução y(x) do PVI tenha derivadas
contı́nuas para todo x ∈ [ a, b ], então substituindo em (7.30), temos

y ′′ (xn ) 2 y (p) (xn ) p


y(xn+1 ) = y(xn ) + y ′ (xn ) h + h + ··· + h
2! p!
Usando a notação,
d
yn ∼
= y(xn ), yn′ = f (xn , yn ), yn′′ = f (xn , yn ), . . .
dx
Observe, yn ∼
= y(xn ) ⇒ yn+1 ∼
= y(xn+1 ), então

yn′′ 2 y (p)
yn+1 = yn + yn′ h + h + · · · + n hp
2! p!
Ou, reconfigurando a notação:

h2 ′′ hp (p)
yn+1 = yn + h yn′ + yn + · · · + y (7.31)
2! p! n
que é o método de Taylor de ordem p.

7.3.3 Método de Euler


O método de Euler para a solução aproximada do PVI consiste no desen-
volvimento da série de Taylor para p = 1:

yn+1 = yn + h yn′ (7.32)

como yn′ = f (xn , yn ), resulta: (Método de Euler)

yn+1 = yn + h f (xn , yn ) , (n = 0, 1, 2, . . .)

Interpretação Geométrica: O método de Euler, desenvolvido por volta


de 1768, é também conhecido como o método da reta tangente.
Vamos considerar como poderı́amos aproximar a solução y = y(x) do
PVI (7.28) (p. 262) próximo de x = x0 .
Sabemos que o gráfico da solução (p. 263) contém o ponto (x0 , y0 ) e, da
equação diferencial (do PVI), sabemos, também, que a inclinação da reta
tangente ao gráfico nesse ponto é y ′ = f (x0 , y0 ). Sendo assim, podemos

265
escrever uma equação para a reta tangente à curva solução em (x0 , y0 ), isto
é:
y = y0 + f (x0 , y0 )(x − x0 )

f (x)
reta tangente - solução aproximada: yn (x)
y1
y(x1 )
y0 y(x)
solução exata

x
0 x0 x1

A reta tangente é uma boa aproximação para a curva solução em um in-


tervalo suficientemente pequeno. Se x1 estiver suficientemente próximo de
x0 , podemos aproximar y(x1 ) pelo valor obtido substituindo-se x = x1 na
equação da reta tangente no ponto x = x0 ; isto é,

y1 = y0 + f (x0 , y0 )(x1 − x0 )

Para prosseguir, podemos tentar repetir o procedimento. Infelizmente,


não conhecemos o valor y(x1 ) da solução em x1 . O melhor que podemos
fazer é usar o valor aproximado dado acima, y1 , em seu lugar.
Encontramos, então, a reta passando no ponto (x1 , y1 ) com coeficiente
angular f (x1 , y1 ), isto é,

y = y1 + f (x1 , y1 )(x − x1 )

Para aproximar y(x) no próximo ponto x2 , usamos esta última equação,


obtendo:
y2 = y1 + f (x1 , y1 )(x2 − x1 )
Continuando este processo (algoritmo), usamos o valor de y calculado
em cada etapa para determinar o coeficiente angular para a aproximação
seguinte.
Generalizando os passos anteriores obtemos uma expressão geral para
yn+1 assim:
yn+1 = yn + f (xn , yn )(xn+1 − xn )
fazendo xn+1 − xn = h, obtemos:

yn+1 = yn + h f (xn , yn ) , (n = 0, 1, 2, . . .)

266
Algoritmo
Dado o PVI:
(
y ′ = f (x, y)
y(x0 ) = y0
podem ser adotados os seguintes passos para sua resolução:
1) Declare:
(i) A função f (x, y);
(ii) condições iniciais: y(x0 ) = y0 ;
(iii) intervalo [ a, b ], onde a = x0 ;
b−a
(iv) número de subintervalos N e calcule h = N ;
2) Para n = 0, 1, . . . , N − 1, faça:
Calcule:
inı́cio
xn+1 = xn + h
yn+1 = yn + h f (xn , yn )
fim

Exemplo: Calcule, pelo método de Euler, a solução aproximada do seguinte


PVI:
(
y ′ = f (x, y) = y − x
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 4 subintervalos.
Solução: Inicialmente temos:
b−a 1−0 1
h= = = = 0. 25
N 4 4
A discretização do intevalo fica: (n = 0, 1, 2, 3, 4)

p p p p p x
x0 = 0 x1 = 1
x2 = 1
x3 = 3 x4 = 1
4 2 4

O método de Euler consiste no algoritmo:

yn+1 = yn + h f (xn , yn )

Sendo f (x, y) = y − x, temos f (xn , yn ) = yn − xn , sendo assim resulta:

yn+1 = yn + 0. 25 (yn − xn ) = − 0. 25 xn + 1. 25 yn

267
Então:
n = 0 ⇒ y1 = −0. 25 x0 + 1. 25 y0 = −0. 25 · 0 + 1. 25 · 2 = 2. 5000
n = 1 ⇒ y2 = −0. 25 x1 + 1. 25 y1 = −0. 25 · 0.25 + 1. 25 · 2. 5 = 3. 0625
n = 2 ⇒ y3 = −0. 25 x2 + 1. 25 y2 = −0. 25 · 0.50 + 1. 25 · 3. 0625 = 3. 7031
n = 3 ⇒ y4 = −0. 25 x3 + 1. 25 y3 = −0. 25 · 0.75 + 1. 25 · 3. 7031 = 4. 4414

Observe a geometria:
y4
y3
y2
y1
y0

p p p p p x
x0 = 0 1 1 3 x4 = 1
x1 = 4
x2 = 2
x3 = 4

Apenas para efeitos de comparação, a solução analı́tica (exata) da equação


diferencial proposta é: y(x) = ex + x + 1. No gráfico fica assim:
y y
y(x) y(x)
4.7183 4.7183
p

p yn (x)

2 2
p

1 1
p

x x
−1
p 0 p1 −1
p 0 p1

A tabela a seguir exibe a solução exata − calculada nos pontos da


partição −, a solução encontrada pelo método de Euler e o erro local.

n xi Sol. exata y(xn ) Sol. aprox. yn Erro = y(xn ) − yn


0 0. 00 2. 0 2. 0 0. 0
1 0. 25 2. 5340 2. 5000 0. 0340
2 0. 50 3. 1487 3. 0625 0. 0862
3 0. 75 3. 8670 3. 7031 0. 1639
4 1. 00 4. 7183 4. 4414 0. 2769

268
O programa que implementa o método de Euler é como a seguir:

≪ → a b N yo
≪ −3 SF p (b − a)/N p EVAL p h p STO
a b FOR xi
xi
h STEP
p p
N 1 + → ARRY x STO
p p
{} N 1 + + yo CON y STO
1 N FOR n
p
y(n) + h ∗ f (x(n), y(n)) p EVAL p
y(n + 1) p STO
NEXT y

Comentários:
1o ) Entramos com a, b N (no. de subintervalos) e yo (condição inicial);
2o ) A função f (x, y) deve ser declarada à parte, assim:

p
≪ → x y y − xp ≫

armazene este programa na variável f ;


3o ) O primeiro laço FOR gera a partição (ou malha) do intervalo [ a, b ] e
armazena o resultado no vetor x ([ x1 x2 . . . xN+1 ]) (linha seis);
4o ) Na linha sete (segunda após o h STEP) criamos um vetor constante
com N +1 posições, sendo que a constante é o valor inicial yo e armazenamos
o resultado no vetor y;
5o ) No laço seguinte implementamos a fórmula de Euler.
Para um melhor entendimento, execute-o no DBUG.
Por exemplo, entrado com os dados do exemplo anterior:

→ 0 1 4 2

recebemos de volta o seguinte vetor:

[ 2 2.5000 3.0625 3.7031 4.4414 ]

269
7.3.4 Método de Taylor de ordem p = 2
Truncando o desenvolvimento da solução y(xn ) do PVI, em série de Tay-
lor, na ordem p = 2, obtemos um outro método ainda mais preciso que o de
Euler: (eq. (7.31), p. 265)

h2 ′′
yn+1 = yn + h yn′ + y (7.33)
2! n
No PVI,
(
y ′ = f (x, y)
(7.34)
y(x0 ) = y0

façamos a seguinte mudança de notação: z = y ′ = f (x, y).


Sendo z = f (x, y) uma função de x e y e y é uma função x, isto é,
y = y(x), podemos usar a fórmula (7.27): (p. 260)

dz ∂f ∂f dy
= +
dx ∂x ∂y dx
para obter:
d ′ ∂f ∂f dy
(y ) = + = fx + fy y ′
dx ∂x ∂y dx
Ou ainda:
yn′′ = fx (xn , yn ) + fy (xn , yn ) yn′ (7.35)
Sendo que de (7.34), temos: yn′ = f (xn , yn ). Estes resultados em (7.33) nos
fornecem:
h2
yn+1 = yn + h f (xn , yn ) + [ f (x , y ) + fy (xn , yn ) f (xn , yn ) ]
2! x n n
Exemplo: Calcule, pelo método de Taylor de ordem p = 2, a solução
aproximada do seguinte PVI:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.
Solução: Inicialmente temos:
b−a 1−0 1
h= = = = 0. 2
N 5 5
Para f (x, y) = x − y + 2, temos: fx (x, y) = 1 e fy (x, y) = −1. Portanto:

f (x, y) = x − y + 2 ⇒ f (xn , yn ) = xn − yn + 2
fx (x, y) = 1 ⇒ fx (xn , yn ) = 1
fy (x, y) = −1 ⇒ fy (xn , yn ) = −1

270
Substituindo estes resultados na equação deduzida anteriormente, temos:

h2
yn+1 = yn + h f (xn , yn ) + [ f (x , y ) + fy (xn , yn ) f (xn , yn ) ]
2! x n n
h2
yn+1 = yn + h (xn − yn + 2) + [ 1 + (−1) · (xn − yn + 2) ]
2!
Substituindo o valor de h = 0.2 e simplificando, obtemos:

yn+1 = 0.18 xn + 0.82 yn + 0.38

Então, para n = 0, 1, 2, 3, 4, obtemos:

y1 = 0.18 x0 + 0.82 y0 + 0.38 = 0.18 · 0 + 0.82 · 2 + 0.38 = 2.0200


y2 = 0.18 x1 + 0.82 y1 + 0.38 = 0.18 · 0.2 + 0.82 · 2.0200 + 0.38 = 2.0724
y3 = 0.18 x2 + 0.82 y2 + 0.38 = 0.18 · 0.4 + 0.82 · 2.0724 + 0.38 = 2.1514
y4 = 0.18 x3 + 0.82 y3 + 0.38 = 0.18 · 0.6 + 0.82 · 2.1514 + 0.38 = 2.2521
y5 = 0.18 x4 + 0.82 y4 + 0.38 = 0.18 · 0.8 + 0.82 · 2.2521 + 0.38 = 2.3707

O programa a seguir implementa o método de Taylor de ordem p = 2:

≪ com a, b, N, f e yo p p PROMPT → a b N f yo
p p Entre

≪ −3 SF − 105 SF p (b − a)/N p EVAL p h p STO


a b FOR xi
xi
h STEP
p p
N 1 + → ARRY x STO
{} N 1 + + yo CON py p STO
−3 CF f DERVX pf x p STO
p p p p
f Y DERIV fy STO
1 N FOR n
X p x(n) p EVAL Y p y(n) p EVAL 4 → LIST
p LA p STO p y(n) p EVAL h f LA | EVAL
∗ + h 2 ∧ 2 / fx LA | EVAL
fy LA | EVAL f LA | EVAL
∗ + ∗ + p y(n + 1) p STO
NEXT y


271
Comentários:
1o ) Para o PVI resolvido anteriormente entramos com os seguintes dados;

p
0 1 5 X −Y +2p 2
Observamos que a função f (x, y) = x − y + 2 deve ser fornecida com as
variáveis em maiúsculo, haja vista que a variável x é utilizada no programa
para armazenar o vetor discretização.
O programa nos devolve o seguinte vetor:

[ 2 2.0200 2.0724 2.1514 2.2521 2.3707 ]

2o ) Vamos comentar a linha

−3 CF f DERVX pf x p STO

Desativamos o sinalizador 03 pois agora vamos trabalhar simbólicamente −


calcularemos as derivadas fx e fy ; para mais informações sobre os comandos
DERVX e DERIV veja a p. 332.
3o ) Na primeira linha após o FOR n montamos a lista

{ X x(n) Y y(n) }

para posteriormente avaliarmos a função e suas derivadas com a utilização


do comando | (p. 321) Outra forma de substituição. . .
Vamos resolver o exemplo anterior pelo método de Taylor de ordem p = 1
(Euler), para efeitos de comparação.
Exemplo: Calcule, pelo método de Taylor de ordem p = 1, a solução
aproximada do seguinte PVI:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.
Solução: Utilizaremos o programa dado à p. 269. A função f (x, y) deve
ser declarada à parte, assim:

p
≪ → x y x − y + 2p ≫

armazene este programa na variável f .


Pois bem, entrando com os dados: 0 1 5 2; recebemos de volta o vetor:

[ 2 2.0000 2.0400 2.1120 2.2096 2.3277 ]

272
Utilizando a solução exata, y(x) = e−x + x + 1, construimos a seguinte
tabela − na qual constam os erros locais de ambos os métodos.

Sol. aprox. Sol. aprox. Erro Erro


n xi Sol. exata
(p=1) (p=2) (p=1) (p=2)

0 0. 0 2. 0 2. 0 2. 0 0. 0 0. 0
1 0. 2 2. 0187 2. 0000 2. 0200 0. 0187 −0. 0013
2 0. 4 2. 0703 2. 0400 2. 0724 0. 0303 −0. 0021
3 0. 6 2. 1488 2. 1120 2. 1514 0. 0368 −0. 0026
4 0. 8 2. 2493 2. 2096 2. 2521 0. 0397 −0. 0028
5 1. 0 2. 3679 2. 3277 2. 3707 0. 0402 −0. 0028

Os respectivos erros foram calculados segundo a equação (7.29) (p. 264).


Como era de se esperar o método de Taylor de ordem p = 2 forneceu resul-
tados mais precisos − que o de Euler.
Plotando as soluções, temos:

y y

p=2
y(x)
ւ
2 2 տ p=1
p

1 1
p

x x
−1
p 0 p1 −1
p 0 p1

A “olho nu” as duas soluções são quase indistinguiveis, entretanto os


pontos de uma encontram-se por sobre a curva (sol. exata) e a da outra por
baixo.
Vejamos mais um exemplo de aplicação do programa.
Exemplo: Calcule, pelo método de Taylor de ordem p = 2, a solução
aproximada do seguinte PVI:
 2y
 y ′ = f (x, y) =
 + (x + 1)3
x+1


y(x0 ) = y(0) = 3

para x ∈ [ a, b ] = [ 0, 1 ] e h = 0.2.

273
b−a
Solução: Temos N = h = (1 − 0)/0.2 = 5. Entramos com os dados:
0 1 5 2 ∗ Y /(X + 1) + (X + 1) ∧ 3 p 3
p

O programa nos devolve o seguinte vetor:


[ 3.0000 4.6200 6.7779 9.5976 13.2222 17.8141 ]
A solução exata do PVI é dada por:
1
y(x) = [ (x + 1)4 + 5(x + 1)2 ]
2
Por exemplo, y(1) = 21 [ (1 + 1)4 + 5(1 + 1)2 ] = 18.

7.3.5 Métodos de Runge-Kutta


Se tentarmos prosseguir no método de taylor de ordem p (p. 265) surgem
alguns incovenientes computacionais; por exemplo, deveremos tratar si-
multâneamente com várias funções − f e suas derivadas −, o que aumenta
significativamente o espaço ocupado na memória do computador. Apenas
para contextualizar, se, por teimosia, formos considerar a potência seguinte
(p = 3), além da equação (7.35) (p. 270), teremos ainda que considerar

yn′′′ = fxx + 2fxy f + f 2 fyy + fy fx + fy2 f (x , y )
n n

que, convenhamos, até para a HP 50g torna-se oneroso.


Estaremos agora considerando uma outra classe de métodos para a reso-
lução do PVI: Métodos de Runge-Kutta∗ . Esses métodos possuem precisão
equivalentes aos métodos de Taylor com a vantagem de que evitam a neces-
sidade do cálculo de derivadas de ordem elevada. Então,
Método de Runge-Kutta de ordem 1
O método de Runge-Kutta mais simples é o de primeira ordem dado por:
yn+1 = yn + h k1 , k1 = f (xn , yn )
Ora, mas este método nada mais é que o de Euler dado à p. 265.
Método de Runge-Kutta de ordem 2
Este método consiste no seguinte algoritmo† :


 yn+1 = yn + h2 (k1 + k2 )


k1 = f (xn , yn )




k2 = f (xn + h, yn + h k1 )
o qual também é conhecido como método de Euler aperfeiçoado.

Carl David Tolmé Runge (1856-1927) e Wilhelm Kutta (1867-1944).

Para a dedução (ou justificativa) deste, e dos métodos seguintes, o leitor poderá
consultar alguma das obras listadas nas referências.

274
O programa seguinte implementa o método em questão.

≪ → a b N yo
≪ −3 SF p (b − a)/N p EVAL p p
h STO
a b FOR xi
xi
h STEP
p p
N 1 + → ARRY x STO
p p
{} N 1 + + yo CON y STO
1 N FOR n
p
f (x(n), y(n)) p EVAL p
k1 p STO
p
f (x(n) + h, y(n) + h ∗ k1) p EVAL p
k2 p STO
p y(n) + h ∗ (k1 + k2)/2 p EVAL p y(n + 1) p STO
NEXT y

Exemplo: Usando o método de Euler aperfeiçoado, calcule a solução


do PVI dado por:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.
Solução: A função f (x, y) é a mesma que foi declarada à p. 272.
Pois bem, entrando com os dados: 0 1 5 2; recebemos de volta o vetor:

[ 2 2.0200 2.0724 2.1514 2.2521 2.3707 ]

− Método de Euler modificado


Um outro método de Runge-Kutta também bastante utilizado é:
 
 yn+1 = yn + h f xn + h2 , yn + h2 k1
 k1 = f (xn , yn )

o qual é conhecido como método de Euler modificado.

275
O programa a seguir implementa este método.

≪ → a b N yo
≪ −3 SF p (b − a)/N p EVAL p p
h STO
a b FOR xi
xi
h STEP
p p
N 1 + → ARRY x STO
p p
{} N 1 + + yo CON y STO
1 N FOR n
p
f (x(n), y(n)) p EVAL p
k1 p STO
p
y(n) + h ∗ f (x(n) + h/2, y(n) + h/2 ∗ k1) p EVAL
p y(n + 1) p STO
NEXT y

Exemplo: Usando o método de Euler modificado, calcule a solução do


PVI dado por:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.
Solução: Entrando com os dados: 0 1 5 2; recebemos de volta o vetor:

[ 2 2.0200 2.0724 2.1514 2.2521 2.3707 ]

Utilizando a solução exata, y(x) = e−x + x + 1, construimos a seguinte


tabela − comparando os diversos métodos.

Euler Euler Taylor


n xi Sol. exata Euler
modificado aperfeiçoado ordem 2
0 0. 0 2. 0 2. 0 2. 0 2. 0 2. 0
1 0. 2 2. 0187 2. 0000 2. 0200 2. 0200 2. 0200
2 0. 4 2. 0703 2. 0400 2. 0724 2. 0724 2. 0724
3 0. 6 2. 1488 2. 1120 2. 1514 2. 1514 2. 1514
4 0. 8 2. 2493 2. 2096 2. 2521 2. 2521 2. 2521
5 1. 0 2. 3679 2. 3277 2. 3707 2. 3707 2. 3707

276
Inferimos que os métodos Euler modificado, Euler aperfeiçoado e Taylor
de ordem 2 nos fornecem os mesmos resultados; comparando com a solução
exata vemos que estes três métodos são superiores ao de Euler (Taylor de
ordem 1), como era de se esperar.
Método de Runge-Kutta de ordem 3
Este método consiste no seguinte algoritmo:

 y = yn + h9 (2k1 + 3k2 + 4k3 )
 n+1





 k1 = f (xn , yn )



 k2 = f (xn + 12 h, yn + 1
2 hk1 )



k3 = f (xn + 34 h, yn + 3

4 hk2 )

O programa seguinte implementa o método em questão.

≪ → a b N yo
≪ −3 SF p (b − a)/N p EVAL p h p STO
a b FOR xi
xi
h STEP
p p
N 1 + → ARRY x STO
{} N 1 + + yo CON py p STO
1 N FOR n
p
f (x(n), y(n)) p EVAL p
k1 p STO
p f (x(n) + h/2, y(n) + h/2 ∗ k1) p EVAL p k2 p STO
p
f (x(n) + 3/4 ∗ h, y(n) + 3/4 ∗ h ∗ k2) p EVAL p
k3 p STO
p
y(n) + h/9 ∗ (2 ∗ k1 + 3 ∗ k2 + 4 ∗ k3) p EVAL
p y(n + 1) p STO
NEXT y


Exemplo: Usando o método de Runge-Kutta de ordem 3, calcule a
solução do PVI dado por:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2

para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.

277
Solução: Entrando com os dados: 0 1 5 2; recebemos de volta o vetor:

[ 2 2.0187 2.0702 2.1487 2.2492 2.3677 ]

Método de Runge-Kutta de ordem 4


Dentre os métodos de Runge-Kutta o mais popular é o de ordem 4, dado
a seguir:


 yn+1 = yn + h6 (k1 + 2k2 + 2k3 + k4 )






 k1 = f (xn , yn )


k2 = f (xn + 12 h, yn + 21 h k1 )






 k3 = f (xn + 12 h, yn + 21 h k2 )




k4 = f (xn + h, yn + hk3 )

Este método é muito difundido nas rotinas de cálculo de computadores.


O programa seguinte implementa o método em questão.

≪ → a b N yo
≪ −3 SF p (b − a)/N p EVAL p hp STO
a b FOR xi
xi
h STEP
N 1 + → ARRY pxp STO
p p
{} N 1 + + yo CON y STO
1 N FOR n
p f (x(n), y(n)) p EVAL p k1 p STO
p p p
f (x(n) + h/2, y(n) + h/2 ∗ k1) EVAL k2 p STO
p
f (x(n) + 1/2 ∗ h, y(n) + 1/2 ∗ h ∗ k2) p EVAL p
k3 p STO
p f (x(n) + h, y(n) + h ∗ k3) p EVAL p k4 p STO
p y(n) + h/6 ∗ (k1 + 2 ∗ k2 + 2 ∗ k3 + k4) p EVAL
p
y(n + 1) p STO
NEXT y

278
Exemplo: Usando o método de Runge-Kutta de ordem 4, calcule a solução
do PVI dado por:
(
y ′ = f (x, y) = x − y + 2
y(x0 ) = y(0) = 2
para x ∈ [ a, b ] = [ 0, 1 ] e N = 5 subintervalos.
Solução: Entrando com os dados: 0 1 5 2; recebemos de volta o vetor:
[ 2 2.0187 2.0703 2.1488 2.2493 2.3679 ]
Utilizando a solução exata, y(x) = e−x + x + 1, construimos a
seguinte tabela − comparando alguns métodos, incluindo os dois últimos
de Runge-Kutta.

Euler Taylor Runge-Kutta Runge-Kutta


n xi Sol. exata
modificado ordem 2 ordem 3 ordem 4
0 0. 0 2. 0 2. 0 2. 0 2. 0 2. 0
1 0. 2 2. 0187 2. 0200 2. 0200 2. 0187 2. 0187
2 0. 4 2. 0703 2. 0724 2. 0724 2. 0702 2. 0703
3 0. 6 2. 1488 2. 2514 2. 1514 2. 1487 2. 1488
4 0. 8 2. 2493 2. 2521 2. 2521 2. 2492 2. 2493
5 1. 0 2. 3679 2. 3707 2. 3707 2. 3677 2. 3679

A melhor precisão foi obtida com o Runge-Kutta de ordem 4 que coincide


com a solução exata − com quatro casas decimais.
Vejamos mais um exemplo de aplicação do programa.
Exemplo: Usando o método de Runge-Kutta de ordem 4, calcule a solução
do PVI dado por:
 2y
 y ′ = f (x, y) =
 + (x + 1)3
x+1


y(x0 ) = y(0) = 3
para x ∈ [ a, b ] = [ 0, 1 ] e h = 0.2.
Solução: A função f (x, y) deve ser declarada à parte, assim:

p
≪ → x y 2 ∗ y/(x + 1) + (x + 1) ∧ 3 p ≫

p p
Após digitar: ENTER f STO
K
.
b−a
Temos ainda, N = h = (1 − 0)/0.2 = 5. Entramos com os dados:
0 1 5 3

279
O programa nos devolve o seguinte vetor:

[ 3.0000 4.6365 6.8203 9.6759 13.3476 17.9984 ]

Considerando a solução exata

1
y(x) = [ (x + 1)4 + 5(x + 1)2 ]
2
temos:

yn (x) : [ 3.0000 4.6365 6.8203 9.6759 13.3476 17.9984 ]

y(x) : [ 3.0000 4.6368 6.8208 9.6768 13.3488 18.0000 ]

Compare com Taylor (p = 2) (que envolve derivadas): (p. 273)

yn (x) : [ 3.0000 4.6200 6.7779 9.5976 13.2222 17.8141 ]

y(x) : [ 3.0000 4.6368 6.8208 9.6768 13.3488 18.0000 ]

∗ ∗ ∗

[. . .] Com base em tais observações e análises matemáticas, quanto


mais próximo das origens remontamos o universo, mais próximo chega-
mos da perfeição, a mais implicada de todas as ordens da realidade. A
natureza daquele vácuo perfeito pode conter a chave para o entendimento
do universo como um todo. Como comenta Leonard Susskind, fı́sico de
Stanford: “Qualquer um que sabe tudo sobre nada sabe tudo”.
(B. Alan Wallace/Dimensões Escondidas, p. 147)

∗ ∗ ∗

Exegese da unidade hiperimaginária (p. 82)

Sabemos que, dado um número complexo z, a interpretação geométrica


do produto i z é a de uma rotação de 90o do complexo z − no sentido
positivo, isto é anti-horário.
Pretendemos saber o que acontece, geometricamente, quando multipli-
camos um hipercomplexo w pela unidade hiperimaginária j = (0, 1).

280
Inicialmente recordamos a fórmula para rotação − de um ângulo θ − de
um ponto (x, y) no plano:

(x′ , y ′ ) = (x cos θ − y sen θ, x sen θ + y cos θ) (7.36)

Desta fórmula obtemos,

R( 90o ) = (x cos 90o − y sen 90o , x sen 90o + y cos 90o ) = (−y, x)
R( −90o ) = (x cos 90o + y sen 90o , −x sen 90o + y cos 90o ) = (y, −x)

Seja w = (x, y) ∈ H, então

(a, b) · (c, d) = ( a c ∓ b d, |a| d + b |c| )



(0, 1) · (x, y) = 0 · x ∓ 1 · y, |0| · y + 1 · |x|

Então,
j w = (−y, |x| )
Então,

Se x ≥ 0 ⇒ j w = (−y, x )
Se x ≤ 0 ⇒ j w = (−y, −x ) = −1 · (y, −x )

Comparando estes resultados com as equações em R( 90o ) e R( −90o ),


concluimos que pontos do lado direito do eixo y são rotacionados de 90o no
sentido anti-horário, assim:
y

jw w
q

x
q 0 q

e que pontos do lado esquerdo do eixo y sofrem uma rotação de 90o no


sentido horário seguida de uma reflexão em torno do eixo y, assim:
y y

jw
jw
q

w
q q

x x
q q 0 q q q 0 q

w
q

281
∗ ∗ ∗

Aproveitando esta página, que ficaria ociosa, vamos combinar a equação


de Bernoulli com a minha fórmula (eq. (4.8), p. 99) para obter uma identidade.
Temos:
m  
m m m m
X n
1 + 2 + 3 + ··· + n = a
j + 1 (m−j)
j=0

Onde:
j  
X j m
a(m−j) = (−1)k (1 − k + j)
k
k=0

Vamos reescrever fórmula de Bernoulli (p. 102)

(n + 1)m+1
1m + 2m + 3m + · · · + nm =
m+1
m  
X m Bk
+ (n + 1)m−k+1
k m−k+1
k=1

m  
X m Bk
= (n + 1)m−k+1
k m−k+1
k=0

Igualando o lado direito de ambas as equações, resulta:


m   m  
X m Bk m−k+1
X n
(n + 1) = a
k m−k+1 j + 1 (m−j)
k=0 j=0

Vamos abrir esta equação para m = 2, por exemplo,


2   2  
X 2 Bk 2−k+1
X n
(n + 1) = a
k 2−k+1 j + 1 (2−j)
k=0 j=0

Os coeficientes a(2−j) (j = 0, 1, 2) valem, 1, 3, 2, respectivamente.


Então, desenvolvendo, temos:
   
(n + 1)3 2 n n
B0 + B1 (n + 1) + B2 (n + 1) = n + ·3+ ·2
3 2 3

uma identidade relacionando os três primeiros coeficientes de Bernoulli.

282
Capı́tulo 8
TRAÇANDO GRÁFICOS
Sois de tal modo levados a vos tomar
por tipos do Universo, que credes sem-
pre que fora do vosso mundo não há
mais nada. Pareceis verdadeiramente
com esses selvagens que nunca saı́ram de
sua ilha e crêem que o mundo não vai
mais longe. (O Livro dos Médiuns)

8.1 Gráfico de funções


Introdução
Neste capı́tulo trataremos da plotagem de gráficos bidimensionais, fare-
mos um estudo relativamente detalhado; mostraremos, ademais, como tra-
balhar gráficos dentro da estrutura de um programa, estaremos ainda tratando
da animação de gráficos e figuras − um recurso interessante que a HP 50g nos
disponibiliza.
Para acessar o ambiente de plotagem de gráficos na calculadora, usamos
a sequência de teclas 2D/3D ( F4 D ):

 
 PLOT SETUP
Type: Function ∡Rad
EQ:

Indep: pX p Simult XConnect


H-Tick: 10. V-Tick: 10. XPixels

Choose type of plot


CHOOS AXES  ERASE DRAW

283
Atenção!: Se você estiver usando o modo RPN estas duas teclas devem ser
pressionadas simultaneamente. Ou ainda: mantenha a tecla pressiona-
da e, em seguida, pressione a tecla 2D/3D ( F4 D ).
− Um pixel é cada um dos pontos no visor da calculadora que pode ser
ligado (escuro) ou desligado (claro) para produzir o texto ou gráficos. O
visor gráfico da calculadora tem 131 pixels por 64 pixels.
Configurações:
• A marca em − Simult significa que se você tem uma ou mais plotagens no
mesmo gráfico, eles serão plotados simultaneamente ao produzir o gráfico.
• A marca em − Connect significa que a curva será uma curva contı́nua em
vez de um conjunto de pontos individuais.
• Uma marca em − Pixels significa que as marcas indicadas pelo H-Tick e
V-Tick será separadas por estes diversos pixels.
• O valor padrão para ambos por H-Tick e V-Tick é 10.
A tı́tulo de ilustração vamos plotar o gráfico da função y = sin x. Ao
entrar no ambiente gráfico (como dito acima), em Type (tipo de plotagem)
devemos ter Function, como no visor acima, (os tipos de plotagem estão
disponı́veis na tecla virtual CHOOS ). Inicialmente certifique-se que sua
calculadora esteja operando no modo angular radiano (veja o campo superior

à direita do visor); após “desça” com o botão para EQ (‘EQ’ é a variável
que armazena o objeto que irá ser plotado, por exemplo a equação da função
a ser desenhada), abra plics e digite sin( x ), em seguida pressione ENTER .
Agora vamos redimensionar a janela de plotagem, isto é, vamos escolher,
por exemplo, plotar esta função no intervalo [ 0, 2π ]. Para isto pressione,
simultaneamente, as teclas WIN ( F2 B ):

 
 PLOT WINDOW - FUNCTION 
H-View: -6.5 6.5
V-View: -3.9 4.
Indep Low: Default High : Default
Step: Default pixel

Enter MiniMUM horizontal value


EDIT AUTO ERASE DRAW

Para o valor mı́nimo de x digite 0 e pressione ENTER . Para colocar 2π


no extremo direito de H-View, pressione NXT
L
em seguida a tecla virtual

CALC . Delete o valor anterior (isto é, 6.5) coloque na pilha os valores 2 e
π multiplique-os e pressione OK . Para preencher os dois argumentos da
faixa vertical, V-View, você tem duas opções: digita diretamente os valores,

284
por exemplo,
H-View : −1.0 1.0
ou digita a tecla virtual AUTO (automático). Finalmente, pressione as
teclas virtuais: ERASE DRAW , para obter um gráfico similar ao seguinte:

ZOOM (X,Y) TRACE FCN EDIT CANCL

Nota: ERASE apaga algum eventual gráfico que tenha sido traçado
anteriormente; enquanto DRAW traça o novo gráfico.
Se o leitor quiser apagar o menu − para uma melhor visualização do
gráfico − digite a sequência de teclas:

EDIT NXT MENU


L

Plotando funções definidas por mais de uma sentença


Vamos plotar, por exemplo, o gráfico da função definida por:


 −x, se x ≤ −1;

f (x) = 1, se − 1 < x ≤ 1;


 2
x , se x > 1.

O gráfico dessa função é como a seguir

y=f (x)
4
p

3
p

2
p

1
p

p p p p p p x
−3 −2 −1 0 1 2 3

285
Inicialmente convertemos a função em um programa, assim:


IF p x ≤ −1p
THEN p − x p
ELSE
IF p x > −1 AND x ≤ 1 p
THEN 1
ELSE p x ∧ 2p
END
END

Armazene este programa na variável EQ: p EQp STO


K . Agora entre no
ambiente gráfico, com:

2D/3D ( F4 D )

(Simultâneamente). Observe que o programa a ser plotado já se encontra


nesta janela.

Cancele, ON , e redimensione a janela de plotagem, WIN ( F2 B ),


digite os seguintes valores:

 
 PLOT WINDOW - FUNCTION 
H-View: -2 2
V-View: -0.5 2
Indep Low: Default High : Default
Step: Default pixel

Enter MiniMUM horizontal value


EDIT AUTO ERASE DRAW

Em seguida, ERASE DRAW .

8.1.1 Gerando uma tabela de valores para uma função


A combinação TBLSET ( F5 E ) pressionadas simultâneamente, se

estiver no modo RPN, permite que o usuário produza uma tabela de valo-
res de funções. Por exemplo, produziremos uma tabela da função dada por
y = x2 , no intervalo 0 ≤ x ≤ 1 seguindo estas instruções:
• Geraremos valores desta função, definidos acima para valores de x de 0
até 1, com aumentos de 0.2.

286
Primeiro, precisamos assegurar que o tipo de gráfico está configurado
para FUNCTION no visor PLOT SETUP( 2D/3D ( F4 D )). O campo

na frente da opção Type será ressaltado. Se este campo não estiver ainda
configurado para FUNCTION pressione o menu CHOSS e selecione a opção
FUNCTION e depois pressione OK .

• Depois pressione para ressaltar o campo na frente da opção EQ e digite
a expressão da função: x2 e pressione OK .

• Para aceitar as alterações feitas no visor PLOT SETUP pressione NXT


L
OK . Você retornará ao visor normal da calculadora.

• A próxima etapa é acessar o visor Table Setup usando a combinação de


teclas TBLSET ( F5 E ). Isto produzirá um visor onde você pode

selecionar o valor de inı́cio (Start) e os aumentos (Step). Insira o seguinte:

0 OK 0.2 OK 0.5 OK OK

Após o último OK você retornará à tela normal da calculadora.


• Para ver a tabela, pressione TABLE ( F6 F ) − simultaneamente se es-

tiver no modo RPN. Isto produzirá uma tabela de valores de x = 0, 0.2, . . .


e os valores correspondentes de f (x), listados como Y 1 por definição. Você
pode usar as teclas com botões prateados para mover-se ao redor na tabela.
Observará que não tivemos que indicar um valor final para a variável inde-
pendente x. Assim, a tabela continua além do valor máximo para x sugerido
anteriomente.
Algumas opçõs disponı́veis enquanto a tabela estiver visı́vel são ZOOM ,
BIG e DEFN :
• A tecla DEFN quando selecionada mostra a definição da variável inde-
pendente.
• A tecla BIG altera apenas a fonte na tabela de pequena para grande e
vice versa. Tente isto.
• A tecla ZOOM , quando pressionada, produz um menu com as opções:
In, Out, Decimal, Integer e Trig. Tente os seguintes exercı́cios:
• Com a opção In ressaltada, pressione OK . A tabela é expandida para
que o aumento de x seja agora 0.1 em vez de 0.2. O que a calculadora faz
é apenas multiplicar o aumento original 0.2 pelo fator de zoom 0.5 para
produzir o novo aumento de 0.1. Assim a opção zoom in é útil quando você
quer mais resolução para os valores de x na sua tabela.
• Para recuperar o aumento x anterior pressione ZOOM △ OK para
selecionar a opção Un-zoom.
• A opção Decimal em ZOOM produz aumentos x de 0.10.

287
• A opção inteira em ZOOM produz aumentos x de 1.
• A opção Trig em ZOOM produz aumentos relacionados com as frações
de π, sendo então úteis quando plota tabelas de funções trigonométricas.
• Para retornar ao visor normal da calculadora pressione ENTER .

− Para gerar tabelas de funções dadas na forma paramétrica ou em


coordenadas polares o procedimento é o mesmo. Apenas ressaltamos que
antes devemos ir ao visor PLOT SETUP( 2D/3D ( F4 D )) e configurar

o tipo de plotagem, EQ, etc., conforme seja o caso.


Nota: Uma equação paramétrica deve ser digitada em EQ como
p
x(t) + i ∗ y(t)p

Observamos que na notação de números complexos temos



x(t) + i ∗ y(t) = x(t), y(t)

8.2 Gerando plotagens com programas


Um importante recurso que a calculadora nos disponibiliza é a plotagem
de gráficos via programas. Antes necessitamos conhecer algumas variáveis
constantes do menu PLOT. Para acessar este menu digite a seguinte sequência
de teclas
81.01 ALPHA ALPHA MENU ENTER
81.01 é o número do menu PLOT. Nas teclas de menus (embaixo) teremos
todos os (sub)menus do menu PLOT:

PTYPE PPAR EQ ERASE DRAX DRAW

Pressione NXT para ir à próxima página:


L

3D STAT FLAG LABEL AUTO INFO

Lembramos da seguinte combinação PREV ( NXT ) para retornamos


L
à página anterior do menu.
A seguir vamos descrever os comandos no menu PLOT, caso persista
alguma dúvida oportunamente daremos alguns exemplos para melhor es-
clarecimento. Pedimos um pouco de paciência.
Descrição do menu PLOT
O seguinte diagrama mostra os menus no PLOT.

288
PLOT

PTYPE PPAR EQ ERASE DRAX DRAW

3D STAT FLAG LABEL AUTO INFO

Vamos às descrições:

PTYPE : Este menu contém as seguintes teclas de menu:

2:
1:
FUNCT CONIC POLAR PARAM TRUTH DIFFE

Estas teclas correspondem aos tipos de plotagens Function, Conic, Polar,


Parametric, Truth e Diff Eq. Estas opções são descritas a seguir.
Function: Para as equações da forma y = f (x), em coordenadas carte-
sianas;
Conic: para equações cônicas de plotagem (cı́rculos, elipses, hipérboles e
parábolas)
Polar: Para equações da forma r = f (θ) em coordenadas polares no plano;
Parametric: Para equações de plotagem da forma x = x(t), y = y(t) no
plano;
Truth : Para desigualdades de plotagem no plano;
Diff Eq : Para plotagem da solução numérica de uma equação diferencial
linear.

Pressione NXT
L
PLOT para retornar ao menu PLOT.

PPAR : O seguinte diagrama ilustra as funções disponı́veis no menu PPAR


(Parâmetros de Plotagem):

289
PPAR

INDEP DEPND XRNG YRNG RES RESET

CENTR SCALE SCALEW SCALEH AXES ATICK

PPAR INFO

Gráficos bidimensionais
Para os gráficos bidimensionais gerados por funções, a saber, Function,
Conic, Parametric, Polar, Truth e Differential Equation, use PPAR com o
seguinte formato:

{ (xmin, ymin) (xmax, ymax) indep res axes ptype depend }

Com a seguinte correspondência


Coordenadas definidas pelo usuário

(xmin , ymax ) (xmax , ymax )

(xmin , ymin ) (xmax , ymin )

INDEP : O comando INDEP especifica a variável independente e sua faixa de


plotagem. Estas especificações são armazenadas como o terceiro parâmetro
na variável PPAR. O valor padrão é p X p . O valor que pode ser atribuı́do
as especificações das variáveis independentes são:
• O nome da variável ex. p Vel p
• O nome da variável em uma lista, ex. { Vel }
• O nome da variável e uma faixa em uma lista, ex. { Vel 0 20 }
• Uma faixa sem um nome de variável, ex. { 0 20 }

290
• Dois valores representando uma faixa, ex. 0 20
Em um programa, qualquer uma destas especificações serão seguidas pelo
comando INDEP.

DEPND : O comando DEPND especifica o nome da variável dependente.


Para o caso de plotagens TRUTH especifica também a faixa de plotagem;
O padrão é Y. O tipo de especificações para a variável DEPND é o mesmo
para a variável INDEP.

XRNG e YRNG : O comando XRNG especifica a faixa de plotagem para


o eixo x enquanto o comando YRNG especifica a faixa de plotagem para o
eixo y. A entrada para qualquer um destes comandos são os dois números
que representam os valores mı́nimos e máximos de x ou y. Os valores das
faixas dos eixos x e y são armazenados em pares ordenados (xmin, ymin)
e (xmax, ymax) nos dois primeiros elementos da variável PPAR. Os valo-
res padrões para xmin e xmax são -6.5 e 6.5, respectivamente. Os valores
padrões para ymin e ymax são -3.1 e 3.2, respectivamente.
RES : O comando RES (resolução) especifica o intervalo entre os valores
da variável independente ao produzir uma plotagem especı́fica. A resolução
pode ser expressa em termos de unidades de usuário como um número real
ou em termos de pixels como um inteiro binário (números começando com
#, ex. #10). A resolução é armazenada como o quarto item na variável
PPAR.
RESET : Este botão reajustará os parâmetros de plotagem para os valores
padrão.
CENTR : O comando CENTR toma como argumento um par ordenado (x,y)
ou um valor de x, e ajusta os dois primeiros elementos na variável PPAR,
ex. (xmin, ymin) e (xmax, ymax), para que o centro da plotagem seja (x,y)
ou (x,0), respectivamente.
SCALE : O comando SCALE determina a escala de plotagem representada
pelo número de unidades de usuário por marca selecionada. A escala padrão
é 1 unidade de usuário por marca de seleção. Quando o comando SCALE for
usado, toma como argumento dois números, xscale e yscale, representando
as novas escalas horizontal e vertical. O efeito do comando SCALE é ajus-
tar os paramêtros (xmin, ymin) e (xmax, ymax) no PPAR para acomodar
a escala desejada. O centro da plotagem éé preservado.
SCALEW : Dado um fator xfactor, o comando SCALEW multiplica a escala
horizontal pelo fator. W na SCALEW significa largura (width). A execução
de SCALEW altera os valores de xmin e xmax no PPAR.
SCALEH : Dado um fator yfactor, o comando SCALEH multiplica a escala

291
vertical pelo fator. H na SCALEH significa altura (height). A execução de
SCALEW altera os valores de ymin e ymax no PPAR.
ATICK : O comando ATICK (marca TICK no eixo) é usada para configurar
as anotações de marca de seleção para os eixos. O valor de entrada para o
comando ATICK pode ser um dos seguintes:
• Um valor real x: configura ambas anotações de seleção do eixo x e y para
as unidades x;
• Uma lista de dois valores reais { x y }: configura as anotações de seleção
nos eixos x e y para as unidades x e y, respectivamente;
• Um número inteiro binário A #n: configura ambas anotações de seleção
do eixo x e y para os pixels #n
Uma lista de dois números inteiros binários { #n #m }: configura as ano-
tações de seleção nos eixos x e y para as unidades #n e #m, respectiva-
mente.
AXES : O valor de entrada para o comando dos eixos consiste de um par
ordenado (x,y) ou uma lista { (x,y) atick “marca de eixo x” “marca de eixo
y” }. O parâmetro atick significa a especificação das anotações de marca de
seleção conforme descrito acima no comando ATICK. Os pares ordenados
representam o centro da plotagem. Se apenas o par ordenado for dado como
entrada para os AXES, apenas a origem do eixo é alterada. O argumento
para o comando AXES, se um par ordenado ou uma lista de valores, é ar-
mazenado como o parâmetro no PPAR.
PPAR , INFO : Se no menu PLOT pressionarmos a tecla de menu PPAR
ou a tecla INFO obteremos uma lista das configurações PPAR atuais, por
exemplo

RAD XYZ HEX R ∼ pXp


{HOME GRAF.} 08:40 , 14 : JUN
Indep  X
Depnd  Y
Xrng  − 6.5 6.5
Yrng  − 3.9 4.
Res  0.
2
1
PPAR INFO PLOT

Voltando à àrvore do menu PLOT (p. 289), continuemos com as descrições:


EQ : O nome da variável EQ é reservado pela calculadora para ar-
mazenar a equação atual em plotagens. A tecla do menu marcada EQ neste
menu pode ser usada como seria se tivesse seu menu de variável, ex. se
pressionar EQ listará o conteúdo atual desta variável.

292
ERASE : A função ERASE apaga o conteudo atual da janela do gráfico.
Na programação, pode ser usada para assegurar que a janela do gráfico está
limpa antes de plotar um novo gráfico.
DRAX : A função DRAX desenha os eixos na plotagem atual, se algum
deles estiver visı́vel.
DRAW : A função DRAW desenha a plotagem definida no PPAR.
LABEL : Esta função LABEL é usada para marcar os eixos em uma plotagem
incluindo os nomes das variáveis e os valores mı́nimos e máximos dos eixos.
Estes nomes de variáveis são selecionados da informação contida na variável
PPAR.
Nota: Não faremos a descrição completa das funções dentro do menu PLOT,
as anteriores são suficientes para os nossos propósitos.
Antes de exemplificar como gerar gráficos através de programas iremos
− para facilitar nossa vida posteriormente − necessitar ter acesso ao menu
PLOT. Dissemos anteriormente que o acesso a esse menu pode dá-se pela
sequência
81.01 ALPHA ALPHA MENU ENTER
para evitar ter que digitar tudo isso vamos atribuir esse menu a uma tecla,
assim:
Tecla definida pelo usuário para o menu PLOT
Insira as seguintes teclas para determinar se tem qualquer tecla definida
pelo usuário já armazenada na sua calculadora.
PRG NXT MODES KEYS RCLKE (8.1)
L

A menos que tenha algumas teclas definidas pelo usuário, será obtido em
retorno uma lista contendo um S, ex. {S}. Isto indica que o teclado padrão
é a única definição de tecla na sua calculadora.
Para a tecla definida pelo usuário, é necessário adicionar a esta lista um
comando ou programa seguido por uma referência para a tecla (consulte os
detalhes no Apêndice − p. 316). Digite a seguinte lista na pilha
{ S ≪ 81.01 MENU ≫ 13.0 }
use a função STOKEYS ( PRG NXT MODES KEYS STOKE ) para a
L
tecla definida pelo usuário F3 C como o acesso ao menu PLOT.
Verifique se tal lista foi armazenada na calculadora usando a sequência
dada em (8.1). Para ativar uma tecla definida pelo usuário, é necessário
pressionar USER (na mesma tecla ALPHA ) antes de pressionar a

tecla ou combinação de tecla de interesse.

293
Para ativar o menu PLOT, com a definição de tecla usada acima,
pressione: USER F3 C .

Observe que depois de pressionar USER o visor mostra a especi-

ficação 1US na segunda linha do visor.


Pois bem, você obterá o seguinte menu

2:
1: (∗)
PTYPE PPAR EQ ERASE DRAX DRAW

Pressione NXT
L
para mover para a próxima página desse menu

2:
1:
3D STAT FLAG LABEL AUTO INFO

Não esqueça que pressionando o menu PTYPE (em ( ∗ )) temos acesso


aos tipos de plotagem:

2:
1:
FUNCT CONIC POLAR PARAM TRUTH DIFFE

Pressionando NXT
L
PLOT retornamos ao menu PLOT.

Pressionando o menu PPAR (em ( ∗ )) temos acesso aos parâmetros


de plotagem:

2:
1:
INDEP DEPND XRNG YRNG RES RESET ···

Pois bem, antes de iniciar a digitação do próximo programa, reinicie o


menu PLOT ( USER F3 C ).

294
8.2.1 Exemplos de plotagens geradas por programas
Agora ilustraremos com alguns exemplos a utilização das funções des-
critas anteriormente.
Exemplo 1 − Uma plotagem de função. O programa a seguir plota o gráfico
da função dada por y = sen (x):

≪ :Inicia o programa
{ PPAR EQ } PURGE :Exclue o PPAR e EQ atuais
p
SIN(x) p STEQ :Armazena a função sin(x) no EQ
p
xp INDEP :Configura a variável independente para x
p
yp DEPND :Configura a variável dependente para y
FUNCTION :Tipo de plotagem
{ (0., 0.) { .4 .2 } pp x pp p p y = sen(x)p p } AXES :Interseção dos eixos
:Marcas nos eixos
:Rótulos nos eixos
0 6.28 XRNG :Configura a faixa x
-1 1 YRNG :Configura a faixa y
ERASE DRAW DRAX LABEL :Apaga e desenha, eixos e etiquetas
PICTURE :Reativa o visor de gráficos para a pilha
≫ :Finaliza o programa

Armazene esse programa na variável PLOT1. Execute-o. Se o leitor


quiser apagar o menu − para uma melhor visualização do gráfico − digite a
sequência de teclas:
EDIT NXT MENU
L

Após o que será mostrado:

y = sen(x)

x
0. 6.28

295
Adendo: Algo que sempre me incomodou∗ em gráficos tais como o acima
foi o “espaçamento” nas marcas dos eixos x e y. No caso deste gráfico eu
gostaria que as marcas coincidissem com os pontos de máximo e mı́nimo da
função, tipo:

π π 3π 2π
0 2 2

Encontrei uma solução para este “problema”, a qual desejo compartilhar


com quem interessar possa. Antes vejamos o que seja:
Coordenadas de pixel
A figura abaixo mostra as coordenadas gráficas para o visor tı́pico (mı́nimo)
de 131 × 64 pixels. As coordenadas de pixels são medidas do canto esquerdo
superior do visor { # 0h # 0h }, que corresponde as coordendas definidas
pelo usuário (xmin, ymax). As coordenadas máximas em termos de pi-
xels correspondem ao canto direito inferior do visor { # 83h # 40h }, que
nas coordenadas definidas pelo usuário é o ponto (xmax, ymin). As coorde-
nadas dos outros dois cantos ambos em pixel como também nas coordenadas
definidas pelo usuário são mostradas na figura.

(xmin , ymax ) (xmax , ymax )


{ # 0h # 0h } { # 83h # 0h }

131×64 pixels

{ # 0h # 40h } { # 83h # 40h }


(xmin , ymin ) (xmax , ymin )

Os valores entre chaves (coordenadas de pixels) são em hexadecimal (base


16). Existe a seguinte correspondência entre a base decimal e a base hexa-
decimal:

D = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, . . .}

H = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, . . .}



Desde os meus primeiros tempos de HP., HP48g.

296
Por exemplo, 131 (largura da tela em pixels) na base 10 corresponde
a 83h (83 na base hexadecimal). Vejamos como obter essa conversão na
própria HP. Digite a seguinte sequência de teclas
MTH BASE

Deveremos estar numa tela semelhante a esta:

RAD XYZ HEX R ∼ pXp


{HOME PLOTP} 21:34 14 : JUN
7
6
5
4
3
2
1
HEX  DEC OCT BIN R → B B → R
A marca deve estar aqui.
Agora digite: 131 ENTER R→B , para obter # 83h.
A conversão contrária se dá assim:

83h = 8 · 161 + 3 · 160 = 128 + 3 = 131d

Para obter essa conversão na HP digite: # 83 ENTER B→R , para obter 131.
Agora vejamos como redimensionar a tela de plotagem∗ :
PDIM
A função PDIM toma como entrada um dos dois pares ordenados
(xmin, ymin) ou (xmax, ymax) ou dois números inteiros binários #h e
#v. O efeito de PDIM é redimensionar a variável gráfica PICT†. Quando o
argumento for (xmin, ymin)-(xmax, ymax), estes valores tornam-se a faixa
das coordenadas definida pelo usuário no PPAR (variável que armazena
parâmetros para plotagem). Quando o argumento for #h e #v, as faixas
das coordenadas definidas pelo usuário no PPAR se mantém inalteradas,
porém o tamanho dos gráficos são alterados para #h × #v pixels.
Por exemplo, vamos redimensionar a tela gráfica para 131 × 80 pixels
execute (se necessário) a seguinte sequência de teclas:
MTH BASE

Em seguida,
131 R→ B 80 R→ B


Para unificar a minha e a sua calculadora em um mesmo tamanho de tela.

Variável chamada PICT armazena o conteúdo atual da janela dos gráficos.

297
Agora digite PDIM e pressione ENTER . As novas dimensões da nossa
tela são:

{ # 0h # 0h } { # 83h # 0h }

131×80 pixels

{ # 0h # 50h } { # 83h # 50h }

A dimensão mı́nima de PICT é 131 × 64 pixels e a máxima é 2048 pixels


na largura e sem restrição na altura. Se seu PICT for maior do que o visor,
então o gráfico PICT pode ser visto como um domı́nio bidimensional que
pode ser rolado através do visor da calculadora.
A tı́tulo de exemplo, vamos voltar a plotar o gráfico da função y =
sen (x) − tendo em conta as instruções dadas a partir da página 283 −
Então, agora que já fixamos as dimensões de nossa tela de plotagem, lem-
bramos que na janela PLOT SETUP (acesso 2D/3D ( F4 D )):

 
 PLOT SETUP
Type: Function ∡Rad
EQ: SIN(x)

Indep: pX p Simult XConnect


H-Tick: 10. V-Tick: 10. XPixels

Enter function(s) to plot


EDIT AXES  ERASE DRAW

o valor H-Tick: 10. significa que entre duas marcas consecutivas temos 10
pixels. Então, vamos aumentar o número de pixels entre marcas consecuti-
vas, resolvendo para tanto a seguinte regra de três:

2π ←→ 131

π 131
←→ x ⇒ x= = 32.75
2 4

298
Portanto, basta fazer: H-Tick: 32.75. De igual modo podemos contro-
lar as marcas no eixo y. Após o traçado deveremos ter o seguinte gráfico
(eliminando o menu):

Vejamos como controlar as marcas no modo de programação. Faça as


seguintes alterações no programa PLOT1: (p. 295)

≪ :Inicia o programa
{ PPAR EQ } PURGE :Exclue o PPAR e EQ atuais
p SIN(x) p STEQ :Armazena a função sin(x) no EQ
p
xp INDEP :Configura a variável independente para x
p
yp DEPND :Configura a variável dependente para y
FUNCTION :Tipo de plotagem
pp
{ (0., 0.) x pp pp
y = sen(x)p p } AXES :Interseção dos eixos
:Rótulos nos eixos
0 6.28 XRNG :Configura a faixa x
-1 1 YRNG :Configura a faixa y
131 4 / R→B :Marcas (4 espaçamentos) no eixo x
80 8 / R→B :Marcas (8 espaçamentos) no eixo y
2 →LIST ATICK :Monta uma lista para o comando ATICK
ERASE DRAW DRAX LABEL :Apaga e desenha, eixos e etiquetas
PICTURE :Reativa o visor de gráficos para a pilha
≫ :Finaliza o programa

Executando esse programa será mostrado (após eliminar o menu):

299
y = sen(x)

x
0. 6.28

Exemplo 1.1 − Modificaremos o programa anterior para plotar o gráfico


da função dada por
y = a sen (b x + c)
onde a, b e c serão parâmetros de entrada. O programa nos permitirá
avaliar a influência de cada um desses parâmetros no gráfico da função.

≪ p p Entre com a, b e c p p PROMPT → a b c


≪ { PPAR EQ } PURGE
p
a * SIN(b * x+c) p STEQ
p
xp INDEP
p
yp DEPND
FUNCTION
{ (0., 0.) pp x pp p p yp p } AXES
0 6.28 XRNG
-2 2 YRNG
131 4 / R→B
80 8 / R→B
2 →LIST ATICK
DRAW DRAX LABEL
PICTURE

300
Antes de rodar rodar esse programa − pela primeira vez − devemos apa-
gar (ERASE) qualquer gráfico anterior. Observe que retiramos o comando
ERASE da penúltima linha do programa. Devemos executá-lo algumas vezes
para observar-mos a influência dos parâmetros.
Pois é, o programa acima possui dois inconvenientes: Devemos, antes de
rodá-lo a primeira vez, apagar qualquer gráfico anterior e, ademais, teremos
que executá-lo (iniciá-lo) várias vezes.
Estive pensando como fazer um programa que contorne esses dois pro-
blemas. Encontrei a seguinte solução: o programa anterior será subrotina
de um programa principal, para isso vamos alterá-lo da seguinte forma:

≪ → a b c
≪ { PPAR EQ } PURGE
pa p
* SIN(b * x+c) STEQ
p
xp INDEP
p
yp DEPND
FUNCTION
{ (0., 0.) pp x pp p p yp p } AXES
0 6.28 XRNG
-2 2 YRNG
131 4 / R→B
80 8 / R→B
2 →LIST ATICK
DRAW DRAX LABEL

301
Salve essa alteração na variável PLOT3. O programa principal ficará
assim:

≪ p p Entre com uma matriz Mx3 p p PROMPT → M


≪ ERASE 1 M DUP
SIZE OBJ→ DROP DROP
ROT SWAP
FOR I
1 ROW− OBJ→ DROP PLOT3
NEXT PICTURE

Nesse programa devemos entrar com uma matriz de M Linhas por 3


colunas. Em cada uma das linhas da matriz teremos os parâmetros a, b
e c para uma plotagem. Para compreender como funciona esse programa
execute-o no DBUG. Por exemplo, entrando com a matriz a seguir

 
1 1 0
 1.5 1 0 
2 1 0

observamos qual a influência do parâmetro a, no gráfico da função:

y = a sen (b x + c)

Ele altera a amplitude do gráfico, veja:

x
0. 6.28

302
A seguinte matriz
 
2 1 0
2 2 0
mostra o que acontece quando dobramos o parâmetro b, veja:

x
0. 6.28

o perı́odo da função reduz-se à metade.


Exemplo 2 − Uma plotagem paramétrica. O programa a seguir plota o
gráfico da função dada em coordenadas paramétricas por

x(t) = sen (t), y(t) = sen 2 t

≪ RAD 1 FIX
{ PPAR EQ } PURGE
p
SIN(t) + i * SIN(2* t) p STEQ
{t 0 6.29 } INDEP
pyp DEPND
PARAMETRIC
pp
{ (0., 0.) { .5 .5 } x(t) p p pp
y(t)p p } AXES
−2 2 XRNG
−2 80 131 /
* 2 80 131 /
* YRNG
131 4 / R→B
80 4 / R→B
2 →LIST ATICK
ERASE DRAW DRAX LABEL
PICTURE

303
Após rodar o programa deveremos obter algo como

1.2 y(t)

x(t)
-2.0 2.0

-1.2

Exemplo 3 − Uma plotagem Polar. O gráfico de qualquer uma das


equações
r = a sen kθ ou r = a cos kθ
origina uma rosácea de N folhas, onde

k se k é um inteiro ı́mpar;
N=
 2k se k é um inteiro par.

O programa a seguir recebe k e plota a rosácea correspondente (a está


fixado no programa):
≪ →k
≪ RAD 1 FIX
{ PPAR EQ } PURGE
p
1* SIN(k* t) p STEQ
{t 0 6.29 } INDEP
p
yp DEPND
POLAR
(0., 0.) { .5 .5 } pp k = pp k + p p y(t)p p 4 →LIST AXES
−2 2 XRNG
−2 80 131 /
* 2 80 131 /
* YRNG
131 4 / R→B
80 4 / R→B
2 →LIST ATICK
ERASE DRAW DRAX LABEL
PICTURE

304
A figura a seguir mostra o resultado para três valores do parâmetro

1.2 y(t) 1.2 y(t) 1.2 y(t)

k=2 k=3 k=4


-2.0 2.0 -2.0 2.0 -2.0 2.0

-1.2 -1.2 -1.2

8.3 Desenhos via programação


Veremos agora alguns comandos programáveis e que são úteis para de-
senhos:
LINE
Este comando toma como entrada dois pares ordenados (x1 , y1 ) (x2 , y2 )
ou dois pares de coordenadas de pixel { #n1 #m1 } { #n2 #m2 }. Desenha
a linha entre estas coordenadas.
TLINE
Este comando (Alterna LINHA) toma como entrada dois pares ordena-
dos (x1 , y1 ) (x2 , y2 ) ou dois pares de coordenadas de pixel { #n1 #m1 }
{ #n2 #m2 }. Desenha a linha entre estas coordenadas, alternando o es-
tado (ligando ou desligando) os pixels que estão no caminho da linha e vice
versa.
BOX
Este comando toma como entrada dois pares ordenados (x1 , y1 ) (x2 , y2 )
ou dois pares de coordenadas de pixel { #n1 #m1 } { #n2 #m2 }. Desenha
a caixa cujas diagonais são representadas pelos dois pares de coordenadas
na entrada.
ARC
Este comando é usado para desenhar um arco. ARC toma como entrada
os seguintes objetos:
• As coordendas do centro do arco como (x, y) nas coordenadas do usuário
ou { #n, #m } em pixels.
• Raio de um arco como r (coordenadas do usuário) ou #k (pixels).
• ângulos inicial θ1 e final θ2 .
PIX?, PIXON e PIXOFF
Estas funções tomam como entrada as coordenadas do ponto nas coor-
denadas do usuário, (x, y), ou em pixels { #n, #m }.

305
• PIX? Verifica se o pixel no local (x, y) ou { #n, #m } está ligado.
• PIXOFF desliga o pixel no local (x, y) ou { #n, #m }
• PIXON liga o pixel no local (x, y) ou { #n, #m }.
PVIEW
Este comando toma como entrada as coordenadas de um ponto como
coordenadas do usuário (x, y) ou pixels { #n, #m } e coloca o conteúdo de
PICT com o canto esquerdo superior no local do ponto especificado. Você
pode usar também uma lista vazia como argumento quando a imagem for
centrada no visor. PVIEW não ativa o cursor dos gráficos ou o menu da
imagem. Para ativar qualquer uma das caracterı́sticas use PICTURE.
PX→C
A função PX→C converte as coordenadas de pixel { #n, #m } para as
coordenadas da unidade de usuário (x, y).
C→PX
A função C→PX converte as coordenadas de unidade do usuário (x, y)
para coordenadas de pixel { #n, #m }.

8.3.1 Exemplos de programas usando as funções de desenho


Como um primeiro exemplo considere o programa a seguir∗

≪ → θ 1
≪ DEG ERASE 2
131 R → B 80 R → B PDIM 3
−2 2 XRNG 4
−2 2 YRNG 5
(0, 0) 1 0 360 ARC 6
(0, 0) θ COS 0 R → C LINE 7
(0, 0) 0 θ SIN R → C LINE 8
{ } PVIEW 9


Comentários:
1 : O valor (ângulo) que deve ser fornecido ao programa é armazenado na
variável θ;

Acesse θ digitando: ALPHA COS T

306
2 : Fixa a calculadora no modo grau e apaga eventuais gráficos plotados
anteriormente;
3 : Dimensiona a tela em 131 × 80 pixels;
4 : Fixa a faixa (range) do eixo x;
5 : Fixa a faixa (range) do eixo y;
6 : Desenha um cı́rculo de centro na origem e raio 1;
7 : Traça uma linha da origem (0, 0) ao ponto (cos θ, 0);
8 : Traça uma linha da origem (0, 0) ao ponto (0, sen θ);
9 : Mostra a imagem final.
O programa acima recebe um ângulo, em graus, e desenha o seno e o
cosseno do ângulo, por exemplo:

θ = 0o θ = 45o θ = 90o

Sendo o seno de 45o igual ao cosseno desse mesmo ângulo, observe na


figura do centro que há uma “distorção”, o mesmo se verifica na figura da
direita haja vista que o seno de 90o é igual a 1 (raio do cı́rculo). O que
estaria acontecendo?
A distorção se deve a que no programa (linha 3 ) a dimensão da tela
foi fixada em 131 × 80 pixels, portanto um retângulo (e não um quadrado).
Para resolver esse problema edite a linha 5 (range do y), assim:

−2 80 131 / ∗ 2 80 131 / ∗ YRNG

Rodando novamente o programa para cada um dos valores da figura an-


terior, obtemos:

θ = 0o θ = 45o θ = 90o

307
Rotação de um ponto em torno da origem
Na figura a seguir

R R (x′ , y ′ ) = ?
Fθ s

s(x, y) (x, y)

θ
R R
0 0

a transformação Fθ executa uma rotação de um ponto de coordenadas (x, y)


em torno da origem. θ é um ângulo arbitrariamente fixado.
Em livros de álgebra linear prova-se que as coordenadas do ponto rota-
cionado são dadas por :
(
x′ = x cos θ − y sen θ
(8.2)
y ′ = x sen θ + y cos θ

O programa a seguir rotaciona um ponto p de um um ângulo θ

≪ → p θ
≪ DEG ERASE
−10 10 XRNG −10 10 YRNG
131 R → B 80 R → B PDIM
(0, 0) 131 20 / R→B
80 20 / R→B
2 → LIST 2 → LIST AXES
(0, 0) p LINE
p C→R pyp STO pxp STO
px
*COS(θ) − y*SIN(θ) p EVAL
px
*SEN(θ) + y*COS(θ) p EVAL
R→C (0, 0) SWAP LINE
DRAX LABEL { } PVIEW

308
A figura a seguir apresenta três simulações feitas com esse programa:
10. y 10. y 10. y

x x x
-10. 10. -10. 10. -10. 10.

-10. -10. -10.

p = (3, 3), θ = 90o p = (3, 3), θ = 120o p = (2, 5), θ = 100o

No primeiro caso, por exemplo, fornecemos ao programa: (3, 3) 90.


Sugerimos ao leitor que execute o programa no DBUG − para melhor com-
preensão do seu funcionamento.

8.4 Animação de Gráficos e Figuras


A calculadora fornece a função ANIMATE para animar um número de
gráficos que foram colocados na pilha. Você pode gerar um gráfico no visor
de gráficos usando os comandos nos menus PLOT e PICT. Para colocar o
gráfico gerado na pilha, use PICT RCL. Quando tiver n gráficos nos nı́veis n
até 1 da pilha, você pode usar apenas o comando n ANIMATE para produzir
uma animação dos gráficos colocados na pilha.
Exemplo: Como um primeiro exemplo de animação de figuras vamos ani-
mar as figuras que nos mostram como variam o seno e o cosseno em um
cı́rculo (veja figura à página 307). O programa é como a seguir:
≪ → δ 1
≪ DEG 1 FIX 2
131 R → B 80 R → B PDIM 3
−2 2 XRNG 4
−2 80 131 / ∗ 2 80 131 / ∗ YRNG 5
0 360 FOR θ ERASE 6
(0, 0) 1 0 360 ARC 7
(0, 0) θ COS 0 R → C LINE 8
(0, 0) 0 θ SIN R → C LINE 9
{ (0, 0) p p cos(x) p p p p sen(x)p p } AXES LABEL PICT RCL 10
δ STEP 11
p
DEPTH →LIST ALIST p STO 12
ALIST OBJ→ ANIMATE 13


309
Comentários:
1 : δ será o incremento do ângulo θ que consta no laço FOR-STEP;
2 : Coloca a calculadora no modo grau e fixa as decimais com uma casa.
3 : Dimensiona a tela em 131 × 80 pixels;
4 : Fixa a faixa (range) do eixo x;
5 : Fixa a faixa (range) do eixo y (corrigindo a “distorção”);
6 : Inicia o laço FOR-STEP e apaga plotagens anteriores;
7 : Desenha um cı́rculo com centro na origem e raio 1;
8 : Traça uma linha da origem (0, 0) ao ponto (cos θ, 0);
9 : Traça uma linha da origem (0, 0) ao ponto (0, sen θ);
10 : Rotula os eixos e coloca os gráficos gerados na pilha;
11 : Incrementa a variável do laço (no caso θ);
12 : DEPTH coloca o número de objetos na pilha; em seguida estes objetos
são colocados em uma lista, essa lista é guardada numa variável por nome
ALIST;
13 : A lista com os objetos (no caso os gráficos gerados) retorna à pilha,
retiramos os objetos da lista e iniciamos a animação.
Digite e execute o programa anterior pois necessitaremos da lista de
gráficos (ALIST) para o próximo exemplo de animação.
Mais informaçẽs sobre a função ANIMATE
A função ANIMATE conforme usada no exemplo anterior usou como
entrada os gráficos a serem animados e o número (quantos) destes gráficos.
Você pode usar outras informações para produzir a animação, tais como o
intervalo de tempo entre os gráficos e o número de repetições. O formato
geral da função ANIMATE em tais caso é o seguinte:

n − graphs { n { #X #Y } delay rep } ANIMATE

n representa o número de gráficos, { #X #Y } significa para as coordenadas


de pixel do canto esquerdo inferior da área a ser plotada, delay é o número
de segundos permitido entre os gráficos consecutivos na animação e rep é o
número de repetições da animação.
O programa a seguir recebe o delay e o número de repetições e anima a
lista de gráficos gerados no programa anterior.
≪ → delay rep
≪ ALIST OBJ→
{ #0 #0 } delay rep
4 →LIST ANIMATE


310
Equação da corda vibrante
No ramo das equações diferenciais parciais estuda-se o clássico problema
das cordas vibrantes. O fenômeno tem lugar num plano (x, u) e supõ-se que
a corda vibre em torno da posição de repouso ao longo do eixo x, assim:

0.
x
L

Corda dedilhada
Consideremos uma corda, com extremidades fixas, posta a vibrar a partir
de um deslocamento de sua posição de equilı́brio. Suponhamos, ademais,
que seu perfil inicial tenha a seguinte configuração

f (x)

0. a
x
L

Sendo assim, temos

 x
h a ,

 para 0 ≤ x ≤ a;
f (x) =
h x − L , para a ≤ x ≤ L.


a−L

311
Nestas condições a equação que nos dá a posição de um ponto arbitrário∗
x da corda em um instante t > 0 é dada por†

u(x, t) = u1 (x, t) + u2 (x, t) + u3 (x, t) + · · · (8.3)

Onde
2h L2 nπa nπx nπc t
un (x, t) = 2 2
sen sen cos
a(L − a) n π L L L
O nosso objetivo será fazer um programa para animar as vibrações da
corda. Com esse objetivo elegeremos a seguinte configuração

f (x)

0.
x
3 4

Sendo assim, temos

2·1 42 nπ · 3 nπx nπ · 1 · t
un (x, t) = sen sen cos
3 · (4 − 3) n2 π 2 4 4 4
Nota: O c que comparece na fórmula tem dimensão de velocidade e pode
ser considerada uma constante (Caso a corda seja homogênea e as vibrações
tenham amplitude muito pequena).
Simplificando a equação acima, obtemos:
32 3 nπ nπx nπ t
un (x, t) = sen sen cos
3n2 π 2 4 4 4
Substituindo esse resultado em (8.3), temos

X 32 3 nπ nπx nπ t
u(x, t) = 2 2
sen sen cos
3n π 4 4 4
n=1


0 ≤ x ≤L

Veja, por exemplo: Figueiredo, Djairo Guedes de. Análise de Fourier e equações
diferenciais parciais. Rio de Janeiro: IMPA, CNPq, 1977.

312
O programa a seguir anima as vibrações da corda

≪ → δ
≪ RAD
131 R → B 80 R → B PDIM
0 4 XRNG
−1.2 1.2 YRNG
131 4 / R→B 80 4 / R→B
2 →LIST ATICK
0 5 FOR t
p
P
( n = 1, 4, 32/(3 ∗ n ∧ 2 ∗ π ∧ 2) ∗ SIN(3 ∗ n ∗ π/4)∗
SIN(n ∗ π ∗ x/4) ∗ COS(n ∗ π ∗ t/4) ) p
pxp INDEP pyp DEPND
FUNCTION
ERASE DRAW DRAX PICT RCL
p
δ STEP DEPTH →LIST CLIST p STO
CLIST OBJ→ ANIMATE

Truncamos a série em n = 4. O programa a seguir recebe o delay e o


número de repetições

≪ → delay rep
≪ CLIST OBJ→
{ #0 #0 } delay rep
4 →LIST ANIMATE


e anima a lista de gráficos gerados no programa anterior.

313
8.5 Plotagem de Superfı́cies
Plotagens Fast 3D são usadas para visualizar superfı́cies tridimensionais
representadas por equações da forma z = f (x, y). Por exemplo, se quisermos
visualizar z = f (x, y) = x2 + y 2 podemos usar o seguinte:
• Pressione 2D/3D simultaneamente se estiver no modo RPN para

acessar a janela PLOT SETUP.


• Altere TYPE para Fast3D. Isto pode ser feito com o auxı́lio das teclas

CHOOS e .

• Pressione e digite p x ∧ 2 + y ∧ 2p OK .
• Certifique-se de que px p seja selecionado como Indep: e p y p como Depnd:.
• Pressione NXTL OK para retornar ao visor normal da calculadora.

• Pressione WIN simultaneamente se estiver no modo RPN para acessar

a janela PLOT WINDOW.


• Mantenha as faixas da janela de plotagem padrão para ler:
X-Left:-1, XRight: 1, Y-Near:-1, Y-Far: 1, Z-Low: -1, Z-High: 1, Step
Indep: 10, Depnd: 8
Nota: A etapa Indep: e Depnd: os valores representam o número de
linhas de grade usadas na plotagem. Quanto maior estes números mais lento
o gráfico é produzido, embora o tempo utilizado para a geração de gráfico
seja relativamente rápido. No presente manteremos os valores padrões de 10
e 8 para data de etapa.
• Pressione ERASE DRAW para desenhar a superfı́cie tridimensional. O
resultado é uma imagem aramada da superfı́cie com o sistema de coordenada
de referência mostrado no canto esquerdo inferior do visor. Ao usar as teclas
com seta (botões prateados),


você pode alterar a orientação da superfı́cie. A orientação do sistema de


coordenada de referência será alterada de acordo. Tente alterar a orientação
da superfı́cie sozinho.
Ao terminar, pressione EXIT .
• Pressione CANCL para retornar ao ambiente PLOT WINDOW.
• Altere para ler: Step Indep: 20 Depnd: 16
• Pressione ERASE DRAW para ver a plotagem de superfı́cie.
Vamos agora plotar o gráfico da superfı́cie dada por

F (x, y) = (y 2 + y) cos x

314
Então:
• Pressione 2D/3D simultaneamente se estiver no modo RPN para aces-

sar a janela PLOT SETUP.


• Altere, se necessário, TYPE para Fast3D.

• Pressione e digite p (y ∧ 2 + y) ∗ cos(x) p OK .
• Certifique-se de que X seja selecionado como Indep: e p Y p como Depnd:.
p p

• Pressione NXTL OK para retornar ao visor normal da calculadora.

• Pressione WIN simultaneamente se estiver no modo RPN para aces-

sar a janela PLOT WINDOW.


• Mantenha as faixas da janela de plotagem padrão para ler:
X-Left:-1, XRight: 1, Y-Near:-1, Y-Far: 1, Z-Low: -1, Z-High: 1, Step In-
dep: 10, Depnd: 8
Vamos plotar esta função no seguinte domı́nio:
(
0 ≤ x ≤ π/2
0 ≤ y ≤ 0, 4

Faça: X-Left:0, XRight: π/2. Para colocar π/2 em XRight pressione NXT L
em seguida a tecla virtual CALC . Delete o valor anterior, coloque na pilha
os valores π e 2 divida e pressione OK . Quanto à variável Y, coloque:
Y-Near:0, Y-Far: 0.4. Quanto à variável Z, faça: Z-Low: -0.25, Z-High:
0.8. Finalmente, pressione as teclas virtuais: ERASE DRAW .

 A função MAP
Apresentamos ao leitor uma importante função que a HP nos disponibi-
liza, me refiro à função MAP, disponı́vel através do catálogo de comandos
( CAT )∗ , essa função usa como argumentos uma lista de números e

uma função f (X) ou um programa de formulário ≪ → · · · ≫, e produz


uma lista consistindo da aplicação daquela função ou programa para a lista
de números. Por exemplo, coloque na pilha† :
2: {0 1 2}
1: 1 − X2
ao digitar MAP e dá ENTER a calculadora nos devolve:
n o
1 − 02 1 − 12 1 − 22

Digite: XNUM ENTER , para obter,


{1 0 − 3}

Fica mais fácil digitar (MAP) diretamente.

Nota: digite 1 − X 2 entre plics e pressione Enter.

315
Como mais um exemplo, coloque na pilha:

2: {1 2 3 4 5}
1: ≪ → X pX ∧ 2 p ≫

ao digitar MAP e dá ENTER a calculadora nos devolve:

{1 4 9 16 25}

− Calculando os cinco primeiros termos de uma progressão aritmética.


Coloque na pilha:

2: {1 2 3 4 5}
p
1: ≪ → n 2∗n − 1 p ≫

ao digitar MAP e dá ENTER a calculadora nos devolve:

{1 3 5 7 9}

Apêndice: Personalizando o teclado


Cada tecla no teclado pode ser identificada por dois números represen-
tando suas linhas e colunas. Por exemplo, a tecla VAR ( VAR J ) está localizada
na linha 3 da coluna 1 e será mencionada como a tecla 31. Agora, dado que
cada tecla tem até dez funções associadas com ela, cada função é especificada
por dı́gitos decimais entre 0 e 1, de acordo com as seguintes especificações:

.0 ou .1, tecla acesso direto


.2, tecla combinada com
.3, tecla combinada com
.4, tecla combinada com ALPHA
.5, tecla combinada com ALPHA
.6, tecla combinada com ALPHA
0.01 ou 0.11, não aplicável
.21, tecla simultânea com
.31, tecla simultânea com
.41, tecla combinada com ALPHA
.51, ALPHA tecla simultânea com
.61, ALPHA tecla simultânea com

Assim, a função VAR será mencionada como a tecla 31.0 ou 31.1, en-
quanto que a função UPDIR será a tecla 31.2, a função COPY será a tecla

316
31.3, J maiúsculo é a tecla 31.4 e o j minúsculo é a tecla 31.5. (A tecla 31.6
não é definida). Em geral, uma tecla será descrita pelo arranjo XY.Z, onde
X = número de linha, Y = número de coluna, Z = acesso.
Podemos combinar uma dada tecla com a tecla USER (left-shift asso-
ciada com a tecla ALPHA ou USER ) para criar uma ação chave

personalizada. A princı́pio, o teclado inteiro pode ser redefinido para fazer


um número de operações personalizadas.
O submenu PRG/MODES/KEYS
Os comandos úteis em personalizar as teclas são fornecidos pelo menu
KEYS acessı́vel através do menu PRG ( PRG ). A sequência

PRG NXT MODES KEYS


L

produz o seguinte menu virtual KEYS:


2:
1:
ASN STOKE RCLKE DELKE MODES

As funções disponı́veis são:


ASN: Atribui um objeto a uma tecla especificada por XY.Z;
STOKEYS: Armazena uma lista de tecla definida pelo usuário;
RCLKEYS: Retorna na pilha a lista atual de tecla definida pelo usuário;
DELKEYS: Apaga uma ou mais teclas na lista de tecla definida pelo usuário
atual, os argumentos são ou 0 para apagar todas as teclas definidas pelo
usuário ou XY.Z, para apagar a tecla XY.Z.
Retornar na pilha a lista de teclas definidas pelo usuário atual
Use o comando RCLKEYS para ver a lista atual de tecla definida pelo
usuário. Antes de quaisquer atribuições de teclas definidas pelo usuário, o
resultado deve uma lista que contém a letra S, ex. { S }.
Atribuir um objeto para uma tecla definida pelo usuário
Suponha que se queira acessar o menu PLOT introduzido com a cal-
culadora HP série 48G, porém atualmente não diretamente disponı́vel via
teclado. O número para este menu é 81.01. Você pode ver este menu ativo
usando
81.01 ALPHA ALPHA MENU ENTER
Nas teclas de menus (embaixo) teremos todos os (sub)menus do menu PLOT:

PTYPE PPAR EQ ERASE DRAX DRAW

NXT
Pressione L para ir à próxima página:

317
3D STAT FLAG LABEL AUTO INFO

Vamos ativar rapidamente este menu do teclado, atribuindo-o para a


tecla GRAPH ( F3 C ) cujo número de referência é 13.0, ex. primeira linha,
terceira coluna, função principal.
Digite a seguinte lista na pilha
{ S ≪ 81.01 MENU ≫ 13.0 }
PRG NXT
use a função STOKEYS ( L MODES KEYS STOKE ) para a
tecla definida pelo usuário F3 C como o acesso ao menu PLOT.
Operar com as teclas definidas pelo usuário
Para operar esta tecla definida pelo usuário, insira USER antes de

pressionar a tecla F3 C .
Observe que depois de pressionar USER o visor mostra a especificação

1USR na segunda linha do visor. Ao pressionar USER F3 C para este

exemplo, será ativado o menu PLOT conforme a seguir:

2:
1:
PTYPE PPAR EQ ERASE DRAX DRAW

Se tiver mais de uma tecla definida pelo usuário e quiser operar mais
de uma de cada vez, você pode bloquear o teclado no modo USER in-
serindo USER USER antes de pressionar as teclas definidas pelo

usuário. Com o teclado bloqueado no modo USER, a especificação USR será


mostrada na segunda linha do visor. Para desbloquear o teclado pressione
USER novamente.

Alterar a atribuição de uma tecla definida pelo usuário


Para remover a atribuição feita acima, use a função DELKEYS, conforme
a seguir: caso você não se encontre no MENU

2:
1:
ASN STOKE RCLKE DELKE MODES

acesse-o com a seguinte sequência


PRG NXT MODES KEYS
L

Após isto, digite


13.0 DELKE

Para confirmar pressione o menu RCLKE .

318
Capı́tulo 9
CÁLCULO, ÁLGEBRA E
ARITMÉTICA

9.1 O menu ALG (Algébrico)


Funções no menu ALG
O menu ALG (Algébrico) está disponı́vel através da sequência de teclas
ALG
4

Vejamos a função dos submenus que nos interessam para o trato com
polinômios:
− COLLECT : Fatora um polinômio (nos inteiros).
Exemplo: Entre na pilha com o polinômio: p X ∧ 2 − 4 p
Pressione o submenu COLLE , teremos na pilha: (X + 2) · (X − 2).
Nota: Os sinalizadores 02 e 03 devem estar desativados (sem a marca X).
Caso, apriori, exista algum valor armazenado na varável X a calculadora
emitirá um sonido e exibirá a tela:

RAD XYZ DEC C = p X p HLT


{HOME CNUM INTP} 19:23 MAY : 30
6
5 Purge current variable
4 YES
3 no
2
1
X2 − 4
CANCL OK

319
Pressione OK para apagar a variável (i.e, seu conteúdo).
− EXPAND : Expande e simplifica uma expressão algébrica.
Exemplo: Entre na pilha com a expressão algébrica: p (2X + 1) ∧ 2 p
Pressione o submenu EXPAN , teremos na pilha: 4 · X 2 + 4 · X + 1.
− FACTOR : Fatora um polinômio.
Exemplo: Entre na pilha com o polinômio: p 1/2 ∗ X ∧ 2 − 1 p
√ √
(X+ 2 )·(X− 2 )
Pressione o submenu FACTO , teremos na pilha: 2 .
Nota: Uma diferença entre as funções COLLECT e FACTOR é que a
primeira fatora apenas nos inteiros, enquanto a segunda também nos reais.
Por exemplo, tente fatorar a expressão p X ∧ 2 − 2 p por ambas as funções.
A bem da verdade, FACTOR fatora inclusive nos Complexos, tente, por
exemplo, p X ∧ 2 + 1 p , ou p X ∧ 3 − 1 p .
Uma observação importante: a apresentação do resultado de uma fa-
toração pela calculadora vai depender do estado do sinalizador 105 na hora
em que você entra com o polinômio. Se este sinalizador estiver ativo, ao
entrar na pilha com o polinômio p 1/2 ∗ X ∧ 2 − 1 p ele aparece na pilha como
1.
· X 2. − 1.
2.
onde os pontinhos indicam números reais e não inteiros. (p. 345)
Desativando (desmarcando) este sinalizador e entrando novamente com
o polinômio p 1/2 ∗ X ∧ 2 − 1 p ele aparece na pilha como
1
· X 2 − 1.
2
(sem os pontinhos) Fatorando ( FACTO ) teremos
√ √
−(( 2 + X) · ( 2 − X))
2
Resumindo: o estado de um sinalizador na hora em que você entra com os
dados é importante para a apresentação final do resultado.
Enfatizando: Se o sinalizador 105 for selecionado, os números inteiros
serão automaticamente convertidos para números reais.
Devido ao seu formato de armazenamento, os números inteiros sempre
mantêm precisão total nos seus cálculos. Por exemplo − com o sinalizador
105 desativado:
30 15
⇒ (após EVAL)
14 7
30.
⇒ 2.1428 . . . (após EVAL)
14.

320
− PARTFRAC : Decomposição em fração parcial de uma dada fração.
Exemplo: Entre na pilha com a fração: p 2 ∗ X ∧ 2/(X ∧ 2 − 1) p
1 1
Pressione o submenu PARTF , teremos na pilha: 2 + X−1 − X+1 .
Pressionando NXT
L
vamos para a próxima página de submenus.
− SOLVE : Resolve uma equação polinomial (ou um conjunto de tais equações).
Exemplo: Entre na pilha com a equação: p X ∧ 4 − 1 = 3 p , em seguida com
a variável entre plics: p X p.
√ √
Pressione o submenu SOLVE , teremos na pilha: { X = − 2 X = 2 }.
Isto se o sinalizador 103 de sua calculadora estiver desativado (Complex off),
caso contrário, a saı́da será:
√ √ √ √
{ X = 2 · i X = 2 · −1 X = −( 2 · i) X = 2 }

que é a solução nos Complexos.


− SUBST : Substitui um valor de uma variável em uma expressão.
Exemplo: Entre na pilha com a expressão: p 4 ∗ X ∧ 2 + 1 p , em seguida
com o valor a ser substituido entre plics, assim: p X = 3 p.
Pressione o submenu SUBST , para obter no nı́vel 1: 4 · 32 + 1, aı́ é só
pressionar EVALN para obter: 37.
Outra forma de substituição nas expressões algébricas
− Uma outra alternativa para avaliarmos uma expressão obtém-se pela com-
binação de teclas
I |
TOOL
I

Por exemplo, com a expressão 3 · X 2 − 1 já na pilha coloque na pilha


uma lista com dois ı́tens, a variável a ser substituı́da e o respectivo valor, por
exemplo { X 2 }, em seguida pressione a combinação anterior para obter no
nı́vel 1: 3 · 22 − 1, aı́ é só pressionar EVALN para obter 11. Observe que

|
ւ É este comando que avalia
I
TOOL
I ⇐⇒ 3 · X 2 − 1
X=2

Este comando pode aparecer dentro de um programa, por exemplo,

≪ → Y
p
≪ 3 ∗ X∧2 − 1p X Y
2 →LIST | EVAL


321
É possı́vel substituir (com a mesma sequência de teclas) mais de uma variável
de cada vez, conforme ilustrado no exemplo a seguir

RAD XYZ DEC C = pXp HLT RAD XYZ DEC C = pXp HLT
{HOME CNUM INTP} 22:18 MAY : 30 {HOME CNUM INTP} 22:19 MAY : 30
6 6
5 5
4 4
3 3
2 X 2 ·Y +1
2
1
1 {X 2 Y 3} 22 ·3+1
VEXP DFGM VEXP DFGM

∗ ∗ ∗
Daı́ por que dizer-se que consciência e objeto são binômios in-
separáveis, correlativos e complementares do que denominamos reali-
dade. Real é aquilo que existe em uma (ou para uma) consciência e
de acordo com a estrutura condicionada e condicionadora dessa mesma
consciência. Procurar saber o que seja a realidade (o objeto de inves-
tigação) independentemente da consciência e de nosso aparato cognitivo-
sensı́vel não tem sentido, pois precisamos da consciência para pensar
nessa suposta “realidade independente”, que será sempre, à proporção
que a pensamos, uma realidade para “uma” consciência, uma realidade
pensada. (Marcelo Malheiros/A Potência do Nada, p. 22)

Nota: Aplique a reflexão acima às infinitas concepções (humanas) de Deus.


Compare o autor anterior com o seguinte:

Todos os fenômenos [tanto perceptı́veis quanto conceituais] podem ser


postulados como existentes apenas em relação a uma estrutura cognitiva
de referência. (B. Alan Wallace/Dimensões Escondidas, p. 97)

Nota: Em nosso livro “O Deus Quântico”, (p. 355), aplicamos estas pro-
fundas e extraordinárias concepções ao estudo de Deus − Fenômeno Deus.

Mesmo que um grande número de pessoas olhem um carro de bombeiro


e o vejam como vermelho, isso não significa que a cor exista indepen-
dentemente das faculdades visuais delas.
(B. Alan Wallace/Dimensões Escondidas, p. 100)

322
9.2 O menu ARITHMETIC
O menu ARITHMETIC contém um número de submenus para as aplicações
especı́ficas na teoria numérica (inteiros, polinômios, etc.); como, ademais,
um número de funções que se aplicam às operações aritméticas. O menu
ARITHMETIC é ativado através da combinação de teclas
ARITH
1

Com o sinalizador do sistema 117 configurado assim: X 117 Soft MENU,


ao pressionar ARITH , o resultado é o seguinte:

RAD XYZ DEC C = pXp HLT


{HOME CNUM INTP} 23:04 JUN : 04
7
6
54
3
2
1
INTEG POLY MODUL PERM DIVIS FACTO

O menu ARITHMETIC contém um número de submenus para as aplicações


especı́ficas na teoria numérica (inteiros, polinômios, etc.), como também um
número de funções que se aplicam às operações aritméticas.
Vejamos a função de alguns submenus que nos interessam mais de perto.
Vamos iniciar pela quinta tecla virtual (submenu) na tela acima:
− DIVIS : Lista dos divisores de um polinômio ou inteiro.
Exemplo: Entre na pilha com o inteiro 6:
Pressione o submenu DIVIS , teremos na pilha: { 1 2 3 6 }.
Exemplo: Entre na pilha com o polinômio p X ∧ 2 − 1 p :
Pressione o submenu DIVIS , teremos na pilha: { 1 X + 1 X − 1 X 2 − 1 }.
− FACTORS : Retorna os fatores irredutı́veis de um polinômio ou inteiro.
Exemplo: Entre na pilha com o inteiro 180:
Pressione o submenu FACTO , teremos na pilha: { 5 1. 3 2. 2 2. }.
Em “outras palavras”:

180 2
90 2
45 3
15 3
5 5
1
180 = 51 · 32 · 22

323
Nota: Veja FACTOR no Menu POLYNOMIAL. (p. 325)

Exemplo: Entre na pilha com o polinômio X ∧ 3 + X ∧ 2 − X − 1 p :


p

Pressione o submenu FACTO , teremos na pilha: { X − 1 1. X + 1 2. }.


Ou seja,
x3 + x2 − x − 1 = (x − 1)1 · (x + 1)2
− LGCD : Retorna o maior denominador comum de uma lista de inteiros ou
polinômios.
Exemplo: Entre na pilha com a lista: { 125 75 35 }
Pressione o submenu LGCD , teremos na pilha: 5.
Exemplo: Entre na pilha com a lista de polinômios,

{ p X ∧ 2 − 2X + 1 p p
X ∧ 2 − 1 p}

.
Pressione o submenu LGCD , teremos na pilha: X − 1. Confirmando:

x2 − 2 x + 1 = (x − 1)2 e x2 − 1 = (x − 1) · (x + 1)

− PROPFRAC : Separa uma fração numa parte inteira e numa fracionária.


8
Exemplo: Entre na pilha com a fração: .
5
3
Pressione o submenu PROPF , teremos na pilha: 1 + .
5
Nota: Para entrar com uma fração o sinalizador 03 deve estar desmarcado.
Exemplo: Entre na pilha com a fração: p (X ∧ 2 + 1)/X ∧ 2 p .
1
Pressione o submenu PROPF , teremos na pilha: 1 + 2 .
X
− SIMP2 : Simplifica dois polinômios pela divisão entre o maior denomi-
nador comum entre eles.
Exemplo: Entre na pilha com os polinômios: p X ∧ 3 − 1 p e p
X ∧ 2 − 1 p.
Pressione o submenu SIMP2 , teremos na pilha:

RAD XYZ DEC C = pXp HLT


{HOME CNUM INTP} 13:28 JUN : 04
6
5
4
3
2 X 2 + X+1
1 X +1
LGCD PROPFSIMP2

324
Observe,

x3 − 1 = (x − 1) · (x2 + x + 1)
x2 − 1 = (x − 1) · (x + 1)

As funções associadas com os submenus ARITHMETIC: INTEGER,


POLYNOMIAL, MODULO e PERMUTATION, são as seguintes:

Menu INTEGER
EULER: Número inteiros < n, co-primo com n;
IABCUV: Resolve au + bv = c, com a, b, c = inteiros;
IBERNOULLI: n-ézimo número Bernoulli;
ICHINREM: Residual chinês para números inteiros;
IDIV2: Divisão euclidiana de dois números inteiros;
IEGCD: Retorna u, v, tal que au + bv = gcd(a, b);
IQUOT: Quociente euclidiano de dois números inteiros;
IREMAINDER: Residual euclidiano de dois números inteiros;
ISPRIME?: Testa se um número inteiro é primo;
NEXTPRIME: Próximo primo para um número inteiro dado;
PA2B2: Número primo como norma quadrada de um número complexo;
PREVPRIME: Primo anterior para um número inteiro dado.
Menu POLYNOMIAL
ABCUV: Equação de polinômio Bézout (au + bv = c);
CHINREM: Residual chines para os polinômios;
CYCLOTOMIC: polinômio ciclotômico n-ézimo;
DIV2: Divisão euclidiana de dois polinômios: (A/B) ⇒ A = BQ + R;
EGCD: EGCD significa Máximo Divisor Comum.
Dados dois polinômio, A(X) e B(X), a função EGCD produz os polinômios
C(X), U (X) e V (X), para que C(X) = U (X) · A(X) + V (X) · B(X).
Por exemplo, para A(X) = X 2 + 1, B(X) = X 2 − 1, (entre com estes
dois polinômios na pilha) EGCD retorna para a pilha: 2, 1, −1. Pois,
2 = 1 · (X 2 + 1) − 1 · (X 2 − 1).
FACTOR: Fatora um número inteiro ou polinômio;
FCOEF: Gera as raı́zes, dadas a fração e a multiplicidade;
FROOTS: Retorna as raı́zes e a multiplicidade, dada uma fração;
GCD: Maior divisor comum de 2 números ou polinômios;
A função GCD (maior denominador comum) pode ser usada para obter o

325
maior denominador comum de dois polinômios ou de duas listas de polinômios
do mesmo tamanho. Os dois polinômios ou listas de polinômios serão colo-
cados nos nı́veis 2 e 1 da pilha antes de usar GCD. Os resultados serão um
polinômio ou uma lista representando o maior denominador comum dos dois
polinômios ou de cada lista de polinômios.
Exemplo (a calculadora configurada para o modo Exact, (p. 344)):
pX ∧ 3 − 1p pX ∧ 2 − 1p GCD
ENTER ENTER

Resulta em: X − 1.
HERMITE: Polinômio Hermite de grau n-ézimo;
A função HERMITE [HERMI] usa como argumento um inteiro positivo
n, e retorna o polinômio de Hermite de ordem n. Um polinômio de Hermite,
Hn , é definido recursivamente como

2 dn 2
H0 (x) = 1, Hn (x) = (−1)n ex n
( e−x ), n = 1, 2, 3, . . .
dx
HORNER: Avaliação Horner de um polinômio;
A função HORNER produz a divisão Horner ou sintética de um polinômio
P (X) pelo fator (X − a). A entrada para a função são o polinômio P (X)
e o número a. A função retorna o polinômio para um quociente Q(X) que
resulta da divisão de P (X) por (X − a), os valores de a e de P (a), nesta
ordem. Em outras palavras, P (X) = Q(X)(X − a) + P (a).

P (X) X −a ⇒ P (X) = Q(X)(X − a) + R(X)


R(X) Q(X)

Por exemplo, entre na pilha com os dados: p X ∧ 3 + 2 ∗ X ∧ 2 − 3 ∗ X + 1 p 2


Pressione o submenu HORNE , teremos na pilha:

RAD XYZ DEC C = pXp HLT


{HOME CNUM INTP} 17:28 JUN : 04
6
5
4
3
X 2 + 4X+5
2 2
1 11
FCOEF FROOT GCD HERMI HORNE LAGRA

Sendo assim, temos

x3 + 2x2 − 3x + 1 = (x2 + 4x + 5)(x − 2) + 11

326
LAGRANGE: Interpolação de polinômio Lagrange;
A função LAGRANGE exige como entrada uma matriz com duas linhas
e n colunas. A matriz armazena os pontos dos dados da forma

[[x1, x2, . . . , xn] [y1, y2, . . . , yn]]

A aplicação da função LAGRANGE produz o polinômio expandido de


n
Y
(x − xk )
n
X k=1, k6=j
pn−1 (x) = n · yj
Y
j=1 (xj − xk )
k=1, k6=j

Por exemplo, para n = 2, escrevemos:


2
Y
(x − xk )
2
X k=1, k6=j x − x2 x − x1
p1 (x) = · yj = ·y + ·y
2
Y x1 − x2 1 x2 − x1 2
j=1
(xj − xk )
k=1, k6=j

Por exemplo, digite na pilha a seguinte matriz: [ [ 1 2 3 ] [ 2 8 15 ] ].


x2 + 9·x − 6
Em seguida: ENTER LAGRA , para obter 2 .
LCM: Menor múltiplo comum de 2 números ou polinômios.
A função LCM (menor múltiplo comum) obtém o menor múltiplo comum
de dois polinômios ou de listas de polinômios do mesmo tamanho.
LEGENDRE: Polinômio Legendre de ordem n;
Os polinômios de Legendre são soluções da importante equação diferencial
de Legendre∗
d2 y dy
(1 − x2 ) 2 − 2 x + n(n + 1)y = 0
dx dx
Para obter o polinômio Legendre de ordem n, entre com n na pilha e
pressione LEGEN .
Para obter o polinômio de ordem 4, por exemplo, basta colocar 4 na pilha
e pressionar a tecla virtual LEGEN . Podemos fácilmente plotar os polinômios
de Legendre de ordem n. Por exemplo, vamos plotar o polinômio de ordem
4. Antes redimensione a janela de plotagem ( WIN ) para:

H-View: -1 1
V-View: -1 1

Utilizada, por exemplo, na resolução da equação de Schröedinger da mecânica quântica
− para o átomo de hidrogênio.

327
Armazene o seguinte programa: ≪ 4 LEGENDRE ≫ na variável EQ,
agora basta ir ao ambiente de plotagem (p. 283). Você deverá ver algo como:

ZOOM (X,Y)TRACE FCN EDIT CANCL

PARTFRAC: Decomposição em fração parcial de uma dada fração;


PCOEF: Dado um vetor que contém as raı́zes de um polinômio, a função
PCOEF gera uma série de combinações contendo os coeficientes do polinômio
correspondente. Os coeficientes correspondem à ordem decrescente da variável
independente.
Por exemplo, entrando com o vetor [ −2 3 ] e pressionando PCOEF , obtemos
[ 1 − 1 − 6 ] que representa o polinômio x2 − x − 6.
PROOT: Dado um vetor com os coeficientes de um polinômio, na ordem
decrescente, a função PROOT fornece as raı́zes do polinômio.
Por exemplo, entrando com o vetor [ 1 − 1 − 6 ] e pressionando PROOT ,
obtemos [ −2 3 ].
PTAYL: Retorna Q(x − a) em Q(x − a) = P (x), polinômio de Taylor.
Dado um polinômio P (X) e um número a, a função PTAYL é usada para
obter uma expressão Q(X −a) = P (X), ex. para desenvolver um polinômios
em potências de (X−a). Isto é também conhecido como polinômio de Taylor,
onde o nome da função, Polynomial & TAYLor é criado.
Por exemplo, entrando na pilha com os dados: p X ∧ 3 − 2 ∗ X + 5 p 1 e
pressionando PTAYL , obtemos X 3 + 3 · X 2 + X + 4. Na verdade, você deve
interpretar este resultado como (X − 1)3 + 3 · (X − 1)2 + (X − 1) + 4.
O leitor pode expandir esta expressão e verificar que (p. 320)

(X − 1)3 + 3 · (X − 1)2 + (X − 1) + 4 = X 3 − 2 X + 5

QUOT: Quociente euclidiano de dois polinômios;


RESULTANT: Determinante da matriz Sylvester de 2 polinômios;
REMAINDER: Restante Euclideano de 2 polinômios;
STURM: Sequência de Sturm para o polinômio;
STURMAB: Sinal do limite inferior e número de zeros entre limites.
As funções QUOT e REMAINDER fornecem, respectivamente, o coefi-
ciente Q(X) e o resto R(X), resultante da divisão de dois polinômios, P 1(X)
e P 2(X), assim:

328
P 1(X) P 2(X) ⇒ P 1(X) = P 2(X) · Q(X) + R(X)
R(X) Q(X)

Em outras palavras, elas fornecem os valores de Q(X) e R(X) de


P 1(X) R(X)
= Q(X) +
P 2(X) P 2(X)
Por exemplo, entrando na pilha com os dados: p X ∧ 3 − 2 ∗ X + 2 p e
X − 1 p e pressionando QUOT , obtemos X 2 + X − 1. Entrando na pilha com
p

os dados: p X ∧3 − 2 ∗ X + 2 p e p X − 1 p e pressionando REMAI , obtemos 1.


Sendo assim, podemos escrever:
x3 − 2x + 2 1
= x2 + x − 1 +
x−1 x−1
Este resultado ainda pode ser obtido pela função PROPFRAC. (p. 324)

Menu MODULO
ADDTMOD: Adiciona dois módulos de expressões ao módulo atual;
DIVMOD: Divide 2 módulos de polinômios pelo módulo atual;
DIV2MOD: A divisão euclidiana de 2 polinômios com coeficientes modu-
lares;
EXPANDMOD: Expande/simplifica os módulos de polinômios atuais pelo
módulo atual;
FACTORMOD: Fatora os módulos polinômio pelo módulo atual;
GCDMOD: GCD de 2 módulos de polinômio pelo módulo atual;
INVMOD: inversa de módulos de número inteiro pelo módulo atual;
MOD (nenhuma entrada de dados disponı́vel no mecanismo de ajuda);
MODSTO: Altera a configuração do módulo para o valor especificado;
MULTMOD: A multiplicação de 2 módulos de polinômios pelo módulo
atual;
POWMOD: Eleva o polinômio para a potência do módulo atual;
SUBTMOD: Subtração de 2 módulos de polinômios pelo módulo atual.

∗ ∗ ∗

Poder-se-ia até afirmar que a realidade subatômica, enquanto ino-


bservável, não é constituida de objetos, mas de relações, e que as
partı́culas individuais não existem como entidades fı́sicas reais. Somente
possuem significado dentro da totalidade das relações que mantêm com
as demais entidades, sobretudo com a consciência do observador.
(A Potência do Nada, p. 23)

329
9.3 O menu CALC (Cálculo)
Aplicações de cálculo
Neste apêndice discutiremos os aplicativos das funções da calculadora
para as operações relacionadas com o cálculo, ex. limites, derivadas, inte-
grais, série de potência, etc.
O menu CALC é ativado através da combinação de teclas
CALC
4

Com o sinalizador do sistema 117 configurado assim: X 117 Soft MENU,


ao pressionar CALC , o resultado é o seguinte:

RAD XYZ DEC C = pXp HLT


{HOME CNUM INTP} 10:20 JUN : 05
7
6
54
3
2
1
DERIV LIMIT DIFF GRAPH DERVX INTVX

A primeira das quatro opções neste menu são atualmente submenus que
se aplicam a (1) derivadas e integrais, (2) limite e série de potência, (3)
equações diferenciais e (4) gráficos. As entradas 5. DERVX e 6. INTVX são
as funções para obter uma derivada e uma integral infinita para uma função
da variável CAS padrão (geralmente ‘X’). As funções DERVX e INTVX são
discutidas em detalhes posteriormente.
Vamos iniciar pelo segundo dos submenus acima.
Limite de função
A calculadora fornece a função lim para calcular os limites de algumas
funções. Esta função usa como entrada uma expressão representando uma
função e o valor onde o limite deve ser calculado.
Para ter acesso à tecla virtual lim , pressione o submenu LIMIT .
Para calcular o limite lim f (x) insira a função primeiro, depois a e,
x→a
finalmente, pressione lim .
Exemplo: Para calcular o limite: lim (5x3 − 4), entre na pilha com os dados:
x→2
p5 ∗ X ∧ 3 − 4p 2 e pressione lim para
obter: 36.
sen (x)
Exemplo: Para calcular o limite: lim , entre na pilha com os dados:
x→0 x
p SIN(X)/X p 0 e pressione lim para obter: 1.
Nota: Para evitar problemas digite X (maiúsculo). A menos que a variável
independente seja trocada, para isto consulte Configurações CAS (p. 343).

330
Advertência: Caso, a priori, exista algum valor armazenado na variável
X isto poderá resultar em problemas; se for este o caso, apague a variável,
assim: entre na àrvore de diretórios com: FILES ; pressione o menu
NXT
OK , procure (assinale) a variável X, em seguida L e PURGE .
Uma outra alternativa para se entrar com um limite no modo pilha: para
o limite lim (5x3 − 4) digite: p lim(5 ∗ X ∧ 3 − 4, 2) p.
x→2
Para avaliá-lo, ENTER EVAL N .
Limites no infinito
Podemos também calcular limites com a variável independente tendendo

ao infinito. O infinito é associado com as teclas: 0

1
Exemplo: Para calcular o limite: lim , entre na pilha com os dados:
x→+∞x
p 1/X p +∞ e pressione lim para obter: 0.
Limites laterais
Para calcular limites laterais, adicione +0 ou −0 ao valor para a variável.
A “+0” significa limite pela direita, enquanto que um “−0”√significa limite
pela esquerda. Por exemplo, vamos calcular o limite: lim x − 1.
x→1+
p
Digite na pilha: p (X − 1) p SPC p 1 + 0 p ENTER e pressione lim para
obter: 0.
Derivadas
A derivada de uma função dada por f (x) em x = a é definida como o
limite
df f (x + h) − f (x)
= f ′ (x) = lim
dx h→0 h
Vejamos dois exemplos de derivadas utilizando este limite:
1o ) f (x) = x2 . Então,

(x + h)2 − x2
f ′ (x) = lim
h→0 h
Digite na pilha: p ((X + h)2 − X 2 )/h p SPC ph = 0p ENTER e pressione
lim para obter: 2 · X.

2o ) f (x) = ex . Então,

ex+h − ex
f ′ (x) = lim
h→0 h
Digite na pilha∗ : p ((EXP(X + h) − EXP(X))/h p SPC ph = 0p ENTER
e pressione lim para obter: ex .

∗ yx Q
EXP(), é acessada na combinação das teclas:

331
Funções DERIV e DERVX
A função DERIV é usada para obter derivadas em termos de qualquer
variável independente, enquanto a função DERVX obtém as derivadas em
relação ao VX da variável padrão CAS (tipicamente ’X’). Enquanto a função
DERVX está diretamente disponı́vel no menu CALC, ambas as funções estão
disponı́veis no submenu DERIV.
A função DERIV requer uma função, digamos f (t) e uma variável inde-
pendente, digamos t, enquanto a função DERVX requer apenas uma função
de VX.
Exemplos:
1o ) f (x) = 5x3 − 4x2 + 6.
Digite na pilha: p 5 ∗ X ∧ 3 − 4 ∗ X ∧ 2 + 6 p ENTER e pressione DERVX
para obter: (15 · X − 8) · X. Utilize
ALG
4
EXPAN

para obter: 15 · X 2 − 8 · X.
2o ) f (t) = t · et .
Digite na pilha: p t ∗ EXP(t) p p p
t ENTER e pressione, se necessário,
CALC
4 DERIV DERIV

para obter: et + t · et .
Nota: O primeiro DERIV acima é o submenu para se acessar a função
DERIV − que realiza a derivada.
Caso se deseje simplificar a expressão acima, digite,
ALG
4
COLLE

para obter: (t + 1) · et .
Calculando as derivadas com ∂
O sı́mbolo ∂ está disponı́vel em ( COS T ), este sı́mbolo pode ser
usado para inserir uma derivada na pilha ou no Editor de Equação∗ . Se
usar o sı́mbolo para escrever uma derivada na pilha, siga imeditamente com
a variável independente, depois por um par de parênteses incluindo a função
a ser diferenciada.
Vamos nos manter fiel à nossa opção inicial de manipulações através
da pilha. O sı́mbolo ∂ serve tanto para efetuar derivadas ordinárias (funções
de uma variável) quanto derivadas parciais (funções de mais de uma variável).

Para esta alternativa consulte o capı́tulo 2 do guia do usuário (Manual).

332
Exemplos:
1o ) Calcule a derivada da função f dada por: f (x) = x · cos x.
Solução: você deve digitar na pilha:
p ∂X(X ∗ cos(X)) p

em seguida ENTER EVAL N , para obter: COS(X) + X · −SIN(X).


Para simplificar esta expressão leve-a para o editor de equações pres-
sionando:

Nota: Mantenha a primeira tecla pressionada e, em seguida, pressione a


segunda.
A calculadora exibirá a seguinte tela:

COS(X)+X · −SIN(X)

EDIT CURS BIG  EVAL FACTO SIMP


Simplifique aqui.

Em seguida pressione ENTER , para obter: COS(X) − X · SIN(X).


2o ) Calcule a derivada (parcial em relação a y) da função f dada por:
x2 + y 2
f (x, y) =
2xy
Solução: você deve digitar na pilha:
p ∂Y ((X ∧ 2 + Y ∧ 2)/(2 ∗ X ∗ Y )) p
2 · Y · X · 2 · Y − (X 2 + Y 2 ) · X · 2
em seguida ENTER EVAL N , para obter: .
SQ(2 · Y · X)

X2 − Y 2
Simplificando, como antes, obtemos: − .
2·Y2·X
Derivadas de ordem superior
As derivadas de ordem superior podem ser calculadas aplicando uma
função derivada diversas vezes. Por exemplo, para calcular
∂  ∂ x2 + y 2  
∂x ∂y 2xy

333
Você deve digitar na pilha:
p ∂X(∂Y ((X ∧ 2 + Y ∧ 2)/(2 ∗ X ∗ Y ))) p
X2 − Y 2
em seguida ENTER EVAL N . Simplificando, como antes, obtemos: − .
2 · Y 2 · X2
Aplicações das derivadas
As derivadas podem ser usadas para analisar os gráficos de funções e para
otimizar as funções de uma variável (ex. encontrar o máximo e mı́nimo).
Algumas aplicações de derivadas são mostradas a seguir.
Função DOMAIN
A função DOMAIN disponı́vel∗ através do catálogo de comando ( CAT )

fornece o domı́nio de definição de uma função como uma lista de números e


especificações.
Por exemplo, entre na pilha p X p , após ENTER e DOMAIN, para obter
na pilha a seguinte lista:

{ −∞ ? 0 + +∞ }

que deve ser interpretada assim: entre −∞ e 0, a função x não é definida
(?), enquanto que de 0 a +∞ a função é definida (+).
Geometricamente tudo se passa assim:
y


√3
p p p

2
1

p p p x
0
1 2 3

{ −∞ ? 0 + +∞ }

Como√um segundo exemplo, vamos encontrar o domı́nio da função dada


por y = 1 − x2 e posteriormente confirmamos com DOMAIN.
Pois bem, devemos ter

1 − x2 ≥ 0 ⇐⇒ x2 ≤ 1 ⇐⇒ −1 ≤ x ≤ 1

Por outro lado, entrando na pilha com p (1 − X ∧ 2) p , após ENTER e


DOMAIN, obtemos na pilha a seguinte lista:

{ −∞ ? − 1 + 1 ? + ∞ }

Esta função também pode ser digitada diretamente no teclado, o efeito é o mesmo.

334
que deve ser interpretada assim: a função em questão não está definida entre
−∞ e 1 e nem entre 1 e +∞, logo o domı́nio da função é −1 ≤ x ≤ 1.
Como tinhamos previsto. Geometricamente tudo se passa assim:
y

p
p p x
0
−1 1

{ −∞ ? − 1 + 1 ? + ∞}

Função TABVAL
Esta função é acessada através do catálogo de comando ou do submenu
GRAPH no menu CALC. A função TABVAL toma como argumentos uma
função da variável CAS, f (X) e uma lista de dois números representando
um domı́nio de interesse para a função f (X). A função TABVAL retorna
os valores de entrada mais a faixa da função correspondente para o domı́nio
usado como entrada.
Por exemplo, vamos pedir a faixa (range) da função dada por y = 2 − x2 ,
no intervalo [ 0, 1 ]. Sendo assim, no modo pilha, digite

CALC
p
2 − X ∧2 p ENTER { 0 1} ENTER 4 GRAPH NXT
L
TABVA

A calculadora nos devolve os seguintes dados (tela da esquerda):

RAD XYZ DEC C = pXp HLT RAD XYZ DEC C = pXp HLT
{HOME CNUM INTP} 11:26 JUN : 22 {HOME CNUM INTP} 11:26 JUN : 22
6 6
5 5
4 4
3 3
2 2
2 − X2 2 − X2
1 {{ 0 1 } { 2 1 }} 1 {{ 0 1 } { 2 1 }}
TABVATABVA CALC TABVATABVA CALC

entrada
TABVAL
entrada saida
TABVAR

No gráfico, temos:

335
y=f (x)

{2 1}
1

p
√ p p p√ x
− 2 0 2
{0 1}

A bem da verdade, a função TABVAL não devolve a faixa (range) da


função f (X) correspondente ao domı́nio de entrada mas simplesmente de-
volve a função calculada nos extremos deste domı́nio − que corresponde à
faixa somente se a função f (X) é crescente ou decrescente no intervalo de
entrada.
Por exemplo, ainda para a função do exemplo anterior, se entrarmos com

p
2 − X ∧2 p ENTER {p − 2 p p
2p } ENTER TABVA

√ √
A calculadora nos devolve seguinte lista: { { − 2 2 } { 0 0 } } .
Função SIGNTAB
A função SIGNTAB disponı́vel através do catálogo de comando ( CAT )

fornece a informação sobre o sinal de uma função através de seu domı́nio.


Por exemplo, vamos pedir o sinal da função dada por y = 2 − x2 . Digite

p2 − X ∧2 p ALPHA ALPHA SIGNTAB ENTER

√ √
Para obter a seguinte lista: { −∞ − − 2 + 2 − ∞ }.
Ou a seguinte lista:

{ −∞ − −1.41421356237 + 1.41421356237 − ∞ }

Isto se a sua calculadora estiver no MODE


H Number Format..... Std.
Nota: Vamos abrir uma nota aqui para enfatizar em que circunstâncias a
lista sai no primeiro modo (simbólico)
√ ou no segundo modo (aproximado).
Para obter o modo simbólico (± 2) desative (se necessário) o sinalizador
105. E mais: entre com a função p 2−X ∧2 p após a desativação do sinalizador
(e não antes), aqui a “ordem dos fatores” altera o produto. Aproveite e
desative também o sinalizador 03.

336
Pois bem, vamos √ interpretar
√ a lista:
√ esta nos diz que a função é negativa
desde −∞ até − 2; entre − 2 e 2 a função é positiva, a partir daı́ a
função é negativa.
Veja isto graficamente:

y=f (x)

p
1

p
√ p p p√ x
− 2 0 2

√ √
{ −∞ − − 2 + 2 − ∞}

Função TABVAR
Esta função é acessada através do catálogo de comando ou do submenu
GRAPH no menu CALC. Usa como entrada a função f (V X), onde V X é a
variável CAS padrão. A função retorna o seguinte no modo RPN:
• Nı́vel 3: a função f (V X)
• Nı́vel 2: Duas listas, a primeira indica que a variação da função (ex. onde
aumenta ou diminui) em termos da variável independente V X, a segunda
indica a variação da função em termos da variável dependente (eixo y).
• Nı́vel 1: Um objeto de gráfico mostra como a tabela de variação foi com-
putada.
Para o próximo exemplo certifique-se de que os sinalizadores 03 e 105
estejam desativados.
Exemplo: Vamos analisar a função f dada por f (x) = − 12 x3 + 2x
usando a função TABVAR. Digite no modo pilha (TABVA à direita no menu)

CALC
p − 1/2 ∗ X ∧3 + 2 ∗ X p GRAPH NXT TABVA
ENTER 4 L

Após a execução poderemos “passear” sobre o visor da calculadora


fazendo uso dos quatro botões prateados:

337
Na parte inferior do visor teremos a seguinte tabela:
Variation table:
 √ √ 
−∞ − − 2·3 3 + 2· 3
3 − +∞ X
 √ √ 
+∞ ↓ − 8·9 3 ↑ 8· 3
9 ↓ −∞ F

Observação: Caso você tenha digitado p − 0.5 ∗ X ∧3 + 2 ∗ X p , ao invés de


p
− 1/2 ∗ X ∧3 + 3 ∗ 2 p , a matriz acima exibirá as raı́zes na forma aproximada e
não na forma simbólica, como acima; ademais, o infinito, na segunda linha,
não sairá como acima. − Conclusão: o formato da entrada de dados também
dita o formato da saı́da (além dos sinalizadores).
Esta tabela corresponde a uma lista (que pode ser utilizada em pro-
gramação), para ter acesso à lista pressione ON (CANCEL) e delete (CLEAR)
o nı́vel 1 da pilha para descer ao nı́vel 1 a seguinte lista:
√ √
{ { p − ∞p − − 2·3 3 + 2· 3
3 − p
+ ∞p }
√ √
{ p + ∞p ↓ − 8·9 3 ↑ 8· 3
9 ↓ p − ∞p } }
Pois bem, vamos interpretar esta lista: √
2· 3
A função f (x) diminue

para x no

intervalo ] − ∞, − 3 ], atingindo √
um
mı́nimo igual a − 8·9 3 em x = − 2·3 3 . Então, f (x) aumenta até x = 2· 3
3 ,
√ √ √
atingindo um valor máximo igual a 8·9 3 em x = A partir de x = 2· 3
3 .
2· 3
3 ,
f (x) passa a ser decrescente. Também, em x = ±∞ temos f (x) = ∓∞.
Veja estas conclusões graficamente:

y=f (x)

2
p


8· 3
9
1
p


− 2·3 3
p p p p −2 x
−2 −1 0 1 տ√
2· 3
3
p


− 8·9 3
p

338
Usando as derivadas para calcular os pontos extremos
Os “pontos extremos” é a designação geral para os valores máximos e
mı́nimos de uma função em um dado intervalo. Estes pontos são obtidos
inicialmente pela resolução da equação: f ′ (x) = 0.
Por exemplo, vamos obter os pontos extremos para a função do exemplo
anterior, f (x) = − 12 x3 + 2x. Digite no modo pilha
CALC
p
− 1/2 ∗ X ∧3 + 2 ∗ X p ENTER 4 DERVX
2
Após obter a derivada −(3·X2 −4) na pilha, precisamos resolver a equação:
f ′ (x) = 0. Utilize a função SOLVEVX no catálogo de comandos ( CAT ).

Com a derivada na pilha e pressionando esta função obtemos a seguinte


lista: n 2 √   2 √ o
X=− · 3 X=− · 3
3 3
Substituindo estes valores na função original obtemos os pontos extremos −
veja gráfico anterior.
Antiderivadas e integrais
Uma antiderivada de uma função f (x) é uma função F (x) tal que F ′ (x) =
f (x).
d
Por exemplo, dado que dx (x3 ) = 3x2 , uma antiderivada de f (x) = 3x2
3
é F (x) = x + c, onde c é uma constante. Uma forma de representar uma
antiderivada é como uma integral indefinida, assim:
Z
d
f (x) dx = F (x) + c ⇐⇒ (F (x) + c) = f (x)
dx

A Função INTVX
Dentre algumas opções que a calculadora oferece para o cálculo de in-
tegrais vamos estudar a função INTVX − Que comparece na tecla virtual
mais à direita do menu CALC.
A função INTVX requer apenas a expressão da função para integrar em
termos de VX (variável X). R
Vejamos alguns exemplos. Vamos calcular (X 2 + X + 1) dX. Para isto
entre na pilha com: p X ∧ 2 + X + 1,p em seguida ENTER e INTVX , para
obter: 13 · X 3 + 21 · X 2 + X.
Nota: Se na sua calculadora houve problema no cálculo desta integral ex-
perimente desativar o sinalizador 105, assim: digite na pilha −105 CF e,
em seguida, ENTER ; tenteR novamente o cálculo da integral proposta.
Agora vamos calcular X · eX dX. Para isto entre na pilha com:
p
X ∗ EXP(X) p , em seguida ENTER e INTVX , para obter: (X − 1) · eX .
Integrais definidas
Na integral definida de uma função, a antiderivada resultante é avaliada

339
no limite superior e inferior de um intervalo (a, b) e os valores avaliados
subtraı́dos.
Rb
Simbolicamente, a f (x) dx = F (b) − F (a), onde dF/dx = f (x).
R
Calculando as integrais definidas com
R
O sı́mbolo está disponı́vel em ( TAN U ), este sı́mbolo pode ser
usado para inserir uma derivada na pilha ou no Editor de Equação∗ .
Se optarmos
R pelo sı́mbolo para escrever uma integral definida a sintaxe é
a seguinte: (a, b, f (x), x).
Exemplos:
R1 R
Para calcular a integral: 0 x2 dx, digite na pilha: p (0, 1, X ∧ 2, X) p
em seguida ENTER EVAL N , para obter: 13 .
R2
Para calcular a integral: 1 (t3 + t + 1) dt, digite na pilha:
R
p
(1, 2, t ∧ 3 + t + 1, t) p , em seguida ENTER EVAL N , para obter: 25
4 .
Na verdade, podemos usar este simbolo até Rpara calcular integrais in-
definidas;
R por exemplo, para calcular a integral: (x2 + x + 1) dx, digite na
pilha: p (0, x, x ∧ 2 + x + 1, x) p , em seguida ENTER EVAL N , para obter: ???.
Ao tentar calcular a integral (com x minúsculo), na minha calculadora
ocorreu um erro. Digitei x e ENTER havia um vetor (array) armazenado
nesta variável. Tentei apagar a variável, p x p PURGE, novamente ocorreu
um erro − pois a variável não encontrava-se no diretório corrente. Tive
que entrar na árvore de diretórios† encontrar a pasta na qual a variável se
encontrava e apagá-la.
Ao tentar calcular novamente a integral (com x minúsculo, enfatizo)
o erro persistiu, verifiquei o conteúdo da variável (x e ENTER ) e lá ainda
encontrava-se o mesmo conteúdo (o vetor), como se eu não houvera apagado.
Decidi “apelar” , digo reiniciei a calculadora pressionando as teclas
ON F3 C

Nesta operação a primeira tecla acima deve ser mantida pressionada e, em


seguida, pressiona-se a segunda, depois solta-se ambas as teclas.
Este procedimento é chamado “Reinicio quente” − pois a memória é
preservada.
Caso você tenha optado por esse procedimento‡ observe que a calcu-
ladora retorna ao diretório raiz (HOME). Para retornar ao diretório de sua
preferência consulte, se necessário, a página 126 ( CHDIR ).
Pois bem, após este procedimento, deu certo, a calculadora devolveu para
3 2 +6·x
a integral em questão: 2·x +3·x
6 . Com x minúsculo, enfatizo.

Para esta alternativa consulte o capı́tulo 2 do guia do usuário (Manual).

Veja Advertência, p. 331.

Com os erros também se aprende − tive oportunidade de constatar isto em diversas
ocasiões, ao escrever este capı́tulo.

340
Apenas para complementar: caso seja necessário se reiniciar a calcu-
ladora, apagando a memória, o procedimento é o seguinte:

ON F1 A F6 F</