问题描述
我已经从 C++ 代码编译了 mex 文件:
#include "mex.h"
#include "matrix.h"
#include "fdtd-macro.h"
#include "copyMatrix.cpp"
#include "global_var.h"
int nx,ny,nz,linearSizeEx,linearSizeEy,linearSizeEz;
int ExM,ExN,ExP,EyM,EyN,EyP,EzM,EzN,EzP,HxM,HxN,HxP,HyM,HyN,HyP,HzM,HzN,HzP;
double *Ex,*Ey,*Ez,*tmpEx,*tmpEy,*tmpEz;
const mwSize *dimEx,*dimEy,*dimEz;
const mwSize *dimCexe,*dimCexhy,*dimCexhz,*dimCeye,*dimCeyhx,*dimCeyhz,*dimCeze,*dimCezhx,*dimCezhy;
using namespace std;
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
//read input from MATLAB calling
Ex = mxGetPr(prhs[0]); Ey = mxGetPr(prhs[1]); Ez = mxGetPr(prhs[2]);
tmpEx = mxGetPr(prhs[3]); tmpEy = mxGetPr(prhs[4]); tmpEz = mxGetPr(prhs[5]);
dimEx = mxGetDimensions(prhs[0]); dimEy = mxGetDimensions(prhs[1]); dimEz = mxGetDimensions(prhs[2]);
//dimensions
ExM = dimEx[0]; ExN = dimEx[1]; ExP = dimEx[2];
EyM = dimEy[0]; EyN = dimEy[1]; EyP = dimEy[2];
EzM = dimEz[0]; EzN = dimEz[1]; EzP = dimEz[2];
linearSizeEx = (ExP-1)*ExN*ExM+(ExN-1)*ExM+ExM-1;
linearSizeEy = (EyP-1)*EyN*EyM+(EyN-1)*EyM+EyM-1;
linearSizeEz = (EzP-1)*EzN*EzM+(EzN-1)*EzM+EzM-1;
//copy E field to temporary E field
copyMatrix(tmpEx,Ex,linearSizeEx);
// copyMatrix(tmpEy,Ey,linearSizeEy);
// copyMatrix(tmpEz,Ez,linearSizeEz);
return;
}
我的目标是将 Ex 复制到 tmpEx。我的代码已经通过编译,我已经测试过它确实正确地将 Ex 复制到了 tmpEx。但是当我最终用
调用编译的mex文件时updateElectricFields(Ex,Ex_temp,Ey_temp,Ez_temp);
它导致我的算法以 10 的数百次幂的值爆炸。复制矩阵的代码如下:
void copyMatrix(double *A,double *B,int linearSize)
{
int ii;
for (ii = 0;ii<linearSize+1;ii++)
A[ii] = B[ii];
return;
}
问题出在哪里? The diverged result
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)