c ++ численный анализ Точная структура данных? - PullRequest
0 голосов
/ 17 августа 2011

Используя двойной тип, я создал алгоритм кубической сплайн-интерполяции.Эта работа, как кажется, была успешной, но при вычислении очень малых значений была относительная ошибка около 6%.

Достаточно ли двойного типа данных для точного научного численного анализа?

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

Double обладает достаточной точностью для большинства применений.Конечно, это конечно, но всегда можно упустить любую точность, используя плохой алгоритм.На самом деле, это должен быть ваш первый подозреваемый.Внимательно посмотрите на свой код и убедитесь, что вы делаете что-то, что позволяет ошибкам округления накапливаться быстрее, чем необходимо, или рискованным вещам, таким как вычитание значений, которые очень близки друг к другу.

1 голос
/ 17 августа 2011

Научный численный анализ трудно понять, поэтому я оставляю это профессионалам. Вы рассматривали возможность использования числовой библиотеки вместо написания своей? Эйген мой любимый сейчас: http://eigen.tuxfamily.org/index.php?title=Main_Page

У меня всегда под рукой последняя копия Numeric Recipes (nr.com), в которой есть отличная глава по интерполяции. NR имеет ограничительную лицензию, но авторы знают, что они делают, и предоставляют краткую рецензию на каждую числовую технику. Другие библиотеки для просмотра включают в себя: ATLAS и GNU Scientific Library.

Чтобы ответить на ваш вопрос, двойного должно быть более чем достаточно для большинства научных приложений, я согласен с предыдущими постерами, что это должно быть проблемой алгоритма. Рассматривали ли вы размещение кода для алгоритма, который вы используете?

0 голосов
/ 20 июня 2018

Двойная точность будет в основном подходить для любой проблемы, но кубический сплайн не будет работать хорошо, если многочлен или функция быстро колеблются или повторяются, или имеют достаточно большой размер.

В этом случае может быть лучше использовать полиномы Лежандра, поскольку они обрабатывают варианты экспонент.

В качестве простого примера, если вы используете правило Эйлера, Трапеции или Симпсона для интерполяции в полиноме 3-го порядка, вам не понадобится огромная частота дискретизации для получения интерполяции (области под кривой). Однако, если вы примените их к экспоненциальной функции, частота дискретизации может значительно возрасти, чтобы избежать потери значительной точности. Многочлены Лежандра могут удовлетворить этот случай гораздо легче.

0 голосов
/ 17 августа 2011

Если double достаточно для ваших нужд, зависит от типа чисел, с которыми вы работаете.Как предполагает Хеннинг, вероятно, лучше взглянуть на используемые вами алгоритмы и убедиться, что они численно устойчивы.

Для начала, вот хороший алгоритм для сложения: Алгоритм суммирования Кахана .

...