nsi:tds:maths:pi:ramanujan
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| nsi:tds:maths:pi:ramanujan [2023/01/17 14:07] – supprimée - modification externe (Unknown date) 127.0.0.1 | nsi:tds:maths:pi:ramanujan [2023/01/17 14:07] (Version actuelle) – ↷ Page déplacée et renommée de nsi:tds:maths:pi_ramanujan à nsi:tds:maths:pi:ramanujan goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Approximer pi avec une suite de Ramanujan ====== | ||
| + | {{ .: | ||
| + | |||
| + | Srinisiva Ramanujan (22 décembre 1887 -- 26 avril 1920) est un mathématicien autodidacte indien, auteur génial de nombreuses formules très originales. | ||
| + | |||
| + | Godfroy Hardy -- mathématicien britannique qui a fait connaître les travaux de Ramanujan -- rapporte cette anecdote : | ||
| + | > « Je me souviens que j' | ||
| + | |||
| + | Il a produit des formules permettant de calculer $\pi$. En voici une : | ||
| + | |||
| + | $$\frac{1}{\pi} = \frac{2\sqrt{2}}{9801} \sum_{k=0}^{\infty} \frac{(4k)! (1\,103 + 26\, | ||
| + | |||
| + | Il faut bien dire que cette formule fait un peu peur et parait magique. | ||
| + | |||
| + | ===== Première approche naïve ===== | ||
| + | |||
| + | On ne prend pas spécialement de précautions, | ||
| + | |||
| + | <code python linenums> | ||
| + | from math import sqrt # racine carrée pour le calcul de racine(2) | ||
| + | </ | ||
| + | |||
| + | <WRAP box>**À faire :** | ||
| + | - Écrire une fonction '' | ||
| + | - Écrire une fonction '' | ||
| + | - Écrire une fonction '' | ||
| + | - En déduire l' | ||
| + | </ | ||
| + | |||
| + | ===== Méthode moins naïve ===== | ||
| + | |||
| + | La formule de Ramanujan es utile parce qu' | ||
| + | * Avec '' | ||
| + | * avec '' | ||
| + | |||
| + | Une telle formule n'a d' | ||
| + | |||
| + | ==== module decimal ==== | ||
| + | |||
| + | Pour cela nous allons utiliser le module '' | ||
| + | |||
| + | <code python linenums> | ||
| + | from decimal import Decimal, getcontext | ||
| + | |||
| + | C = getcontext() # permettra de régler des paramètres | ||
| + | C.prec = 1024 # par exemple, une précision à 1024 chiffres | ||
| + | |||
| + | # un exemple d' | ||
| + | x = Decimal(3) | ||
| + | x.sqrt() | ||
| + | 3*x # renvoie le Decimal égal à 3*x, donc 9 ici | ||
| + | 0.1*x # à ne surtout pas faire : si on utilise Decimal, c'est justement pour éviter | ||
| + | # le problème des float qui ne codent qu' | ||
| + | |||
| + | dixieme = D(0.1) # surtout pas ! comme vous devez le savoir, quand on écrit 0.1, | ||
| + | # la machine produit un nombre codé en binaire qui ne fait qu' | ||
| + | # et ce nombre est 0.100000000000000005551... | ||
| + | dixieme = D(' | ||
| + | </ | ||
| + | |||
| + | ==== Ce qu'il faut changer ==== | ||
| + | |||
| + | * Ajouter les lignes 1 à 4 (import et réglage de contexte) de ce qui précède, | ||
| + | * supprimer l' | ||
| + | * vous pouvez laisser votre méthode '' | ||
| + | * dans la fonction '' | ||
| + | * Dans le calcul final, au lieu de '' | ||
| + | |||
| + | Vous pouvez recommencer et apprécier le résultat. | ||
| + | |||
| + | <WRAP info> | ||
| + | |||
| + | 3.14159265358979323846264338327950288419716939937510582097494\\ 4592307816406286208998628034825342117067982148086513282306647\\ 0938446095505822317253594081284811174502841027019385211055596\\ 4462294895493038196442881097566593344612847564823378678316527\\ 1201909145648566923460348610454326648213393607260249141273724\\ 5870066063155881748815209209628292540917153643678925903600113\\ 3053054882046652138414695194151160943305727036575959195309218\\ 6117381932611793105118548074462379962749567351885752724891227\\ 9381830119491298336733624406566430860213949463952247371907021\\ 7986094370277053921717629317675238467481846766940513200056812\\ 7145263560827785771342757789609173637178721468440901224953430\\ 1465495853710507922796892589235420199561121290219608640344181\\ 5981362977477130996051870721134999999837297804995105973173281\\ 6096318595024459455346908302642522308253344685035261931188171\\ 0100031378387528865875332083814206171776691473035982534904287\\ 5546873115956286388235378759375195778185778053217122680661300\\ 1927876611195909216420198 | ||
| + | </ | ||
| + | |||
| + | <WRAP tip>Nous avons utilisé une bibliothèque toute faite, '' | ||
