
数値解析は、連続数学の問題に対するアルゴリズムの研究である。[ 2 ] これらのアルゴリズムは、 (離散数学とは対照的に)実数または複素数の変数を含み、通常は記号操作に加えて数値近似を使用する。
数値解析は、工学や物理科学のあらゆる分野に応用されており、21世紀には経済学、医学、ビジネス、さらには芸術といった生命科学や社会科学にも応用されています。近年の計算能力の向上により、より複雑な数値解析が可能になり、科学や工学において詳細かつ現実的な数学モデルを提供できるようになりました。数値解析の例としては、天体力学(惑星、恒星、銀河の運動を予測する)に見られる常微分方程式、データ解析における数値線形代数[ 3 ] [ 4 ] [ 5 ]、医学や生物学における生細胞のシミュレーションのための確率微分方程式やマルコフ連鎖などがあります。
現代のコンピュータが登場する以前は、数値計算法は大きな印刷された表のデータを使用して手作業で補間式を計算することが多かった。20世紀半ば以降、コンピュータが必要な関数を計算するようになったが、同じ式の多くはソフトウェアアルゴリズムで引き続き使用されている。[ 6 ]
数値的な観点は、最も古い数学の記述にまで遡ります。イェール大学バビロニアコレクション(YBC 7289)の粘土板には、単位正方形の対角線の長さである2の平方根の60進数による近似値が示されています。
数値解析はこの長い伝統を受け継いでいる。つまり、実際の測定値にのみ適用可能な、数字に変換された正確な記号解を与えるのではなく、指定された誤差範囲内の近似解が用いられる。
数値解析分野の全体的な目標は、記号的に解くことが不可能な多くの難問に対して、近似的かつ正確な解を与えるための手法を設計・分析することである。
数値解析の分野は、現代のコンピュータの発明より何世紀も前から存在しています。線形補間は、 2000年以上前にすでに使用されていました。過去の多くの偉大な数学者は数値解析に熱心に取り組んでおり、[ 6 ]ニュートン法、ラグランジュ補間多項式、ガウス消去法、オイラー法などの重要なアルゴリズムの名前からも明らかです。現代の数値解析の起源は、ジョン・フォン・ノイマンとハーマン・ゴールドスタインによる1947年の論文と関連付けられることが多いですが、[ 8 ] [ 9 ] 1912年のETウィテカー の研究にまで遡ると考える人もいます。[ 8 ]

手計算を容易にするため、補間点や関数係数などのデータ表や数式を掲載した分厚い書籍が作られました。これらの表は、関数によっては小数点以下16桁以上まで計算されている場合もあり、それらを用いて、与えられた数式に代入する値を調べ、いくつかの関数の非常に精度の高い数値推定値を得ることができました。この分野における代表的な著作は、AbramowitzとStegunが編集したNISTの出版物で、1000ページを超える書籍に、よく使われる数式や関数、そしてそれらの多くの点における値が掲載されています。コンピュータが利用できるようになった現在では、関数の値自体はあまり役に立ちませんが、数式の膨大なリストは今でも非常に便利です。
機械式計算機は、手計算のためのツールとしても開発されました。これらの計算機は1940年代に電子計算機へと進化し、これらの計算機が管理目的にも役立つことが分かりました。しかし、コンピュータの発明は数値解析の分野にも影響を与えました[ 6 ]。なぜなら、より長く複雑な計算が可能になったからです。
レスリー・フォックス数値解析賞は、 1985年に数学応用研究所によって創設された。
直接法は、有限回のステップで問題の解を計算する方法です。これらの方法は、無限精度演算で実行すれば正確な解が得られます。例としては、ガウス消去法、連立一次方程式を解くためのQR分解法、線形計画法のシンプレックス法などがあります。実際には有限精度が用いられ、結果は(安定性を前提として)真の解の近似値となります。
直接法とは対照的に、反復法は、無限精度が可能であっても、有限ステップで終了するとは期待されません。反復法は、初期推定値から始めて、極限においてのみ正確な解に収束する逐次近似を形成します。収束テスト(多くの場合、残差を含む)が指定され、十分正確な解が(うまくいけば)見つかったかどうかを判断します。無限精度の演算を使用しても、これらの方法は(一般に)有限ステップで解に到達しません。例としては、ニュートン法、二分法、ヤコビ反復法などがあります。計算行列代数では、反復法は一般的に大規模な問題に必要です。[ 10 ] [ 11 ] [ 12 ] [ 13 ]
数値解析においては、直接法よりも反復法の方が一般的です。原理的には直接法であるものの、実際にはそうではないかのように用いられる方法もあります。例えば、GMRES法や共役勾配法などが挙げられます。これらの方法では、厳密解を得るために必要なステップ数が非常に多いため、反復法と同様に近似解が許容されます。
例として、次の問題を解決することを考えてみましょう。
未知量xについて。
反復法では、二分法をf ( x ) = 3 x 3 − 24に適用します。初期値はa = 0、b = 3、f ( a ) = − 24、f ( b ) = 57 です。
この表から、解は1.875から2.0625の間にあると結論付けられます。アルゴリズムは、誤差が0.2未満であれば、この範囲内の任意の数値を返す可能性があります。
条件の悪い問題: 関数f ( x ) = 1/( x − 1) を考えます。f (1.1) = 10、f ( 1.001) = 1000 であることに注意してください。x が 0.1 未満変化すると、 f ( x ) はほぼ 1000変化します。x = 1 付近でf ( x )を評価することは、条件の悪い問題です。
条件の良い問題: 対照的に、同じ関数f ( x ) = 1/( x − 1) を x = 10の近くで評価することは、条件の良い問題です。たとえば、f (10) = 1/9 ≈ 0.111、f (11) = 0.1 です。x のわずかな変化は、f ( x )のわずかな変化につながります。
さらに、連続的な問題は、その解が連続的な問題の解を近似することがわかっている離散的な問題に置き換える必要がある場合があります。このプロセスは「離散化」と呼ばれます。たとえば、微分方程式の解は関数です。この関数は、定義域が連続体であっても、定義域内の有限個の点における値など、有限量のデータで表現する必要があります。
誤差の研究は数値解析の重要な部分を占める。問題の解法において誤差が生じる方法はいくつか存在する。
丸め誤差は、有限のメモリを持つマシン(実用的なデジタルコンピュータはすべてこれに該当する)上で、すべての実数を正確に表現することが不可能であるために発生する。
反復法が終了したり、数学的手順が近似され、近似解が厳密解と異なる場合に、打ち切り誤差が発生します。同様に、離散化は、離散問題の解が連続問題の解と一致しないため、離散化誤差を引き起こします。上記の例では、解を計算するために、10回の反復計算後、計算された根はおよそ1.99となる。したがって、打ち切り誤差はおよそ0.01である。
エラーが発生すると、計算全体に伝播します。たとえば、コンピュータでの演算 + は不正確です。タイプの計算はさらに不正確です。
数学的手順を近似すると、打ち切り誤差が生じます。関数を正確に積分するには、無限個の領域の和を求める必要がありますが、数値的には有限個の領域の和しか求めることができないため、正確な解の近似値しか得られません。同様に、関数を微分するには、微分要素はゼロに近づきますが、数値的にはゼロ以外の値しか選択できません。
アルゴリズムは、原因が何であれ、計算中に誤差がそれほど大きくならない場合に数値的に安定していると呼ばれます。 [ 14 ]これは、問題が条件付きである場合、つまり、問題のデータが少し変更されたときに解が少ししか変化しない場合に起こります。[ 14 ]逆に、問題が「条件付きでない」場合、データの小さな誤差は大きな誤差に成長します。[ 14 ] 元の問題と、その問題を解決するために使用されるアルゴリズムの両方が条件付きまたは条件付きである可能性があり、任意の組み合わせが可能です。したがって、条件付きで解決するアルゴリズムは、数値的に安定している場合も、数値的に不安定な場合もあります。数値解析の技術は、適切に定式化された数学的問題を解くための安定したアルゴリズムを見つけることです。
数値解析の分野には多くの下位分野が含まれる。主なものとしては以下のものが挙げられる。
最も単純な問題の一つは、与えられた点における関数の評価です。最も単純なアプローチである、単に数値を式に代入する方法は、必ずしも効率的ではありません。多項式の場合、乗算と加算の回数を減らすことができるホーナー法を用いる方がより良いアプローチです。一般的に、浮動小数点演算の使用によって生じる丸め誤差を推定し、制御することが重要です。
補間法は、次のような問題を解決します。ある未知の関数の値が複数の点で与えられている場合、それらの点の間の別の点でその関数はどのような値をとるでしょうか?
外挿は内挿と非常によく似ているが、未知関数の値を与えられた点の外側の点で求める必要がある点が異なる。[ 15 ]
回帰分析も同様ですが、データの不正確さを考慮に入れています。いくつかの点と、それらの点におけるある関数の値(誤差を含む)の測定値が与えられれば、未知の関数を求めることができます。最小二乗法は、これを実現する一つの方法です。
もう一つの根本的な問題は、与えられた方程式の解を計算することです。方程式が線形であるか否かによって、一般的に2つのケースが区別されます。例えば、方程式線形である一方そうではない。
線形方程式系の解法の開発には多大な努力が注がれてきた。標準的な直接法、すなわち何らかの行列分解を用いる方法としては、ガウス消去法、LU分解法、対称行列(またはエルミート行列)および正定値行列に対するコレスキー分解法、非正方行列に対するQR分解法などがある。ヤコビ法、ガウス・ザイデル法、逐次過緩和法、共役勾配法[ 16 ]などの反復法は、通常、大規模なシステムに対して好まれる。一般的な反復法は、行列分割を用いて開発することができる。
非線形方程式を解くには、根探索アルゴリズムが使用されます(関数の根は、関数がゼロになる引数であるため、このように呼ばれます)。関数が微分可能で導関数が既知であれば、ニュートン法がよく用いられます。[ 17 ] [ 18 ]線形化は、非線形方程式を解くためのもう1つの手法です。
いくつかの重要な問題は、固有値分解または特異値分解の観点から表現できます。たとえば、スペクトル画像圧縮アルゴリズム[ 19 ]は特異値分解に基づいています。統計学における対応するツールは主成分分析と呼ばれます。
最適化問題では、与えられた関数が最大(または最小)となる点を求める。多くの場合、その点はいくつかの制約条件も満たす必要がある。
最適化の分野は、目的関数と制約条件の形式に応じて、さらにいくつかの下位分野に分けられます。例えば、線形計画法は、目的関数と制約条件の両方が線形である場合を扱います。線形計画法における有名な手法の一つに、シンプレックス法があります。
ラグランジュ乗数法を用いることで、制約付き最適化問題を制約なし最適化問題に還元することができる。
数値積分は、場合によっては数値求積法とも呼ばれ、定積分の値を求めるものです。[ 20 ]一般的な方法としては、ニュートン・コーツの公式(中点法やシンプソンの公式など)またはガウス求積法が用いられます。[ 21 ]これらの方法は、「分割統治」戦略に基づいており、比較的大きな集合上の積分をより小さな集合上の積分に分割します。これらの方法が計算コストの面で非常に高額になる高次元では、モンテカルロ法または準モンテカルロ法(モンテカルロ積分を参照[ 22 ])を用いるか、中程度の高次元では疎格子法を用いることができます。
数値解析は、常微分方程式と偏微分方程式の両方の解を(近似的に)計算することにも関係している。[ 23 ]
偏微分方程式は、まず方程式を離散化して有限次元の部分空間に取り込むことによって解かれます。[ 24 ]これは、有限要素法[ 25 ] [ 26 ] [ 27 ] 、有限差分法[ 28 ]、または(特に工学分野では)有限体積法[ 29 ]によって行うことができます。これらの方法の理論的正当性は、しばしば関数解析の定理を含みます。これにより、問題は代数方程式の解法に帰着されます。
20世紀後半以降、ほとんどのアルゴリズムは様々なプログラミング言語で実装されています。Netlibリポジトリには、主にFortranとC言語で記述された、数値計算問題のための様々なソフトウェアルーチンが収録されています。多くの異なる数値アルゴリズムを実装した商用製品としては、 IMSLライブラリやNAGライブラリがあり、フリーソフトウェアの代替としてはGNU Scientific Libraryがあります。
長年にわたり、英国王立統計学会は『応用統計学』誌で数多くのアルゴリズムを発表してきました(これらの「AS」関数のコードはこちら) 。同様に、 ACMも『数学ソフトウェアに関するトランザクション』誌で同様の発表を行っています(「TOMS」のコードはこちら)。海軍水上戦センターは、数学サブルーチンライブラリを複数回公開しています(コードはこちら)。
MATLAB [ 30 ] [ 31 ] [ 32 ] TK Solver、S-PLUS、IDL [ 33 ]などの人気のある数値計算アプリケーションがいくつかあり、FreeMat、Scilab [ 34 ] [ 35 ] GNU Octave (Matlab に類似)、IT++ (C++ ライブラリ)などの無料のオープンソースの代替手段もあります。また、 R [ 36 ] (S-PLUS に類似)、Julia [ 37 ]、Pythonなどのプログラミング言語があり、 NumPy、SciPy [ 38 ] [ 39 ] [ 40 ]、SymPyなどのライブラリがあります。パフォーマンスは大きく異なります。ベクトルと行列の演算は通常高速ですが、スカラーループの速度は桁違いに異なる場合があります。[ 41 ] [ 42 ]
Mathematicaなどの多くのコンピュータ代数システムも、より正確な結果を提供できる任意精度演算が利用できるという利点があります。[ 43 ] [ 44 ] [ 45 ] [ 46 ]
また、数値解析に関する簡単な問題を解決するには、 あらゆる表計算ソフトを使用できます。例えば、Excelには行列演算を含む数百もの関数が用意されており、組み込みの「ソルバー」と組み合わせて使用できます。