線形方程式 (対称、三重対角、正) を解こうとしています。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 と同じ?)
これらの議論の本当の意味をどのように見つけることができますか? コードを機能させるにはどうすればよいですか?