本文介绍了计算矩阵使用C中的LAPACK逆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想能够计算一般 N×N的
矩阵C / C ++使用LAPACK的倒数。
I would like to be able to compute the inverse of a general NxN
matrix in C/C++ using lapack.
我的理解是,做LAPACK中反转的方式是使用 dgetri
的功能,但是,我不能找出它的所有参数都应该成为。
My understanding is that the way to do an inversion in lapack is by using the dgetri
function, however, I can't figure out what all of its arguments are supposed to be.
下面是code我有:
void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO);
int main(){
double M [9] = {
1,2,3,
4,5,6,
7,8,9
};
return 0;
}
你会如何完成它使用dgetri获得 3×3
矩阵M的逆_?
推荐答案
下面是工作code在C使用LAPACK计算矩阵的逆/ C ++:
Here is the working code for computing the inverse of a matrix using lapack in C/C++:
#include <cstdio>
extern "C" {
// LU decomoposition of a general matrix
void dgetrf_(int* M, int *N, double* A, int* lda, int* IPIV, int* INFO);
// generate inverse of a matrix given its LU decomposition
void dgetri_(int* N, double* A, int* lda, int* IPIV, double* WORK, int* lwork, int* INFO);
}
void inverse(double* A, int N)
{
int *IPIV = new int[N+1];
int LWORK = N*N;
double *WORK = new double[LWORK];
int INFO;
dgetrf_(&N,&N,A,&N,IPIV,&INFO);
dgetri_(&N,A,&N,IPIV,WORK,&LWORK,&INFO);
delete IPIV;
delete WORK;
}
int main(){
double A [2*2] = {
1,2,
3,4
};
inverse(A, 2);
printf("%f %f\n", A[0], A[1]);
printf("%f %f\n", A[2], A[3]);
return 0;
}
这篇关于计算矩阵使用C中的LAPACK逆的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!