mex
파일로 컴파일 된 후에 cpp
형식의 행렬 곱셈을 수행하려면 어떻게해야합니까?Matlab 용 cpp 파일의 행렬 곱
cMatrix = (1/r) * pfMatrix * wcMatrix; %here pfMatrix is 2x3 and wcMatrix is 3x8
% Hence cMatrix is 2x8
% r is a scalar
및 R은 cpp
파일에 올바르게 선언하고 스크립트에서와 동일한 값을 가질 : 매트랩 스크립트
내 일반 행렬 곱셈은 다음과 같다. 그러나 cMatrix는 나에게 같은 결과를주지 않습니다. 여기에 cpp
의 행렬 곱셈의 구현 :
int i, n, j;
for (i = 0; i<1; i++)
{
for (n = 0; n<7; n++)
{
for (j = 0; j<2; j++)
{
d->cMatrix[i][n] += (d->pfMatrix[i][j]) * (d->wcMatrix[j][n]);
}
d->cMatrix[i][n] = (1/d->r) * d->cMatrix[i][n];
}
}
편집 :
내가 Ben Voigt 대답 다음 루프를 수정했습니다. cMatrix
의 결과는 여전히 Matlab 스크립트에서 계산 된 것과 동일하지 않습니다. 예를 들어
이 경우
pfMatrix = [7937.91049469652,0,512;0,7933.81033431703,384];
wcMatrix = [-0.880633810389421,-1.04063381038942,-1.04063381038942,-0.880633810389421,-0.815633810389421,-1.10563381038942,-1.10563381038942,-0.815633810389421;-0.125,-0.125,0.125,0.125,-0.29,-0.29,0.29,0.29;100,100,100,100,100,100,100,100];
r = 100;
, cMatrix(1,1)
있다 : 그러나
(pfMatrix(1,1)*wcMatrix(1,1) + pfMatrix(1,2)*wcMatrix(2,1) + pfMatrix(1,3)*wcMatrix(3,1))/r = 442.09
등가 결과 959
인 mex
파일.
편집 # 2 :
나는 (2 부문 누락)가 제대로 선언되지 않은 pfMatrix
의 요소에서 오류를 발견했습니다. 따라서 Ben Voigt의 대답이 올바르게 작동하고 있습니다. 그러나 두 결과 간에는 여전히 약간의 차이가 있습니다 (Matlab 스크립트는 442를, mex는 447을 제공합니다. 다른 데이터 유형의 결과 일 수 있습니까?).
수정 # 3 :
오류를 발견하고이 행렬 곱셈 루프와 관련되지 않았다.
나는이 모든 것이 [적절한'mex' 파일]에 있다고 가정한다. (http://www.mathworks.com/help/matlab/matlab_external/using-mex-files-to-call-cc-and- fortran-programs.html)? – horchler
@horchler 실제로 mex 파일은 오류없이 생성됩니다. 오류없이 호출 할 수 있습니다. 유일한 문제는 출력'cMatrix'가 올바르지 않다는 것입니다. –
추가하기 전에'cMatrix'의 모든 요소를 0으로 설정 했습니까? –