Appel de DPOTRS à partir de LAPACK dans C sous GNU / Linux

Je voudrais demander de l’aide à la fonction DPOTRS de LAPACK lorsqu’il est appelé depuis C. Oui, je suis conscient que la masortingce sur laquelle je tente de travailler est définie comme positive (avec les valeurs propres 3, 1 en fait!)

À l’heure actuelle, ma fonction ne fonctionne pas correctement. Cela retourne un résultat incorrect.

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]); 

Ceci est le code. dpotrs est importé manuellement à l’aide de ce code:

 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; } 

Ça retourne le mauvais résultat! Le résultat correct serait 1.000, -0.500

Cependant, je reçois 0.469, -0.188

Mais en plus de cela, info renvoie 0, comme si tout se passait bien!

Et ça, mesdames et messieurs, dépasse mon esprit.

Merci d’avance!

Je pense que vous devez lire de la documentation:

 * * Purpose * ======= * * DPOTRS solves a system of linear equations A*X = B with a symmesortingc * positive definite masortingx A using the Cholesky factorization * A = U**T*U or A = L*L**T computed by DPOTRF. * 

La masortingce d’entrée dans DPOTRS doit être une masortingce déjà factorisée de Cholesky au format sortingangular supérieur ou inférieur de LAPACK. Vous avez sauté une étape. DPOTRF par factoriser votre A avec DPOTRF , puis utilisez-le pour résoudre un ou plusieurs membres de droite avec DPOTRS .