Truncated Singular Value Decomposition (SVD) and Principal Component Analysis (PCA) that are much faster compared to using the Matlab svd and svds functions for rectangular matrices.
svdecon is a faster alternative to svd(X,'econ') for long or thin matrices.
svdsecon is a faster alternative to svds(X,k) for dense long or thin matrices where k << size(X,1) and size(X,2).
PCA versions of the two svd functions are also implemented.

function [U,S,V] = svdecon(X)
function [U,S,V] = svdecon(X,k)
Input:
X : m x n matrix
k : gets the first k singular values (if k not given then k = min(m,n))
Output:
X = U*S*V'
U : m x k
S : k x k
V : n x k
Description:
svdecon(X) is equivalent to svd(X,'econ')
svdecon(X,k) is equivalent to svds(X,k) where k < min(m,n)
This is faster than svdsecon when k is not much smaller than min(m,n)

function [U,S,V] = svdsecon(X,k)
Input:
X : m x n matrix
k : gets the first k singular values, k << min(m,n)
Output:
X = U*S*V' approximately (up to k)
U : m x k
S : k x k
V : n x k
Description:
svdsecon(X,k) is equivalent to svds(X,k) where k < min(m,n)
This function is useful if k << min(m,n) (see doc eigs)

function [U,T,mu] = pcaecon(X,k)
Input:
X : m x n matrix
Each column of X is a feature vector
k : extracts the first k principal components
Output:
X = U*T approximately (up to k)
T = U'*X
U : m x k
T : k x n
Description:
Principal Component Analysis (PCA)
Requires that k < min(m,n)

function [U,T,mu] = pcasecon(X,k)
Input:
X : m x n matrix
Each column of X is a feature vector
k : extracts the first k principal components, k << min(m,n)
Output:
X = U*T approximately (up to k)
T = U'*X
U : m x k
T : k x n
Description:
Principal Component Analysis (PCA)
Requires that k < min(m,n)
This function is useful if k << min(m,n) (see doc eigs)
Vipin Vijayan (2020). Fast SVD and PCA (https://www.mathworks.com/matlabcentral/fileexchange/47132fastsvdandpca), MATLAB Central File Exchange. Retrieved .
1.3.0.0  Uses less memory now 

1.2.0.0  Truncated 

1.1.0.0  Title change 
Inspired: EOF
Create scripts with code, output, and formatted text in a single executable document.
Antoine Klauser (view profile)
I ran the testsvd.m script and the computing times are exactly the same between the built in function and the proposed scripts.
Maybe Matlab built in functions have been optimized since the publication of this code...
Mark Wagner (view profile)
Code is well written, but it's easy to demonstrate that it works nearly an order of magnitude slower than the inbuilt MATLAB svd() function
Giuseppe Di Massa (view profile)
Xu Jun (view profile)
It has bug which generate NaN or Inf in the 'svdecon.m' function.
Lifang Yu (view profile)
I'm working on spliting an image into many small matrix, so very fast svd on small size matrix is what I need. This svd implementaion is lower than Matlab's svd when processing small size matrix. I don't try it on matrix with large size.
khthung (view profile)
Thanks, it works for me and it does not have convergence problem when I run it in linux server. Matlab builtin svd function will give me convergence error.