In campo numerico, è molto importante essere in grado di identificare schemi instabili e migliorarne la stabilità. Come identificare calcoli in virgola mobile instabili?
Sto lavorando a una simulazione molto complessa in cui molti schemi numerici lavorano insieme e sto cercando un metodo per identificare le sue parti deboli. Sto lavorando a un modello fisico che coinvolge equazioni differenziali. Una visione a volo d'uccello del processo complessivo è:
(Fase preliminare) Raccogliere osservazioni fisica P .
Determinare i parametri iniziali della simulazione. Questo utilizza un algoritmo di ottimizzazione, in cui camminiamo nello spazio dei parametri e cerchiamo i parametri C in modo tale che una funzione di errore E (F (C), P) sia minimizzata, dove F è una quantità derivata dei parametri.
Collegare C nel motore di simulazione. Questo è uno schema di Euler dell'EDP, in modo che ad ogni passo, calcoliamo i termini che guidano la dinamica (ognuno di essi è una funzione complessa, potenzialmente soggetta a instabilità) e alimentiamo lo schema di Eulero con questi termini dinamici per calcolare il prossimo stato. Questo continua per migliaia di punti temporali.
Al termine della simulazione, calcoliamo alcune funzioni Proof (S) dello stato finale S e confrontiamo con alcune quantità Require (P) dedotte dalle quantità osservate. Questa non è una prova formale del risultato, più un controllo di plausibilità.
Inoltre, vedo una torre di operazioni complesse (calcolo di termini dinamici, all'interno dello schema di Eulero, all'interno della Prova ). E vorrei riconoscere le "parti difettose" e risolverle.
Ho ipotizzato che l'uso di un'implementazione software di numeri in virgola mobile con precisione ridotta amplificherebbe l'instabilità degli schemi numerici, facilitando così il confronto tra diverse implementazioni. È una tecnica comune per indagare su questa domanda? È possibile utilizzare una macchina virtuale, come Bochs, per raggiungere questo obiettivo senza alterare il programma?
Per affrontare in modo appropriato la questione della stabilità, a volte è accettabile indirizzare l'input tipico della procedura numerica, in modo che possa essere sintonizzato per fare bene su quell'input e forse meno bene su altri input validi, ma improbabili. Dato un campione di input tipici, è possibile curvare alcuni risultati intermedi e preparare un profilo statistico per essi. Ancora una volta, si tratta di una tecnica comune per studiare i problemi di stabilità? Una macchina virtuale è utile per questo?