Naukowy język programowania - Scientific programming language

W programowaniu komputerowym , o naukowym językiem programowania może odnosić się do dwóch stopni o tej samej koncepcji.

W szerokim sensie naukowy język programowania to język programowania, który jest szeroko stosowany w naukach obliczeniowych i matematyce obliczeniowej . W tym sensie C/C++ i Python można uznać za naukowe języki programowania.

W silniejszym znaczeniu naukowy język programowania to taki, który został zaprojektowany i zoptymalizowany pod kątem użycia formuł matematycznych i macierzy . Takie języki charakteryzuje nie tylko dostępność bibliotek pełniących funkcje matematyczne czy naukowe, ale także składnia samego języka. Na przykład ani C++, ani Python nie mają wbudowanych typów macierzy ani funkcji arytmetyki macierzy (dodawanie, mnożenie itp.); zamiast tego ta funkcjonalność jest udostępniana za pośrednictwem standardowych bibliotek. Naukowe języki programowania w silniejszego poczucia obejmują Algol , APL , Fortran , J , Julia , Klon , MATLAB i R .

Naukowych języków programowania nie należy mylić z językiem naukowym w ogóle, który luźno odnosi się do wyższych standardów precyzji, poprawności i zwięzłości, jakich oczekuje się od praktyków metody naukowej .

Przykłady

Algebra liniowa

Naukowe języki programowania zapewniają udogodnienia do pracy z algebrą liniową . Na przykład poniższy program Julia rozwiązuje układ równań liniowych :

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 = b

Praca z dużymi wektorami i macierzami jest kluczową cechą tych języków, ponieważ algebra liniowa kładzie podwaliny pod optymalizację matematyczną , co z kolei umożliwia zastosowanie głównych zastosowań, takich jak głębokie uczenie .

Optymalizacja matematyczna

W naukowym języku programowania możemy obliczyć optima funkcji ze składnią zbliżoną do języka matematycznego. Na przykład poniższy kod Julii znajduje minimum wielomianu .

using Optim

P(x,y) = x^2 - 3x*y + 5y^2 - 7y + 3

z₀ = [ 0.0
       0.0 ]     # starting point for optimization algorithm

optimize(z -> P(z...), z₀, Newton();
         autodiff = :forward)

W tym przykładzie zastosowano metodę minimalizacji Newtona . Współczesne języki programowania naukowego będą wykorzystywać automatyczne różnicowanie do obliczania gradientów i hessów funkcji podanej jako dane wejściowe; por. programowanie różniczkowe . Tutaj do tego zadania wybrano automatyczne różnicowanie w przód. Starsze naukowe języki programowania, takie jak czcigodny Fortran, wymagałyby od programisty przekazania obok funkcji, która ma być zoptymalizowana, funkcji obliczającej gradient oraz funkcji obliczającej hesjan.

Mając większą wiedzę na temat funkcji, która ma zostać zminimalizowana, można zastosować bardziej wydajne algorytmy. Na przykład optymalizacja wypukła zapewnia szybsze obliczenia, gdy funkcja jest wypukła, programowanie kwadratowe zapewnia szybsze obliczenia, gdy funkcja jest co najwyżej kwadratowa w swoich zmiennych, a programowanie liniowe, gdy funkcja jest co najwyżej liniowa.

Zobacz też

Bibliografia