从C内部调用时,我想从LAPACK寻求有关DPOTRS函数的帮助。是的,我知道我要使用的矩阵是正定的(实际上,特征值3、1!)。
目前,我的功能无法正常运行。返回错误的结果。
double A[] = {2.0, 1.0, 1.0, 2.0};
double b[] = {1.5, 0.0};
printf("%5.3f %5.3f\n", b[0], b[1]);
info = dpotrs('U',2,1,A,2,b,2);
printf("%d\n", info);
printf("%5.3f %5.3f\n", b[0], b[1]);
这是代码。 dpotrs是使用以下代码手动导入的:
static long dpotrs(char UPLO, long N, long NRHS, double* A, long LDA, double* B, long LDB)
{
extern void dpotrs_(char* UPLOp, long* Np, long* NRHSp, double* A, long* LDAp, double* B, long* LDBp, long* infop);
long info;
dpotrs_(&UPLO, &N, &NRHS, A, &LDA, B, &LDB, &info);
return info;
}
它返回错误的结果!正确的结果应该是1.000,-0.500
但是,我收到0.469,-0.188
但最重要的是,info会返回0,好像运行顺利!
女士们,先生们,那让我感到困惑。
提前致谢!
最佳答案
我认为您需要阅读一些文档:
*
* Purpose
* =======
*
* DPOTRS solves a system of linear equations A*X = B with a symmetric
* positive definite matrix A using the Cholesky factorization
* A = U**T*U or A = L*L**T computed by DPOTRF.
*
DPOTRS
的输入矩阵必须是LAPACK上或下三角格式的已经被Cholesky分解的矩阵。您已跳过了一步。首先用A
分解DPOTRF
,然后用它用DPOTRS
求解一个或多个右手边。