Standard algorithm for symmetric tridiagonal matrix eigendecomposition?











up vote
3
down vote

favorite












Hi I am trying to generate an arbitrary Gauss quadrature rule by using the Golub-Welsh algorithm.



I need to code this on C++ for my personal project. This algorithm involves the eigendecomposition of a matrix in which the only non-zero elements are the subdiagonal and superdiagonal. Here, $n$ could go up to $512$.



To illustrate in Matlab code:



n = 16;  
beta = .5./sqrt(1-(2*(1:n-1)).-2);
T = diag(beta,1) + diag(beta,-1);
[V,D] = eig(T);


I want to implement the eigenvalue decomposition in C++ and not use Matlab routines for this since I want to parallelize it. What is the best way to find the eigendecomposition of this type of matrix?
Is bisection method acceptable for my use case? How about divide and conquer or QR method or Lanczos?



(I was more inclined towards Lanczos since it seems that it is sparse friendly.)










share|cite|improve this question




















  • 1




    1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
    – Algebraic Pavel
    Apr 5 '14 at 3:02










  • I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
    – aatish
    Apr 5 '14 at 22:35















up vote
3
down vote

favorite












Hi I am trying to generate an arbitrary Gauss quadrature rule by using the Golub-Welsh algorithm.



I need to code this on C++ for my personal project. This algorithm involves the eigendecomposition of a matrix in which the only non-zero elements are the subdiagonal and superdiagonal. Here, $n$ could go up to $512$.



To illustrate in Matlab code:



n = 16;  
beta = .5./sqrt(1-(2*(1:n-1)).-2);
T = diag(beta,1) + diag(beta,-1);
[V,D] = eig(T);


I want to implement the eigenvalue decomposition in C++ and not use Matlab routines for this since I want to parallelize it. What is the best way to find the eigendecomposition of this type of matrix?
Is bisection method acceptable for my use case? How about divide and conquer or QR method or Lanczos?



(I was more inclined towards Lanczos since it seems that it is sparse friendly.)










share|cite|improve this question




















  • 1




    1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
    – Algebraic Pavel
    Apr 5 '14 at 3:02










  • I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
    – aatish
    Apr 5 '14 at 22:35













up vote
3
down vote

favorite









up vote
3
down vote

favorite











Hi I am trying to generate an arbitrary Gauss quadrature rule by using the Golub-Welsh algorithm.



I need to code this on C++ for my personal project. This algorithm involves the eigendecomposition of a matrix in which the only non-zero elements are the subdiagonal and superdiagonal. Here, $n$ could go up to $512$.



To illustrate in Matlab code:



n = 16;  
beta = .5./sqrt(1-(2*(1:n-1)).-2);
T = diag(beta,1) + diag(beta,-1);
[V,D] = eig(T);


I want to implement the eigenvalue decomposition in C++ and not use Matlab routines for this since I want to parallelize it. What is the best way to find the eigendecomposition of this type of matrix?
Is bisection method acceptable for my use case? How about divide and conquer or QR method or Lanczos?



(I was more inclined towards Lanczos since it seems that it is sparse friendly.)










share|cite|improve this question















Hi I am trying to generate an arbitrary Gauss quadrature rule by using the Golub-Welsh algorithm.



I need to code this on C++ for my personal project. This algorithm involves the eigendecomposition of a matrix in which the only non-zero elements are the subdiagonal and superdiagonal. Here, $n$ could go up to $512$.



To illustrate in Matlab code:



n = 16;  
beta = .5./sqrt(1-(2*(1:n-1)).-2);
T = diag(beta,1) + diag(beta,-1);
[V,D] = eig(T);


I want to implement the eigenvalue decomposition in C++ and not use Matlab routines for this since I want to parallelize it. What is the best way to find the eigendecomposition of this type of matrix?
Is bisection method acceptable for my use case? How about divide and conquer or QR method or Lanczos?



(I was more inclined towards Lanczos since it seems that it is sparse friendly.)







linear-algebra numerical-methods eigenvalues-eigenvectors numerical-linear-algebra programming






share|cite|improve this question















share|cite|improve this question













share|cite|improve this question




share|cite|improve this question








edited Nov 24 at 5:46









Rócherz

2,6612721




2,6612721










asked Apr 4 '14 at 19:13









aatish

1162




1162








  • 1




    1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
    – Algebraic Pavel
    Apr 5 '14 at 3:02










  • I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
    – aatish
    Apr 5 '14 at 22:35














  • 1




    1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
    – Algebraic Pavel
    Apr 5 '14 at 3:02










  • I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
    – aatish
    Apr 5 '14 at 22:35








1




1




1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
– Algebraic Pavel
Apr 5 '14 at 3:02




1) Using Lanczos does not make sense since your matrix is already tridiagonal. 2) You can use a convenient routine from LAPACK, there are a few for eigenvalues of tridiagonal matrices.
– Algebraic Pavel
Apr 5 '14 at 3:02












I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
– aatish
Apr 5 '14 at 22:35




I came across MRRR technique which is a recently developed algorithm meant for tridiagonal matrices. Apparently, it has the best time complexity for eigenvalue calculation. I am trying to grasp the material by reading Dhillon's paper.
– aatish
Apr 5 '14 at 22:35















active

oldest

votes











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "69"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f739917%2fstandard-algorithm-for-symmetric-tridiagonal-matrix-eigendecomposition%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Mathematics Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f739917%2fstandard-algorithm-for-symmetric-tridiagonal-matrix-eigendecomposition%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Sphinx de Gizeh

Dijon

Get global maximum slope