Tarte Newtoniana

Secção dedicada à linguagem de programação favorita dos quarkianos: Python!

Tarte Newtoniana

Mensagempor jap em Terça Dez 16, 2008 12:00 am

Reza a história da Física que Isaac Newton inventou o cálculo integral para resolver alguns problemas levantados pela sua Teoria da Gravitação Universal, e que ao aplicar este seu inovador método de cálculo a um destes problemas encontrou uma nova forma para calcular o número \pi, a partir da seguinte série:

\frac{\pi}{2} = \sum_{n=0}^{+\infty}\frac{n!}{(2n+1)!!}=1+\frac{1}{3}+ \frac{1\cdot 2}{3\cdot 5}+\frac{1\cdot 2 \cdot 3}{3\cdot 5\cdot 7} + \cdots

ou ainda,

\frac{\pi}{2} = 1+\frac{1}{3}\left(1+\frac{2}{5}\left(1+\frac{3}{7}\left(1+\frac{4}{9}\left(1+ \cdots \right)\right)\right)\right)

Ora implementem um programa que calcule esta tarte newtoniana (aka Newton-\pi :lol:), somando os termos da série necessários para obter \pi com uma precisão de 10 casas decimais... :wink:

Para os Python experts, o mesmo desafio mas num código de uma só linha! Sim, disse bem, é possível efectuar o cálculo numa só linha de Python! :D
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Tarte Newtoniana

Mensagempor RicardoCampos em Terça Dez 16, 2008 7:56 pm

Suponho que não seja isto :P

Código: Seleccionar Todos
>>> from math import *
>>> pi
3.1415926535897931


(Que está errado na ultima casa decimal!)

Já agora, como é que controlamos a precisão sem conhecer o verdadeiro valor do \pi?
\emph{Ricardo Campos}\in \delta \bigcap q\overline{q}
O Matemático-Físico de 2008
Avatar do utilizador
RicardoCampos
top-Quark!
top-Quark!
 
Mensagens: 1280
Registado: Sexta Jun 01, 2007 3:49 pm
Localização: Figueira da Foz/Coimbra/DMUC/DFUC, Paris... E agora Zurique!

Re: Tarte Newtoniana

Mensagempor sagardipak em Terça Dez 16, 2008 9:19 pm

Comparando o valor de n com o de n-1? Vês o erro percentual, o que deve dar uma ideia da precisão decimal...
Nature and nature's laws lay hid in night;
God said "Let Newton be" and all was light.

IPhO 2009, México
Quark! 2007/2008, 2008/2009
Avatar do utilizador
sagardipak
strange-Quark!
strange-Quark!
 
Mensagens: 926
Registado: Sábado Out 20, 2007 9:58 pm
Localização: Bracara Augusta

Re: Tarte Newtoniana

Mensagempor jap em Terça Dez 16, 2008 11:16 pm

RicardoCampos Escreveu:Suponho que não seja isto :P

Código: Seleccionar Todos
>>> from math import *
>>> pi
3.1415926535897931


(Que está errado na ultima casa decimal!)

Já agora, como é que controlamos a precisão sem conhecer o verdadeiro valor do \pi?


Não, não era isso que tinha em mente - e o teu programa usa duas linhas de python e não uma! :lol:

É mesmo para implementar o cálculo da série acima numa só linha pitónica! :wink: E podem assumir como verdadeiro o valor de pi tal como esta implementado no módulo math onde apenas a última casa decima acima está "errada". :wink:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Tarte Newtoniana

Mensagempor Tharis em Sexta Dez 19, 2008 11:05 pm

Espero nao vir tarde, mas aqui fica a minha solução! :P :lol:

Código: Seleccionar Todos
>>> 2*sum([ float(map( lambda n:reduce(lambda a,b:a*(b+1),range(n),1) ,range(0,50))[i]) / map( lambda c: reduce(lambda x,y: x*y ,c) , [range(1,n,2) for n in range(3,101,2)])[i] for i in range(0,33)])
3.141592653519746


Tal como foi pedido, numa linha! :mrgreen: O problema é que o numero de elementos foi à mão.

O output também conta como linha de código? Ou posso ter uma linha para calcular e depois fazer ">>> val" e aparecer o valor?
Avatar do utilizador
Tharis
up-Quark!
up-Quark!
 
Mensagens: 387
Registado: Quinta Out 23, 2008 4:26 pm

Re: Tarte Newtoniana

Mensagempor jap em Sábado Dez 20, 2008 12:43 am

O output não conta, pelo que o teu programa faz exactamente o que eu pedia - calcula o valor de \pi pelo método de Newton numa só linha! :P Parabéns! :hands:

Claro que ficava mais bonito se o número de termos que se somam na séria não fosse fixo mas esse número (o estritamente necessário) fosse determinado no próprio programa - mas é bastante mais challenging de o fazer em idioma fucncional numa só linha! :lol:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra


Voltar para Pitónica

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante

cron