我想找到一个解决方案, 在哪里是一个方阵。我知道大多数 LAPACK 例程都可以解决. 所以我拿作为一个,并设置. 我有一个额外的限制.因此,我添加了额外的一行 到和一个到. 这也允许避免琐碎的解决方案,其中.
这种方法在 Octave 中运行良好,但我正在努力用 LAPACK 来实现它。我不断得到info=4
,这意味着我的第四个因素在里面因式分解与一排是单数。发生这种情况是因为我的最后一行是.
有没有什么好办法解决? 我应该在我的真实数据中添加,是稀疏的。
这是我在 C 中的失败尝试,其中b=[0,0,0,1]
.
float *A, *b;
/* Ax = b
* Ax = xT(A) //transpose
* A is m x m //matrix
* b is m x 1 //vector
* x is m x 1 //vector
*/
int m = 3;
int scale = 1;
A = (float *)mkl_malloc(m*m,32);
A[0]=-5;A[1]= 2;A[2]= 3;
A[3]= 4;A[4]= -10;A[5]= 6;
A[6]= 7;A[7]=8;A[8]= -15;
b = (float*)mkl_malloc(m+1,32);
for (int i = 0; i < m; i++) {
b[i]=0.0;
}
b[m]=1.0;
int matrix_order = LAPACK_ROW_MAJOR;
int ipiv[m+1];
int info;
//transpose and add a row of ones
float * Acopy = (float*)mkl_malloc((m+1)*m,32);
mkl_somatcopy('R','T',m,m,scale,A,m,Acopy,m);
//assign last row of ones
for (int i = 0; i < m; i++){
int p = m*m+i;
Acopy[p]=1.0;
}
printf("Original\n");
print_matrix(A, m, m );
printf("Transpose with ones\n");
print_matrix(Acopy, m+1, m );
info = LAPACKE_sgesv(matrix_order,m+1,1,Acopy,m+1,ipiv,b,1);
printf("$?=%d\n",info);
print_matrix(b, m+1, 1 );
return 0;
谢谢你。