sygvd (USM バージョン)#

分割統治法を使用して、実一般対称定常固有値問題のすべての固有値と、オプションで固有ベクトルを計算します。このルーチンは、oneapi::mkl::lapack 名前空間に属します。

説明#

このルーチンは、次の形式の実一般対称正定値固有値問題のすべての固有値と、オプションで固有ベクトルを計算します

A*x = λ*B*x, A*B*x = λ*x、または B*A*x = λ*x の実数一般対称定値固有値の選択された固有値と、オプションで固有ベクトルを計算します。

ここで、AB は対称であり、B も正の定値であると仮定します。

分割統治アルゴリズムを使用します。

API#

構文#

namespace oneapi::mkl::lapack { 
  sycl::event sygvd(sycl::queue &queue, 
  int64_t itype, 
  mkl::job jobz, 
  mkl::uplo uplo, 
  int64_t n, 
  T *a, 
  int64_t lda, 
  T *b, 
  int64_t ldb, 
  T *w, 
  T *scratchpad, 
  int64_t scratchpad_size, 
  const std::vector<sycl::event> &events = {}) 
}

hegvd (USM バージョン) は、次の精度とデバイスをサポートします。

T

サポートされるデバイス

float

CPU、GPU*

double

CPU、GPU^

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

^ハイブリッドのサポート。計算の一部は CPU 上で実行されます。

入力パラメーター#

queue

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

itype

1、2 または 3。解決する問題の種類を指定します。

itype= 1 の場合、問題のタイプは A*x = lambda*B*x; です。

itype= 2 の場合、問題のタイプは A*B*x = lambda*x; です。

itype= 3 の場合、問題のタイプは B*A*x = lambda*x です。。

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

行列 AB の順序 (0 n)。

a

uplo で指定された対称行列 A の上三角形または下三角形を含むサイズ a(lda,*) の配列へのポインター。

a の 2 番目の次元は max(1, n) 以上でなければなりません。

lda

a の先頭次元; max(1,n) 以上。

b

uplo で指定された対称行列 B の上三角形または下三角形を含むサイズ b(ldb,*) の配列へのポインター。

b の 2 番目の次元は max(1, n) 以上でなければなりません。

ldb

b の先頭次元; max(1,n) 以上。

scratchpad

ルーチンが中間結果を保存するスクラッチパッド・メモリーへのポインター。

scratchpad_size

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

events

計算を開始する前に待機するイベントのリスト。デフォルトでは空のリストになります。

出力パラメーター#

a

終了時に、jobz = job::vec の場合、info = 0 であれば、a には固有ベクトルの行列 Z が含まれます。固有ベクトルは次のように正規化されます。

itype= 1 または 2 の場合、 ZT*B*Z = I;

itype= 3 の場合、 ZT*inv(B)*Z = I;

jobz = job::novec の場合、終了時に、対角線を含む A の上三角形 (uplo = uplo::upper の場合) または下三角形 (uplo = uplo::lower の場合) が破棄されます。

b

終了時に info n の場合、行列を含む b の部分は、コレスキー分解 B = UT*U または B = L*LT からの三角因子 U または L によって上書きされます。

w

n サイズ以上の配列へのポインター。info = 0 の場合、行列 A の固有値が昇順で格納されます。情報も参照してください。

例外#

例外

説明

mkl::lapack::exception

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

info = -i の場合、i 番目のパラメーターの値が不正です。info n の場合: info = i かつ jobz = job::novec の場合、アルゴリズムは収束に失敗しています。i は、ゼロに収束しなかった中間三角形式の非対角要素の数を示します。

info = i、かつ jobz = job:vec の場合、アルゴリズムは、info/(n+1) から mod(info,n+1) までの行と列にあるサブ行列を処理中に固有値を計算できませんでした。info > n の場合: info = n + i (1 i n) の場合、Bi 次主小行列は正定値ではありません。B の因数分解を完了できず、固有値または固有ベクトルは計算されませんでした。

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

戻り値#

計算が完了したことを確認するために待機する出力イベント。