고유 값과 고유 벡터를 계산하려는 대칭 3 중 대각 행렬이 있습니다. 나는 LAPACK dstevd 함수를 사용하고 있습니다. 저는 C로 코딩하고 있습니다. 그래서 저는 Fortran 함수를 호출 할 수 있도록 다음 코드를 작성했습니다.STEVD의 고유 값 계산
extern "C"void dstevd_ (char * jobz, int N, double d, double * e, double * z, int * ldz, int * 작업, int * lwork, int * iwork, int * liwork, int * info);
고유 벡터가 필요하므로 * z, * work 및 * iwork를 설정해야합니다. LAPACK 매뉴얼 (Link)에 따르면 크기는 z :> = n * n, 작업 :> = 1 + 4 * n + n ** 2, iwork :> = 3 + 5 * n이어야합니다.
이러한 크기를 사용할 때 dstevd_가 이러한 배열에 할당되지 않은 메모리에 액세스하고 있다는 오류가 나타납니다. 작은 문제 (n = 4)에서는 문제가 없지만 더 큰 크기 (n = 36)에서는 문제가 발생합니다. z의 크기를 늘리면 작업과 작업이 가능합니다.
z, 작업 및 iwork에 필요한 크기를 올바르게 결정하는 방법에 대한 제안 사항이 있습니까?
감사합니다.
감사합니다. 여하튼, 프로토 타입을 stackoverflow에 복사 할 때 *가 사라졌습니다. 하지만 이중 정밀도 작업을 놓쳤습니다. 그것은 그것을하는 것처럼 보였다. 흥미로운 것은 다른 문제에 대해서도 여전히 작동하고 있다는 것입니다. 하지만, 문제를 안다면, 이해가됩니다. – user3430219