Язык программирования для математических вычислений

Язык программирования для математических вычислений

Если проблема в накапливающихся ошибках вычисления, то можно использовать любой язык программирования в котором есть библиотека big_math. Название условное. В разных языках она может называться по своему. Однако, суть проста. Вместо real, float или extended вы используете класс в котором кранится массив цифр достаточной длины. Понятно, что работает это намного медленней, чем вычисления с использованием обычных вещественных типов (real, float или extended), однако таким образом вы может поднять точность там, где она действительно нужна.
Сначала поищите библиотеку на языке, которым вы хорошо владеете. Можно попробовать пакет Wolfram Mathematica. В нем такие вычилсения делать можно, но нужно осовить язык программирования этого пакета. Короче, варинатов решения проблемы много.

Если говорить о Java, то поисковик на запрос BigMath for Java показал несколько готовых библиотек. Скачивайте, сравнивайте и пользуйтесь.

Кроме того, в программировании лучше сумировать ряды в обратном порядке. Находите член ряда, который достаточно мал и сумиируете от меньшего к большему. Благодаря такому приему малые челены ряда не тонут в ошибках округления, когда вы начинаете вычислять сумму с самого большого члена.

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

Мы попытаемся найти в языке функции, которые обычно требуем от математических пакетов. Рассмотрим сильные и слабые стороны идеи использования python вместо MATLAB, Maple, Mathcad, Mathematica.

Среда разработки

Код на python может быть помещен в файл с расширением .py и отправлен интерпретатору для выполнения. то классический подход, который обычно разбавляется использованием среды разработки, например pyCharm. Однако, для python (и не только) существует другой способ взаимодействия с интерпретатором — интерактивные блокноты jupyter, сохраняющие промежуточное состояние программы между выполнением различных блоков кода, которые могут быть выполнены в произвольном порядке. Этот способ взаимодействия позаимствован у блокнотов Mathematica, позже аналог появился и в MATLAB (Live script).

Читайте также:  Как починить автомобильный компрессор для подкачки шин

Таким образом вся работа с python-кодом переносится в браузер. Получившейся блокнот можно открыть с помощью nbviewer.jupyter.org, github (и gist) умеют самостоятельно показывать содержимое таких файлов (преобразовывать).

Из браузерной природы jupyter следуют его недостатки: отсутствие отладчика и проблемы с печатью большого количества информации (зависание окна браузера). Последняя проблема решается расширением, которое ограничивает максимальное количество символов, которое можно вывести в результате выполнения одной ячейки.

Визуализация данных

Для визуализации данных обычно используется библиотека matplotlib, команды которой очень похожи на MATLABовские. В Stanford’е была разработана библиотека, расширяющая возможности matplotlib — seaborn (необычные графики для статистики).

Рассмотрим пример построения гистограммы для сгенерированной выборки данных.

Мы видим, что синтаксис matplotlib очень похож на синтаксис MATLAB. Стоит так же заметить, что в заголовке графика используется latex.

Вычислительные математика

Для линейной алгебры в python принято использовать numpy, вектора и матрицы которого типизированы, в отличии от встроенный в язык списков. Для научных вычислений используется библиотека scipy.

В данном примере численно вычисляется значение определенного интеграла функции Бесселя на отрезке [0,0.45] с помощью библиотеки QUADPACK (Fortran).

Символьные вычисления

Для использования символьных вычислений можно использовать библиотеку sympy. Однако, код, написанный с помощью sympy, уступает в красоте коду, написанному на Mathematica, которая специализирована на символьных вычислениях.

По функциональности Sympy уступает Mathematica, однако, с учетом ваших потребностей, может оказаться, что для вас их возможности приблизительно равны. Более подробное сравнение можно найти в wiki репозитория sympy.

Ускоряем код

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

Читайте также:  Трещина в монолитном потолке

Некоторые библиотеки для сверточных нейронных сетей, такие как Lasagne и Keras, используют theano для своих вычислений. Стоит так же добавить, что theano поддерживает ускорение за счет вычислений на GPU.

Машинное обучение

Самой популярной библиотекой машинного обучения для python является scikit-learn, которая содержит все основные алгоритмы машинного обучения, а так же метрики качества, инструменты для валидации алгоритмов, инструменты для пред-обработки данных.

Для работы загрузки данных из табличных форматов данных (excel, csv) обычно используется pandas. Загруженные данные представляются в памяти в виде DataFrame’ов, к которым можно применять различные операции: как строчные (построчная обработка), так и групповые (фильтры, группировки). Обзор основных функций pandas можно найти в презентации "Pandas: обзор основных функций" (Автор: Александр Дьяконов, профессор МГУ).

Не все так гладко.

Однако, не все так гладко в python. Например, сейчас уживается две версии языка 2. и 3., обе они развиваются параллельно, однако синтаксис 2ой версии не совместим полностью с синтаксисом 3ей версии.

Еще одна проблема может возникнуть у вас, если вы не обладатель linux, в этом случае при установке ряда библиотек у вас могут возникнуть трудности, некоторые библиотеки будут полностью не совместимы, например tensorflow.

Как вы думаете, на каком языке программирования лучше всего реализовывать сложные расчеты (финансовая и актуарная математика, статистика).

Понимаю что для этих целей собирают супер-компьютеры и HPC кластеры, но все-таки, какой язык использовать предпочтительней в условиях относительно слабой вычислительной мощности?

Я думаю, что язык должен быть функциональным, так как эта парадигма наиболее близка к чистой математике, так же важна возможность кластеризации приложения…

Вообщем, у кого какие мысли по этому поводу?

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

Ссылка на основную публикацию
Ягодный кисель рецепт из крахмала
Вкус киселя многие помнят с детства. Его нежная консистенция и приятный аромат нравятся многим. И я считаю, что незаслуженно такие...
Элемент в аккумулятор шуруповерта
0 ОТДЕЛ ТОВАРОВ ДЛЯ НОУТБУКОВ ОТДЕЛ ТОВАРОВ ДЛЯ НОУТБУКОВ ОТДЕЛ ТОВАРОВ ДЛЯ НОУТБУКОВ ОТДЕЛ ТОВАРОВ ДЛЯ НОУТБУКОВ ОТДЕЛ ТОВАРОВ ДЛЯ...
Элементарные технические знания об электроустановке
1. Элементарные технические знания об электроустановке и ее оборудовании 1.1. Термины Электроустановка - совокупность машин, аппаратов, линий и вспомогательного оборудования...
Ядер кола своими руками
Сделать ее заметнее в лентах пользователей или получить ПРОМО-позицию, чтобы вашу статью прочитали тысячи человек. Стандартное промо 3 000 промо-показов...
Adblock detector