dgesv

/* Subroutine */ int dgesv_(integer *n, integer *nrhs, doublereal *a, 
integer *lda, integer *ipiv, doublereal *b, integer *ldb, 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
March 31, 1993

目的

DGESVは実係数の連立一次方程式

   A . X = B,

の解を計算する.ここで,AはN x N次元の行列,XとBはN x NRHS次元の行列.

LU分解に部分ピボットと行置換を組み合わせ,Aを

   A = P . L . U

と分解する.ここでPは置換行列,Lは下三角行列,Uは上三角行列. 分解したAを使って,A . X = Bを解く.

引数

N(入力)long int
連立一次方程式の数,つまり行列Aの次元.N>=0
NRHS(入力)long int
右辺(Right Hand Side)の数,つまり行列Bの列数.NRHS>=0
A(入力/出力)doubleの配列,次元は(LDA,N)
入力では,N x Nの係数行列A.出力では,A=P.L.Uを分解した要素LとU.ただし,Lの対角にあるべき1.0は省略.
LDA(入力)long int
配列Aの先行次元(leading dimension).LDA >= max(1,N).実際に用意した配列の次元で,各列の先頭アドレスを求めるときに使う.これをうまくとると, 基数2のアルゴリズムで発生しがちなキャッシュミス, バンクコンフリクト等による低速化を回避できるらしい.普通はN.
IPIV(出力)long intの配列,次元N
交換行列Pを決めるピボット(pivot)要素.行列のi行がIPIV[i]行(そこにある整数)と交換している.
B(入力/出力)doubleの配列,次元は(LDA,NRHS)
入力では,N x NRHS次元の右辺行列B.出力では,INFO=0の場合は,N x NRHS次元の解行列X.
LDB(入力)long int
B行列の先行次元(Leading dimension),LDB>=max(1,N)
INFO(出力)long int
  • =0: うまく計算終了
  • <0: INFO=-iではi番目の引数が不適当.
  • >0: INFO=iでは,U[i,i]が厳密に零になった.分解は完了しているが,要素行列Uは厳密に特異であるので,解は求まらない.
Last modified:2007/08/04 07:36:16
Keyword(s):
References:[LinuxEx]