On 2/26/10 2:28 PM, John W. Eaton wrote:
> On 26-Feb-2010, Michael D. Godfrey wrote:
>
> | On 2/26/10 10:15 AM, Jaroslav Hajek wrote:
> | > Are you sure? This is exactly the opposite of what I get. Sometimes
> | > the assert fails with
> | >
> | > !!!!! test failed
> | > assert (s (k:-1:1),s2,1e-10) expected
> | > 38.060
> | > 38.060
> | > 38.034
> | > 38.034
> | > 38.015
> | > 38.015
> | > 38.004
> | > but got
> | > 38.060
> | > 38.034
> | > 38.034
> | > 38.015
> | > 38.015
> | > 38.004
> | > 38.004
> | > maximum absolute error 0.0263523 exceeds tolerance 1e-10
> | >
> | > and the latter result is correct, AFAIK.
> | >
> | >
> | The latter result is s2 in the test. This is what I get too. s2,
> | computed from:
> | [u2,s2,v2,flag] = svds(a,k,0);
> | s2 = diag(s2);
> | is correct. It is the "expected" vector that is wrong. This comes from:
> | a =
> | sparse([3:n,1:n,1:(n-2)],[1:(n-2),1:n,3:n],[ones(1,n-2),0.4*n*ones(1,n),ones(1,n-2)]);
> | [u,s,v] = svd(full(a));
> | s = diag(s);
> | [dum, idx] = sort(abs(s));
> | s = s(idx);
> |
> | Agree?
>
> The problem is with svds, not svd on the full matrix. I should have
> put the arguments to assert in the opposite order.
>
> Sorry for the confusion,
>
> jwe
>
A bit more reading of svds.m finds that if sigma=0, it calls eigs requesting 2*k
eigenvalues instead of k. This helps to explain things, but still does not
isolate
exactly why in one case eigs returns extra eigenvalues but in another context,
with the same arguments, it returns k eigenvalues.
In any case, it now appears that my suggested change of sigma from 0 to 0.05
is appropriate in order to prevent "extra" eigenvalues.
Michael