|
|
|
|
DGESV/ZGESV (CLAPACK) |
DGESV/ZGESV
一般行列[A]をもつ連立一次方程式 [A]{X}={B} を解く。
<関数>
int dgesv_( integer *n, integer *nrhs, doublereal *a, integer *lda,
integer *ipiv, doublereal *b, integer *ldb, integer *info);
<引数>
long int n - (input) 連立一次方程式の式数。正方行列[A]の次数。(n≧0) ここで、行列Aはn行n列である。
long int nrhs - (input) 行列{B}の列数。(nrhs≧0) 通常Bはベクトルなので、通常の使用では1となる。
double a - (input/output) 配列形式はa[lda×n]。
(input)n行n列の係数行列[A]。
(output)LU分解後の行列[L]と行列[U]。ただし、行列[L]の単位対角要素は格納されない。
A=[P]*[L]*[U]であり、[P]は行と列を入れ替える操作に対応し、置換行列と呼ばれ、0か1が格納される。
long int lda - (input) 行列Aの第一次元(のメモリ格納数)。lda≧max(1,n) つまり、1〜nの中で一番大きい数よりも、ldaが大きくなければならない。
通常はlda=nで良い。
long int ipiv - (output) 大きさnの配列。置換行列[P]を定義する軸選択用添え字。
double b - (input/output) 配列形式はb[ldb×nrhs]。二次元配列b[ldb][nrhs]の場合は、一次元配列bb[ldb×nrhs]に格納してポインタを渡す。
通常はnrhsが1なので、配列形式がb[ldb]となる。
(input) b[ldb×nrhs]の配列形式をした右辺行列{B}。
(output) info = 0 の場合に、b[ldb×nrhs]形式の解行列{X}。
long int ldb - (input) 配列bの第一次元(のメモリ格納数)。ldb≧max(1,n) つまり、1〜nの中で一番大きい数よりも、ldbが大きくなければならない。
通常はldb=nで良い。
long int info - (output)
info = 0: 正常終了
info < 0: info = -i ならば、i番目の引数の値が間違えていることを示す。
0 < info <N-1: 固有ベクトルは計算されていない。
info > N: LAPACK内で問題が生じたことを示す。
を解く。
|
#include <stdio.h> #define N 3 double A[N*N]; double x[N]; int main(void) { static long int i; static long int n=N,inc=1,info,piv[N]; A[0]=1.;A[1]=3.;A[2]=1.; A[3]=1.;A[4]=1.;A[5]=-2.; A[6]=1.;A[7]=-3.;A[8]=-5.; x[0]=1.;x[1]=5.;x[2]=10.; printf("N = %d\n",N); dgesv_(&n,&inc,A,&n,piv,x,&n,&info); for(i=0;i<N;++i) printf("%lf\n",x[i]); return 0; } |
を解く。つまり、
の逆行列を求める。
|
#include <stdio.h> #define N 3 double A[N*N]; double x[N*N]; int main(void) { static long int i; static long int n=N,inc=3,info,piv[N]; A[0]=1.;A[1]=3.;A[2]=1.; A[3]=1.;A[4]=1.;A[5]=-2.; A[6]=1.;A[7]=-3.;A[8]=-5.; x[0]=1.;x[1]=0.;x[2]=0.; x[3]=0.;x[4]=1.;x[5]=0.; x[6]=0.;x[7]=0.;x[8]=1.; printf("N = %d\n",N); dgesv_(&n,&inc,A,&n,piv,x,&n,&info); printf("%lf %lf %lf\n",x[0],x[3],x[6]); printf("%lf %lf %lf\n",x[1],x[4],x[7]); printf("%lf %lf %lf\n",x[2],x[5],x[8]); return 0; } |
Copyright (C) 2001- Keisuke ABE. All Rights Reserved.