В цифрах очень важно уметь определять нестабильные схемы и улучшать их стабильность. Как определить нестабильные вычисления с плавающей запятой?
Я работаю над очень сложным моделированием, в котором многие числовые схемы работают вместе, и я ищу методику, позволяющую выявить ее слабые стороны. Я работаю над физической моделью, включающей дифференциальные уравнения. С высоты птичьего полета весь процесс выглядит так:
(Предварительная стадия) Сбор физических наблюдений P .
Определить начальные параметры моделирования. При этом используется алгоритм оптимизации, при котором мы заходим в пространство параметров и ищем параметры C , чтобы минимизировать некоторую функцию ошибок E (F (C), P) , где F - это некоторое производное количество параметров.
Подключите C к двигателю симуляции. Это схема Эйлера EDP, так что на каждом временном шаге мы вычисляем термины, управляющие динамикой (каждый из них представляет собой сложную функцию, потенциально подверженную нестабильности), и снабжаем схему Эйлера этими динамическими терминами для вычисления следующего государство. Это продолжается тысячи раз.
В конце моделирования мы вычисляем некоторую функцию Proof (S) конечного состояния S и сравниваем с некоторыми величинами Require (P), выведенными из наблюдаемых величин. Это не формальное доказательство результата, скорее проверка достоверности.
Кроме того, я вижу башню со сложными операциями (вычисление динамических терминов, в схеме Эйлера, в доказательстве ). И хотел бы распознать «плохие детали» и исправить их.
Я предполагаю, что использование программной реализации чисел с плавающей точкой с пониженной точностью увеличит нестабильность числовых схем, упрощая тем самым сравнение между различными реализациями. Это обычная техника для изучения этого вопроса? Можно ли использовать виртуальную машину, как Bochs, для достижения этой цели без изменения программы?
Чтобы надлежащим образом справиться с вопросом стабильности, иногда допустимо нацеливаться на типичный ввод числовой процедуры, чтобы его можно было настроить так, чтобы он хорошо работал на этом входе и, возможно, был хуже на другом действительном, но маловероятном, вводе. Учитывая выборку типичных входных данных, можно отследить некоторые промежуточные результаты и подготовить статистический профиль для них. Опять же, это общий метод изучения проблем стабильности? Полезна ли для этого виртуальная машина?