2013-07-25 5 views
1

поэтому у меня есть следующий интеграл, что мне нужно сделать численно:Численное Integral больших чисел в Fortran 90

Int[Exp(0.5*(aCosx + bSinx + cCos2x + dSin2x))] x=0..2Pi 

Проблема заключается в том, что выход в заданном значении х может быть очень большим, е^2000, так что больше, чем я могу иметь дело с двойной точностью.

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

Есть ли пакеты интеграции, способные обрабатывать сколь угодно большие числа? Mathematica явно может .. так что должно быть что-то вот так.

Приветствия

ответ

2

Это, вероятно, дополнительный комментарий, а не ответ, но здесь идет так или иначе ...

Как вы уже заметили Fortran не оборудован, из коробки, с установкой для обработки таких больших чисел, как e^2000. Я думаю, у вас есть 3 варианта.

  1. Используйте математику, чтобы уменьшить вашу проблему в одном, который делает (или ряд связанных те, которые делают) попадет в числовом диапазоне, что ваш компилятор Fortran может вычислить.

  2. Использование Mathematica или один из других систем алгебры компьютерных (например, клен, SAGE, Maxima). Все (я думаю) их можно интегрировать в программу Fortran (с разной степенью сложности и интеграции).

  3. Используйте библиотеку для высокой точности (их часто называют либо arbitray точности или несколько точности тоже) арифметика. Ваша любимая поисковая система будет отображать некоторые из них для вас, некоторые из них написаны на Fortran (и, следовательно, легко интегрируются), некоторые из них написаны на языках C/C++ или других языках (и, следовательно, немного сложнее интегрировать). Вы можете начать поиск по номеру Lawrence Berkeley или the GNU bignum library.

  4. (Да, я знаю, что я написал, что у вас есть 3 варианта, но ваш вопрос предполагает, что вы еще не готовы это рассмотреть). Вы могли бы написать свои собственные функции с высокой/произвольной/множественной точностью. Fortran предоставляет все необходимое для создания такой библиотеки, для этого есть много работы в этой области, и это может быть интересно для вас.

На практике это, как правило, имеет смысл применять как можно больше математики, как можно проблему, прежде чем прибегать к компьютеру, этот процесс может не только помочь в решении этой проблемы, но руководство вашего выбора или строительство программы для решения что осталось от проблемы.

0

Я согласен с High Peformance Mark, что наилучшим вариантом здесь является использование аналитики для масштабирования или упрощения результата в первую очередь.

Упомянем, что если вы хотите переборщить его, gfortran (начиная с 4.6, с библиотекой libquadmath) имеет поддержку для quadruple precision реалов, которые вы можете использовать selecting the appropriate kind. Пока ваши ответы (и промежуточные результаты!) Не становятся слишком большими, чем то, что вы описываете, это может сработать, но, как правило, оно будет намного медленнее, чем двойная точность.

0

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

Также сделайте шаг назад и спросите, почему вы пытаетесь выполнить вычисление этого значения. Например, мне недавно пришлось отлаживать, почему я получал диковинные результаты от корреляции свойств, которая рассчитывала давление паров жидкости, чтобы увидеть, произошла ли конденсация. Я долгое время пытался понять, что не так с температурой, подаваемой в корреляцию, пока я не понял, что причиной, вызвавшей ошибку, была имитация детонации пара. Проблема была не в цифрах, а в логике проверки на конденсацию во время буквального взрыва; физически проверка на конденсацию не имела смысла. Реальная проблема заключалась в том, что код задавал ненужный вопрос; у него уже был ответ.

Я очень рекомендую Forman Acton's Numerical Methods That (Usually) Work и Real Computing Made Real. Оба сосредоточены на таких проблемах и предлагают методы для приведения в порядок необоснованных вычислений.

 Смежные вопросы

  • Нет связанных вопросов^_^