*Essa rotina usa como referência a rotina disponibilizda por Adriano Azevedo Filho (2015)

Fonte: https://rpubs.com/adriano

Limite superior para \(\pi\) por hexágono circunsinscrito

Considere a figura a seguir, contendo um polígono regular com 6 faces (hexágono) circunscrito num círculo com raio (representado por “r”), onde r = 1, ou seja, um circulo trigonométrico.

figura PI

Fig 1: Hexágono circunscrito em círculo. Construido utilizando o GeoGebra.

Pela geometria da Fig 1, podemos concluir que o perímetro do círculo \(P_c\) será dado por:

Se \(P_6\) representa o perímetro do hexágono, pode-se concluir facilmente que \(P_6>P_c\). Devemos descobrir \(P_6\).

Descobrindo \(P_6\)

figura PI

Fig 2: Hexágono circunscrito em círculo. Construído utilizando o Geogebra.

P6<-4*sqrt(3)
limsup<-2*sqrt(3)


cat(sprintf("P6 = %0.17f limsup = %0.17f ",P6,limsup))
## P6 = 6.92820323027550877 limsup = 3.46410161513775439

Mas esse limite superior pode ser melhorado, usando em lugar do hexágono, um polígono regular circunscrito de 12 lados (dodecágono).

Limite inferior para \(\pi\) por dodecágono circunsinscrito

Considere a Fig 3 a seguir, construida a partir da anterior, em que se observa 2 lados (observe que temos um lado inteiro à frente, e duas metades de lados nos extremos, totalizando 2 lados) de um polígono regular de 12 faces (dodecágono), obtidos a partir da biseção do ângulo de 60 graus do segmento do hexágono.Na figura, l/2 é metade de um lado do hexágono. Esse resultado sera utilizado como referência para encontrar o lado do dodecacono. A partir de agora vamos nos referir ao lado do hexágono como \(l_1\) e o lado do dodecágono como \(l_2\).

figura PI

Fig 3: Construindo o dodecágono circunsinscrito. Construído utiliznado o GeoGebra.

Para obter \(l_2\), o comprimento do lado do dodecágono, podemos inicialmente vamos aproveitar que estamos lidando com um circulo trigonometrico (círculo com r=1) e a partir das propriedades trigonométricas. Sabemos que:

\((l_1/2) = 2(l_2/2)/1-(l_2/2)^2\)

\((l_1/2) - (l_1/2)(l_2/2)^2 - 2*(l_2/2) = 0\)

\(a = -(l_1/2)\)

\(b = -2\)

\(c = (l_1/2)\)

\(l_2(1) = -4(1+sqrt(1+(l_1)^2/4)/l_1\)

ou

\(l_2(2) = -4(1-sqrt(1+(l_1)^2/4)/l_1\)

Temos que o lado do dodecágono:

O perímetro do dodecágono será então definido por:

Ou, utilizando o R para os cálculos, lembrando que \(l_1=2sqtr(3)/3\), obtemos

l1<-2*(sqrt(3)/3)
l2<-(-4)*(1-sqrt(1+l1^2/4))/l1
Pd<-12*l2
cat("Pd/2 = ",Pd/2)
## Pd/2 =  3.21539

Concluindo-se então um novo (e melhor) limite superior para \(\pi\):

Melhores limites com polígonos de mais lados

Formaremos sucessivos polígnonos regulares, de maneira analoga a que fizemos na Fig 2 . Recursivamente, utilizaremos o valor de \(l_n\) para descobri o valor de \(ln_n+1\). A cada iteração obteremos um novo polígono circunscrito com o dobro de lados se comparado ao primeiro.

A partir do hexágono, representaremos cada novo poligono com o um índice \(t=1,2,\ldots,\) , fazendo uma referência ao número de lados desse novo poligono. O número de lados do poligono \(L_t\) é dado por * \(L_t=3\times 2^t\) Temos que \(t=1\) corresponde ao hexágono, \(t=2\) ao dodecágono e assim sucessivamente, dobrando-se o número de lados, na medida que \(t\) cresce uma unidade. E utilizando o mesmo argumento usado no ultimo tópico, recursivamente, podemos concluir que

com \(l_1=1\) correspondendo ao lado do hexágono.

Se \(l_t\) e \(P_t\) representam, respectivamente, o comprimento do lado do polígono \(t\), tem-se

Usando a equação em diferença acima, partindo de \(t=1\) podemos obter limites inferiores para \(\pi\) que sejam arbitrariamente melhores. A função do R definida a seguir possibilita a obtenção do limite inferior para \(\pi\) para \(t=n\), com fundamento nos argumentos desenvolvidos:

acha_liminf<-function(n){
  l<-(2*(sqrt(3)))/3
  for(i in 1:n){
    L<-3*2^i
    p<-L*l
    cat(sprintf("t= %2i Lados: %10.0f Lim sup: %0.17f dif %0.17f \n",i,L,p/2,pi-p/2))
    l<-(-4)*(1-sqrt(1+l^2/4))/l
  }    
}

Testando a função definida acima com \(t=5\), correspondente ao polígono de 96 faces, computamos o limite inferior obtido por Arquimedes por

acha_liminf(5)
## t=  1 Lados:          6 Lim sup: 3.46410161513775439 dif -0.32250896154796127 
## t=  2 Lados:         12 Lim sup: 3.21539030917347102 dif -0.07379765558367790 
## t=  3 Lados:         24 Lim sup: 3.15965994209749379 dif -0.01806728850770067 
## t=  4 Lados:         48 Lim sup: 3.14608621513140108 dif -0.00449356154160796 
## t=  5 Lados:         96 Lim sup: 3.14271459964531363 dif -0.00112194605552052

A função mostra, além do valor computado para o limite inferior, a cada passo, a diferença entre esse valor e o valor de \(pi\) definido internamente pelo R, através da constante \(pi\).

Problemas numéricos com os valores computados

Como mostra Azedvedo Filho (2015) “Se usarmos aumentarmos arbitrariamente \(t\) no procedimento apresentado no ultimo parágrafo, observa-se, a partir de um certo ponto (\(t=16\)), que os valores obtidos para o limite indicam alguma anomalia no processo computacional”.

acha_liminf(25)
## t=  1 Lados:          6 Lim sup: 3.46410161513775439 dif -0.32250896154796127 
## t=  2 Lados:         12 Lim sup: 3.21539030917347102 dif -0.07379765558367790 
## t=  3 Lados:         24 Lim sup: 3.15965994209749379 dif -0.01806728850770067 
## t=  4 Lados:         48 Lim sup: 3.14608621513140108 dif -0.00449356154160796 
## t=  5 Lados:         96 Lim sup: 3.14271459964531363 dif -0.00112194605552052 
## t=  6 Lados:        192 Lim sup: 3.14187304998012618 dif -0.00028039639033306 
## t=  7 Lados:        384 Lim sup: 3.14166274705480841 dif -0.00007009346501530 
## t=  8 Lados:        768 Lim sup: 3.14161017659978059 dif -0.00001752300998747 
## t=  9 Lados:       1536 Lim sup: 3.14159703432307769 dif -0.00000438073328457 
## t= 10 Lados:       3072 Lim sup: 3.14159374881711528 dif -0.00000109522732217 
## t= 11 Lados:       6144 Lim sup: 3.14159292787337385 dif -0.00000027428358074 
## t= 12 Lados:      12288 Lim sup: 3.14159272562285041 dif -0.00000007203305730 
## t= 13 Lados:      24576 Lim sup: 3.14159267174128587 dif -0.00000001815149275 
## t= 14 Lados:      49152 Lim sup: 3.14159261890114561 dif 0.00000003468864751 
## t= 15 Lados:      98304 Lim sup: 3.14159267174128587 dif -0.00000001815149275 
## t= 16 Lados:     196608 Lim sup: 3.14159193588223218 dif 0.00000071770756094 
## t= 17 Lados:     393216 Lim sup: 3.14159267174128587 dif -0.00000001815149275 
## t= 18 Lados:     786432 Lim sup: 3.14158100757962355 dif 0.00001164601016956 
## t= 19 Lados:    1572864 Lim sup: 3.14159267174128587 dif -0.00000001815149275 
## t= 20 Lados:    3145728 Lim sup: 3.14175586042136556 dif -0.00016320683157245 
## t= 21 Lados:    6291456 Lim sup: 3.14159267174128587 dif -0.00000001815149275 
## t= 22 Lados:   12582912 Lim sup: 3.14455350588923865 dif -0.00296085229944554 
## t= 23 Lados:   25165824 Lim sup: 3.13041262664612097 dif 0.01118002694367215 
## t= 24 Lados:   50331648 Lim sup: 3.14455350588923865 dif -0.00296085229944554 
## t= 25 Lados:  100663296 Lim sup: 3.21985298740743886 dif -0.07826033381764574

Azevedo Filho (2015) explica o porque calculos envolvendo números flutuantes pode ser problemático e apresenta uma solução.

Adriano, sugere a utilização o pacote Rmpfr como possivel solução.

A função abaixo é uma adaptação daquela elaborada por Azevedo Filho (2015),que além de aumentar o número de dígitos significativos utilizando o package Rmpfr, além de trazer uma comparação com o número \(\pi\), definido pelo mesmo package.

acha_liminf2<-function(n,k){
  require(Rmpfr)
  bits<-k*log2(10) #convertendo digitos em bits
  l<-mpfr((2*(sqrt(3)))/3,bits) # l passa a ser um número com k digitos significativos
  p<-mpfr(0,bits)
  novopi<-Const("pi",bits)
  for(i in 1:n){
    L<-3*2^mpfr(i,bits)
    p<-L*l #operação propaga o número de digitos definido para p
    cat(sprintf("t= %2i Lados: %12.0f Lim sup: %s dif: %s \n",i,L,format(p/2,24),format(novopi-p/2,24)))
    l<-(-4)*(1-sqrt(1+l^2/4))/l
  }    
}

A nova função considerando 100 digitos significativos nos cálculos, para obtenção de um limite superior para \(\pi\) considerando \(t=35\), um polígono regular circunscrito com 103079215104 lados, o qual apresentou decimais de \(\pi\) corretos nas primeiras 16 casas decimais.

acha_liminf2(35,100)
## t=  1 Lados:            6 Lim sup: 3.46410161513775438635321 dif: -0.322508961547961147890565 
## t=  2 Lados:           12 Lim sup: 3.21539030917347231633708 dif: -0.0737976555836790778744377 
## t=  3 Lados:           24 Lim sup: 3.15965994209750033018139 dif: -0.0180672885077070917187499 
## t=  4 Lados:           48 Lim sup: 3.14608621513143481992518 dif: -0.00449356154164158146253946 
## t=  5 Lados:           96 Lim sup: 3.14271459964536814748128 dif: -0.00112194605557490901863555 
## t=  6 Lados:          192 Lim sup: 3.14187304997982372117892 dif: -0.000280396390030482716272769 
## t=  7 Lados:          384 Lim sup: 3.14166274705684837568815 dif: -7.00934670551372255085490e-5 
## t=  8 Lados:          768 Lim sup: 3.14161017660468938823469 dif: -1.75230148961497720448459e-5 
## t=  9 Lados:         1536 Lim sup: 3.14159703432152600146633 dif: -4.38073173276300368248862e-6 
## t= 10 Lados:         3072 Lim sup: 3.14159374877135187744956 dif: -1.09518155863898691700162e-6 
## t= 11 Lados:         6144 Lim sup: 3.14159292738509688302171 dif: -2.73795303644559062232784e-7 
## t= 12 Lados:        12288 Lim sup: 3.14159272203861366781653 dif: -6.84488204293538881221467e-8 
## t= 13 Lados:        24576 Lim sup: 3.14159267070199789735075 dif: -1.71122046588881090803754e-8 
## t= 14 Lados:        49152 Lim sup: 3.14159265786784426931774 dif: -4.27805103085510120401811e-9 
## t= 15 Lados:        98304 Lim sup: 3.14159265465930588197096 dif: -1.06951264350831352813291e-9 
## t= 16 Lados:       196608 Lim sup: 3.14159265385717128636310 dif: -2.67378047900458119486071e-10 
## t= 17 Lados:       393216 Lim sup: 3.14159265365663763753794 dif: -6.68443990752968615946269e-11 
## t= 18 Lados:       786432 Lim sup: 3.14159265360650422533645 dif: -1.67109868738067092617041e-11 
## t= 19 Lados:      1572864 Lim sup: 3.14159265359397087228638 dif: -4.17763382373418131218902e-12 
## t= 20 Lados:      3145728 Lim sup: 3.14159265359083753402388 dif: -1.04429556123479995816700e-12 
## t= 21 Lados:      6291456 Lim sup: 3.14159265359005419945825 dif: -2.60960995611126534246285e-13 
## t= 22 Lados:     12582912 Lim sup: 3.14159265358985836581685 dif: -6.51273542052814229276556e-14 
## t= 23 Lados:     25165824 Lim sup: 3.14159265358980940740650 dif: -1.61689438538247228893450e-14 
## t= 24 Lados:     50331648 Lim sup: 3.14159265358979716780391 dif: -3.92934126596083399172652e-15 
## t= 25 Lados:    100663296 Lim sup: 3.14159265358979410790326 dif: -8.69440618994879649319345e-16 
## t= 26 Lados:    201326592 Lim sup: 3.14159265358979334292810 dif: -1.04465457253392181342393e-16 
## t= 27 Lados:    402653184 Lim sup: 3.14159265358979315168431 dif: 8.67783331819796158002926e-17 
## t= 28 Lados:    805306368 Lim sup: 3.14159265358979310387336 dif: 1.34589280790822560720242e-16 
## t= 29 Lados:   1610612736 Lim sup: 3.14159265358979309192063 dif: 1.46542017693033296677372e-16 
## t= 30 Lados:   3221225472 Lim sup: 3.14159265358979308893244 dif: 1.49530201918585980649600e-16 
## t= 31 Lados:   6442450944 Lim sup: 3.14159265358979308818540 dif: 1.50277247974974151641592e-16 
## t= 32 Lados:  12884901888 Lim sup: 3.14159265358979308799863 dif: 1.50464009489071194389523e-16 
## t= 33 Lados:  25769803776 Lim sup: 3.14159265358979308795194 dif: 1.50510699867595455076502e-16 
## t= 34 Lados:  51539607552 Lim sup: 3.14159265358979308794027 dif: 1.50522372462226520248246e-16 
## t= 35 Lados: 103079215104 Lim sup: 3.14159265358979308793735 dif: 1.50525290610884286541182e-16