Let $t$ be the number of days (time periods), and let $p$ be the number of assets. You have $t=1000$ and $p=10000$. For any given dataset, it is assumed that the sample covariance matrix $\mathbf{C}$ accurately represents the population covariance matrix $\boldsymbol{\Sigma}$, however, as $p \rightarrow t$ or if $p > t$ (as in your case), the eigenvalues become unreliable and can also take on a value of zero, resulting in lack of positive definiteness. With high-dimensional datasets becoming more popular, there is greater potential for the number of dimensions to approach the sample size ($p \rightarrow t$), leading to biased eigenvalues of $\mathbf{C}$ and $\mathbf{R}$. Certainly, there will be $p-t$ zero eigenvalues whenever $p>t$ and one zero eigenvalue whenever $p=t$.
You can use singular value decomposition (SVD), which will extract the singular values (eigenvalues) along with the remaining singular values. If $\mathbf{X}$ is your return matrix ($t$ rows, $p$ columns) then use the R syntax below to look at the eigenvalues ("eigvals") from eigendecomposition versus the singular values ("s") from SVD:
R=cor(X);
p <- ncol(X);
t <- nrow(X);
lambdae <- eigen(R);
eigvals <- as.vector(lambdae$values);
E<-as.matrix(lambdae$vectors);
s<-svd(R)
s$d
Last, if you are going to do anything with your data, you might perform dimension reduction by using the eigenvectors to represent your data for dimensions that have non-zero eigenvalues, as they are uncorrelated. You could also use PCA after extracting the singular-values, and ignore the zero eigenvalues. The loadings with the principal components will represent correlation between the original 10000 assets and the reduced orthogonal (non-correlated) dimensions.
I couldn't agree more with what @John said. Keep in mind that parametrizing the curves and modelling the parameters will effectively result in a dimension reduction. If you wanted to use your cholesky decomposition to simulate random paths for example, one realization gives you all the changed curves. Using those, you can reprice ALL your thousands of futures contracts (from your curves) and thus get the price changes. There can be other issues though: You will see them when you get there ;-)
– vanguard2k Dec 06 '13 at 07:16