LAPACK 中的“dsysv”问题

计算科学 C 拉帕克
2021-12-09 03:32:06

我在使用dsysvLAPACK 中的函数的 C 程序时遇到问题。一切都编译和工作没有任何错误,我唯一的问题是,例程不会遇到它应该的任何数组。代码(仅用于测试目的的硬编码):

#include <iostream>
using namespace std;

extern "C" {
extern int dsysv_( char*, int* , int* , double* ,int*,int*, double*,int*,             double* ,int* ,int *); 
}  

int main() {

int n=3;
int nrhs=1;
int lda= 3;
int ldb=3;
int ipiv[3]={0,0,0}; 
    double a[3*3] = {
    1,2,3,
    0,4,5,
    0,0,6
    };
double b[3]={1,2,3};
int info=42;
int lwork=-1;
double work[1]={0};
char uplo='U';

dsysv_(&uplo,  &n, &nrhs, a, &lda,  ipiv, b,  &ldb, work, &lwork, &info);

cout<<"info: "<<info<<endl;
for(int i=0; i<3; i++){
    cout<<b[i]<<" ";
}
cout <<endl<<"and A: "<<endl;
for(int i=0; i<9; i++){
    cout<<a[i]<<" ";
}

return 1;
}

返回:

info: 0

1 2 3 

and A: 

1 2 3 0 4 5 0 0 6 

虽然该功能应该覆盖ab. 我想我在这里错过了一些非常明显的东西,自从我刚开始使用 LAPACK 时我就没有意识到这一点,希望能得到任何帮助。

1个回答
  • 设置lwork1(通过使用-1,LAPACK 不进行任何计算。它返回 的最佳大小work)。
  • 设置uplo'L' (您的定义a实际上填充了下部。您在 C 中 double a[3*3] = {a_{11}, a_{21}, a_{31}, a_{12}, a_{22}, a_{32}, a_{13}, a_{23}, a_{33}};