¿Cómo identificar los cálculos inestables de punto flotante?

15

En numéricos, es muy importante poder identificar inestable Esquemas y para mejorar su estabilidad. Cómo identificar inestable. cálculos de punto flotante?

Estoy trabajando en una simulación muy compleja donde muchos esquemas numéricos trabajan juntos y estoy buscando un método para identificar sus partes débiles. Estoy trabajando en un modelo físico que involucra ecuaciones diferenciales. A vista de pájaro del proceso general es:

  1. (Paso preliminar) Reúna las observaciones físicas P.

  2. Determine los parámetros iniciales de la simulación. Esto utiliza un algoritmo de optimización, donde caminamos en un espacio de parámetros y buscamos los parámetros C , de modo que se minimice la función de error E (F (C), P) , donde F es una cantidad derivada de los parámetros.

  3. Enchufa C en el motor de simulación. Este es un esquema de Euler de la EDP, de modo que en cada paso del tiempo, calculamos los términos que dirigen la dinámica (cada uno de ellos es una función compleja, potencialmente sujeta a inestabilidad) y alimentamos el esquema de Euler con estos términos dinámicos para calcular la siguiente estado. Esto continúa por miles de puntos de tiempo.

  4. Al final de la simulación, calculamos algunas funciones Proof (S) del estado final S y las comparamos con algunas cantidades Require ( P) deducido de las cantidades observadas. Esto no es una prueba formal del resultado, más una verificación de plausibilidad.

También, veo una torre de operaciones complejas (cálculo de términos dinámicos, dentro del esquema de Euler, dentro de la Prueba ). Y me gustaría reconocer "partes malas" y corregirlas.

Especulo que usando una implementación de software de punto flotante Los números con precisión reducida magnificarían la inestabilidad de esquemas numéricos, facilitando así la comparación entre diferentes implementaciones ¿Es esta una técnica común para investigar esto? ¿pregunta? ¿Es posible utilizar una máquina virtual, como Bochs, para ¿Logras esto sin alterar el programa?

Para tratar adecuadamente la cuestión de la estabilidad, a veces es aceptable para apuntar la entrada típica del procedimiento numérico, por lo que que puede ajustarse para que funcione bien en esa entrada y quizás menos en otra entrada válida, pero improbable, Dada una muestra de insumos típicos, es posible snoop algunos resultados intermedios y preparar un Perfil estadístico para ellos. De nuevo, ¿es esta una técnica común para estudiar los problemas de estabilidad? ¿Es una máquina virtual útil para esto?

    
pregunta user40989 11.12.2013 - 10:50

4 respuestas

6

El estudio de la estabilidad del cálculo de punto flotante es parte del análisis numérico y si realmente desea un resultado sólido, realmente desea que alguien con conocimientos en ese dominio haga el análisis de los algoritmos utilizados.

Hay algunas cosas que pueden ayudar a identificar experimentalmente algoritmos inestables. Correr con el redondeo configurado en diferentes modos (arriba / abajo / aleatorio) o con diferente precisión y comprobando que el resultado no varíe demasiado. Responder a ¿esto es demasiado? no es nada simple e incluso cuando la respuesta es no , eso no significa que el algoritmo sea estable, solo que no se detectó inestable en el conjunto de datos que utilizó.

Se ha propuesto la aritmética de intervalos en los comentarios. Cuando lo miré, incluso el más rabioso defensor de la aritmética de intervalos admitió que funcionaba bien con algoritmos diseñados para la aritmética de intervalos, pero que cambiar a él sin analizar el algoritmo y asegurarse de que no se sabía que los patrones no funcionaban bien no funcionaría. ser útil (los opositores opinaron que las condiciones previas para la aritmética de intervalos son útiles cuando son demasiado restrictivas para ser de interés práctico)     

respondido por el AProgrammer 13.12.2013 - 15:41
3

El diseño de algoritmos de punto flotante estables es altamente no trivial. Aquellos más matemáticamente hábiles que yo sugieren usar bibliotecas bien consideradas donde sea posible en lugar de intentar rodar las suyas. La referencia estándar en el área parece ser:

N. J. Higham. Precisión y estabilidad de los algoritmos numéricos. Society for Industrial and Applied Mathematics, Filadelfia, PA, EE. UU., Segunda edición, 2002. ISBN 0-89871-521-0

No saber más sobre qué tipos de cálculos, idiomas, etc. hace que sea difícil dar una respuesta concreta. Aquí hay una buena conferencia: enlace esto puede ser un poco básico, pero es una buena introducción si lo es. utilizando java.

    
respondido por el WPrecht 17.12.2013 - 19:25
1
  

¿Cómo identificar cálculos de punto flotante inestables?   ¿Es esta una técnica común para investigar esta pregunta?

Creo que a menos que necesite mostrar algunas estadísticas sobre el error, realmente no necesita reunir muestras. Lo que necesita es Análisis Numérico , que también está incluido en los temas de Métodos Numéricos, Álgebra Numérica Lineal, etc. forma parte de la informática, por lo que también puede obtener algunas respuestas en cs.stackexchange.

De todos modos, en la programación general, la mayoría de los problemas son fáciles de detectar, dada una comprensión básica de cómo funciona el punto flotante y los métodos numéricos básicos. Pero los problemas aún más complejos son "más fáciles de resolver" hoy en día con la disponibilidad de flotadores de 128 bits, incluso menos razón para producir muestras de error. Aquí hay algunos problemas de ejemplo para mostrar mi punto:

  1. utilizando un punto flotante para calcular los valores monetarios.
  2. usando coma flotante para números grandes.
  3. no hacer divisiones antes de otras operaciones cuando es posible hacerlo. (para hacer el valor más cercano a 0).
  4. cálculo largo sin tratamiento especial para la propagación de errores.

También hay un ejemplo de algoritmo ingenuo y algoritmo de compensación de errores aquí algoritmo para calcular la varianza . En el ejemplo, mirando la versión ingenua, puedes oler que hacer cálculos en bucles conllevará algunos errores y no se compensará.

    
respondido por el imel96 11.12.2013 - 22:08
0

Puede evitar errores numéricos utilizando tipos de datos apropiados (como, por ejemplo, fracciones continuas). Si necesita o desea utilizar la aritmética de punto flotante, debe aplicar conocimientos numéricos para conocer los errores.

    
respondido por el Ingo 12.12.2013 - 12:17

Lea otras preguntas en las etiquetas