Языки научного программирования
Статья о языках научного программирования

Статья
Научные языки программирования
В компьютерном программировании научный язык программирования может относиться к двум степеням одной и той же концепции.
В широком смысле, научный язык программирования — это язык программирования, который широко используется в вычислительной науке и вычислительной математике. В этом смысле C/C++ и Python можно считать научными языками программирования.
В более строгом смысле, научный язык программирования — это язык, разработанный и оптимизированный для использования математических формул и матриц. Такие языки характеризуются не только наличием библиотек, выполняющих математические или научные функции, но и синтаксисом самого языка. Например, ни в C++, ни в Python нет встроенных типов матриц или функций для матричной арифметики (сложение, умножение и т. д.); вместо этого эта функциональность доступна через стандартные библиотеки. Языки научного программирования в более строгом смысле включают ALGOL, APL, Fortran, J, Julia, Maple, MATLAB и R.
Научные языки программирования не следует путать с научным языком в целом, который в общих чертах относится к более высоким стандартам точности, правильности и краткости, ожидаемым от практиков научного метода.
Примеры
Линейная алгебра
Научные языки программирования предоставляют средства для работы с линейной алгеброй. Например, следующая программа Julia решает систему линейных уравнений:
A = rand(20, 20) # A - матрица 20x20
b = rand(20) # b — вектор из 20 элементов
x = A\b # x является решением A*x = b
Работа с большими векторами и матрицами является ключевой особенностью этих языков, поскольку линейная алгебра закладывает основу для математической оптимизации, которая, в свою очередь, позволяет использовать основные приложения, такие как глубокое обучение.
В научном языке программирования мы можем вычислять оптимум функции с синтаксисом, близким к математическому языку. Например, следующий код Жюлиа находит минимум многочлена
P(x,y) = x^2 - 3xy + 5y^2 - 7y + 3
using Optim
P(x,y) = x^2 - 3x*y + 5y^2 - 7y + 3
z₀ = [ 0.0
0.0 ] # отправная точка алгоритма оптимизации
optimize(z -> P(z...), z₀, Newton();
autodiff = :forward)
В этом примере используется метод минимизации Ньютона. Современные языки научного программирования будут использовать автоматическое дифференцирование для вычисления градиентов и гессианов функции, заданной в качестве входных данных; ср. дифференцируемое программирование. Здесь для этой задачи была выбрана автоматическая дифференциация вперед. Старые научные языки программирования, такие как почтенный Фортран, требовали, чтобы программист передал рядом с функцией, которую необходимо оптимизировать, функцию, вычисляющую градиент, и функцию, вычисляющую гессиан.
Имея больше информации о минимизируемой функции, можно использовать более эффективные алгоритмы. Например, выпуклая оптимизация обеспечивает более быстрые вычисления, когда функция является выпуклой, квадратичное программирование обеспечивает более быстрые вычисления, когда функция не более чем квадратична по своим переменным, и линейное программирование, когда функция не более чем линейна.