+ -
当前位置:首页 → 问答吧 → VC调用matlab进行曲线拟合

VC调用matlab进行曲线拟合

时间:2011-12-13

来源:互联网

有没有人尝试过啊?请赐教一下。试了好多次结果都不对

作者: c415415   发布时间: 2011-12-13

[code=C/C++][/code]
Engine *ep;

mxArray *T=NULL;
mxArray *X=NULL;
mxArray *xx=NULL;
double ans[4];

if(!(ep=engOpen(NULL)))
{
AfxMessageBox("error");
exit(-1);
}

T=mxCreateDoubleMatrix(100,3,mxREAL);
X=mxCreateDoubleMatrix(1,4,mxREAL);
memcpy((char*)mxGetPr(T),(char*)data,100*3*sizeof(double));
engPutVariable(ep,"T",T);
engPutVariable(ep,"X",X);
engEvalString(ep,"init=[2700 -2700 200 350];");
engEvalString(ep,"options=optimset('largescale','on','LevenbergMarquardt','on','Display','Iter','TolFun',1e-12,'TolX',1e-10,'MaxFunEvals',1e+6,'MaxIter',10000);");
engEvalString(ep,"[X,resnorm] = lsqnonlin(@(X)sphere_fun(X,T),init,[0 -1e4 0 0],[3e5 500 500 500],options)");
xx=engGetVariable(ep,"X");
memcpy((char*)ans,(char*)mxGetPr(xx),4*sizeof(double));
engClose(ep);

作者: c415415   发布时间: 2011-12-15

其中data是我存放数据的那个数组,第一列放的x坐标,第二列放的y坐标,第三列放的z坐标。我想通过matlab拟合出一个球面(单独使用matlab时没有出现任何问题),但是与vc混编后就不行了。另外sphere_fun函数是我自己定义的,应该已经被调用到了,因为我单步调试时若修改sphere_fun会有变化。
现在我真的不知道问题出在哪里啊,郁闷死了。求指教。

作者: c415415   发布时间: 2011-12-15

X数组用于存放拟合结果(matlab中)的4个参数:球心坐标x,y,z和球的半径r。ans[4]数组则用于存放X的数据

作者: c415415   发布时间: 2011-12-15

这个没试过,只画过表格。。
楼主要是把问题解决了
顺便给教下我,谢谢了!!

作者: jaynaviee   发布时间: 2011-12-15

热门下载

更多