lsqcurvefit失败取决于平台

时间:2016-09-20 16:19:22

标签: matlab

我正在尝试处理一个非常大的数据集,这需要我做几百万个非线性曲线拟合。我已经获得了一段专门的代码,用于我收集的数据,其核心是使用MATLAB函数lsqcurvefit。当我在笔记本电脑上运行它时,一切都很好用,除了配件太慢而不能对我有用,考虑到模型功能非常复杂,这并不太令人惊讶。为了正确看待这个问题,我的笔记本电脑每小时只能处理大约8000次,而且我已经完成了数千万次。

幸运的是,我可以访问我所在机构的计算集群,这使我能够在更合理的时间范围内处理这些数据。出现的问题是 - 尽管是跨平台的 - 在我的Windows笔记本电脑和集群上MATLAB代码的作用之间似乎存在一些显着差异。尽管使用完全相同的数据运行完全相同的代码,但使用相同版本的MATLAB,Unix集群上运行的代码仍然失败,并显示以下错误消息:

Error using eig
Input to EIG must not contain NaN or Inf.

Error in trust (line 29)
    [V,D] = eig(H);

Error in trdog (line 109)
    [st,qpval,po,fcnt,lambda] = trust(rhs,MM,delta);

Error in snls (line 311)
    [sx,snod,qp,posdef,pcgit,Z] = trdog(x,g,A,D,delta,dv,...

Error in lsqncommon (line 156)
                snls(funfcn,xC,lb,ub,flags.verbosity,options,defaultopt,initVals.F,initVals.J,caller,
             ...

Error in lsqcurvefit (line 254)
    lsqncommon(funfcn,xCurrent,lb,ub,options,defaultopt,caller,...

我可以确认我的数据中没有无穷大或NaN,这个错误消息可能最初似乎表明了这一点。我只能得出结论,使用不同的平台会导致一些不同的执行准确性,这可能导致在此过程中某处出现零误差。我的问题是 - 如何在群集上运行此代码?

作为参考,我的笔记本电脑运行的是Windows 7 Professional 64位,配备Intel i5 5200U 2.20GHz x4,集群运行Scientific Linux 6.7 x86_64,带有各种Intel Xeon处理器,两者都运行MATLAB R2015b。

0 个答案:

没有答案