ホーム > 数値計算ソフトウェア > ライブラリ > LAPACK > CLAPACK > ルーチンの仕様 >

 DGTSV/ZGTSV (CLAPACK)

DGTSV/ZGTSV

部分枢軸選択のガウスの消去法によって 、連立方程式を解く。(行列[A]はn行n列の三重対角マトリックス)

ここで、連立方程式を解く場合には、引数duとdlの順序を入れ替えること。

[memo:完全枢軸選択(complete pivoting)法,部分枢軸選択(partial pivoting)法]

<関数>

int dgtsv_(integer *n, integer *nrhs, doublereal *dl, doublereal *d__, doublereal *du, doublereal *b, integer *ldb, integer *info);

<引数>

long int n - (input) 行列[A]の次数。(n≧0)

long int nrhs - (input) 右辺の個数。すなわち、行列[B]の列数。nrhs≧0。

double dl - (input/output) 次元数[n-1]の配列。

double d - (input/outpu) 次元数[n]の配列。

double du - (input/output) 次元数[n-1]の配列。

 double b - (input/output) 次元数[ldb×nrhs]の配列。

            (input) n行nrhs列の右辺行列[B]

            (output) n行nrhs列の解の行列[X](ただし、info=0のとき)

long int ldb - (input) 配列Bの第1次元(のメモリ格納数)。ldb≧max(1,n) つまり、1〜nの中で一番大きい数よりも、ldbが大きくなければならない。

                  通常はlab=nで良い。

long int info - (output)

             info = 0: 正常終了

             info < 0: info = -i ならば、i番目の引数の値が間違えていることを示す。

             info > 0: info = i ならば、u[i][i]はゼロとなり解は計算されない。i=nでないならば、LU分解が終わっていない。

[A]{x}={b}を解く、ただし、,。(答え:)

#include <stdio.h>

#define N 4

double DL[N-1],D[N],DU[N-1],B[N];

int main(void)

{

  int i;

  long int n=N,nrhs=1,ldb=N,info;

  DL[0]=1.;DL[1]=1.;DL[2]=1.;

  D[0]=2.;D[1]=2.;D[2]=2.;D[3]=2;

  DU[0]=-1.;DU[1]=-1.;DU[2]=-1.;

  B[0]=0.;B[1]=2.;B[2]=4.;B[3]=11.;

  dgtsv_(&n, &nrhs, DL, D, DU, B, &ldb, &info);

  for(i=0;i<N;++i) printf("%lf\n",B[i]);

  return 0;

}


Copyright (C) 2001- Keisuke ABE. All Rights Reserved.