Ax = B를 풀기 위해 culaSgels 함수를 사용하려고합니다.culaSgels의 cula 사용 - 잘못된 인수입니까?
나는 cula 패키지의 systemSolve 예제를 수정했습니다. I 시스템을 해결하되 culaSgels('N',N,N, NRHS, A, N, A, N);
사용하고
void culaFloatExample()
{
int N=2;
int NRHS = 2;
int i,j;
double cula_time,start_time,end_time;
culaStatus status;
culaFloat* A = NULL;
culaFloat* B = NULL;
culaFloat* X = NULL;
culaFloat one = 1.0f;
culaFloat thresh = 1e-6f;
culaFloat diff;
printf("Allocating Matrices\n");
A = (culaFloat*)malloc(N*N*sizeof(culaFloat));
B = (culaFloat*)malloc(N*N*sizeof(culaFloat));
X = (culaFloat*)malloc(N*N*sizeof(culaFloat));
if(!A || !B)
exit(EXIT_FAILURE);
printf("Initializing CULA\n");
status = culaInitialize();
checkStatus(status);
// Set A
A[0]=1;
A[1]=2;
A[2]=3;
A[3]=4;
// Set B
B[0]=5;
B[1]=6;
B[2]=2;
B[3]=3;
printf("Calling culaSgels\n");
// Run CULA's version
start_time = getHighResolutionTime();
status = culaSgels('N',N,N, NRHS, A, N, A, N);
end_time = getHighResolutionTime();
cula_time = end_time - start_time;
checkStatus(status);
printf("Verifying Result\n");
for(i = 0; i < N; ++i){
for (j=0;j<N;j++)
{
diff = X[i+j*N] - B[i+j*N];
if(diff < 0.0f)
diff = -diff;
if(diff > thresh)
printf("\nResult check failed: X[%d]=%f B[%d]=%f\n", i, X[i+j*N],i, B[i+j*N]);
printf("\nResults:X= %f \t B= %f:\n",X[i+j*N],B[i+j*N]);
}
}
printRuntime(cula_time);
printf("Shutting down CULA\n\n");
culaShutdown();
free(A);
free(B);
}
:이
1) 결과는 X = 0, 그러나 B의 모든 요소가 적합한 저를 도시한다. 또한 는, 그것이 하나 개의 인수의 마지막 인수하기 전에 (인공 지능이있다), 행렬 B해야한다고 말한다는
결과 확인 메시지
2) 참조 매뉴얼을 공부 실패 나에게 보여줍니다 하지만 "B"대신 "A"를 매개 변수로 사용하면 올바른 B 행렬을 얻지 못합니다.
SGELS 호출에 B를 전달하지 않는 이유는 무엇입니까? 어떻게 * 가능한 * 작동 할 수 있습니까? – talonmies
@ talonmies : 감사합니다. 나는 잘못 이해했다. – George