数値線形代数(応用線形代数とも呼ばれる)は、行列演算を用いて、連続数学における問題に対して効率的かつ正確に近似解を提供するコンピュータアルゴリズムを作成する方法を研究する分野です。数値解析のサブ分野であり、線形代数の一種です。コンピュータは浮動小数点演算を使用するため、無理数を正確に表現することはできません。そのため、コンピュータアルゴリズムをデータ行列に適用すると、コンピュータに格納されている数値と、それが近似値である真の数値との差が大きくなることがあります。数値線形代数は、ベクトルと行列の特性を利用して、コンピュータによって生じる誤差を最小限に抑えるコンピュータアルゴリズムを開発し、アルゴリズムの効率性を最大限に高めることにも重点を置いています。
数値線形代数は、有限精度コンピュータを使用して連続数学の問題を解決することを目的としており、自然科学や社会科学への応用は連続数学の応用と同じくらい広範です。これは、画像処理や信号処理、電気通信、計算金融、材料科学シミュレーション、構造生物学、データマイニング、バイオインフォマティクス、流体力学、計算統計学など、工学や計算科学の問題の基本的な部分であることがよくあります。行列法は、特に有限差分法、有限要素法、微分方程式のモデリングで使用されます。数値線形代数の幅広い応用に注目して、ロイド N. トレフェセンとデイビッド バウ III は、比較的小さな分野ではあるものの、「微積分や微分方程式と同じくらい数学科学にとって基本的である」と主張しています[ 1 ] : x 。 [ 2 ]行列やベクトルの多くの性質は関数や演算子にも当てはまるため、数値線形代数は実用的なアルゴリズムに特に重点を置いた関数解析の一種とみなすこともできる。 [ 1 ]: ix
数値線形代数における一般的な問題には、特異値分解、QR分解、LU分解、固有値分解などの行列分解を求めることが含まれます。これらの行列分解は、線形方程式系の解法、固有値の探索、最小二乗最適化といった一般的な線形代数問題に答えるために使用できます。数値線形代数の中心的な課題は、有限精度コンピュータ上で実データに適用した際に誤差を生じさせないアルゴリズムを開発することであり、これは直接的な方法ではなく反復的な方法によって達成されることが多いです。
数値線形代数は、ジョン・フォン・ノイマン、アラン・チューリング、ジェームズ・H・ウィルキンソン、アルストン・スコット・ハウスホルダー、ジョージ・フォーサイス、ハインツ・ルティシャウザーといったコンピュータの先駆者たちによって、弾道問題や偏微分方程式系の解法など、連続数学の問題に初期のコンピュータを適用するために開発されました。[ 2 ]アルゴリズムを実データに適用する際のコンピュータの誤差を最小限に抑えるための最初の本格的な試みは、1947年のジョン・フォン・ノイマンとハーマン・ゴールドスタインの研究です。 [ 3 ]技術の進歩により、研究者は極めて大きな高精度行列上の複雑な問題を解決できるようになり、並列コンピューティングなどの技術によって数値アルゴリズムが科学的問題への実用的なアプローチとなったことで、この分野は成長してきました。[ 2 ]
応用線形代数の多くの問題では、行列を列ベクトルの連結として捉える視点を採用すると便利です。例えば、線形システムを解く場合x を積として理解するのではなくbの場合、 x をAの列によって形成される基底でのbの線形展開の係数のベクトルと考えると便利です。[ 1 ] : 8行列を列の連結と考えることも、行列アルゴリズムの目的には実用的なアプローチです。これは、行列アルゴリズムには、行列Aの列に対するループとAの行に対するループという 2 つの入れ子ループが頻繁に含まれるためです。たとえば、行列の場合、およびベクトルそして列分割の観点から、y := Ax + yを計算することができます。
for q = 1 : n for p = 1 : m y ( p ) = A ( p , q ) * x ( q ) + y ( p ) end end行列の特異値分解はここで、UとVはユニタリであり、は対角線です。これらはAの特異値と呼ばれます。特異値は、特異値分解と固有値分解の間には密接な関係がある。つまり、特異値分解を計算するほとんどの方法は固有値分解の方法と類似している。[ 1 ] : 36おそらく最も一般的な方法はハウスホルダー法である。[ 1 ] : 253
行列のQR分解行列ですそして行列したがって、A = QRとなり、Qは直交行列、Rは上三角行列です。[ 1 ] : 50 [ 4 ] : 223 QR 因数分解を計算するための 2 つの主要なアルゴリズムは、グラム・シュミット法とハウスホルダー変換です。QR 因数分解は、線形最小二乗問題や固有値問題 (反復QR アルゴリズムによる)を解くためによく使用されます。
行列Aの LU 分解は、下三角行列Lと上三角行列Uからなり、 A = LUとなります。行列Uは、一連の行列をAに左から乗算する上三角化手順によって求められます。製品を形成するつまり、[ 1 ] : 147 [ 4 ] : 96
行列の固有値分解はここで、 Xの列はAの固有ベクトルであり、は対角行列であり、その対角成分はAの対応する固有値である。[ 1 ] : 33任意の行列の固有値分解を直接求める方法は存在しない。任意の多項式の正確な根を有限時間で求めるプログラムを作成することは不可能であるため、一般的な固有値ソルバーは必然的に反復的である必要がある。[ 1 ] : 192
数値線形代数の観点から見ると、ガウス消去法は行列AをLU分解する手順であり、ガウス消去法はAに一連の行列を左から乗算することによってこれを実現します。Uが上三角形でLが下三角形になるまで、[ 1 ] : 148ガウス消去法の単純なプログラムは、非常に不安定で、有効数字の多い行列に適用すると大きな誤差を生じます。[ 2 ]最も簡単な解決策は、ピボット操作を導入することです。これにより、安定した修正ガウス消去アルゴリズムが得られます。[ 1 ] : 151
数値線形代数では、行列を列ベクトルの連結として扱うのが一般的です。線形システムを解くには伝統的な代数的アプローチでは、 xを の積として理解します。bの場合、数値線形代数では、x はAの列ベクトルによって形成される基底におけるbの線形展開の係数ベクトルとして解釈される。[ 1 ] : 8
行列Aとベクトルxおよびbの特性に応じて、線形問題を解くためにさまざまな分解を使用できます。これにより、ある因数分解が他の因数分解よりもはるかに簡単に得られる場合があります。A = QRがAの QR 因数分解である場合、等価的にこれは行列分解と同じくらい簡単に計算できます。[ 1 ] : 54は固有値分解Aであり、 b = Axとなるようなbを見つけたい。そしてすると、[ 1 ] : 33これは、特異値分解を用いた線形システムの解法と密接に関連している。なぜなら、行列の特異値はその固有値の絶対値であり、それはグラム行列の固有値の絶対値の平方根にも等しいからである。また、A = LUがAのLU分解である場合、Ax = b は三角行列Ly = bおよびUx = yを用いて解くことができる。[ 1 ] : 147 [ 4 ] : 99
行列分解は、回帰問題のようにr を最小化しようとする線形システムr = b − Axを解くためのいくつかの方法を示唆しています。QR アルゴリズムは、 Aの縮小 QR 分解を計算し、それを並べ替えて次の式を得ることでこの問題を解決します。この上三角行列システムは、 xについて解くことができます。SVD は、線形最小二乗を求めるアルゴリズムも示唆しています。縮小 SVD 分解を計算することで、そしてベクトルを計算する最小二乗問題を単純な対角系に還元します。[ 1 ] : 84最小二乗解がQRおよびSVD分解によって生成できるという事実は、最小二乗問題を解くための古典的な正規方程式法に加えて、グラム・シュミット法やハウスホルダー法を含む方法でもこれらの問題を解くことができることを意味します。
問題を関数とみなすここで、Xはデータのノルムベクトル空間、Yは解のノルムベクトル空間である。あるデータ点についてxの小さな摂動がf ( x )の値に大きな変化をもたらす場合、問題は悪条件であると言われます。これを定量化するために、問題の条件の良し悪しを表す 条件数を定義します。条件数は次のように定義されます。
不安定性とは、浮動小数点演算に依存するコンピュータアルゴリズムが、問題の正確な数学的解から大きく異なる結果を生成する傾向のことです。行列に多くの有効桁を持つ実数データが含まれる場合、線形方程式系や最小二乗最適化などの問題を解くための多くのアルゴリズムは、非常に不正確な結果を生成する可能性があります。条件の悪い問題に対する安定したアルゴリズムを作成することは、数値線形代数における中心的な課題です。たとえば、ハウスホセラー三角化の安定性により、線形システムに対して特に堅牢な解法となりますが、最小二乗問題を解くための正規方程式法の不安定性は、特異値分解などの行列分解法を好む理由となります。一部の行列分解法は不安定ですが、簡単に修正して安定させることができます。たとえば、不安定なグラム・シュミット法は、簡単に修正して安定した修正グラム・シュミット法を作成できます。[ 1 ] : 140数値線形代数におけるもう 1 つの古典的な問題は、ガウス消去法が不安定であるが、ピボットの導入により安定するという発見である。
反復アルゴリズムが数値線形代数の重要な部分を占める理由は2つあります。第一に、多くの重要な数値問題には直接解法がないため、任意の行列の固有値と固有ベクトルを求めるには反復法を用いるしかありません。第二に、任意の行列に対する非反復アルゴリズムは、マトリックスは必要時間、行列には数値。反復的なアプローチでは、一部の行列のいくつかの特徴を利用してこの時間を短縮できます。たとえば、行列が疎行列の場合、反復アルゴリズムは、直接的なアプローチでは必然的に実行される多くの手順を省略できます。たとえ、高度に構造化された行列では冗長な手順であってもです。
数値線形代数における多くの反復法の核心は、行列を低次元のクリロフ部分空間に射影することであり、これにより、低次元空間から始めて、類似の行列の等価な特徴を反復的に計算し、順次高次元へと移動することで、高次元行列の特徴を近似することができます。Aが対称行列で、線形問題Ax = bを解きたい場合、古典的な反復法は共役勾配法です。Aが非対称行列の場合、線形問題の反復解法の例としては、一般化最小残差法とCGN があります。A が対称行列の場合、固有値と固有ベクトル問題を解くには、ランチョス法を使用できます。A が非対称行列の場合は、アーノルディ反復法を使用できます。
いくつかのプログラミング言語は数値線形代数の最適化技術を使用しており、数値線形代数アルゴリズムを実装するように設計されています。これらの言語には、MATLAB、Analytica、Maple、Mathematicaなどがあります。数値線形代数用に明示的に設計されていない他のプログラミング言語には、数値線形代数のルーチンと最適化を提供するライブラリがあります。CとFortran にはBasic Linear Algebra SubprogramsやLAPACKなどのパッケージがあり、Python にはNumPyライブラリがあり、Perl にはPerl Data Languageがあります。Rの多くの数値線形代数コマンドは、LAPACKなどのこれらのより基本的なライブラリに依存しています。[ 5 ]より多くのライブラリは、数値ライブラリのリストで見つけることができます。