Matlab e grandi numeri

Messaggioda 3m0o » 01/03/2020, 21:31

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.
3m0o
Cannot live without
Cannot live without
 
Messaggio: 866 di 5330
Iscritto il: 02/01/2018, 15:00

Re: Matlab e grandi numeri

Messaggioda feddy » 02/03/2020, 09:54

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
Codice:
sqrt(1e16)==sqrt(1e16 +1)
da come output (in MatLab)
Codice:
True
e dunque il risultato è $0$, mentre l'espressione di destra dà il risultato corretto visto che c'è solo una somma
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2642 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Matlab e grandi numeri

Messaggioda 3m0o » 02/03/2020, 14:27

Ah è un esempio di somma instabile? Come ho scritto in questo thread https://www.matematicamente.it/forum/viewtopic.php?f=39&t=206632
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.
3m0o
Cannot live without
Cannot live without
 
Messaggio: 869 di 5330
Iscritto il: 02/01/2018, 15:00

Re: Matlab e grandi numeri

Messaggioda feddy » 02/03/2020, 22:30

La situazione è proprio quella che dici :)

Che libro di testo usate?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2643 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Matlab e grandi numeri

Messaggioda 3m0o » 02/03/2020, 23:13

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.
3m0o
Cannot live without
Cannot live without
 
Messaggio: 880 di 5330
Iscritto il: 02/01/2018, 15:00

Re: Matlab e grandi numeri

Messaggioda feddy » 02/03/2020, 23:20

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.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2644 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Matlab e grandi numeri

Messaggioda 3m0o » 02/03/2020, 23:37

Non saprei cosa dirti, la prof scrive delle note di corso basate su quei 3 libri.
3m0o
Cannot live without
Cannot live without
 
Messaggio: 881 di 5330
Iscritto il: 02/01/2018, 15:00


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: ghira e 1 ospite