Controllo euristico della stabilità numerica


12

Supponiamo che io abbia una funzione con valore reale di alcune variabili x i che voglio valutare numericamente. In generale la formula per f può contenere prodotti, razionali, funzioni trancendentali ecc. E sarà troppo lunga per indagare analiticamente sulla sua stabilità numerica. O sarà almeno dispendioso in termini di tempo farlo nella pratica. Supponiamo che non abbia un equivalente più breve con stabilità garantita. Esiste una procedura metodica per analizzare la stabilità numerica di ff(x1,,xN)xiff. Penso di confrontarlo con risultati di preclusione arbitrari ottenuti usando un sistema di algebra computerizzata. Supponiamo che la funzione sarà implementata in C usando le funzioni stdlib e la precisione singola o doppia. Quali quantità devo confrontare per quantificare la qualità dell'approssimazione a precisione finita? Come posso determinare i valori critici delle variabili? Come posso scegliere le ottimizzazioni del compilatore e del compilatore in modo che altre persone possano facilmente riprodurre i risultati? ... So che l'impostazione del problema è probabilmente generica per dare buone risposte. Ma penso ancora che questo sia un problema comune nell'informatica e mi chiedo se ci siano riferimenti che propongono standard per eseguire tale analisi.

Risposte:


7

Quello che stai cercando è quello che viene chiamato "Analisi automatica degli errori" ed è l'oggetto del capitolo 26 del libro di Higham "Precisione e stabilità degli algoritmi numerici", 2a edizione, editori SIAM.

Una tecnica che descrive sta usando l'ottimizzazione della ricerca diretta: prova a formulare il tuo problema come un problema di ottimizzazione e usa l'algoritmo di ottimizzazione per trovare coefficienti o valori dei parametri che massimizzano o minimizzano una quantità correlata alla precisione del tuo algoritmo / formula. Usa l'esempio del fattore di crescita nell'eliminazione gaussiana (quale matrice massimizza questo fattore di crescita) o le radici di un cubo (come ho risposto in una delle tue precedenti domande).

Suggerirei di ottenere una copia di questo libro, di leggere i capitoli introduttivi e questo capitolo 26 e i relativi riferimenti.


3

Valuta la tua funzione alcune volte (3 è in genere sufficiente) con tutti gli ingressi leggermente perturbati in modo casuale di ulp. La deviazione standard dei tre risultati ti darà una misura grossolana (ma di solito sufficiente) della sensibilità numerica. È possibile confrontare questo con la sensibilità prevista dalla linearizzazione e formare il quoziente per ottenere una stima della stabilità.±1

x±11/xx=01/(1x)1/(1+x)x=0


0

|f(x+ε)f(x)|C|ε|
Cfx,ϵ

E cosa si può fare se le funzioni variano notevolmente nel suo dominio o se non sono disponibili derivati ​​fattibili? Ci sono altre tecniche o finiremmo con un approccio Monte Carlo?
André,

1
-1: spieghi la nozione di condizione, non di stabilità numerica.
Arnold Neumaier il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.