https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Jacobi_eigenvalue_algorithm Jacobi eigenvalue algorithm - Revision history 2025-05-29T10:59:10Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.2 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1292174474&oldid=prev OAbot: Open access bot: url-access updated in citation with #oabot. 2025-05-25T15:56:32Z <p><a href="/wiki/Wikipedia:OABOT" class="mw-redirect" title="Wikipedia:OABOT">Open access bot</a>: url-access updated in citation with #oabot.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 15:56, 25 May 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 7:</td> <td colspan="2" class="diff-lineno">Line 7:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |volume=1846 |issue=30 |year=1846 |pages=51–94</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |volume=1846 |issue=30 |year=1846 |pages=51–94</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |language=German</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |language=German</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>|doi=10.1515/crll.1846.30.51 |s2cid=199546177 }}&lt;/ref&gt; but only became widely used in the 1950s with the advent of computers.&lt;ref&gt;{{cite journal</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>|doi=10.1515/crll.1846.30.51 |s2cid=199546177<ins style="font-weight: bold; text-decoration: none;"> |url-access=subscription</ins> }}&lt;/ref&gt; but only became widely used in the 1950s with the advent of computers.&lt;ref&gt;{{cite journal</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |first1=G.H. |last1=Golub |author1-link=Gene H. Golub</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |first1=G.H. |last1=Golub |author1-link=Gene H. Golub</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |first2=H.A. |last2=van der Vorst|author2-link=Henk van der Vorst</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |first2=H.A. |last2=van der Vorst|author2-link=Henk van der Vorst</div></td> </tr> </table> OAbot https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1280156250&oldid=prev CRau080: /* Applications for real symmetric matrices */ ce (adding missing dot) 2025-03-12T21:42:20Z <p><span class="autocomment">Applications for real symmetric matrices: </span> ce (adding missing dot)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:42, 12 March 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 248:</td> <td colspan="2" class="diff-lineno">Line 248:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>;Singular values</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>;Singular values</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>:The singular values of a (square) matrix &lt;math&gt;A&lt;/math&gt; are the square roots of the (non-negative) eigenvalues of &lt;math&gt; A^T A &lt;/math&gt;. In case of a symmetric matrix &lt;math&gt;S&lt;/math&gt; we have of &lt;math&gt; S^T S = S^2 &lt;/math&gt;, hence the singular values of &lt;math&gt;S&lt;/math&gt; are the absolute values of the eigenvalues of &lt;math&gt;S&lt;/math&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>:The singular values of a (square) matrix &lt;math&gt;A&lt;/math&gt; are the square roots of the (non-negative) eigenvalues of &lt;math&gt; A^T A &lt;/math&gt;. In case of a symmetric matrix &lt;math&gt;S&lt;/math&gt; we have of &lt;math&gt; S^T S = S^2 &lt;/math&gt;, hence the singular values of &lt;math&gt;S&lt;/math&gt; are the absolute values of the eigenvalues of &lt;math&gt;S&lt;/math&gt;<ins style="font-weight: bold; text-decoration: none;">.</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>;2-norm and spectral radius</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>;2-norm and spectral radius</div></td> </tr> </table> CRau080 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1280156164&oldid=prev CRau080: /* Cost */ better (at least consistent) typesetting of one expression 2025-03-12T21:41:35Z <p><span class="autocomment">Cost: </span> better (at least consistent) typesetting of one expression</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:41, 12 March 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 84:</td> <td colspan="2" class="diff-lineno">Line 84:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Cost ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Cost ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Each Givens rotation can be done in O(<del style="font-weight: bold; text-decoration: none;">''</del>n<del style="font-weight: bold; text-decoration: none;">''</del>) steps when the pivot element ''p'' is known. However the search for ''p'' requires inspection of all ''N''&amp;nbsp;≈&amp;nbsp;{{sfrac|1|2}}&amp;nbsp;''n''&lt;sup&gt;2&lt;/sup&gt; off-diagonal elements, which means this search dominates the overall complexity and pushes the computational complexity of a sweep in the classical Jacobi algorithm to &lt;math&gt; O(n^4) &lt;/math&gt;. Competing algorithms attain &lt;math&gt; O(n^3) &lt;/math&gt; complexity for a full diagonalisation.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Each Givens rotation can be done in<ins style="font-weight: bold; text-decoration: none;"> &lt;math&gt;</ins> O(n)<ins style="font-weight: bold; text-decoration: none;"> &lt;/math&gt;</ins> steps when the pivot element ''p'' is known. However the search for ''p'' requires inspection of all ''N''&amp;nbsp;≈&amp;nbsp;{{sfrac|1|2}}&amp;nbsp;''n''&lt;sup&gt;2&lt;/sup&gt; off-diagonal elements, which means this search dominates the overall complexity and pushes the computational complexity of a sweep in the classical Jacobi algorithm to &lt;math&gt; O(n^4) &lt;/math&gt;. Competing algorithms attain &lt;math&gt; O(n^3) &lt;/math&gt; complexity for a full diagonalisation.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Caching row maximums ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Caching row maximums ===</div></td> </tr> </table> CRau080 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1277895649&oldid=prev Brightlightshine: /* growthexperiments-addlink-summary-summary:3|0|0 */ 2025-02-27T09:40:29Z <p>Link suggestions feature: 3 links added.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 09:40, 27 February 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 56:</td> <td colspan="2" class="diff-lineno">Line 56:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Convergence ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Convergence ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>If &lt;math&gt; p = S_{kl} &lt;/math&gt; is a pivot element, then by definition &lt;math&gt; |S_{ij} | \le |p| &lt;/math&gt; for &lt;math&gt; 1 \le i, j \le n, i \ne j&lt;/math&gt; . Let &lt;math&gt;\Gamma(S)^2&lt;/math&gt; denote the sum of squares of all off-diagonal entries of &lt;math&gt;S&lt;/math&gt;. Since &lt;math&gt;S&lt;/math&gt; has exactly &lt;math&gt; 2N := n(n-1) &lt;/math&gt; off-diagonal elements, we have &lt;math&gt; p^2 \le \Gamma(S )^2 \le 2 N p^2 &lt;/math&gt; or &lt;math&gt; 2 p^2 \ge \Gamma(S )^2 / N &lt;/math&gt; . Now &lt;math&gt;\Gamma(S^J)^2=\Gamma(S)^2-2p^2&lt;/math&gt;. This implies</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>If &lt;math&gt; p = S_{kl} &lt;/math&gt; is a <ins style="font-weight: bold; text-decoration: none;">[[</ins>pivot element<ins style="font-weight: bold; text-decoration: none;">]]</ins>, then by definition &lt;math&gt; |S_{ij} | \le |p| &lt;/math&gt; for &lt;math&gt; 1 \le i, j \le n, i \ne j&lt;/math&gt; . Let &lt;math&gt;\Gamma(S)^2&lt;/math&gt; denote the sum of squares of all off-diagonal entries of &lt;math&gt;S&lt;/math&gt;. Since &lt;math&gt;S&lt;/math&gt; has exactly &lt;math&gt; 2N := n(n-1) &lt;/math&gt; off-diagonal elements, we have &lt;math&gt; p^2 \le \Gamma(S )^2 \le 2 N p^2 &lt;/math&gt; or &lt;math&gt; 2 p^2 \ge \Gamma(S )^2 / N &lt;/math&gt; . Now &lt;math&gt;\Gamma(S^J)^2=\Gamma(S)^2-2p^2&lt;/math&gt;. This implies</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;math&gt; \Gamma(S^J )^2 \le (1 - 1 / N ) \Gamma (S )^2 &lt;/math&gt; or &lt;math&gt; \Gamma (S^ J ) \le (1 - 1 / N )^{1 / 2} \Gamma(S ) &lt;/math&gt;;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> &lt;math&gt; \Gamma(S^J )^2 \le (1 - 1 / N ) \Gamma (S )^2 &lt;/math&gt; or &lt;math&gt; \Gamma (S^ J ) \le (1 - 1 / N )^{1 / 2} \Gamma(S ) &lt;/math&gt;;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>that is, the sequence of Jacobi rotations converges at least linearly by a factor &lt;math&gt; (1 - 1 / N )^{1 / 2} &lt;/math&gt; to a diagonal matrix.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>that is, the sequence of Jacobi rotations converges at least linearly by a factor &lt;math&gt; (1 - 1 / N )^{1 / 2} &lt;/math&gt; to a <ins style="font-weight: bold; text-decoration: none;">[[</ins>diagonal matrix<ins style="font-weight: bold; text-decoration: none;">]]</ins>.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>A number of &lt;math&gt; N &lt;/math&gt; Jacobi rotations is called a sweep; let &lt;math&gt; S^{\sigma} &lt;/math&gt; denote the result. The previous estimate yields</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>A number of &lt;math&gt; N &lt;/math&gt; Jacobi rotations is called a sweep; let &lt;math&gt; S^{\sigma} &lt;/math&gt; denote the result. The previous estimate yields</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 94:</td> <td colspan="2" class="diff-lineno">Line 94:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last=Wilkinson |first=J.H. |authorlink=James H. Wilkinson |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300|doi=10.1007/BF01386321 }}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22|doi=10.1007/BF02165225 }}&lt;/ref&gt; just like the classical Jacobi.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last=Wilkinson |first=J.H. |authorlink=James H. Wilkinson |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300|doi=10.1007/BF01386321 }}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22|doi=10.1007/BF02165225 }}&lt;/ref&gt; just like the classical Jacobi.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for <ins style="font-weight: bold; text-decoration: none;">[[</ins>disjoint sets<ins style="font-weight: bold; text-decoration: none;">]]</ins> of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> </tr> </table> Brightlightshine https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1277307027&oldid=prev CRau080: adding authorlink fields to several ref.s 2025-02-23T22:11:19Z <p>adding authorlink fields to several ref.s</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 22:11, 23 February 2025</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 8:</td> <td colspan="2" class="diff-lineno">Line 8:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |language=German</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |language=German</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|doi=10.1515/crll.1846.30.51 |s2cid=199546177 }}&lt;/ref&gt; but only became widely used in the 1950s with the advent of computers.&lt;ref&gt;{{cite journal</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>|doi=10.1515/crll.1846.30.51 |s2cid=199546177 }}&lt;/ref&gt; but only became widely used in the 1950s with the advent of computers.&lt;ref&gt;{{cite journal</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> |first1=G.H. |last1=Golub </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> |first1=G.H. |last1=Golub <ins style="font-weight: bold; text-decoration: none;">|author1-link=Gene H. Golub</ins></div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> |first2=H.A. |last2=van der Vorst</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> |first2=H.A. |last2=<ins style="font-weight: bold; text-decoration: none;">van der Vorst|author2-link=Henk </ins>van der Vorst</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |title=Eigenvalue computation in the 20th century</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |title=Eigenvalue computation in the 20th century</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |journal=Journal of Computational and Applied Mathematics</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |journal=Journal of Computational and Applied Mathematics</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 65:</td> <td colspan="2" class="diff-lineno">Line 65:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>However the following result of [[Arnold Schönhage|Schönhage]]&lt;ref&gt;{{cite journal</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>However the following result of [[Arnold Schönhage|Schönhage]]&lt;ref&gt;{{cite journal</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> |last=Schönhage |first=A.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> |last=Schönhage |first=A.<ins style="font-weight: bold; text-decoration: none;">|authorlink=Arnold Schönhage</ins></div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |title=Zur quadratischen Konvergenz des Jacobi-Verfahrens</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |title=Zur quadratischen Konvergenz des Jacobi-Verfahrens</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |journal=Numerische Mathematik</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |journal=Numerische Mathematik</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Line 92:</td> <td colspan="2" class="diff-lineno">Line 92:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Cyclic and parallel Jacobi ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Cyclic and parallel Jacobi ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |<del style="font-weight: bold; text-decoration: none;">last1</del>=Wilkinson |<del style="font-weight: bold; text-decoration: none;">first1</del>=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300|doi=10.1007/BF01386321 }}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22|doi=10.1007/BF02165225 }}&lt;/ref&gt; just like the classical Jacobi.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |<ins style="font-weight: bold; text-decoration: none;">last</ins>=Wilkinson |<ins style="font-weight: bold; text-decoration: none;">first</ins>=J.H.<ins style="font-weight: bold; text-decoration: none;"> |authorlink=James H. Wilkinson</ins> |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300|doi=10.1007/BF01386321 }}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22|doi=10.1007/BF02165225 }}&lt;/ref&gt; just like the classical Jacobi.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> </table> CRau080 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1265112941&oldid=prev Cornmazes at 04:51, 25 December 2024 2024-12-25T04:51:25Z <p></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 04:51, 25 December 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 1:</td> <td colspan="2" class="diff-lineno">Line 1:</td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>{{short description|Numerical linear algebra algorithm}}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[numerical linear algebra]], the '''Jacobi eigenvalue algorithm''' is an [[iterative method]] for the calculation of the [[eigenvalue]]s and [[eigenvector]]s of a [[real number|real]] [[symmetric matrix]] (a process known as [[Matrix diagonalization#Diagonalization|diagonalization]]). It is named after [[Carl Gustav Jacob Jacobi]], who first proposed the method in 1846,&lt;ref&gt;{{cite journal</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>In [[numerical linear algebra]], the '''Jacobi eigenvalue algorithm''' is an [[iterative method]] for the calculation of the [[eigenvalue]]s and [[eigenvector]]s of a [[real number|real]] [[symmetric matrix]] (a process known as [[Matrix diagonalization#Diagonalization|diagonalization]]). It is named after [[Carl Gustav Jacob Jacobi]], who first proposed the method in 1846,&lt;ref&gt;{{cite journal</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |last=Jacobi |first=C.G.J. |authorlink=Carl Gustav Jacob Jacobi</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> |last=Jacobi |first=C.G.J. |authorlink=Carl Gustav Jacob Jacobi</div></td> </tr> </table> Cornmazes https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1264241022&oldid=prev Citation bot: Added doi. | Use this bot. Report bugs. | Suggested by Dominic3203 | Category:Numerical linear algebra | #UCB_Category 14/123 2024-12-21T05:34:22Z <p>Added doi. | <a href="/wiki/Wikipedia:UCB" class="mw-redirect" title="Wikipedia:UCB">Use this bot</a>. <a href="/wiki/Wikipedia:DBUG" class="mw-redirect" title="Wikipedia:DBUG">Report bugs</a>. | Suggested by Dominic3203 | <a href="/wiki/Category:Numerical_linear_algebra" title="Category:Numerical linear algebra">Category:Numerical linear algebra</a> | #UCB_Category 14/123</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 05:34, 21 December 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 91:</td> <td colspan="2" class="diff-lineno">Line 91:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Cyclic and parallel Jacobi ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Cyclic and parallel Jacobi ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22}}&lt;/ref&gt; just like the classical Jacobi.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300<ins style="font-weight: bold; text-decoration: none;">|doi=10.1007/BF01386321 </ins>}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22<ins style="font-weight: bold; text-decoration: none;">|doi=10.1007/BF02165225 </ins>}}&lt;/ref&gt; just like the classical Jacobi.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> </table> Citation bot https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1261588551&oldid=prev 90.144.129.34: /* Cyclic and parallel Jacobi */ Removed duplicate word. 2024-12-06T22:06:25Z <p><span class="autocomment">Cyclic and parallel Jacobi: </span> Removed duplicate word.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 22:06, 6 December 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 93:</td> <td colspan="2" class="diff-lineno">Line 93:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22}}&lt;/ref&gt; just like the classical Jacobi.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22}}&lt;/ref&gt; just like the classical Jacobi.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets<del style="font-weight: bold; text-decoration: none;"> of</del> of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> </tr> </table> 90.144.129.34 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1261587845&oldid=prev 90.144.129.34: /* Cyclic and parallel Jacobi */ Removed duplicated text. 2024-12-06T22:01:57Z <p><span class="autocomment">Cyclic and parallel Jacobi: </span> Removed duplicated text.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 22:01, 6 December 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 94:</td> <td colspan="2" class="diff-lineno">Line 94:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then from &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; follows &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The particular parallelisation of Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that both can be applied in parallel.</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Partitioning the set of index pairs of a sweep into classes that are pairwise disjoint is equivalent to partitioning the edge set of a [[complete graph]] into [[Matching (graph theory)|matching]]s, which is the same thing as [[edge colouring]] it; each colour class then becomes a round within the sweep. The minimal number of rounds is the [[chromatic index]] of the complete graph, and equals &lt;math&gt;n&lt;/math&gt; for odd &lt;math&gt;n&lt;/math&gt; but &lt;math&gt;n-1&lt;/math&gt; for even &lt;math&gt;n&lt;/math&gt;. A simple rule for odd &lt;math&gt;n&lt;/math&gt; is to handle the pairs &lt;math&gt; \{i_1,j_1\} &lt;/math&gt; and &lt;math&gt; \{i_2,j_2\} &lt;/math&gt; in the same round if &lt;math&gt; i_1+j_1 \equiv i_2+j_2 \textstyle\pmod{n} &lt;/math&gt;. For even &lt;math&gt;n&lt;/math&gt; one may create &lt;math&gt; n-1 &lt;/math&gt; rounds &lt;math&gt; k = 0, 1, \dotsc, n-2 &lt;/math&gt; where a pair &lt;math&gt; \{i,j\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i &lt; j \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; (i+j) \bmod (n-1) &lt;/math&gt; and additionally a pair &lt;math&gt; \{i,n\} &lt;/math&gt; for &lt;math&gt; 1 \leqslant i \leqslant n-1 &lt;/math&gt; goes into round &lt;math&gt; 2i \bmod (n-1) &lt;/math&gt;. This brings the time complexity of a sweep down from &lt;math&gt; O(n^3) &lt;/math&gt; to &lt;math&gt; O(n^2) &lt;/math&gt;, if &lt;math&gt; n/2 &lt;/math&gt; processors are available.</div></td> </tr> </table> 90.144.129.34 https://en.wikipedia.org/w/index.php?title=Jacobi_eigenvalue_algorithm&diff=1261587194&oldid=prev 90.144.129.34: /* Cyclic and parallel Jacobi */ Rewording. 2024-12-06T21:58:23Z <p><span class="autocomment">Cyclic and parallel Jacobi: </span> Rewording.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:58, 6 December 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 93:</td> <td colspan="2" class="diff-lineno">Line 93:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22}}&lt;/ref&gt; just like the classical Jacobi.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>An alternative approach is to forego the search entirely, and simply have each sweep pivot every off-diagonal element once, in some predetermined order. It has been shown that this ''cyclic Jacobi'' attains quadratic convergence,&lt;ref&gt;{{cite journal |last1=Wilkinson |first1=J.H. |title=Note on the Quadratic Convergence of the Cyclic Jacobi Process |journal=Numerische Mathematik |date=1962 |volume=6 |pages=296–300}}&lt;/ref&gt;&lt;ref&gt;{{cite journal |last1=van Kempen |first1=H.P.M. |title=On Quadratic Convergence of the Special Cyclic Jacobi Method |journal=Numerische Mathematik |date=1966 |volume=9 |pages=19–22}}&lt;/ref&gt; just like the classical Jacobi.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; <del style="font-weight: bold; text-decoration: none;">implies</del> &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The opportunity for parallelisation that is particular to Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of of indices commute, so that several can be applied in parallel. Concretely, if &lt;math&gt; G_1 &lt;/math&gt; pivots between indices &lt;math&gt; i_1, j_1 &lt;/math&gt; and &lt;math&gt; G_2 &lt;/math&gt; pivots between indices &lt;math&gt; i_2, j_2 &lt;/math&gt;, then<ins style="font-weight: bold; text-decoration: none;"> from</ins> &lt;math&gt; \{i_1,j_1\} \cap \{i_2,j_2\} = \varnothing &lt;/math&gt; <ins style="font-weight: bold; text-decoration: none;">follows</ins> &lt;math&gt; G_1 G_2 = G_2 G_1 &lt;/math&gt; because in computing &lt;math&gt; G_1 G_2 A &lt;/math&gt; or &lt;math&gt; G_2 G_1 A &lt;/math&gt; the &lt;math&gt; G_1 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_1, j_1 &lt;/math&gt; and the &lt;math&gt; G_2 &lt;/math&gt; rotation only needs to access rows &lt;math&gt; i_2, j_2 &lt;/math&gt;. Two processors can perform both rotations in parallel, because no matrix element is accessed for both.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The particular parallelisation of Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that both can be applied in parallel.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The particular parallelisation of Jacobi is based on combining cyclic Jacobi with the observation that Givens rotations for disjoint sets of indices commute, so that both can be applied in parallel.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> 90.144.129.34