Could some help me for this:

I want to perform economy size bidiagonalization of a m x n matrix A (m<n), such that A=QBP' where B is a bidiagonal matrix of size m x m, and Q, P are orthogonal matrices.

Currently, I use following two functions to do the job, from which I can get the factorization A=USV' where S is bidiagonal matrix of size m x n.

dgebrd(&m,&n,x,&m,d,e,tauq,taup,work,&lwork,&info);

dorgbr(&qp,&m,&m,&n,x,&m,tauq,work,&lwork,&info);

I can truncate the matrix S and V to get correct B and P. However this is not optimal in term of speed. From my test, this method is even slower than performing a economy SVD. How can I speed up my function so that I can directly get the economy size result? Thanks in advance.