stringtranslate.com

Научный язык программирования

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

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

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

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

Примеры

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

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

A = rand ( 20 , 20 ) # A — матрица 20x20 b = rand ( 20 ) # b — вектор из 20 элементов x = A \ b # x — решение A*x = b          

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

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

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

используя Оптим P ( x , y ) = x ^ 2 - 3 x * y + 5 y ^ 2 - 7 y + 3          z₀ = [ 0.0 0.0 ] # отправная точка алгоритма оптимизации      оптимизировать ( z -> P ( z ... ), z₀ , Ньютон (); autodiff = :forward )       

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

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

Смотрите также

Рекомендации

  1. ^ «Определение научного языка». Энциклопедия журнала PC Magazine . Зифф Дэвис . Проверено 13 мая 2021 г.
  2. ^ «Научный язык - Определение научного языка» . Ваш словарь . Компания Computer Language Company Inc. Проверено 27 марта 2014 г.
  3. ^ Нин, Эндрю. «Языки научного программирования». Лаборатория полета, оптимизации и ветра . Университет Бригама Янга . Проверено 13 мая 2021 г.
  4. ^ Закари, Джозеф. «Введение в научное программирование: решение вычислительных задач с использованием Maple и C». Джозеф Л. Закари . Университет Юты . Проверено 13 мая 2021 г.