In numeri, è molto importante essere in grado di identificare instabile schemi e migliorare la loro stabilità. Come identificare instabile calcoli in virgola mobile?
Sto lavorando a una simulazione molto complessa in cui molti schemi numerici funzionano insieme e sto cercando una metodica per identificare le sue parti deboli. Sto lavorando a un modello fisico che coinvolge equazioni differenziali. Una vista a volo d'uccello del processo complessivo è:
-
(Fase preliminare) Raccogli le osservazioni fisiche P .
-
Determina i parametri iniziali della simulazione. Questo utilizza un algoritmo di ottimizzazione, in cui camminiamo in uno spazio parametrico e cerchiamo parametri C tali che una funzione di errore E (F (C), P) sia minimizzata, dove F è una certa quantità derivata dei parametri.
-
Plug C nel motore di simulazione. Questo è uno schema di Eulero dell'EDP, in modo che in ogni fase temporale 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 va avanti per migliaia di punti temporali.
-
Al termine della simulazione, calcoliamo alcune funzioni Prova (S) dello stato finale S e confrontiamo con alcune quantità Richiedi ( P) dedotto 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 di Proof ). E vorrebbe riconoscere "parti cattive" e correggerle.
Ho ipotizzato che usando un'implementazione software di virgola mobile i numeri con precisione ridotta amplificano l'instabilità di schemi numerici, facilitando così il confronto tra diversi implementazioni. È una tecnica comune per indagare su questo domanda? È possibile utilizzare una macchina virtuale, come Bochs, per raggiungere questo senza alterare il programma?
Affrontare adeguatamente la questione della stabilità, a volte è così accettabile per indirizzare l'input tipico della procedura numerica, quindi che può essere sintonizzato per fare bene su quell'input e forse meno bene su altro input valido, ma improbabile. Dato un campione di input tipici, è possibile snoop alcuni risultati intermedi e preparare a profilo statistico per loro. Ancora una volta, è una tecnica comune a studiare i problemi di stabilità? Una macchina virtuale è utile per questo?