Инструменты решения математических задач в программировании
Казалось бы, в самом слове "компьютер" (в переводе с английского - "вычислитель") заложена связь с математикой. Каждый современный язык программирования располагает стандартными библиотеками для математических вычислений. В качестве примера приведем несколько выражений на JavаScript:
let a = Math.sqrt(4) // Квадратный корень.
let b = Math.round(1.234) // Округление.
let c = Math.sin(Math.PI) // Синус угла.
let d = 5 % 2 // Нахождение остатка от деления.
Однако не любой язык программирования подходит для эффективного решения математических задач Причины этого следующие:
- многие языки созданы для разработки программ, не связанных с интенсивными вычислениями (например, для программирования веб-приложений, системных утилит, обработки текстов);
- точность вычислений во многих языках невысока для математических целей, хотя и достаточна для большинства практических задач;
- стандартные библиотеки популярных языков охватывают лишь самые общие математические действия и константы;
- многие алгоритмы современной математики не так просто свести к простым последовательностям арифметических и логических вычислений.
Существует несколько подходов к написанию программ, интенсивно использующих математические вычисления:
- применение специальных библиотек; например, для Python существуют пакеты NumPy/SciPy, фреймворк boost для языков C/C++ содержит необходимые для математических вычислений библиотеки, свои математические пакеты есть у Java (например, JScience) и других языков;
- применение функциональных языков, таких, как Erlang, Haskell, F# в которых понятие функции точно совпадает с ее математическим определением;
- применение специализированных языков, таких, как Fortran (Formula Translator, ориентирован на математические и инженерные задачи), язык R (используется для статистических исследований);
- использование специализированных интегрированных продуктов, таких, как Matlab, Octave, включающих в себя, помимо языка, эффективные специализированные инструменты.
MATHLAB и GNU Octave
MATHLAB и GNU Octave это, соответственно, коммерческая и свободная реализации среды для математических вычислений.
MATLAB появился еще в конце 1970-х гг. как специализированный язык программирования, который позволил бы применить компьютерные алгоритмы к потребностям математики без необходимости изучения языка Fortran. В 1984 г. была создана компания The MathWorks, занявшаяся развитием MATHLAB и связанного с его использованием инструментария.
Высокоуровневый язык MATLAB принадлежит к категории интерпретируемых. Он поддерживает возможности объектно-ориентированного программирования. Функции MATHLAB получают входные и выходные параметры. Внутри функций можно объявлять дополнительные переменные и производить промежуточные вычисления. Функции могут содержать команды для построения графиков. Помимо функций в MATLAB применяются скрипты, выполняющие законченные задачи. С помощью MATLAB удобно производить матричные и векторные вычисления.
GNU Octave использует язык, аналогичный MATLAB и частично совместимый с ним. Применяется для решения линейных и нелинейных математических задач. Работа в этой среде ведется с использованием интерактивной командной строки.
Рисунок 1. Скриншот среды Octave. Автор24 — интернет-биржа студенческих работ
Языки для математических расчетов
Fortran
Рисунок 2. Программа на Fortran. Автор24 — интернет-биржа студенческих работ
Fortran (сокращение от Formula Translator) - один из первых успешных языков высокого уровня. Появившись во второй половине 1950-х гг., он до сих пор активно развивается и остается популярным в отраслях, связанных с математическими и инженерными расчетами. Для этого языка создано большое количество библиотек, связанных с такими направлениями, как:
- матричная алгебра;
- системы линейных уравнений;
- дифференциальные уравнения;
- интегральные уравнения;
- аппроксимация функций;
- преобразования Фурье;
- математическая статистика и др.
Эти возможности входят в состав стандартной поставки языка Fortran. Они надежны и обладают высоким быстродействием. При этом пользоваться ими можно под свободной лицензией.
Языки S и R
Рисунок 3. Программа на языке R.
R — это свободная (с открытым исходным кодом) реализация коммерческого языка S. Оба они предназначены для статистической обработки данных и построены на базе разработанной в середине 1970-х гг. Дж. Тьюки концепции EDA (Exploratory Data Analysis, разведочный анализ данных), предполагающей следующее:
- необходимость графического моделирования математических функций;
- инкрементный анализ моделей (построение следующей модели на основе результатов предыдущей);
- графическая проверка допущений;
- нейтрализация отклонений в распределениях с помощью т.н. робастных методов.
Другие коммерческие продукты для статистического анализа: SAS Analytics, StatSoft STATISTICA, Minitab.
Язык Julia
Язык Julia был выпущен в 2009 г. Стефаном Карпински (Нью-Йоркский университет) с целью преодоления ограничений R и MATHLAB. Задачи Julia:
- высокое быстродействие при обработке больших объемов данных (BigData);
- широкое использование параллельных вычислений;
- поддержка облачных технологий хранения и обработки данных.
Julia по скорости обработки данных уже превосходит такие языки, как Python, JavaScript, MATLAB, R. Хотя язык еще далек от полной реализации своих целей, его популярность довольно быстро растет.