使用 MATLAB 调用 C++ 进行矩阵复制时如何找到我的数值错误?

问题描述

我已经从 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...