heevd#

分割統治アルゴリズムを使用して、複素エルミート行列のすべての固有値と、オプションですべての固有ベクトルを計算します。このルーチンは、oneapi::mkl::lapack 名前空間に属します。

説明#

このルーチンは、複素エルミート行列 A のすべての固有値、およびオプションですべての固有ベクトルを計算します。つまり、A のスペクトル分解を次のように計算できます: A = Z*Λ*ZH

ここで \(\Lambda\) は、対角要素が固有値 \(\lambda\)i 実対角行列であり、Z は固有ベクトル zi です。したがって、

A*zi = λi*zi for i = 1, 2, ..., n です。

固有ベクトルが要求された場合、このルーチンは分割統治アルゴリズムを使用して固有値と固有ベクトルを計算します。ただし、固有値のみが必要な場合は、QL または QR アルゴリズムのポール・ウォーカー・カハン・バリアントが使用されます。

API#

構文#

namespace oneapi::mkl::lapack { 
  void heevd(sycl::queue &queue, 
  mkl::job jobz, 
  mkl::uplo uplo, 
  int64_t n, 
  sycl::buffer<T> &a, 
  int64_t lda, 
  sycl::buffer<RT> &w, 
  sycl::buffer<T> &scratchpad, 
  int64_t scratchpad_size) 
}

heevd は次の精度とデバイスをサポートします。

T

RT

サポートされるデバイス

std::complex<float>

float

CPU および GPU*

std::complex<double>

double

CPU および GPU*

*インターフェイスのサポートのみ。すべての計算は CPU 上で実行されます。

入力パラメーター#

queue

計算が実行されるデバイスキュー。

jobz

job::novec または job::vec である必要があります。

jobz = job::novec の場合、固有値のみが計算されます。

jobz = job::vec の場合、固有値と固有ベクトルが計算されます。

uplo

uplo::upper または uplo::lower である必要があります。

uplo = uplo::upper の場合、a は A の上三角部分を格納します。

uplo = uplo::lower の場合、a は A の下三角部分を格納します。

n

行列 A の次数 (0 n)。

a

A を含む配列を保持するサイズ lda,* のバッファー()。a の 2 番目の次元は max(1, n) 以上でなければなりません。

lda

a の先頭次元; max(1,n) 以上である必要があります。

scratchpad

ルーチンが中間結果を維持するスクラッチパッド・メモリーを保持するバッファー。

scratchpad_size

T タイプの浮動小数点要素の数であるスクラッチパッド・メモリーのサイズ。サイズは、heevd_scratchpad_size 関数が返す値以下であってはなりません。

出力パラメーター#

a

jobz = job::vec の場合、終了時にこのバッファーは A の固有ベクトルを含むユニタリー行列 Z によって上書きされます。

w

n サイズ以上の配列を保持するバッファー。info = 0 の場合、行列 A の固有値が昇順で格納されます。情報も参照してください。

例外#

例外

説明

mkl::lapack::exception

この例外は、計算中に問題が発生した場合にスローされます。例外オブジェクトの info() メソッドを使用して、問題の情報コードを取得できます。

info = -i の場合、i 番目のパラメーターの値が不正です。

info = i かつ jobz = job::novec の場合、アルゴリズムは収束に失敗しています。i は、ゼロに収束しなかった中間三角形式の非対角要素の数を示します。

info = i、かつ jobz = job::vec の場合、アルゴリズムは、info/(n+1) から mod(info,n+1) までの行と列にあるサブ行列を処理中に固有値を計算できませんでした。

info がスクラッチパッドのサイズとして渡された値と等しく、detail() がゼロ以外を返す場合、渡されたスクラッチパッドのサイズが十分ではなく、必要なサイズは例外オブジェクトの detail() メソッドによって返される値以上である必要があります。