LAPACK

LAPACK (Linear Algebra PACKage) 数値線形代数のための数値解析ソフトウェアライブラリで、線型方程式や線型最小二乗問題、固有値問題、特異値問題等を数値的に解くために利用される。本ライブラリは複素数または実数を成分とする行列を扱うことが可能であり、LU分解やコレスキー分解、QR分解、シュア分解等の行列の分解を行うためのサブルーチンを含む。サブルーチンは単精度版と倍精度版が提供される。のLAPACKの初版はFORTRAN 77 で実装されていたが、現在はFortran 90が用いられている。LAPACK 3.4.0からはC言語インターフェースであるLAPACKEが統合され、C言語やC++からの利用が容易になった。
LAPACKはLINPACKおよびEISPACKの後継と見做されている。ただし、LINPACKの設計が開発当時近代的であった共有メモリ型ベクトルコンピュータを意識したものであるのに対して、本ライブラリの設計はキャッシュを用いたアーキテクチャを有する、より近代的なコンピュータを意識したものである。LAPACKはLINPACK同様にBLAS（Basic Linear Algebra Subprograms、基本線型代数サブプログラム群）ライブラリ上に構築されている。LAPACKは後に分散メモリ型のコンピュータ向けにやへと拡張された。
LAPACKはBSDライセンスで提供されるオープンソースソフトウェアである。
サブルーチン.
構成.
LAPACKのサブルーチンは以下の三種類に大別される。
命名規則.
LAPACKとBLASのサブルーチンの名称は機能の判別が平易である範囲で短くなるような規則で命名されている。
これは初期のFORTRANにおける関数の名称に関する仕様上の制限を受けたものである。
サブルーチンはcodice_1の規則で命名される。
以下、LAPACKのcodice_2（倍精度一般行列の方程式系の求解）とBLASのcodice_3（倍精度行列の積の計算）を例に挙げる。
命名規則の詳細はLAPACK Users' Guideの当該項目を参照。
実装.
LAPACKにはサブルーチンの機能とインターフェースに互換性のある実装が多く存在する。
以下に例を示す。それぞれの動作環境についてはリンク先を参照。
LAPACKと言語バインディング.
LAPACKはFortran 90以外のプログラミング言語から利用することが可能であり、これを目的とした言語バインディングのためのライブラリも開発されている。LAPACK 3.4.0よりC言語インターフェースであるLAPACKEが統合された。
以下に例を示す。
C言語.
多くの処理系ではライブラリのC言語バインディングが可能であるため、いくらかの制約があるにせよLAPACKのサブルーチンをC言語の関数のように利用できる。ただし、Fortranコンパイラが存在しない処理系ではCLAPACKも有効な選択肢となる。なお、が提供するC言語インターフェースも存在するが、これはf2cのCLAPACKとは互換性が無い。
C言語では慣用のrow-major orderingな行列を計算させる場合、LAPACKEでは指定オプションが用意されている。その場合、内部で行列転置が行われオーバヘッドが発生する。例えば行列積は、内部の計算は下記のように行われる。ここで「formula_1」はBLAS/LAPACK本来のcolumn-major orderingな行列積を意味している。