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

 DGETRI/ZGETRI (CLAPACK)

DGETRI/ZGETRI

DGETRF/ZGETRFで計算したLU分解後の行列を利用して、逆行列[A]-1を計算する。

<関数>

int dgetri_(integer *n, doublereal *a, integer *lda, integer *ipiv, doublereal *work, integer *lwork, integer *info);

<引数>

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

double a - (input/output) 配列次元数は[lda×n]。

               (input)DGETRIでLU分解されたn行n列の行列[A]。

               (output)行列[A]の逆行列。

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

                  通常はlda=nで良い。

long int ipiv - (output) 次元数nの配列。軸選択用添え字。1 ≦ i ≦ nなる行列Aのi行は、IPIV[i]と交換してある。

double work - (working/otput)次元数ldworkの配列。出力時にinfo=0のとき、work[0]には最適なlworkが入る。

long int lwork - (input)配列workの次元数。lwork≧max(1,n)。

long int info - (output)

             info = 0: 正常終了

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

             info > 0: info = i ならば、U[i][i]は0である。行列は特異であり、逆行列は計算できない。

の逆行列を求める。(答え:)

#include <stdio.h>

#define M 3

#define N 3

double A[M*N];

int main(void)

{

  static int i;

  static long int m=M,n=N,lda=M,info,piv[N],lwork=N;

  static double work[N];

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

  A[3]=4.;A[4]=9.;A[5]=14.;

  A[6]=6.;A[7]=14.;A[8]=23.;

  dgetrf_( &m, &n, A, &lda, piv, &info);

  dgetri_(&n, A, &lda, piv, work, &lwork, &info);

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

  return 0;

}


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