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          

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

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

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

с использованием Оптима 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 )       

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

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

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

Ссылки

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