'Unexpected output' error using SVDS with function handle
14 views (last 30 days)
Show older comments
I need to pass a function handle, which performs a matrix-vector multiplication, to SVDS. I have
[U,S,V] = svds( @(x,tflag) denseSparseMatvec(X, 'notransp', B1, B2), [m n], k);
where the output of denseSparseMatvec is m x n and I want the k largest singular values. I get the error
Unexpected output of function handle with flag 'notransp'. The expected output is a column
vector of length 20 and of type double.
If, as a test, I simply do M = denseSparseMatvec(X, 'notransp', B1, B2) and then [U,S,V] = svds(M, k), everything works fine.
What's going on here?
0 Comments
Answers (1)
Christine Tobler
on 10 Oct 2018
Edited: Christine Tobler
on 10 Oct 2018
Maybe the problem is that you use both x and X in the definition of the anonymous function? A matrix X in your workspace would be used every time, while the vector x that SVDS passes in is ignored.
Also, the function handle passed to SVDS must compute M*x if the input tflag is 'notransp', and compute M'*x if it is 'transp'.
0 Comments
See Also
Categories
Find more on Eigenvalues in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!