La precisione in matematica Di Cristiano Armellini, [email protected] Consideriamo il tema del calcolo dei decimali di un qualunque numero reale con una precisione infinita. Consideriamo lo sviluppo binomiale di (1 + π₯)π = 1 + ππ₯ + πΆ2π π₯ + πΆ3π π₯ + β― Ove i termini dello sviluppo sono i coefficienti binomiali C. Consideriamo quindi a = ½, a = 1/3 ecc. Nel caso a = ½, per -1 < x <= 1 ho la seguente formula 1 1 2 1∗3 3 1∗3∗5 4 π₯ + π₯ − 4 π₯ +β― √1 + π₯ = 1 + π₯ − 2 2∗4 2∗4∗6 2 ∗ 4! Per x = 1 ho immediatamente la √2 1 √3 Se x =1/2 ho posso calcolare √1 + π₯ = √1 + 2 = 2 ma sconoscendo già il valore esatto del denominatore √ mi ricavo facilmente il valore del numeratore. Continuando così per x = 1/3 mi calcolo la radice quadrata di 4 (che già so essere un quadrato perfetto), quindi per x = ¼ mi calcolo la radice quadrata di 5, conoscendo la radice di 4, e per x = 1/5 la radice di 6 conoscendo già al passo precedente la radice quadrata di 5, ecc. Il metodo iterattivo è immediato quando √1 + 1/π = √(π + 1)/π e n o n+1 sono quadrati perfetti perché in questo caso applicando la formulo dello sviluppo binomiale e conoscendo il valore del quadrato perfetto, il calcolo dell’altra radice quadrata risulta immediato. Stesso ragionamento per le radici cubiche ricordando che per a = 1/3 (per -1 < x <= 1) 1 2 2 2∗5 3 π₯ + π₯ +β― √1 + π₯ = 1 + π₯ − 3 3∗6 3∗6∗9 3 Il sistema descritto consente di ottenere valori con una precisione arbitraria ma a volte risulta poco pratico. Consideriamo allora un’altra semplice tecnica. Partiamo dall’equazione π₯ 2 + π₯ + π = 0 che ha come soluzioni π₯1,2 = −1±√1−4π 2 . Allora se il mio obiettivo è calcolare (ad esempio) la radice quadrata di 5 basterà porre 1-4c=5, quindi c = -1, quindi π₯ 2 + π₯ − 1 = 0, π₯ = −1±√5 . 2 Per ottenere la soluzione in modo preciso possiamo risolvere l’equazione usando i metodi del calcolo numerico (tangenti, Newton, punto unito, bisezione) . Una volta trovato x basterà calcolare 2x+/-1 per ottenere il risultato finale. E se devo calcolare la radice ennesima di x ? n > 2 . Si possono studiare regole ad hoc come abbiamo fatto sopra per ogni n > 2 ma in generale si considera l’equazione π₯ π − π = 0 che risolta con le tecniche di analisi numerica dà la radice ennesima di a. Un altro possibile approccio (sempre grazie a Taylor-Mc-Laurin) consiste nel considerare lo sviluppo di π π₯ = π π₯ππ(π) = 1 + π₯ππ(π) + (π₯ππ(π))2 (π₯ππ(π))3 + +β― 2! 3! Che vale per ogni x ma nella quale compare ln(a) ovvero il logaritmo naturale di a che però possiamo calcolare con una precisione infinita usando una delle formule riportate qui sotto. Usando lo sviluppo in serie di Taylor già sappiamo che possiamo calcolare con estrema accuratezza i valori di sen(x), cos(x), tan(x), ln(x), alla base di molti calcoli e applicazioni matematiche (per l’accuratezza basterà considerare molti termini della serie) Ad esempio π₯3 π₯5 π₯7 + − +. . 3! 5! 7! π₯2 π₯4 π₯6 cos(π₯) = 1 − + − +. . 2! 4! 6! 2 π₯ π₯3 π π₯ = 1 + π₯ + + +. . 2! 3! π₯−1 1 π₯−1 3 1 π₯−1 5 ln(π₯) = 2 {( )+ ( ) + ( ) +β―},π₯ > 0 π₯+1 2 π₯+1 5 π₯+1 π ππ(π₯) = π₯ − π₯−1 1 π₯−1 2 1 π₯−1 3 ln(π₯) = {( )+ ( ) + ( ) + β― } , π₯ > 1/2 π₯ 2 π₯ 3 π₯ Di queste espressioni sappiamo anche stimare l’errore che si commette considerando i primi k termini della serie La precisione è molto importante anche per il calcolo dei numeri trascendenti, il più famoso dei quali è certamente il PI greco. Usando la formula di Wallis ho π 24π (4π!)4 = lim 2 π→+∞ [(2π)!]2 (2π + 1) Con questa formula molto compatta proviamo a scrivere una applicativo in Python per calcolare le cifre decimali di pigreco con una precisione praticamente infinita import math; def wallis(n): m = 10**n; pi = ((2**(4*m))*(math.factorial(m))**4)/((2*m+1)*(math.factorial(2*m)**2)); k = 2*pi; return k*10^n; Ma in questo caso per ottenere una estrema precisione occorre disporre di un calcolatore particolarmente potente