heevd (USM バージョン)#

分割統治アルゴリズムを使用して、複素エルミート行列のすべての固有値と、オプションですべての固有ベクトルを計算します。このルーチンは、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 { 
  sycl::event heevd(sycl::queue &queue, 
  mkl::job jobz, 
  mkl::uplo uplo, int64_t n, 
  T *a, 
  int64_t lda, 
  RT *w, 
  T *scratchpad, 
  int64_t scratchpad_size, 
  const std::vector<sycl::event> &events = {}) 
}

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

T

RT

サポートされるデバイス

std::complex<float>

float

CPU および GPU*

std::complex<double>

double

CPU および GPU^

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

^ハイブリッドのサポート。計算の一部は 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 関数が返す値以下であってはなりません。

events

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

出力パラメーター#

a

jobz = job::vec の場合、終了時に A の固有ベクトルを含む直交行列 Z によって上書きされます。

w

n サイズ以上の配列へのポインター。行列 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() メソッドによって返される値以上である必要があります。

戻り値#

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