Matlab e grandi numeri
Sappiamo che
\[ \sqrt{x+1} - \sqrt{x} = \frac{1}{\sqrt{x+1}+ \sqrt{x} } \]
Per \( x= 10,100,1000,\ldots , 10^{19} \) comparare su Matlab le due espressioni, cosa constatate?
Allora quello che ho notato è che fino a \( 10^{12} \) i due risultati sono uguali ma a partire da \( 10^{13} \) mi restituisce due valori distinti. Ad esempio per \( 10^{13} \) ottengo per l'espressione di sinistra
\( 1.5786e-07 \) e per l'espressione di destra \( 1.5811e-07 \). Però non so spiegarmi il motivo.
\[ \sqrt{x+1} - \sqrt{x} = \frac{1}{\sqrt{x+1}+ \sqrt{x} } \]
Per \( x= 10,100,1000,\ldots , 10^{19} \) comparare su Matlab le due espressioni, cosa constatate?
Allora quello che ho notato è che fino a \( 10^{12} \) i due risultati sono uguali ma a partire da \( 10^{13} \) mi restituisce due valori distinti. Ad esempio per \( 10^{13} \) ottengo per l'espressione di sinistra
\( 1.5786e-07 \) e per l'espressione di destra \( 1.5811e-07 \). Però non so spiegarmi il motivo.
Risposte
Quello che hai di fronte è un classico esempio di cancellazione numerica (in inglese catastrophic cancellation/loss of significance). In pratica a sinistra stai facendo la differenza tra due numeri che in modulo sono "vicini", e come sai, per via del fatto che la macchina memorizza solo un numero finito di cifre, quando fai la differenza vengono fuori problemi
Più formalmente, avrai certamente visto la
Di fatto, già per $x=10^{16}$ hai che
Più formalmente, avrai certamente visto la
Di fatto, già per $x=10^{16}$ hai che
sqrt(1e16)==sqrt(1e16 +1)da come output (in MatLab)
Truee dunque il risultato è $0$, mentre l'espressione di destra dà il risultato corretto visto che c'è solo una somma
Ah è un esempio di somma instabile? Come ho scritto in questo thread https://www.matematicamente.it/forum/viewtopic.php?f=39&t=206632
Non abbiamo visto comunque che \( \sqrt{10^{16}}=\sqrt{10^{16}+1} \) in aritmetica macchina. Immaginavo che mi dava zero per via dello spacing dell'intervallo.
E misurando la stabilità della somma in \( F \) abbiamo che
\[ \operatorname{fl}(\operatorname{fl}(x)+\operatorname{fl}(y)) \leq 2^{-52} \max_{x,y} \left( \frac{\left| x \right|}{\left|x+y \right|} +\frac{\left| y \right|}{\left|x+y \right|}+1\right) \]
Pertanto se \(x \sim -y \) l'operazione della somma è molto instabile.
Non abbiamo visto comunque che \( \sqrt{10^{16}}=\sqrt{10^{16}+1} \) in aritmetica macchina. Immaginavo che mi dava zero per via dello spacing dell'intervallo.
La situazione è proprio quella che dici 
Che libro di testo usate?

Che libro di testo usate?
La prof si basa su questi tre libri per il suo corso
- A. Quarteroni, R. Sacco et F. Saleri : « Méthodes Numériques Algorithmes, analyse et applications » Springer, 2007
-Quarteroni et F. Saleri : « Calcul Scientifique : Cours, exercices corrigés et illustrations en MATLAB et OCTAVE », Springer, 2006
-E. Suli, An Introduction to Numerical Analysis, Cambridge University Press , 2003.
- A. Quarteroni, R. Sacco et F. Saleri : « Méthodes Numériques Algorithmes, analyse et applications » Springer, 2007
-Quarteroni et F. Saleri : « Calcul Scientifique : Cours, exercices corrigés et illustrations en MATLAB et OCTAVE », Springer, 2006
-E. Suli, An Introduction to Numerical Analysis, Cambridge University Press , 2003.
I primi due li conosco abbastanza bene. Però devo dire che sull'aritmetica di macchina non spendono molte parole. Il terzo invece non ne parla proprio.
Non saprei cosa dirti, la prof scrive delle note di corso basate su quei 3 libri.