Научные Языки Программирования

В компьютерном программировании научный язык программирования может относиться к двум степеням одного и того же понятия.

В широком смысле научный язык программирования - это язык программирования, который широко используется для вычислительной науки и вычислительной математики. В этом смысле C/C++ и Python[1] можно считать научными языками программирования.

В более широком смысле научный язык программирования - это тот, который разработан и оптимизирован для использования математических формул и матриц.[2] Такие языки характеризуются не только наличием библиотек, выполняющих математические или научные функции, но и синтаксисом самого языка.[3] Например, ни C++, ни Python не имеют встроенных типов матриц или функций для матричных арифметических операций (сложение, умножение и т.д.); вместо этого эта функциональность доступна через стандартные библиотеки. Научные языки программирования в более широком смысле включают ALGOL, APL, Fortran, J, Julia, Maple, MATLAB и R.[4][5]

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

Примеры

Линейная алгебра

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

A = rand(20, 20)  # A is a 20x20 matrix
b = rand(20)      # b is a 20-element vector
x = A\b           # x is the solution to A*x = 

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

Математическая оптимизация

На научном языке программирования мы можем вычислять оптимумы функций с синтаксисом, близким к математическому языку. Например, следующий код Julia находит минимум многочлена 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)

В этом примере используется метод минимизации Ньютона. Современные научные языки программирования будут использовать автоматическое дифференцирование для вычисления градиентов и гессианов функции, заданной в качестве входных данных; ср. дифференцируемое программирование. Здесь для этой задачи было выбрано автоматическое прямое дифференцирование. Старые научные языки программирования, такие как почтенный Fortran, потребовали бы, чтобы программист передал рядом с оптимизируемой функцией функцию, которая вычисляет градиент, и функцию, которая вычисляет гессиан.

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

Эмиль Самигуллин
Эмиль Самигуллин
Студент Математики и Компьютерных Наук

Мои научные интересы включают распределенное робототехника, мобильные вычисления и программируемуя техника.