View Full Version : Pi reco...
Cercando per il web, vedo e trovo programmi che calcolano il pi greco...
Ma il pi greco, come lo calcoliamo??? :confused:
Ho letto qualcosina, ma come si ci è arrivati a quei stratagemm di calcolo??? E come facciamo a essere certi che quello che calcoliamo sia il valore esatto del pi greco... anche se adesso con il computer non dovrebbe esistere più questo problema...
Tra l'altro qualcuno mi saprebbe spiegare come un numero possa essere infinito... irrazionale e trascendente... Un numero razionale è per forza trascendente????
Domanda stupida???... :stordita:
Grazie
Il pi Greco non può essere esatto... per quel che si sa ora è infinito, o meglio, non ne è mai stata calcolata una fine o rilevata una periodicità.
Su come lo calcolino, non ne ho la più pallida idea...
C'è qualche stratagemma di calcolo che ti porta fino ad una determinata cifra, ma come ci sono arrivati???...
Sparano a caso... :p
:stordita:
Come calcolare pi?
Ronfo ha inviato alcuni "trucchi" più matematici dei precedenti.
Se non vi servono tante cifre vi insegno una frazione che dà pi esatto fino alla sesta cifra decimale.
Considerate i primi tre numeri dispari due volte
1 1 3 3 5 5
e costruite la frazione 355/113.
Provare per credere.
Per i più volenterosi ho trovato due espressioni con le quali è possibile calcolare il valore di pigreco con un numero di cifre qualsiasi.
La prima è:
Pi = 2*( 2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7 * 8/7 * 8/9...)
Ossia i numeratori sono i numeri pari in successione e i denominatori i numeri dispari alternati e sfalsati
(per vostra info lo scopritore di questa formula fu Wallis)
La seconda formula di Leitbnitz (addirittura) è:
Pi = 4*(1/1 - 1/3 + 1/5 - 1/7 + 1/9 -1/11 ....)
Pi greco sulla bilancia
Ringrazio Archimede e Pasquale per il seguente problema.
Come fare per conoscere il valore di pigreco, disponendo di una bilancia a display digitale?
Massimo
Prendo un compasso e traccio un cerchio di raggio 1 m su una superficie di massa pari a 1kg/m^2. Poi taglio lungo il segno.
Archimede
Si potrebbe costruire un cilindro di metallo di raggio 1 dm e altezza 1 dm metterlo sulla bilancia e fare la tara...poi basta riempirlo d'acqua...
Enrico Delfini
Un sistema abbastanza praticabile (credo più di quello di tagliare con precisione una lastra di metallo) potrebbe servirsi di qualche risma di carta da fotocopie. Il formato è noto, la grammatura è specificata (di solito fra 70 e 100 grammi per metroquadro); il gioco è fatto.
Tratto da qui... http://utenti.quipo.it/base5/numeri/pigreco.htm
Ci sono arrivati calcolando, ma il calcolo non porta ad una fine.
E' come dire, fai a mano 1/3: vai avanti a calcolare fin che vuoi, ma non arrivi mai ad una fine. In realtà il discorso è un po' diverso perchè 1/3 è periodico, mentre per il pi greco, per ora, non si è stabilita nessuna periodicità (che significherebbe terminare il calcolo, fondamentalmente).
Con i metodi che hai descritto troveresti un numero probabilmente finito solamente per limiti nella rilevazione delle grandezze di cui ti servi per effettuare il calcolo, non perchè arrivi ad un valore esatto.
Private Sub vai()
Dim i As Integer = 0
Dim digits As Integer = 20
Dim pi As StringBuilder = New StringBuilder("3", digits + 2)
pi.Append(".")
For i = 0 To digits Step 9
asd.Text &= i.ToString
Dim nineDigits As Integer = NineDigitsOfPiAt.StartingAt(i + 1)
Dim digitCount As Integer = Math.Min(digits - i, 9)
Dim ds As String = String.Format("{0:D9}", nineDigits)
pi.Append(ds.Substring(0, digitCount))
asd.Text &= pi.ToString
Next i
End Sub
tratto da un mio antichissimo programmino in vb.net che nemmeno ricordo come ho programmato :asd:
Private Sub vai()
Dim i As Integer = 0
Dim digits As Integer = 20
Dim pi As StringBuilder = New StringBuilder("3", digits + 2)
pi.Append(".")
For i = 0 To digits Step 9
asd.Text &= i.ToString
Dim nineDigits As Integer = NineDigitsOfPiAt.StartingAt(i + 1)
Dim digitCount As Integer = Math.Min(digits - i, 9)
Dim ds As String = String.Format("{0:D9}", nineDigits)
pi.Append(ds.Substring(0, digitCount))
asd.Text &= pi.ToString
Next i
End Sub
tratto da un mio antichissimo programmino in vb.net che nemmeno ricordo come ho programmato :asd:
A conoscerlo visul basic, solo php e actionscript... :p
:cry:
:ciapet:
sinceramente, vb.net non lo ricordo nemmeno più :muro:
tutto quello che imparo lo dimentico in meno di un anno... :(
edit: ah, ehm.... ho dimenticato la parte più importante :rotfl:
Imports System
Public Class NineDigitsOfPiAt
Public Shared Function mul_mod(ByVal a As Long, ByVal b As Long, ByVal m As Integer) As Integer
Return CInt(((a * b) \ m))
End Function
' return the inverse of x mod y
Public Shared Function inv_mod(ByVal x As Integer, ByVal y As Integer) As Integer
Dim q As Integer = 0
Dim u As Integer = x
Dim v As Integer = y
Dim a As Integer = 0
Dim c As Integer = 1
Dim t As Integer = 0
While (u <> 0)
q = v / u
t = c
c = a - q * c
a = t
t = u
u = v - q * u
v = t
End While
a = a \ y
If (a < 0) Then a = y + a
Return a
End Function
' return (a^b) mod m
Public Shared Function pow_mod(ByVal a As Integer, ByVal b As Integer, ByVal m As Integer) As Integer
Dim r As Integer = 1
Dim aa As Integer = a
Do
'If (("b&0x01") <> 0) Then r = mul_mod(r, aa, m)
'b = b>>1
If (b = 0) Then Exit Do
aa = mul_mod(aa, aa, m)
Loop While (True)
Return r
End Function
' return true if n is prime
Public Shared Function is_prime(ByVal n As Integer) As Boolean
If ((n \ 2) = 0) Then Return False
Dim r As Integer = CInt(Math.Sqrt(n))
Dim i As Integer
For i = 3 To i <= r Step 2
If ((n \ i) = 0) Then Return False
Next i
Return True
End Function
' return the prime number immediately after n
Public Shared Function next_prime(ByVal n As Integer) As Integer
While (is_prime(n) = False)
n += 1
End While
Return n
End Function
Public Shared Function StartingAt(ByVal n As Integer) As Integer
Dim av As Integer = 0
Dim vmax As Integer = 0
Dim Nn As Integer = CInt(((n + 20) * Math.Log(10) / Math.Log(2)))
Dim num As Integer = 0
Dim den As Integer = 0
Dim kq As Integer = 0
Dim kq2 As Integer = 0
Dim t As Integer = 0
Dim v As Integer = 0
Dim s As Integer = 0
Dim sum As Double = 0.0
Dim a As Integer
For a = 3 To (2 * Nn)
vmax = CInt((Math.Log(2 * Nn) / Math.Log(a)))
av = 1
Dim i As Integer = 0
For i = 0 To vmax
av = av * a
Next i
s = 0
num = 1
den = 1
v = 0
kq = 1
kq2 = 1
Dim k As Integer
For k = 1 To n
t = k
If (kq >= a) Then
While ((t \ a) = 0)
t = t / a
v -= 2
End While
kq = 0
End If
kq += 1
num = mul_mod(num, t, av)
t = (2 * k - 1)
If (kq2 >= a) Then
If (kq2 = a) Then
While ((t \ a) = 0)
t = t / a
v += 1
End While
End If
kq2 -= a
End If
den = mul_mod(den, t, av)
kq2 += 1
If (v > 0) Then
t = inv_mod(den, av)
t = mul_mod(t, num, av)
t = mul_mod(t, k, av)
For i = v To vmax
t = mul_mod(t, a, av)
Next i
s += t
If (s >= av) Then s -= av
End If
Next k
t = pow_mod(10, n - 1, av)
s = mul_mod(s, t, av)
sum = (sum + CType(s, Double) / CType(av, Double)) \ 1.0
next_prime(a)
Next
Return CInt(sum * 1000000000.0)
End Function
End Class
devo essere sincero, questa parte del prog me l'ha passata uno che ci sapeva fare... io l'ho integrata al mio prog :asd:
sinceramente, vb.net non lo ricordo nemmeno più :muro:
tutto quello che imparo lo dimentico in meno di un anno... :(
Sei anche bravo, io quando esco da un esame non mi ricordo nemmeno che domande mi hanno fatto :asd:
Sei anche bravo, io quando esco da un esame non mi ricordo nemmeno che domande mi hanno fatto :asd:
allora non sono l'unico... :asd:
Io il pomeriggio non ricordo nemmeno quello che ho mangaito a mezzogiorno, abbiamo l'hard disk pieno, cancellate un po' i file obsoleti... :sofico:
Ho letto qualcosina, ma come si ci è arrivati a quei stratagemm di calcolo???
Ci sono delle serie notevoli che convergono a Pi o a una formula che coinvolge Pi, ad esempio la somma di 1/n^2 converge a Pi^2/6. Praticamente tutti gli algoritmi usano una serie o una successione di questo tipo. Ad esempio:
http://en.wikipedia.org/wiki/Borwein%27s_algorithm
Lucrezio
28-08-2005, 14:46
Si può calcolare anche con un metodo tipo montecarlo...
pensate ad esempio ad un bersaglio quadrato con inscritto un cerchio.
Lanciateci sopra un milione di freccette a caso (in modo che ogni punto abbia la stessa probabilità di essere colpito)
contate quante freccette sono all'interno del cerchio e quante sono in tutto, il rapporto fra questi numeri dovrebbe dare 4 pi
Aggiungo anche che esiste una formula che da' un algoritmo di estrazione dell'n-esima cifra del Pi greco, detta formula BPP dalle iniziali dei cognomi dei tre scopritori: purtroppo funziona solo in base sedici...
Qui qualche dettaglio: BBP Formula (http://mathworld.wolfram.com/BBPFormula.html)
E qui tante altre bellissime formule su Pi:
Pi Formulas (http://mathworld.wolfram.com/PiFormulas.html)
:D
Si può calcolare anche con un metodo tipo montecarlo...
E' un modo ma tremendamente inefficiente... dopo qualche cifra decimale il tempo di calcolo inizia ad essere proibitivo ;)
Lucrezio
28-08-2005, 19:14
E' un modo ma tremendamente inefficiente... dopo qualche cifra decimale il tempo di calcolo inizia ad essere proibitivo ;)
;)
verissimo, ahimé!
Come metodo è molto più efficiente quello del prodotto infinito di Wallis; la serie armonica 1/n^2 converge estremamente lentamente, invece...
SI ottiene moltiplicando per 4 la serie di Eulero..
gurutech
29-08-2005, 12:31
prendi la circonferenza, inscrivi o circoscrivi dei poligoni regolari e fai tendere ad infinito i lati, e poi calcoli perimetro fratto diametro
http://www.gurutech.it/polimi/pigreco.pdf
JL_Picard
30-08-2005, 09:19
Tra l'altro qualcuno mi saprebbe spiegare come un numero possa essere infinito... irrazionale e trascendente... Un numero razionale è per forza trascendente????
Grazie
Per essere precisi nessun numero è "infinito", al massimo è composto da un numero infinito di cifre.
Per la distinzione fra le varie categorie di numeri (interi, razionali, irrazionali algebrici, irrazionali trascendenti, ...) vedi QUI (http://www.vialattea.net/esperti/mat/numeri.htm)
Per la distinzione fra le varie categorie di numeri (interi, razionali, irrazionali algebrici, irrazionali trascendenti, ...) vedi QUI (http://www.vialattea.net/esperti/mat/numeri.htm)
Peraltro, è un sito bellissimo, lo consiglio a tutti!
JL_Picard
10-09-2005, 17:00
Ci sono arrivati calcolando, ma il calcolo non porta ad una fine.
E' come dire, fai a mano 1/3: vai avanti a calcolare fin che vuoi, ma non arrivi mai ad una fine. In realtà il discorso è un po' diverso perchè 1/3 è periodico, mentre per il pi greco, per ora, non si è stabilita nessuna periodicità (che significherebbe terminare il calcolo, fondamentalmente).
Con i metodi che hai descritto troveresti un numero probabilmente finito solamente per limiti nella rilevazione delle grandezze di cui ti servi per effettuare il calcolo, non perchè arrivi ad un valore esatto.
In realtà è stato dimostrato il contrario (ovvero che NON vi può essere una periodicità).
jumpermax
10-09-2005, 17:24
Per essere precisi nessun numero è "infinito", al massimo è composto da un numero infinito di cifre.
Per la distinzione fra le varie categorie di numeri (interi, razionali, irrazionali algebrici, irrazionali trascendenti, ...) vedi QUI (http://www.vialattea.net/esperti/mat/numeri.htm)
direi piuttosto che la rappresentazione in notazione decimale è sempre infinita, può essere periodica o meno. Non dimentichiamoci che 1 in realtà sarebbe 1.(0) ma lo zero si può omettere...
In realtà è stato dimostrato il contrario (ovvero che NON vi può essere una periodicità).
Ah ecco, non lo sapevo, grazie per la correzione ;)
senzasoldi
13-09-2005, 18:51
Pi = lim n*sin(180/n)
Per n tendente a infinito.
Scusate il modo in cui lo scrivo.
L'ho trovato io una trentina di anni fa!
JL_Picard
13-09-2005, 19:14
Pi = lim n*sin(180/n)
Per n tendente a infinito.
Scusate il modo in cui lo scrivo.
L'ho trovato io una trentina di anni fa!
Interessante, ma...
1. converge molto lentamente
2. contiene ancora la funzione "seno", per cui non è "gestibile" a mano.
... trent'anni fa... ma quanti anni hai?
Ziosilvio
13-09-2005, 19:23
Pi = lim n*sin(180/n)
Per n tendente a infinito.
Scusate il modo in cui lo scrivo.
L'ho trovato io una trentina di anni fa!
Casomai, Pi = lim {n-->oo} n sin (Pi/n).
E questo non c'è certo bisogno di "trovarlo": basta applicare i limiti notevoli.
senzasoldi
13-09-2005, 20:07
l'anno prossimo 100!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.