昨天证实了一件事情,因为前段时间测试SPM5的新功能和分析性能,当我使用SPM开发中心提供的face_rep数据集进行测试时,出现了很有意思的事情:每次到了categorical估计的时候,总会在ReML迭代估计时出现如下错误:
Temporal non-sphericity (over voxels) : ...REML estimation
ReML Block - 1
ReML Iteration : 1 ...NaN
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = -1.000000e+00.
> In spm_reml at 90
In spm_spm at 855
In spm_config_fmri_est>run_est at 382
In spm_jobman>run_struct1 at 1384
In spm_jobman>run_struct1 at 1392
In spm_jobman>run_struct1 at 1392
In spm_jobman>run_struct at 1351
??? Error using ==> svd
NaN or Inf prevents convergence.
这随后导致我开始了长达一个月的诊断过程。
第一反应就是只取少量数据在windows平台下看看是否错误会重现,结果在我的桌面机(WinXP/MATLAB7.1)上顺利完成分析,从而结论就是:linux版本的MATLAB有问题。随后,查阅SPM的mailist,发现三月份有人报告了类似的问题,但是后面给出的解答都是不能解决我的问题,但是到那时我还是一直认为是能够通过SPM的下一周期updates解决这个问题。
前天的中午,收到SPM的消息说刚刚发布新的升级程序包Updates573,满怀欣喜的下载升级了服务器上的SPM5,重新执行估计任务,错误依旧。到这时,我终于对我使用的linux系统有了些怀疑,出发点很简单:我的linux内核和GLIBC都比较老了,也一直没保持更新,这可能会和去年刚刚出现的MATLAB Release14会有冲突,或者说系统对于某些MATLAB新特性不能够很好支持,最直接的一个原因就是gcc编译器和系统内核版本,因为SPM中的mex文件就是利用某个C/C++编译器在linux下编译而成的,所以我登陆MATLAB的动态链接函数的编译器需求和内核需求信息网页,证实了确实有这些限制。于是,将数据和SPM5转移到另外一台安装RedHat Anvanced Server4.0的服务器,同样进行估计,结果顺利通过。
不要把MATLAB Release14装在内核或者glibc版本太低的操作系统,要不然,就等着痛苦了。耗时一个月我解决了这个问题!
发表于 @ 2006年07月28日 13:30:00 | 评论( loading... ) | 举报| 收藏