我正在写一个需要矩阵和向量乘法的C算法。我有一个矩阵Q(W×宽),其由一个矢量Ĵ(1×W)与自身的转置身份矩阵乘以和加上创建我,缩放的使用标量a。C中使用CBLAS/LAPACK的对称矩阵求逆
Q = [(J^T)* J + aI]。
我然后必须乘以反Q与矢量G获得矢量中号。
M =(Q ^( - 1))* G.
我使用cblas和CLAPACK发展我的算法。当矩阵Q使用随机数(类型float)填充,并使用例程sgetrf_和sgetri_反转,所计算出的逆是正确。
但是,当矩阵Q是对称的,这就是你乘以(J^T)x J的情况,计算出的是错误的!。
我知道阵列的行主(C语言)和列为主(以FORTRAN)格式,同时呼吁LAPACK由C程序,但对于一个对称矩阵这不应该是作为一个问题^ T = A.
我附上了我的C函数代码,用于下面的矩阵求逆。
我相信有更好的方法来解决这个问题。谁能帮我这个?
使用cblas的解决方案将是伟大的...
谢谢。
void InverseMatrix_R(float *Matrix, int W)
{
int LDA = W;
int IPIV[W];
int ERR_INFO;
int LWORK = W * W;
float Workspace[LWORK];
// - Compute the LU factorization of a M by N matrix A
sgetrf_(&W, &W, Matrix, &LDA, IPIV, &ERR_INFO);
// - Generate inverse of the matrix given its LU decompsotion
sgetri_(&W, Matrix, &LDA, IPIV, Workspace, &LWORK, &ERR_INFO);
// - Display the Inverted matrix
PrintMatrix(Matrix, W, W);
}
void PrintMatrix(float* Matrix, int row, int colm)
{
int i,k;
for (i =0; i < row; i++)
{
for (k = 0; k < colm; k++)
{
printf("%g, ",Matrix[i*colm + k]);
}
printf("\n");
}
}
2012-05-23
Saed