Você está na página 1de 12

Capı́tulo 3

Introdução à computação numérica

O Mathematica é projetado para lidar tanto com cálculos numéricos, como tradicionalmente realizados em
linguagens compiladas (Fortran, C, e etc) ou até em simples calculadoras, assim como cálculos envolvendo
expressões analı́ticas. Assim como no ensino de matemática, onde operações numéricas são antes intro-
duzidas para posteriormente trabalhar com variáveis literais, este capı́tulo irá introduzir os primeiros fun-
damentos do Mathematica, apresentando ao usuário iniciante as primeiras funções e operações numéricas,
deixando-o familiarizado com o ambiente computacional proporcionado pelo programa. Além de sim-
ples operações numéricas, serão introduzidas as primeiras funções e constantes matemáticas e, ao final do
capı́tulo, uma breve discussão sobre precisão numérica, números complexos e os tipos numéricos utilizados
será apresentada.

3.1 Aritmética
As operações aritméticas são feitas com os sı́mbolos “ + ”, “ − ”, “ ∗ ” e “/ ” onde o sı́mbolo para a
multiplicação pode ser substituı́do por um espaço. Para indicar uma potência, utiliza-se o sı́mbolo “ˆ”.
Desta forma, pode-se efetuar operações aritméticas como em uma calculadora.

A soma de dois números é calculada abaixo:

In[1]:= 2.2 + 5.62

Out[1]= 7.82

No seguinte exemplo, utiliza-se a barra de divisão “/ ” e o circunflexo “ˆ”, para potenciação:

In[2]:= 2.4/3.8ˆ4

Out[2]= 0.01151

Para indicar uma multiplicação utiliza-se um espaço entre os números, ou alternativamente um


asterisco, “ ∗ ”:

In[3]:= 2 3 5 − 2 ∗ 4

Out[3]= 22

12
3.2. Resultados exatos e aproximados 13

Expressões aritméticas podem também ser escritas com parênteses, para alterar a ordem das
operações:

In[4]:= (3 + 4)ˆ2 − 2 (3 + 1)

Out[4]= 41

As operações aritméticas são agrupadas de acordo com as convenções padrão da matemática. A in-
clusão de parênteses, por exemplo, altera a ordem de precedência na computação de operações aritméticas.
Como é usual, 2ˆ3 + 4, por exemplo, significa (2ˆ3) + 4, e não 2ˆ(3 + 4). O quadro 3.1 apresenta um
resumo das operações aqui descritas.

x +y adição
−x troca de sinal1
x −y subtração
x y ou x ∗ y multiplicação
x /y divisão
xˆy potência
Quadro 3.1: operações aritméticas

3.2 Resultados exatos e aproximados


Uma calculadora eletrônica comum faz todos os cálculos empregando uma precisão2 prescrita de, por
exemplo, dez dı́gitos. Utilizando o programa Mathematica, entretanto, pode-se freqüentemente obter
resultados exatos.

Um resultado exato para 2100 é retornado, mesmo que este número tenha 31 dı́gitos decimais:

In[5]:= 2ˆ100

Out[5]= 1267650600228229401496703205376

Para obter um resultado aproximado, como o obtido por uma calculadora, basta utilizar a função
N:

In[6]:= N[2ˆ100]

Out[6]= 1.26765 × 1030

Alternativamente, pode-se utilizar N após a expressão aritmética, na forma “//N”:

In[7]:= 2ˆ100//N

Out[7]= 1.26765 × 1030


1
i.e. o operador − (unário) é utilizado para alterar o sinal de x .
2
i.e. a exatidão de uma operação ou aproximação numérica, em número de casas decimais.
14 Capı́tulo 3: Introdução à computação numérica

O exemplo anterior demonstram que uma aproximação numéricas pode ser obtida a partir de um
resultado exato, através da função N. De fato esta função sempre produzirá aproximações numéricas.
Observe os seguintes exemplos.

É também possı́vel obter resultados em termos de números racionais:

In[8]:= 1/3 + 2/7


13
Out[8]=
21

Observe que a função N sempre gera um resultado numérico aproximado:

In[9]:= 1/3 + 2/7//N

Out[9]= 0.619048

3.3 Tipos numéricos e a função Head


Deve-se ter observado que, aparentemente, dois tipos gerais de valores podem ser utilizados: aproximados
e exatos. Introduz-se agora a função Head, que quando usada com um valor numérico, retorna o tipo
deste valor.

Quando utiliza-se a função Head com um número real aproximado, o resultado é sempre Real:

In[10]:= Head[0.622]

Out[10]= Real

Entretanto, para números exatos, diferentes resultados são obtidos, dependendo do tipo de
número:
In[11]:= Head[273]

Out[11]= Integer

In[12]:= Head[3/4]

Out[12]= Rational

Valores do tipo Real são os números reais aproximados, representados por expressões numéricas
contendo um ponto decimal. Os valores do tipos Integer e Rational são respectivamente os números
inteiros exatos (sem ponto decimal) e os números racionais — frações de números inteiros. Portanto, um
inteiro como 4 é interpretado como exato enquanto o número 4.0, com um ponto decimal explı́cito, é
tomado como uma aproximação numérica — preciso até uma quantidade fixa de casas decimais.

O número abaixo é tomado como um racional exato e automaticamente reduzido aos menores
numeradores e denominadores:
In[13]:= 452/62
226
Out[13]=
31
3.4. Algumas funções e constantes matemáticas 15


Sqrt[x ] raiz quadrada, x
Exp[x ] exponencial, ex
Log[x ] logaritmo na base exponencial, log(x)
Log[y , x ] logaritmo na base y, logy (x)
Sin[x ], Cos[x ], Tan[x ] funções trigonométricas (x em radianos)
ArcSin[x ], ArcCos[x ], ArcTan[x ] funções trigonométricas inversas
n! n fatorial
Abs[x ] valor absoluto, ou módulo
Round[x ] inteiro mais próximo de x
Mod[n, m ] resto da divisão de n por m
Random[ ] número aleatório entre 0 e 1
Max[x , y , . . .], Min[x , y , . . .] máximo e mı́nimo de x , y , . . .
FactorInteger[n] fatores primos de n
Quadro 3.2: algumas funções matemáticas

A presença do ponto decimal em um dos números faz com que um resultado numérico aproximado
seja retornado:

In[14]:= 452./62

Out[14]= 7.29032

Sempre que uma expressão aritmética for dada com um número possuindo um ponto decimal
explı́cito, será obtido um resultado numérico aproximado para toda a expressão:

In[15]:= 1. + 452/62

Out[15]= 8.29032

Os exemplos acima mostram que qualquer operação entre um racional ou inteiro e um número real
aproximado, resultará também em um número real aproximado. Ainda há um quarto tipo numérico3
utilizado, representando os números complexos: Complex. Este tipo numérico será visto no final deste
capı́tulo em uma seção separada.

3.4 Algumas funções e constantes matemáticas


Há uma enorme quantidade de funções matemáticas no Mathematica. Algumas destas são apresentadas
no quadro 3.2. Note que todas as funções são iniciadas com letras maiúsculas, e que os argumentos são
envolvidos por colchetes. De fato, o nome de todas as funções pré-definidas neste sistema iniciam-se por
maiúsculas, e colchetes devem sempre ser utilizados — nunca parênteses. Os parênteses servem apenas
para indicar o agrupamento de termos.

Computa-se log(8.4). Repare na letra maiúscula em Log e os colchetes para o argumento:


3
As raı́zes, como outras expressões numéricas exatas envolvendo funções matemáticas não são consideradas tipos
numéricos.
16 Capı́tulo 3: Introdução à computação numérica

In[16]:= Log[8.4]

Out[16]= 2.12823

Deve-se também observar que valores exatos serão sempre retornados para operações aritméticas
envolvendo funções matemáticas com argumentos exatos.

Computando 16 obtém-se um inteiro exato:

In[17]:= Sqrt[16]

Out[17]= 4

Pode-se produzir um resultado aproximado para 2:

In[18]:= Sqrt[2]//N

Out[18]= 1.41421

A presença do ponto decimal também faz com que um resultado aproximado seja produzido:

In[19]:= Sqrt[3.]

Out[19]= 1.73205

Se um resultado numérico aproximado, não é especificado, o número é mantido em sua forma


simbólica exata:
In[20]:= Sqrt[5]

Out[20]= 5

Calcular fatoriais assim pode resultar em números muito grandes. Todavia é possı́vel calcular pelo
menos 2000! em pouco tempo.

Computa-se o resultado inteiro exato para 30 × 29 × ... × 1:

In[21]:= 30!

Out[21]= 265252859812191058636308480000000

Pode-se obter um resultado numérico aproximado para o fatorial anterior utilizando N:

In[22]:= 30!//N

Out[22]= 2.65253 × 1032

O quadro 3.3 apresenta alguma das constantes matemáticas mais comuns. Observe que todos os nomes
são também iniciadas com letras maiúsculas.

O valor numérico de π 2 é computado por:

In[23]:= Piˆ2//N
3.4. Algumas funções e constantes matemáticas 17

Pi π = 3.14159 . . .
E e = 2.71828 . . .
Degree π/180, fator de conversão de graus para radianos

I i = −1
Infinity ∞, infinito
Quadro 3.3: algumas constantes matemáticas

Out[23]= 9.8696

Para obter o valor exato de sen(π/4), executa-se:

In[24]:= Sin[Pi/4]
1
Out[24]= √
2
Note que os argumentos de funções trigonométricas devem sempre ser dados em radianos. Entretanto
basta multiplicar um valor em graus por Degree que este é convertido para radianos.

Para obter sen(20◦) avalia-se:

In[25]:= Sin[20 Degree]//N

Out[25]= 0.34202

Pi ESC p ESC

E ESC ee ESC

Degree ESC deg ESC

I ESC ii ESC

Infinity ESC inf ESC

Quadro 3.4: formas alternativas


para digitar constantes matemáticas

A função Log[x] retorna logaritmos na base e. Para obter um logaritmo em qualquer base, basta
especificar a base, na forma Log[base, x].

Dois logaritmos são calculados, em bases diferentes, nos exemplos abaixo:

In[26]:= Log[Eˆ5]

Out[26]= 5

In[27]:= Log[2, 256]

Out[27]= 8

As constantes matemáticas descritas nesta seção podem também ser digitadas com auxı́lio da tecla

“Esc.” Para a unidade imaginária −1, basta digitar ESC ii ESC , sem espaços, onde ESC é a tecla “Esc.” O
quadro 3.4 apresenta diferentes formas para escrever as constantes anteriores.
18 Capı́tulo 3: Introdução à computação numérica

3.5 Computações de precisão arbitrária


Quando utiliza-se a função N para obter uma aproximação numérica, o procedimento é similar ao que
uma calculadora faz: retorna-se um resultado com um número fixo de algarismos. O usuário pode
também explicitar exatamente quantos algarismos significativos deseja utilizar em um cálculo particular.
Isto permite que seja possı́vel obter resultados numéricos a qualquer grau de precisão. No quadro 3.5
encontram-se diferentes formas de calcular aproximações numéricas para expressões.

expr //N ou N[expr ] valor numérico aproximado de expr


N[expr , n] valor numérico de expr com n dı́gitos de precisão
Precision[expr ] precisão numérica de expr
Accuracy[expr ] acurácia numérica de expr
Quadro 3.5: formas para calcular o valor numérico de expressões

Computa-se π com 40 dı́gitos:

In[28]:= N[Pi, 40]

Out[28]= 3.141592653589793238462643383279502884197

E 7 com 30 dı́gitos:

In[29]:= N[Sqrt[7], 30]

Out[29]= 2.64575131106459059050161575364

E o número de algarismos de precisão para cada um dos exemplos acima é obtido com Precision:

In[30]:= Precision[N[Pi, 40]]

Out[30]= 40

In[31]:= Precision[N[Sqrt[7], 30]]

Out[31]= 30

Ao somar um número com 30 dı́gitos de precisão e outro com 40, a precisão do resultado corres-
ponde ao menor valor:

In[32]:= N[Sqrt[7], 30] + N[Pi, 40]

Out[32]= 5.78734396465438382896425913692

In[33]:= Precision[N[Sqrt[7], 30] + N[Pi, 40]]

Out[33]= 30

Quando não for especificado o número de dı́gitos para a função N o resultado exibirá o valor padrão
de seis dı́gitos. Porém, isto não quer dizer que o número tenha precisão de seis dı́gitos.

Uma aproximação para a constante e, sem especificar o número de dı́gitos, é obtida por:
3.6. Números complexos 19

In[34]:= N[E]

Out[34]= 2.71828

Note entretanto, que a aproximação acima tem dezesseis dı́gitos de precisão, ou seja, a precisão
de máquina:4

In[35]:= Precision[N[E]]

Out[35]= 16

Note também que qualquer operação feita com a aproximação anterior e outras que tenham
maior precisão apresentará resultados com apenas seis dı́gitos. Entretanto este resultado possui
a precisão de máquina:

In[36]:= N[E] + N[Pi, 40]

Out[36]= 5.85987

In[37]:= Precision[N[E] + N[Pi, 40]]

Out[37]= 16

Deve-se ter observado que uma aproximação numérica será exibida com mais de seis dı́gitos apenas
se sua precisão for superior à de máquina, i.e. neste caso, maior que dezesseis dı́gitos. Outro fato que
chama atenção é que mesmo quando pede-se uma aproximação, utilizando N com menos de dezesseis
dı́gitos, ainda obtém-se um número com a precisão de máquina (16 dı́gitos).

A aproximação da raiz quadrada de três, gerada abaixo, apesar de ser pedida com quatro dı́gitos,
é retornada com dezesseis:
In[38]:= Precision[N[Sqrt[3], 4]]

Out[38]= 16

Ao fazer qualquer tipo de cálculo numérico, pequenos erros de arredondamento são introduzidos nos
resultados. Quando aumentada a precisão numérica, estes erros tornam-se menores. Ter certeza que os
mesmos resultados são obtidos com maior precisão numérica é uma boa maneira de checar os cálculos.

3.6 Números complexos



Para representar um número complexo, simplesmente utiliza-se a constante I, igual à −1. Tenha apenas
o cuidado de digitar um I maiúsculo, ou então utilizar a forma exibida no quadro 3.4. Observe que um

simples i significa uma variável com o nome “i,” e não −1. O quadro 3.6 apresenta um resumo das
operações com números complexos.

A computação abaixo produz como resultado o número imaginário 2 i:


4
O número de algarismos utilizados para armazenar um número do tipo ponto flutuante com ?? bits. Em um PC este
número é 16.
20 Capı́tulo 3: Introdução à computação numérica

a +bI número complexo a + b i, (a, b ∈ ℜ)


Re[z ] parte real
Im[z ] parte imaginária
Conjugate[z ] complexo conjugado, z ∗ ou z̄
Abs[z ] módulo de z, |z|
Arg[z ] argumento φ em z = |z| ei φ
Quadro 3.6: operações com números complexos

In[39]:= Sqrt[−4]

Out[39]= 2 ı̇ı

A razão entre dois números complexos é calculada com uma simples divisão:

In[40]:= (4 + 3 I)/(2 − I)

Out[40]= 1 + 2 ı̇ı

Pode-se também obter o valor numérico para uma exponencial complexa:

In[41]:= Exp[2 + 9 I]//N

Out[41]= −6.73239 + 3.04517 ı̇ı

A função Head, introduzida na seção 3.3, retorna Complex, quando utilizada com uma ex-
pressão numérica envolvendo a constante I, indicando que o número é complexo:
In[42]:= Head[2 I + 5]

Out[42]= Complex

Como deve-se notar nos exemplos anteriores, a forma ı̇ı é normalmente utilizada no output.

3.7 Operadores relacionais e lógicos


Para concluir este capı́tulo, operadores e funções para comparar valores numéricos5 são introduzidos. O
quadro 3.7 lista os operadores relacionais, que produzem os resultados lógicos verdadeiro ou falso. Estes
valores lógicos são representados pelos sı́mbolos True e False, respectivamente. Observe os seguintes
exemplos.

Para testar se 10 é menor que 7, computa-se:

In[43]:= 10 < 7

Out[43]= False

Ao testar se números são distintos, basta um par de valores ser igual para o resultado será False.
O sinal de diferença, apesar de aparecer diferente no quadro, é digitado na forma “ ! = ”, sem
espaços.
5
Estes operadores e funções também servem para calcular outros tipos de dados, como será visto em outros capı́tulos.
3.8. Funções lógicas 21

x == y igual a
x != y diferente de
x >y maior que
x <y menor que
x ≥y maior e igual a
x ≤y menor e igual a
x == y == z todos iguais
x != y != z todos distintos
x > y > z , etc. decrescente, etc.
Quadro 3.7: operadores relacionais

In[44]:= 3 6= 2 6= 3 6= 4

Out[44]= False

Pode-se combinar os operadores “ < ” e “ ≤ ”. O sinal de menor e igual também é digitado


conforme está no quadro, apesar de aparecer diferente aqui.
In[45]:= 3 < 5 ≤ 6

Out[45]= True

Abaixo, como as quantidades envolvidas são constantes numéricas, é também possı́vel obter um
resultado lógico:
In[46]:= PiˆE < EˆPi

Out[46]= True

!p operador de negação
p && q o operador “E”
p || q o operador “OU”
Quadro 3.8: operadores lógicos

Como ambos os testes abaixo resultam em True, o resultado é True.

In[47]:= 7 > 4 && 2 6= 3

Out[47]= True

Deve-se lembrar que os operadores lógicos “ == ”, “ && ” e “ || ” devem ser todos digitados com
caracteres duplos. Esta é a mesma notação utilizada na linguagem de programação C.

3.8 Funções lógicas


Após introduzir operadores relacionais e lógicos, apresentam-se, nesta seção, as funções lógicas. Estas
funções são assim denominadas por produzir resultados lógicos quando avaliadas. O quadro 3.9 resume a
utilização de algumas destas funções. Observe que estas sempre retornarão o resultado False se a condição
testada não for satisfeita.
22 Capı́tulo 3: Introdução à computação numérica

NumberQ[x ] retorna True se x for um número


NumericQ[x ] retorna True se x for uma quantidade numérica
IntegerQ[x ] retorna True se x for um número inteiro
EvenQ[x ] retorna True se x for um número par
OddQ[x ] retorna True se x for um número ı́mpar
PrimeQ[x ] retorna True se x for um número primo
Positive[x ] retorna True se x for um número positivo
Negative[x ] retorna True se x for um número negativo
NonPositive[x ] retorna True se x for um número não-positivo
NonNegative[x ] retorna True se x for um número não-negativo
Quadro 3.9: funções lógicas

As funções NumberQ e NumericQ produzem o mesmo resultado quando utilizadas com


números. Entretanto quando utilizadas com constantes matemáticas apenas NumericQ re-
torna True:
In[48]:= NumericQ[Pi]

Out[48]= True

In[49]:= NumberQ[Pi]

Out[49]= False

O resultado produzido pelas demais funções lógicas apresentadas é facilmente previsı́vel:

In[50]:= IntegerQ[8/2]

Out[50]= True

In[51]:= EvenQ[3]

Out[51]= False

In[52]:= PrimeQ[7]

Out[52]= True

In[53]:= Negative[4]

Out[53]= False

In[54]:= NonPositive[0]

Out[54]= True

3.9 Exercı́cios
3.1: Calcule o resto da divisão de 234576 por 2, 3, 5, e 7.
3.9. Exercı́cios 23

3.2: Calcule o maior e menor divisores primos de 304250263527210.

3.3: Indique o resultado de: Sin[π/4 + 90 Degree], (1 + ∞), (3∗∞), Sin[∞] e Exp[−∞].

3.4: Qual o resultado de: Round[2.2], Round[5.8], Round[6.5] e Round[7.5]?

3.5: Calcule a precisão e a acurácia de: E, Pi, Sqrt[3/2], 1.5, N[1.5, 3], 1237.3561 e 0.000345.

3.6: Qual o resultado das expressões: Head[Sqrt[3]], Head[2 + 1/4] Head[12∗1/3], Head[4 + 3.2],
Head[(2 I + 3)/3.7], Sin[2 π] e Sin[π/7]?

3.7: Quais as diferenças entre (2 I + 1) e (2.0 I + 1.0)? Ao calcular Head destas expressões, obtém-se
o mesmo resultado?

3.8: Qual o resultado de (1 + I > 3)?

3.9: Indique o resultado de pi == Pi.

3.10: Verifique que Re[2 + 3I] + Im[2 + 3I] I == 2 + 3 I.

3.11: A função Random pode também ser utilizada para gerar números além de entre 0 e 1, e de outros
tipos — isto é não só reais. Verifique como utilizá-la para gerar números aleatórios inteiros e
complexos, entre quaisquer limites.

Você também pode gostar