2

線形方程式 (対称、三重対角、正) を解こうとしています。LAPACKEを使用する必要があります。私のコードは次のとおりです。

#include <lapacke.h>
#include <stdio.h>



void print_mtrx(double * mtrx, int n, int m)
{
    int i, j;

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < m; j++)
        {
            printf("%f ", mtrx[i*m+j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main()
{
    double matrix[5*5] = {
        2,  0,  0,  0,  0,
        0,  2,  0,  0,  0,
        0,  0,  2,  0,  0,
        0,  0,  0,  2,  0,
        0,  0,  0,  0,  2
    };

    double rozw[5] = {1,2,3,4,5};

    double matrix2[5*5] = {
        7,  0,  0,  0,  0,
        0,  7,  0,  0,  0,
        0,  0,  7,  0,  0,
        0,  0,  0,  7,  0,
        0,  0,  0,  0,  7
    };



    LAPACKE_dptsv(LAPACK_COL_MAJOR, 5, 5, matrix, matrix2, rozw, 5);

    print_mtrx(matrix, 5, 5);
    print_mtrx(matrix2, 5, 5);
    print_mtrx(rozw, 5, 1);

}

LAPACKE の関数は、エラーなしで何もしないようです。主な問題は、関数のパラメーターが何を表しているのかわからないことです。私は長い間検索しましたが、実際のドキュメントはありません。これが私が見つけた、または推測したものです:

  • int matrix_order -- LAPACK_COL_MAJOR または LAPACK_ROW_MAJOR、行列はメモリ内でどのように表現されるか
  • lapack_int n -- 行列のサイズ (つまり、列の数)
  • lapack_int nrhs -- わかりません。ベクター b のサイズかもしれません
  • double* d -- 方程式の行列
  • double* e -- わかりません。
  • double* b -- d からの方程式の解のベクトル
  • lapack_int ldb -- b の先頭方向 (なぜ? nrhs と同じではなく、それ自体が n と同じ?)

これらの議論の本当の意味をどのように見つけることができますか? コードを機能させるにはどうすればよいですか?

4

2 に答える 2

1

BLAS や LAPACK のドキュメントに関しては、Intelがおそらく最も包括的です。各パラメーターの目的を説明している?ptsvのドキュメントを参照できます。

(ヒント: Google で BLAS または LAPACK を検索するときは、必ずs/ d/ c/zプレフィックスを削除してください。)

関連するスニペットは次のとおりです。

このルーチンはX、実数または複素数の線形連立方程式を解きますA*X = B。ここで、Aは対称/エルミート正定三重対角行列で、matrix の列nは個々の右辺であり、の列は対応する解です。nBX

AA = L*D*LT(実際のフレーバー) またはA = L*D*LH(複雑なフレーバー) として因数分解され、因数分解された形式をA使用して連立方程式を解きますA*X = B

入力パラメータ

n: 行列の順序An ≥ 0.

nrhs: 右辺の数、 の列数Bnrhs ≥ 0.

d: 配列、少なくとも次元max(1, n)。三重対角行列 の対角要素を含みますA

e, b: 配列: e(n - 1), b(ldb,*). 配列には、 の下対角要素がe含まれます。配列 b には、列が方程式系の右辺である行列が含まれます。の 2 番目の次元は少なくとも でなければなりません。(n - 1)ABbmax(1,nrhs)

ldb: の先頭の次元bldb ≥ max(1, n).

出力パラメータ

d: の(実数) / (複素数) 因数分解からnの対角行列の対角要素によって上書きされます。DL*D*LTL*D*LHA

e:の因数分解からの(n - 1)単位双対角因子の副対角要素によって上書きされます。LA

b: ソリューション マトリックスによって上書きされXます。

info: の場合info = 0、実行は成功です。の場合info = -ii-th パラメータに不正な値がありました。の場合、次数(したがって行列自体)info = iの主要マイナーは正定値ではなく、解は計算されていません。でなければ因数分解は完了していません。iAi = n

于 2015-01-27T23:34:28.493 に答える