/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Cálculo de pi con algoritmo de Borwein en PYTHON

 
      Índice del Foro elrincondelc.com -> Otros lenguajes
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 26/02/2013 12:35 pm
Título: Cálculo de pi con algoritmo de Borwein en PYTHON

En una respuesta a untio referida al cálculo de pi propuse el método de Euler, pero con resultados "pobres" en cuanto a cantidad de cifras exactas. Así que buscando encontré un método iterativo llamado algoritmo de Borwein, que teóricamente cuadruplica las cifras obtenidas en cada iteración. Pero ni pa´dios me salen las cifras que indican. Y mi duda está si el lenguaje es el que hace impreciso el cálculo o la potencia del ordenador, que no creo ya que con el programa SUPER PI si me salen. ..... ¿alguien podría comprobar si sale lo que promete el algoritmo en su ordenador?

Paso el código, que como indico en el enunciado, aquí está en Python 3.x:

Código:
#Borwein's algorithm (1985)
'''and it has the impressive quartic rate of convergence(each successive iteration
quadruples the number of correct digits). The first two iterates are
Algorithm 

yk+1=1-( 1-yk^4) ^1/41+(1-yk^4) ^1/4
ak+1=(1+yk+1)^4*ak-2^(2k+3)*yk+1*(1+yk+1+yk+1^2),
starting with

y0 = sqrt2-1,a0 = 6-4sqrt2,

 The first two iterates are Algorithm :
1/a1=3.1415926(462...)
1/a2=3.1415926535897932384626433832795028841971(146...)'''


from math import sqrt
a=6-4*sqrt(2)
y=sqrt(2)-1
for n in range (10):
    y1=(1-(1-y**4)**(1/4))/(1+(1-y**4)**(1/4))
    a1=((1+y1)**4)*a-(2**(n+3))*y1*(1+y1+y1**2)
    a=a1
    y=y1
a2=1/a1
print ("%1.50f" % a2)   
print ()


Podéis encontrarlo en:

http://en.wikipedia.org/wiki/Borwein%27s_algorithm
http://numbers.computation.free.fr/Constants/Pi/iterativePi.html

Gracias por la atención y ¡ ¡ ¡ espero opiniones¡ ¡ ¡ .

Saluditos!. ...

P.D: Este no es el único intento, más bien el n-ésimo y todos con "pobres" resultados en cantidad de cifras exactas, insisto.

Por ejemplo, también he usado el método de fracciones continuas que aparentemente iría bien:


con el correpondiente código:

Código:

i =100000
j=99998
pi=((6+(2*5-1)**2)**(-1))*(2*4-1)**2
print ("%1.50f" % pi)
while (2*j-1) > 0:
    pi=(6+pi)**(-1)*((2*j-1)**2)
    j-=1
pi+=3
print ("%1.50f" % pi)
print ()


Pero nada de nada, unas diez o quince cifras solamente.

Me pica la curiosidad, ¿ atí no?. ...

P.DRazz.D: Seré torpe, el problema radica en la falta de precisión de los números en coma flotante: 0.1+0.1+0.1-0.3=5.551115123125783e-17

Tendría que usar números enteros y al final pasarlo a flotante. No obstante sigo abierto a sugerencias. Wink


Ultima edición por leosan el 27/02/2013 10:03 am; editado 1 vez
Volver arriba
leosan



Registrado: 19 Abr 2012
Mensajes: 730
Ubicación: GRAN CANARIA

MensajePublicado: 27/02/2013 9:58 am
Título: Re: Cálculo de pi con algoritmo de Borwein en PYTHON

O mejor aún, trabajar en binario, así creo que no perdería ninguna cifra.

No obstante sigo abierto a sugerencias. Wink

P.D: Estoy "espeso". No se ha editado en el anterior post. Sorry.
Volver arriba
      Índice del Foro elrincondelc.com -> Otros lenguajes
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com