Bul*_*ull 7 matlab cluster-analysis image-processing image-segmentation arpack
我正在使用http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip中的规范化剪切包 (在Windows 7上)
这曾经与Matlab2010a一起使用.但是我已升级到Matlab2013a(32位学生版),现在我收到以下错误:
Error using arpackc
Expect 2 output arguments
Error in eigs_new (line 240)
arpackc( aupdfun, ido, ...
Error in ncut (line 83)
[vbar,s,convergence] =
eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));
Error in ncutW (line 9)
[NcutEigenvectors,NcutEigenvalues] =
ncut(W,nbcluster);
Error in NcutImage (line 18)
[NcutDiscrete,NcutEigenvectors,NcutEigenvalues]
= ncutW(W,nbSegments);
Error in demoNcutImage (line 25)
[SegLabel,NcutDiscrete,NcutEigenvectors,NcutEigenvalues,W,imageEdges]=
NcutImage(I,nbSegments);
Run Code Online (Sandbox Code Playgroud)
显然,该new_eigs()函数ncuts与最新的Matlab中的ARPACK版本不兼容.
eigs()函数的修改版本.为什么我不能只使用Matlab的内置eigs()而不是eigs_new()(它似乎工作).有两种解决方案:
使用Matlab的eigs()功能而不是eigs_new()标准化切割包中提供的功能.我想这eigs_new()是为了解决以前版本的Matlab的一些兼容性问题,现在本身就是一个问题.
修改eigs_new().哪里有呼叫arpackc()的eigs_new(),拨打电话就像在工具盒版的eigs().所以,例如:
arpackc( aupdfun, ido, ...
bmat, intconvert(n), whch, nev, tol, resid, ncv, ...
v, ldv, iparam, ipntr, workd, workl, lworkl, info );
Run Code Online (Sandbox Code Playgroud)变
[ido, info] = arpackc( aupdfun, ido, bmat, intconvert(n), whch, ...
nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl, ...
lworkl, info );
Run Code Online (Sandbox Code Playgroud)
只有两个地方必须更改才能使其工作(尽管其他调用arpackc()实际上并未执行).
我仍然不确定为什么eigs_new()存在.
小智 5
在matlab2014a 64位窗口中,您只需更改
[vbar,s,convergence] = eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));
Run Code Online (Sandbox Code Playgroud)
在ncut.m的81行
[vbar,s,convergence] = eigs(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P));
Run Code Online (Sandbox Code Playgroud)
然后eigs_new.m是无用的,不关心.2014年的Becaus(或超过2009年)arpackc已被eigs取代.你可以阅读eigs的帮助以获得更多帮助.