使用lapack求解Ax=B。程序中a,b,x都是矩阵,创建时因无法确定元素个数,因此采用动态分配malloc语句。而采用lapack求解时其参数为一维数组,因此需要先进行二维向一维转换,转换时一维数组的创建应同样采用malloc。
void lapack(double **a,double **b,double **x)
{
lapack_int n=row_a,nrhs=col_b,lda=n,ldb=nrhs,info;
lapack_int i,j,*ipiv;
double *a1,*b1,*atemp,*btemp;
//use malloc to create one diamond array:atemp and btemp
atemp=(double *)((n*n)*sizeof(double));
btemp=(double *)((nrhs*n)*sizeof(double));
ipiv=(int *)(n*sizeof(int));
for(i=0;i<n;i++)
{
//a1 stores a row of array a
a1=a[i];
for(j=0;j<n;j++)
{
//two diamond change to one diamond
atemp[i*n+j]=a1[j];
}
}
......
//x stores in b array
info=LAPACKE_dgesv(...);
//b and x have changed row & col
for(i=0;i<n;i++)
{
for(j=0;j<nrhs;j++)
{
x[j][i]=btemp[i*nrhs+j];
}
}
}