Pi de Leibniz

O número Pi (3,1415…), é um dos mais estudados da matemática.

A fórmula a seguir converge (lentamente) para Pi. É  conhecida como fórmula de Leibniz.

Exercício: escrever uma função (em Excel, Vba, Python, qualquer coisa), que calcule o valor da fórmula.

Seguem algumas respostas:

  1. Por fórmula.

Primeiro, gero a sequência 1,3,5, 7, etc. Multiplico alternadamente por -1 e 1, via fórmula, se n é ímpar, multiplico por 1, se par, por 1.

Somando tudo, vai (lentamente) convergindo para Pi (3.1415…)

  1. VBA: essencialmente, a mesma coisa. Recebo um número (o número de termos a somar), e aplico a fórmula do somatório (    soma = soma + (-1) ^ (i + 1) * (1 / (2 * (i – 1) + 1))

Function leibnizPi(N)

Dim i As Integer

Dim soma As Double

For i = 1 To N

    soma = soma + (-1) ^ (i + 1) * (1 / (2 * (i – 1) + 1))

Next i

leibnizPi = 4 * soma

End Function

  1. O mesmo código, em Python:

N = 5 #Definir o número de termos

soma =0

for i in range(1,N+1):

    soma += (-1) ** (i + 1) * (1 / (2 * (i – 1) + 1))   

print(4*soma)

  1. Há uma forma completamente diferente de fazer o cálculo de Pi, via método de Monte Carlo.

Imagine um círculo de raio 1, que tem raio pi*r^2. Este círculo, inscrito num quadrado de lado 2 (área 4).

A razão entre a área do círculo e a área do quadrado é de pi/4 = 0.78539…

Se eu “disparar” um número de tiros aleatórios neste alvo, e contar quantos pontos ficaram dentro do círculo x total de pontos, a proporção tem que ir convergindo para a proporção da fórmula. Assim, com um número infinito de tiros, consigo estimar o valor de Pi.

Computacionalmente é fácil fazer a conta. Basta um gerador de número aleatórios.

Na prática, esta técnica é usada ao contrário. Como o valor de Pi é conhecido com milhares de casas decimais (através de séries como a apresentada), este teste visa saber se o gerador de números aleatórios é realmente bom.

Em Python:

import random

import math

Npontos = 50000

cIn = 0

cOut = 0

for i in range(Npontos):

    x = random.uniform(-1,1)

    y = random.uniform(-1,1)

    if math.sqrt(x**2+y**2 <= 1):

        cIn +=1

    else:

        cOut +=1

print( cIn / Npontos)

#Rodando, dá valores em torno de pi/4 = 0.78539

Para download, no Google Drive:

Leibniz Pi

Monte Carlo Pi

Um comentário sobre “Pi de Leibniz

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s