コンピュータプログラミングでは、科学的プログラミング言語は同じ概念の 2 つのレベルを指すことがあります。
広義では、科学的プログラミング言語とは、計算科学や計算数学に広く使用されているプログラミング言語です。この意味では、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 コードは多項式 の最小値を見つけます。
Optimを使用する
P ( x , y ) = x ^ 2 - 3 x * y + 5 y ^ 2 - 7 y + 3
z₀ = [ 0.0 0.0 ] # 最適化アルゴリズムの開始点
最適化( z -> P ( z ... ), z₀ , Newton (); autodiff = :forward )
この例では、最小化のためのニュートン法が使用されています。現代の科学プログラミング言語は、入力として与えられた関数の勾配とヘッセ行列を計算するために自動微分を使用します。微分可能プログラミングを参照してください。ここでは、そのタスクのために自動順方向微分が選択されています。由緒ある Fortran などの古い科学プログラミング言語では、プログラマーは、最適化する関数の次に、勾配を計算する関数とヘッセ行列を計算する関数を渡す必要があります。
最小化される関数に関する知識が豊富であればあるほど、より効率的なアルゴリズムを使用できます。たとえば、関数が凸である場合は凸最適化により計算が高速化され、関数の変数が最大で 2 次である場合は二次計画法により計算が高速化され、関数が最大で線形である場合は線形計画法により計算が高速化されます。
参照
参考文献
- ^ 「科学言語の定義」。PC Magazine百科事典。Ziff Davis 。 2021年5月13日閲覧。
- ^ 「科学的言語 - 科学的言語の定義」。YourDictionary。The Computer Language Company Inc。2014年3月27日閲覧。
- ^ Ning, Andrew. 「科学的プログラミング言語」。飛行、最適化、風力研究所。ブリガムヤング大学。 2021年5月13日閲覧。
- ^ ザカリー、ジョセフ。「科学的プログラミング入門:MapleとCを使用した計算問題解決」ジョセフ・L・ザカリー。ユタ大学。 2021年5月13日閲覧。
