Salta al contenuto
Note per Studenti Esercizio - Numero di condizionamento di ln x, ex, 1/(1-x) e cos x

Esercizio - Numero di condizionamento di ln x, e^x, 1ᐟ(1-x) e cos x

In questa pagina 3

Teoria: Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →.

Testo

Si usa K(x)=∣xf′(x)f(x)∣K(x) = \left|\dfrac{x f'(x)}{f(x)}\right| come numero di condizionamento di y=f(x)y = f(x).

  • (a) Calcolare KK per f(x)=ln⁡xf(x) = \ln x in x=1,001x = 1{,}001, per f(x)=exf(x) = e^x in x=20x = 20, per f(x)=11−xf(x) = \dfrac{1}{1-x} in x=0,99x = 0{,}99 e per f(x)=cos⁡xf(x) = \cos x in x=1,5707x = 1{,}5707.
  • (b) Se il dato è noto con errore relativo u=1,1⋅10−16u = 1{,}1\cdot 10^{-16}, quante cifre decimali corrette restano nei quattro risultati?
  • (c) Verificare numericamente la previsione di KK per ln⁡x\ln x in x=1,001x = 1{,}001 con perturbazione relativa del dato 10−610^{-6}.
  • (d) Domanda teorica: perché ln⁡x\ln x è mal condizionato vicino a 11 ma non vicino a 100100?

Soluzione

(a) Calcolo di KK

  • f=ln⁡xf = \ln x, f′=1xf' = \frac1x: K=∣x⋅1xln⁡x∣=1∣ln⁡x∣K = \left|\frac{x\cdot\frac1x}{\ln x}\right| = \frac{1}{|\ln x|}. Per x=1,001x = 1{,}001: ln⁡1,001=9,995⋅10−4\ln 1{,}001 = 9{,}995\cdot 10^{-4}, quindi K=1000,5K = \mathbf{1000{,}5}.
  • f=exf = e^x, f′=exf' = e^x: K=∣xexex∣=∣x∣=20K = \left|\frac{x e^x}{e^x}\right| = |x| = \mathbf{20}.
  • f=11−xf = \frac{1}{1-x}, f′=1(1−x)2f' = \frac{1}{(1-x)^2}: K=∣x/(1−x)21/(1−x)∣=∣x1−x∣K = \left|\frac{x/(1-x)^2}{1/(1-x)}\right| = \left|\frac{x}{1-x}\right|. Per x=0,99x = 0{,}99: 0,990,01=99\frac{0{,}99}{0{,}01} = \mathbf{99}.
  • f=cos⁡xf = \cos x, f′=−sin⁡xf' = -\sin x: K=∣xtan⁡x∣K = |x\tan x|. Per x=1,5707x = 1{,}5707: tan⁡1,5707=10381,3\tan 1{,}5707 = 10381{,}3, quindi K=1,5707⋅10381,3≈16306K = 1{,}5707\cdot 10381{,}3 \approx \mathbf{16306}.

(b) Cifre perse

Con errore relativo u≈10−16u \approx 10^{-16} sul dato, l'errore relativo sul risultato è K⋅uK\cdot u; si perdono log⁡10K\log_{10}K cifre su 1616.

funzione KK errore relativo sul risultato cifre corrette
ln⁡x\ln x, x=1,001x = 1{,}001 1000,51000{,}5 ≈1,1⋅10−13\approx 1{,}1\cdot 10^{-13} circa 1313
exe^x, x=20x = 20 2020 ≈2,2⋅10−15\approx 2{,}2\cdot 10^{-15} circa 1515
11−x\frac1{1-x}, x=0,99x = 0{,}99 9999 ≈1,1⋅10−14\approx 1{,}1\cdot 10^{-14} circa 1414
cos⁡x\cos x, x=1,5707x = 1{,}5707 1630616306 ≈1,8⋅10−12\approx 1{,}8\cdot 10^{-12} circa 1111–1212

(c) Verifica numerica per ln⁡x\ln x

Si pone x~=x(1+10−6)=1,001001001\tilde x = x(1 + 10^{-6}) = 1{,}001001001. Previsione: errore relativo su ln⁡x\ln x pari a K⋅10−6=1,0005⋅10−3K\cdot 10^{-6} = 1{,}0005\cdot 10^{-3}. Calcolo diretto: ln⁡1,001=9,995003⋅10−4\ln 1{,}001 = 9{,}995003\cdot 10^{-4}, ln⁡1,001001001=1,000500⋅10−3\ln 1{,}001001001 = 1{,}000500\cdot 10^{-3}; differenza 1,0005⋅10−61{,}0005\cdot 10^{-6}; relativa: 1,0005⋅10−69,995003⋅10−4=1,00050⋅10−3\frac{1{,}0005\cdot 10^{-6}}{9{,}995003\cdot 10^{-4}} = 1{,}00050\cdot 10^{-3} ✓. Un errore dello 0,0001%0{,}0001\% sul dato diventa dello 0,1%0{,}1\% nel risultato.

(d) Domanda teorica

K=1∣ln⁡x∣K = \frac{1}{|\ln x|} diverge quando ln⁡x→0\ln x \to 0, cioè per x→1x \to 1: il risultato è un numero piccolo, ma il suo errore assoluto Δ(ln⁡x)≈Δxx\Delta(\ln x) \approx \frac{\Delta x}{x} resta dell'ordine dell'errore relativo del dato, quindi l'errore relativo esplode (si perde la stessa cifra significativa come nella cancellazione). Per x=100x = 100: ln⁡100=4,605\ln 100 = 4{,}605, K=0,217K = 0{,}217: gli errori si riducono.

Risultati. K=1000,5K = \mathbf{1000{,}5}; 20\mathbf{20}; 99\mathbf{99}; ≈16306\mathbf{\approx 16306}.

Errori tipici

  • Usare ∣f′(x)∣|f'(x)| (condizionamento assoluto) al posto di ∣xf′f∣\left|\frac{xf'}{f}\right|: per ln⁡x\ln x vicino a 11 darebbe K≈1K\approx 1, senza vedere il problema.
  • Dimenticare che KK dipende dal punto: la stessa funzione è ben condizionata in certi punti e mal condizionata in altri.

Versione ripasso

(a) K=∣xf′f∣K=\left|\frac{xf'}{f}\right| (Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →):

  • ln⁡x\ln x: K=1∣ln⁡x∣K=\frac1{|\ln x|}; x=1,001x=1{,}001, ln⁡=9,995⋅10−4\ln=9{,}995\cdot10^{-4}, K=1000,5K=1000{,}5.
  • exe^x: K=∣x∣=20K=|x|=20.
  • 11−x\frac1{1-x}: K=∣x1−x∣=0,990,01=99K=\left|\frac x{1-x}\right|=\frac{0{,}99}{0{,}01}=99.
  • cos⁡x\cos x: K=∣xtan⁡x∣K=|x\tan x|; tan⁡1,5707=10381,3\tan1{,}5707=10381{,}3, K≈16306K\approx16306.

(b) Errore relativo K⋅uK\cdot u con u≈10−16u\approx10^{-16}: circa 1313, 1515, 1414 e 1111–1212 cifre corrette; si perdono log⁡10K\log_{10}K cifre.

(c) x~=1,001001001\tilde x=1{,}001001001: previsto K⋅10−6=1,0005⋅10−3K\cdot10^{-6}=1{,}0005\cdot10^{-3}; calcolato 1,0005⋅10−69,995003⋅10−4=1,0005⋅10−3\frac{1{,}0005\cdot10^{-6}}{9{,}995003\cdot10^{-4}}=1{,}0005\cdot10^{-3} ✓.

(d) K=1∣ln⁡x∣→∞K=\frac1{|\ln x|}\to\infty per x→1x\to1 (risultato piccolo, errore assoluto ≈Δxx\approx\frac{\Delta x}x costante); a x=100x=100 K=0,217K=0{,}217.

Errori tipici: usare ∣f′∣|f'| (condizionamento assoluto); dimenticare che KK dipende dal punto.

Teoria collegata