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

Bacteria wars

Segue um exemplo de aplicação do VBA. Mais ou menos inspirado no ‘evolved virtual creatures’ de Karl Sims (https://www.youtube.com/watch?v=JBgG_VSP7f8).

Você controla uma colônia de bactérias, contra uma colônia rival (computador).

Há três parâmetros: natalidade (quanto maior, mais se reproduz), longevidade (qto maior, maior a chance de não morrer por causas naturais) e ataque (qdo duas bactérias rivais ocupam o mesmo espaço, quem tem mais ataque tem mais chance de vencer). A restrição é distribuir 100% dos pontos nestes três critérios.

Vide arquivo aqui.https://1drv.ms/x/s!Aumr1P3FaK7jjjodaADPGp_Jljv_

Quem quiser sugerir melhorias e modificações, estou à disposição.

Att

Método de Monte Carlo e os perigos de ignorar o desvio padrão — Forgotten Lore

Método de Monte Carlo Este pequeno experimento visa demonstrar o efeito e perigos de fazer dimensionamento a partir da média, desconsiderando o desvio padrão. Utilizaremos o método de Monte Carlo, em Excel, para isto. Download do arquivo. Suponha a seguinte situação. Uma fábrica produz 10 mil itens por dia, envia para um centro consumidor, e […]

via Método de Monte Carlo e os perigos de ignorar o desvio padrão — Forgotten Lore

Guerra de Bactérias

Trata-se de uma macro em Excel-VBA, que produz um simulador de colônias de bactérias.

Link para download:

https://drive.google.com/open?id=0B7qV4XXADYw2dVk1X2ttcm9nek0


Há três fatores a considerar: ataque, natalidade e longevidade.

  • O ataque é relativo à probabilidade de derrotar uma bactéria adversária que esteja na vizinhança.
  • A natalidade é a probabilidade de se reproduzir com maior facilidade.
  • A longevidade é a probabilidade de viver mais.

Pode-se mexer nesses pesos. O Adversário, que é o computador, vai fazer o mesmo.

Pesos

Após a primeira rodada:

Sim01

As bactérias vão se reproduzindo, atacando as vizinhas e morrendo.

Sim02

A bactéria azul está ocupando um bom espaço.

Sim03

A bactéria azul dominou totalmente a adversária.

Sim04

Os resultados são mostrados na tabela ao lado do painel.

Results


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/