我有一个对称的三对角矩阵,我想要计算特征值和特征向量。我正在使用LAPACK dstevd函数来执行此操作。我在C编码,所以我在代码顶部有以下行,所以我可以调用fortran函数:
extern“C”void dstevd_(char * jobz,int N,double d,double * e,double * z,int * ldz,int * work,int * lwork,int * iwork ,int * liwork,int * info);
我需要特征向量,所以我需要设置* z,* work和* iwork。根据LAPACK手册(Link),尺寸必须为: z:> = n * n,work:> = 1 + 4 * n + n ** 2,iwork:> = 3 + 5 * n。
使用这些大小时,我收到的错误是dstevd_正在访问未在这些数组中分配的内存。它适用于小(n = 4)问题,但是我遇到了更大尺寸(n = 36)的问题。如果我增加z的大小,工作和工作就可以了。
有关如何正确确定z,work和iwork所需大小的任何建议吗?
感谢。
答案 0 :(得分:1)
嗯,你的原型与Fortran原型不匹配,这导致了各种各样的问题。
为了避免这些问题,为什么不使用LAPACK C接口,这是自2010年3.3.0以来LAPACK的一部分。在你的情况下,那将是LAPACKE_dstevd。有关使用LAPACKE的详细信息,请参阅http://www.netlib.org/lapack/lapacke。