dsyev

#include "blaswrap.h"
#include "f2c.h"

/* Subroutine */ int dsyev_(char *jobz, char *uplo, integer *n, doublereal *a,
integer *lda, doublereal *w, doublereal *work, integer *lwork, integer *info)
{
/*  -- LAPACK driver routine (version 3.0) --
Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
Courant Institute, Argonne National Lab, and Rice University
June 30, 1999

目的

DSYEVは実対称行列Aの全ての固有値,およびオプション的に固有ベクトルを計算する.

引数

JOBZ(入力) CHARACTER*1
  • = 'N': 固有値のみを計算;
  • = 'V': 固有値と固有ベクトルを計算.
UPLO(入力) CHARACTER*1
  • = 'U': Aの上三角行列を保持;
  • = 'L': Aの下三角行列を保持;
N(入力) INTEGER
行列Aの次元. N >= 0.
A(入力/出力)doubleの配列,次元は(LDA,N)
  • 入力では,対称行列A.UPLO = 'U'なら,最初のN x N上三角行列部に,行列Aの上三角行列部が含まれている.UPLO = 'L',なら,最初のN x N下三角行列部に,行列Aの下三角行列部が含まれている.
  • 出力では,JOBZ = 'V'かつINFO = 0なら, 行列Aの正規直交固有ベクトルがAに保持される.JOBZ = 'N'なら,UPLO='L'では下三角,UPLO='U'では上三角は対角も含めて破壊されている.
LDA(入力) INTEGER
配列Aの先行次元(Leading dimension). LDA >= max(1,N).
W(出力) doubleの配列,次元N
INFO = 0なら, 固有値は昇順.
WORK(作業領域/出力) doubleの配列, 次元LWORK
出力で,INFO = 0なら, WORK[0]に最適なLWORKを返す.
LWORK(入力) long int
配列WORKの長さ.LWORK >= max(1,3*N-1).

最適効率はLWORK >= (NB+2)*N.ここでNBはILAENV関数が返すDSYTRD関数用のブロックサイズ.もしLWORK = -1なら,ワークスペースの問い合わせを仮定している.つまり,ルーチンは,WORK配列の最適サイズを計算するだけ.WORK配列の最初の要素にこの値がかえる.下位関数のXERBLAが発するLWORKに関連したエラーメッセージはない.

INFO(出力) long int
  • =0: うまく計算終了
  • <0: INFO=-iではi番目の引数が不適当.
  • >0: INFO=iでは,アルゴリズムはうまく収束しなかった.つまり,計算の中間段階で生成する三重対角行列のi番目の非対角要素が0に収束しなかった.
Last modified:2007/08/04 07:41:35
Keyword(s):
References:[LinuxEx]