{"id":203,"date":"2020-07-18T23:43:40","date_gmt":"2020-07-18T23:43:40","guid":{"rendered":"http:\/\/www.ethanepperly.com\/?p=203"},"modified":"2020-07-26T22:14:58","modified_gmt":"2020-07-26T22:14:58","slug":"big-ideas-in-applied-math-sparse-matrices","status":"publish","type":"post","link":"https:\/\/www.ethanepperly.com\/index.php\/2020\/07\/18\/big-ideas-in-applied-math-sparse-matrices\/","title":{"rendered":"Big Ideas in Applied Math: Sparse Matrices"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>Sparse matrices are an indispensable tool for anyone in computational science. I expect there are a very large number of simulation programs written in scientific research across the country which could be faster by ten to a hundred fold at least just by using sparse matrices! In this post, we&#8217;ll give a brief overview what a sparse matrix is and how we can use them to solve problems fast.<\/p>\n\n\n\n<p>A matrix is <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_matrix\">sparse<\/a><\/strong> if most of its entries are zero. There is no precise threshold for what &#8220;most&#8221; means; <a href=\"http:\/\/www.kolda.net\/post\/sparse-versus-scarce\/\">Kolda suggests<\/a> that a matrix have at least 90% of its entries be zero for it to be considered sparse. The number of nonzero entries in a sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is denoted by <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d917f99c5659e7cafe02f704b197cee6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"54\" style=\"vertical-align: -5px;\"\/>. A matrix that is not sparse is said to be <strong>dense<\/strong>.<\/p>\n\n\n\n<p>Sparse matrices are truly everywhere. They occur in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Numerical_methods_for_partial_differential_equations\">finite difference, finite element, and finite volume discretizations of partial differential equations<\/a>. They occur in <a href=\"https:\/\/ieeexplore.ieee.org\/document\/4160833\">power systems<\/a>. They occur in <a href=\"https:\/\/ieeexplore.ieee.org\/document\/1461442\">signal processing<\/a>. They occur in <a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0925231208000611\">social networks<\/a>. They occur <a href=\"http:\/\/scg.ece.ucsb.edu\/publications\/papers\/Chandrasekaran_2006_SIAM_HSSsolver.pdf\">in intermediate stages in computations with dense rank-structured matrices<\/a>. They occur in <a href=\"https:\/\/www.pnas.org\/content\/106\/3\/697.short\">data analysis<\/a> (along with their <a href=\"https:\/\/epubs.siam.org\/doi\/abs\/10.1137\/060665336?casa_token=PD3N0Aw0u4MAAAAA:6lAxCOmFyhvblmPPIJmHd2ELcZ4OHu9L0seFgD_1Dz-Bl_6wJQ5cwSyJvwAWBAYKFpkWoy7E38Q\">higher-order tensor cousins<\/a>).<\/p>\n\n\n\n<p>Why are sparse matrices so common? In a word, locality. If the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2b80808dc4cfd99921c6014e9b28354b_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"14\" style=\"vertical-align: -4px;\"\/>th entry <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-6f6d63abb30943ba87e95356477795a1_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#123;&#105;&#106;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"20\" style=\"vertical-align: -6px;\"\/> of a matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is nonzero, then this means that row <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4015d3bcae440238eb2e7a73e66bae43_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"6\" style=\"vertical-align: 0px;\"\/> and column <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-fe087f8cefab0bcb3270609914ada26c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"9\" style=\"vertical-align: -4px;\"\/> are related in some way to each other according to the the matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>. In many situations, a &#8220;thing&#8221; is only related to a handful of other &#8220;things&#8221;; in heat diffusion, for example, the temperature at a point may only depend on the temperatures of nearby points. Thus, if such a locality assumption holds, every row will only have a small number of nonzero entries and the matrix overall will be sparse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Storing and Multiplying Sparse Matrices<\/h2>\n\n\n\n<p>A sparse matrix can be stored efficiently by only storing its nonzero entries, along with the row and column in which these entries occur. By doing this, a sparse matrix can be stored in <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f5a9607a215c540c89da0a2cd91faa39_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"81\" style=\"vertical-align: -5px;\"\/> space rather than the standard <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3a183d1e7c22c983ac27554abdb5f510_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#50;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> for an <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-1f1ba6baee657f44c06c9a02c1d2fe7d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#78;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#78;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"54\" style=\"vertical-align: 0px;\"\/> matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>.<sup class=\"modern-footnotes-footnote \" data-mfn=\"1\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-1\">1<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-1\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"1\">Here, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-71ee9c94c3d9c97c0db2f438fa86b686_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#99;&#100;&#111;&#116;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"32\" style=\"vertical-align: -5px;\"\/> refers to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Big_O_notation\">big-O notation<\/a>.<\/span> For the efficiency of many algorithms, it will be very beneficial to store the entries row-by-row or column-by-column using <a href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)\">compressed sparse row and column (CSR and CSC) formats<\/a>; most established scientific programming software environments support sparse matrices stored in one or both of these formats. For efficiency, it is best to enumerate all of the nonzero entries for the entire sparse matrix and then form the sparse matrix using a compressed format all at once. Adding additional entries one at a time to a sparse matrix in a compressed format requires reshuffling the entire data structure for each new nonzero entry.<\/p>\n\n\n\n<p>There exist straightforward algorithms to multiply a sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> stored in a compressed format with a vector <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b312d649591164b7149ed0756f694a76_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"8\" width=\"10\" style=\"vertical-align: 0px;\"\/> to compute the product <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-0401c315c5668da88328f5bb233c8a19_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#98;&#32;&#61;&#32;&#65;&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"54\" style=\"vertical-align: 0px;\"\/>. Initialize the vector <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3ab6f6c64ce17f786a81f8cc8fdcec90_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"8\" style=\"vertical-align: 0px;\"\/> to zero and iterate over the nonzero entries <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-6f6d63abb30943ba87e95356477795a1_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#123;&#105;&#106;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"20\" style=\"vertical-align: -6px;\"\/> of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>, each time adding <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-6556e13ed26562500497ecff4b5c55d2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#123;&#105;&#106;&#125;&#120;&#95;&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"37\" style=\"vertical-align: -6px;\"\/> to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-1cb360b29aad3a73e5b822eaf397e286_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#98;&#95;&#105;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"13\" style=\"vertical-align: -3px;\"\/>. It is easy to see this algorithm runs in <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f5a9607a215c540c89da0a2cd91faa39_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"81\" style=\"vertical-align: -5px;\"\/> time.<sup class=\"modern-footnotes-footnote \" data-mfn=\"2\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-2\">2<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-2\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"2\">More precisely, this algorithm takes <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3b1e916977ca9edc3d95e12757eb9a7e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#43;&#32;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"119\" style=\"vertical-align: -5px;\"\/> time since it requires <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9f813a6a06077d7003933310e3982e2d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"43\" style=\"vertical-align: -5px;\"\/> operations to initialize the vector <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3ab6f6c64ce17f786a81f8cc8fdcec90_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"8\" style=\"vertical-align: 0px;\"\/> even if <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> has no nonzero entries. We shall ignore this subtlety in the remainder of this article and assume that <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dcd22abc1c9addcdd9d513d80025ed37_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"120\" style=\"vertical-align: -5px;\"\/>, which is true of most sparse matrices occurring in practice<\/span> The fact that sparse matrix-vector products can be computed quickly makes so-called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Krylov_subspace\">Krylov subspace iterative methods<\/a> popular for solving linear algebraic problems involving sparse matrices, as these techniques only interact with the matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> by computing matrix-vector products <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9e0b6318001a5663c94333fce150f372_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#120;&#32;&#92;&#109;&#97;&#112;&#115;&#116;&#111;&#32;&#65;&#120;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"61\" style=\"vertical-align: -1px;\"\/> (or matrix-tranpose-vector products <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-25bccb50f03369a616350965c245936e_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#121;&#32;&#92;&#109;&#97;&#112;&#115;&#116;&#111;&#32;&#65;&#94;&#92;&#116;&#111;&#112;&#32;&#121;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"71\" style=\"vertical-align: -4px;\"\/>).<\/p>\n\n\n\n<p>Lest the reader think that every operation with a sparse matrix is necessarily fast, the product of two sparse matrices <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> and <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-06d2c1a5a171b6d7d9c5df87d123c5a4_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#66;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> need not be sparse and the time complexity need not be <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9040c6040d406a48568f3337461ab437_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#43;&#32;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#66;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"159\" style=\"vertical-align: -5px;\"\/>. A counterexample is<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 96px;\"><span class=\"ql-right-eqno\"> (1) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-95e3387d01c4b71586a3fd739506c707_l3.png\" height=\"96\" width=\"261\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#65;&#32;&#61;&#32;&#66;&#94;&#92;&#116;&#111;&#112;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#97;&#95;&#49;&#32;&#38;&#32;&#48;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#48;&#32;&#92;&#92; &#97;&#95;&#50;&#32;&#38;&#32;&#48;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#48;&#32;&#92;&#92; &#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#48;&#32;&#92;&#92; &#97;&#95;&#110;&#32;&#38;&#32;&#48;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#48; &#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#92;&#105;&#110;&#32;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#82;&#125;&#94;&#110; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e5a85d180aecb4ef6a4ef44f6bf39550_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#49;&#44;&#92;&#108;&#100;&#111;&#116;&#115;&#44;&#97;&#95;&#110;&#32;&#92;&#110;&#101;&#32;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"108\" style=\"vertical-align: -4px;\"\/>. We have that <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-212c1ae94f30538a04e43cdc896ccde9_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#61;&#32;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#66;&#41;&#32;&#61;&#32;&#78;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"174\" style=\"vertical-align: -5px;\"\/> but<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 97px;\"><span class=\"ql-right-eqno\"> (2) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-442cd2975efc0a1cfb9ff770b205c7c3_l3.png\" height=\"97\" width=\"260\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#65;&#66;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#97;&#95;&#49;&#94;&#50;&#32;&#38;&#32;&#97;&#95;&#49;&#32;&#97;&#95;&#50;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#97;&#95;&#49;&#97;&#95;&#78;&#32;&#92;&#92; &#97;&#95;&#50;&#97;&#95;&#49;&#32;&#38;&#32;&#97;&#95;&#50;&#94;&#50;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#97;&#95;&#50;&#97;&#95;&#78;&#32;&#92;&#92; &#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92; &#97;&#95;&#78;&#97;&#95;&#49;&#32;&#38;&#32;&#97;&#95;&#78;&#97;&#95;&#50;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#97;&#95;&#78;&#94;&#50; &#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>which has <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-abe026bbe4f78a0aeffae980897df8a7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#66;&#41;&#32;&#61;&#32;&#78;&#94;&#50;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"116\" style=\"vertical-align: -5px;\"\/> nonzero elements and requires <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3a183d1e7c22c983ac27554abdb5f510_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#50;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> operations to compute. However, if one does the multiplication in the other order, one has <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-5908357da73bc51cc778456f924bf473_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#66;&#65;&#41;&#32;&#61;&#32;&#49;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"101\" style=\"vertical-align: -5px;\"\/> and the multiplication can be done in <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9f813a6a06077d7003933310e3982e2d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"43\" style=\"vertical-align: -5px;\"\/> operations. Thus, some sparse matrices can be multiplied fast and others can&#8217;t. This phenomena of different speeds for different sparse matrices is very much also true for solving sparse linear systems of equations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Solving Sparse Linear Systems<\/h2>\n\n\n\n<p>The question of how to solve a sparse system of linear equations <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> where <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is sparse is a very deep problems with fascinating connections to  graph theory. For this article, we shall concern ourselves with so-called <a href=\"https:\/\/epubs.siam.org\/doi\/book\/10.1137\/1.9780898718881\">sparse direct methods<\/a>, which solve <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> by means of computing a factorization of the sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>. These methods produce an exact solution to the system <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> if all computations are performed exactly and are generally considered more robust than inexact and iterative methods. As we shall see, there are fundamental limits on the speed of certain sparse direct methods, which make iterative methods very appealing for some problems.<\/p>\n\n\n\n<p>Note from the outset that our presentation will be on illustrating the big ideas rather than presenting the careful step-by-step details needed to actually code a sparse direct method yourself. An excellent reference for the latter is <a href=\"http:\/\/faculty.cse.tamu.edu\/davis\/welcome.html\">Tim Davis&#8217;<\/a> wonderful book <em><a href=\"https:\/\/epubs.siam.org\/doi\/book\/10.1137\/1.9780898718881\">Direct Methods for Sparse Linear Systems<\/a><\/em>.<\/p>\n\n\n\n<p>Let us begin by reviewing how <a href=\"https:\/\/en.wikipedia.org\/wiki\/LU_decomposition\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization<\/a> works for general matrices. Suppose that the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d324ea61edce693bff957ca1e663880c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#49;&#44;&#49;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> entry of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is nonzero. Then, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization proceeds by subtracting scaled multiples of the first row from the other rows to zero out the first column. If one keeps track of these scaling, then one can write this process as a matrix factorization, which we may demonstrate pictorially as<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 120px;\"><span class=\"ql-right-eqno\"> (3) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-c0837f8c1427002db75b006264fb0946_l3.png\" height=\"120\" width=\"399\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#65;&#125;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#49;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#46; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>Here, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-6c72fac93e86c41364c0c7930f52ce55_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#42;\" title=\"Rendered by QuickLaTeX.com\" height=\"9\" width=\"7\" style=\"vertical-align: 0px;\"\/>&#8216;s denote nonzero entries and blanks denote zero entries. We then repeat the process on the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d84855ec2e21604cdae7db63f2dde361_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#78;&#45;&#49;&#41;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#40;&#78;&#45;&#49;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"141\" style=\"vertical-align: -5px;\"\/> submatrix in the bottom right (the so-called <a href=\"http:\/\/www.ethanepperly.com\/index.php\/2020\/07\/09\/big-ideas-in-applied-math-the-schur-complement\/\">Schur complement<\/a>). Continuing in this way, we eventually end up with a complete <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 120px;\"><span class=\"ql-right-eqno\"> (4) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-50330726b7371137ace741928daa5cf1_l3.png\" height=\"120\" width=\"402\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#65;&#125;&#32;&#61;&#32;&#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#42;&#32;&#38;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#49;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#76;&#125;&#32;&#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#42;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#85;&#125;&#46; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>In the case that <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is symmetric positive definite (SPD), one has that <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-cdab2a81d9a5fd3d0e0fb959a4db6670_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#85;&#32;&#61;&#32;&#68;&#76;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"74\" style=\"vertical-align: 0px;\"\/> for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-ab69a4a7716bbf890e5f604a06fd1f13_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#68;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"15\" style=\"vertical-align: 0px;\"\/> a diagonal matrix consisting of the entries on <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-c7480669f4fca8a251671d27137d0b09_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"13\" style=\"vertical-align: 0px;\"\/>. This factorization <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-64122cff45c363324bf625ba43fdac7c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#61;&#32;&#76;&#68;&#76;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"86\" style=\"vertical-align: 0px;\"\/> is a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cholesky_decomposition\">Cholesky factorization<\/a> of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>.<sup class=\"modern-footnotes-footnote \" data-mfn=\"3\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-3\">3<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-3\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"3\">Often, the Cholesky factorization is written as <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-86f2c94462400b6fdecf5b67616bc635_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#61;&#32;&#84;&#84;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"73\" style=\"vertical-align: 0px;\"\/> for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-46900c440ab110df50814ca6f705aebc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#84;&#61;&#76;&#68;&#94;&#123;&#49;&#47;&#50;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"85\" style=\"vertical-align: 0px;\"\/> or <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-810572b90603354f81abde63246f1784_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#32;&#61;&#32;&#82;&#82;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"74\" style=\"vertical-align: 0px;\"\/> for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7ffbbdd7fed3991cc21c05c4f9cc2f90_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#82;&#32;&#61;&#32;&#68;&#94;&#123;&#45;&#49;&#47;&#50;&#125;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"99\" style=\"vertical-align: 0px;\"\/>. These different forms all contain the same basic information, so we shall stick with the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4e55ebdfa235cc796b5c78749f87c3e0_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#68;&#76;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"49\" style=\"vertical-align: 0px;\"\/> formulation in this post.<\/span> For general non-SPD matrices, one needs to incorporate <a href=\"https:\/\/web.mit.edu\/10.001\/Web\/Course_Notes\/GaussElimPivoting.html\">partial pivoting<\/a> for Gaussian elimination to produce accurate results.<sup class=\"modern-footnotes-footnote \" data-mfn=\"4\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-4\">4<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-4\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"4\">See the excellent monograph <em><a href=\"https:\/\/epubs.siam.org\/doi\/book\/10.1137\/1.9780898718027?mobileUi=0\">Accuracy and Stability of Numerical Algorithms<\/a><\/em> for a comprehensive treatment of this topic.<\/span>\n\n\n\n<p>Let&#8217;s try the same procedure for a sparse matrix. Consider a sparse matrix with the following sparsity pattern:<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 106px;\"><span class=\"ql-right-eqno\"> (5) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-ae813416d15a8296a40e98a6ba7c78f8_l3.png\" height=\"106\" width=\"177\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#65;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#46; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>When we eliminate the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d324ea61edce693bff957ca1e663880c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#49;&#44;&#49;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> entry, we get the following factorization:<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 132px;\"><span class=\"ql-right-eqno\"> (6) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e30b33dac9ceda2c35a706ec1f58a63b_l3.png\" height=\"132\" width=\"420\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#65;&#125;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#49;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#38;&#32;&#49;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>Note that the Schur complement has new additional nonzero entries (marked with a <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-93d64531157837b6fc8dc3ab60e075a6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#98;&#117;&#108;&#108;&#101;&#116;\" title=\"Rendered by QuickLaTeX.com\" height=\"7\" width=\"8\" style=\"vertical-align: 1px;\"\/>) not in the original sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>. The Schur complement of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is denser than <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> was; there are new <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Sparse_matrix#Reducing_fill-in\">fill-in<\/a><\/em> entries. The worst-case scenario for fill-in is the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Arrowhead_matrix\">arrowhead matrix<\/a>:<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 141px;\"><span class=\"ql-right-eqno\"> (7) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4068f21b02cf971d029d138bcef8d776_l3.png\" height=\"141\" width=\"461\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#65;&#125;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#49;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#92;&#98;&#117;&#108;&#108;&#101;&#116;&#32;&#38;&#32;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>After one step of Gaussian elimination, we went from a matrix with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9f813a6a06077d7003933310e3982e2d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"43\" style=\"vertical-align: -5px;\"\/> nonzeros to a fully dense Schur complement! However, the arrowhead matrix also demonstrates a promising strategy. Simply construct a permutation matrix which reorders the first entry to be the last<sup class=\"modern-footnotes-footnote \" data-mfn=\"5\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-5\">5<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-5\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"5\">For instance, the circular shift permutation <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-629ed640047fe8270dad05c9d0a6bfaa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#92;&#92;&#32;&#49;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"117\" width=\"176\" style=\"vertical-align: -54px;\"\/>.<\/span> and then perform Gaussian elimination on the symmetrically permuted matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b41585622f208eaa284acd6c78289862_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"51\" style=\"vertical-align: 0px;\"\/> instead. In fact, the entire <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization can be computed without fill-in:<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 143px;\"><span class=\"ql-right-eqno\"> (8) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d0499956d7c2714d660a8f98f9f0cb5b_l3.png\" height=\"143\" width=\"474\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#92;&#117;&#110;&#100;&#101;&#114;&#98;&#114;&#97;&#99;&#101;&#123;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#125;&#95;&#123;&#61;&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;&#125;&#32;&#61;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#38;&#32;&#49;&#38;&#32;&#38;&#32;&#38;&#32;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#49;&#32;&#38;&#32;&#38;&#32;&#92;&#92;&#32;&#32;&#38;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#92;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#49;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#32;&#42;&#32;&#38;&#32;&#38;&#32;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#38;&#32;&#42;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#92;&#32;&#38;&#32;&#32;&#38;&#32;&#38;&#32;&#92;&#100;&#100;&#111;&#116;&#115;&#32;&#38;&#32;&#92;&#118;&#100;&#111;&#116;&#115;&#32;&#92;&#92;&#32;&#38;&#32;&#32;&#38;&#32;&#32;&#38;&#32;&#32;&#38;&#32;&#42;&#32;&#92;&#101;&#110;&#100;&#123;&#98;&#109;&#97;&#116;&#114;&#105;&#120;&#125;&#46; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>This example shows the tremendous importance of reordering of the rows and columns when computing a sparse <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Best Reordering<\/h2>\n\n\n\n<p>As mentioned above, when computing an <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization of a dense matrix, one generally has to reorder the rows (and\/or columns) of the matrix to compute the solution accurately. Thus, when computing the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization of a sparse matrix, one has to balance the need to reorder for accuracy and to reorder to reduce fill-in. For these reasons, for the remainder of this post, we shall focus on computing <em>Cholesky factorizations<\/em> of SPD sparse matrices, where reordering for accuracy is not necessary.<sup class=\"modern-footnotes-footnote \" data-mfn=\"6\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-6\">6<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-6\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"6\">For ill-conditioned and positive <em>semi-definite<\/em> matrices, one may want to reorder a Cholesky factorization so the result is rank-revealing. This review article has a good discussion of <a href=\"https:\/\/www.maths.manchester.ac.uk\/~higham\/papers\/high09c.pdf\">pivoted Cholesky factorization<\/a>. For most applications, one can successfully compute an accurate Cholesky factorization without any specific accuracy-focused reordering strategy.<\/span> Since we want the matrix to remain SPD, we must restrict ourselves to <em>symmetric<\/em> reordering strategies where <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is reordered to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b41585622f208eaa284acd6c78289862_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"51\" style=\"vertical-align: 0px;\"\/> where <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e0b7f55ebbc9bb715e8b20ffdc459df7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> is a permutation matrix.<\/p>\n\n\n\n<p>Our question is deceptively simple: what reordering produces the least fill-in? In matrix language, what permutation <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e0b7f55ebbc9bb715e8b20ffdc459df7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"14\" style=\"vertical-align: 0px;\"\/> minimizes <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d3b9e15a409b573956409254b36bd798_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"53\" style=\"vertical-align: -5px;\"\/> where <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-0817d45fb8e0b8e5bf4987942e6197c2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#68;&#76;&#94;&#92;&#116;&#111;&#112;&#32;&#61;&#32;&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"125\" style=\"vertical-align: 0px;\"\/> is the Cholesky factorization of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b41585622f208eaa284acd6c78289862_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"51\" style=\"vertical-align: 0px;\"\/>?<\/p>\n\n\n\n<p>Note that, assuming no entries in the Gaussian elimination process <em>exactly<\/em> cancel, then the Cholesky factorization depends only on the <em>sparsity pattern<\/em> of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> (the locations of the zeros and nonzeros) and not on the actual numeric values of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>&#8216;s entries. This sparsity structure is naturally represented by a graph <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> whose nodes are the indices <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b7fba1162d84148c59ee0a717f0ba826_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#123;&#49;&#44;&#92;&#108;&#100;&#111;&#116;&#115;&#44;&#78;&#92;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"80\" style=\"vertical-align: -5px;\"\/> with an edge between <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-1aa7079ee87ae0095f35f1b7da29a0df_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;&#32;&#92;&#110;&#101;&#32;&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"38\" style=\"vertical-align: -4px;\"\/> if, and only if, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4d18e7ee37ce4a7407ffd9bc0e71f9b0_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#97;&#95;&#123;&#105;&#106;&#125;&#32;&#92;&#110;&#101;&#32;&#48;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"54\" style=\"vertical-align: -6px;\"\/>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph-1024x320.png\" alt=\"\" class=\"wp-image-275\" width=\"532\" height=\"166\" srcset=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph-1024x320.png 1024w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph-300x94.png 300w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph-768x240.png 768w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph-1536x480.png 1536w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-graph.png 1638w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/figure><\/div>\n\n\n\n<p>Now let&#8217;s see what happens when we do Gaussian elimination from a graph point-of-view. When we eliminate the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d324ea61edce693bff957ca1e663880c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#40;&#49;&#44;&#49;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> entry from matrix, this results in <em>all nodes of the graph adjacent to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-27e3598fd2d4f0491067f1afaced92e9_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#49;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"7\" style=\"vertical-align: 0px;\"\/> becoming connected to each other<\/em>.<sup class=\"modern-footnotes-footnote \" data-mfn=\"7\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-7\">7<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-7\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"7\">Graph theoretically, we add a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clique_(graph_theory)\">clique<\/a> containing the nodes adjacent to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-27e3598fd2d4f0491067f1afaced92e9_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#49;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"7\" style=\"vertical-align: 0px;\"\/><\/span>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination-1024x554.png\" alt=\"\" class=\"wp-image-280\" width=\"537\" height=\"290\" srcset=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination-1024x554.png 1024w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination-300x162.png 300w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination-768x415.png 768w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination-1536x831.png 1536w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/sparse-matrix-elimination.png 1916w\" sizes=\"auto, (max-width: 537px) 100vw, 537px\" \/><\/figure><\/div>\n\n\n\n<p>This shows why the arrowhead example is so bad. By eliminating the a vertex connected to every node in the graph, the eliminated graph becomes a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Complete_graph\">complete graph<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix-1024x483.png\" alt=\"\" class=\"wp-image-281\" width=\"529\" height=\"249\" srcset=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix-1024x483.png 1024w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix-300x142.png 300w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix-768x362.png 768w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix-1536x725.png 1536w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/arrowhead-matrix.png 1670w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure><\/div>\n\n\n\n<p>Reordering the matrix corresponds to choosing in what order the vertices of the graph are eliminated. Choosing the elimination order is then a puzzle game; eliminate all the vertices of the graph in the order that produces the fewest fill-in edges (shown red).<sup class=\"modern-footnotes-footnote \" data-mfn=\"8\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-8\">8<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-8\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"8\">This &#8220;graph game&#8221; formulation of sparse Gaussian elimination is based on how I learned it from <a href=\"https:\/\/sites.cs.ucsb.edu\/~gilbert\/\">John Gilbert<\/a>. <a href=\"https:\/\/sites.cs.ucsb.edu\/~gilbert\/cs219\/cs219Spr2018\/\">His slides<\/a> are an excellent resource for all things sparse matrices!<\/span> <\/p>\n\n\n\n<p>Finding the best elimination ordering for a sparse matrix (graph) is a good news\/bad news situation. For the good news, many graphs possess a perfect elimination ordering, in which no fill-in is produced at all. There is <a href=\"https:\/\/en.wikipedia.org\/wiki\/Chordal_graph#Perfect_elimination_and_efficient_recognition\">a simple algorithm<\/a> to determine whether a graph (sparse matrix) possesses a perfect elimination ordering and if so, what it is.<sup class=\"modern-footnotes-footnote \" data-mfn=\"9\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-9\">9<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-9\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"9\">The algorithm is basically just a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Breadth-first_search\">breadth-first search<\/a>.<\/span> Some important classes of graphs can be eliminated perfectly (for instance, <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tree_(graph_theory)\">trees<\/a>). More generally, the class of all graphs which can be eliminated perfectly is precisely the set of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Chordal_graph\">chordal graphs<\/a>, which are well-studied in graph theory.<\/p>\n\n\n\n<p>Now for the bad news. The problem of finding the <em>best<\/em> elimination ordering (with the least fill-in) for a graph <a href=\"https:\/\/en.wikipedia.org\/wiki\/Chordal_completion#Computational_complexity\">is<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/NP-hardness\">NP-Hard<\/a>. This means, assuming the <a href=\"https:\/\/en.wikipedia.org\/wiki\/P_versus_NP_problem#Reasons_to_believe_P_\u2260_NP_or_P_=_NP\">widely conjectured<\/a> result that <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-102124a4c17e8a3d41c5a9f5467fb001_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#123;&#92;&#114;&#109;&#32;&#80;&#125;&#32;&#92;&#110;&#101;&#32;&#123;&#92;&#114;&#109;&#32;&#78;&#80;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"61\" style=\"vertical-align: -4px;\"\/>, that finding the best elimination ordering would be a hard computational problem than the worst-case <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e5cb36076a78b253a19d59a25efb2d78_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#51;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> complexity for doing Gaussian elimination in any ordering! One should not be too pessimistic about this result, however, since (assuming <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-102124a4c17e8a3d41c5a9f5467fb001_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#123;&#92;&#114;&#109;&#32;&#80;&#125;&#32;&#92;&#110;&#101;&#32;&#123;&#92;&#114;&#109;&#32;&#78;&#80;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"61\" style=\"vertical-align: -4px;\"\/>) all it says is that <em>there exists no <strong>polynomial time<\/strong> algorithm <strong>guaranteed<\/strong> to produce the <strong>absolutely best possible<\/strong> elimination ordering when presented with <strong>any graph (sparse matrix)<\/strong><\/em>. If one is willing to give up on any one of the bolded statements, further progress may be possible. For instance, there exists <a href=\"https:\/\/en.wikipedia.org\/wiki\/Minimum_degree_algorithm\">several<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Nested_dissection\">good<\/a> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cuthill\u2013McKee_algorithm\">heuristics<\/a>, which find <em>reasonably good<\/em> elimination orderings for graphs (sparse matrices) in linear <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f5a9607a215c540c89da0a2cd91faa39_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"81\" style=\"vertical-align: -5px;\"\/> (or nearly linear) time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Can Sparse Matrices be Eliminated in Linear Time?<\/h2>\n\n\n\n<p>Let us think about the best reordering question in a different way. So far, we have asked the question &#8220;Can we find the best ordering for a sparse matrix?&#8221; But another question is equally important: &#8220;How efficiently can we solve a sparse matrix, even with the best possible ordering?&#8221;<\/p>\n\n\n\n<p>One might optimistically hope that every sparse matrix possesses an elimination ordering such that its Cholesky factorization can be computed in <strong>linear time<\/strong> (in the number of nonzeros), meaning that the amount of time needed to <em>solve<\/em> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> is proportional to the amount of data needed to <em>store<\/em> the sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/>. <\/p>\n\n\n\n<p>When one tests a proposition like this, one should consider the extreme cases. If the matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> is dense, then it requires <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e5cb36076a78b253a19d59a25efb2d78_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#51;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> operations to do Gaussian elimination,<sup class=\"modern-footnotes-footnote \" data-mfn=\"10\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-10\">10<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-10\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"10\">This is neglecting the possibility of <a href=\"https:\/\/math.stackexchange.com\/a\/1217325\/239046\">acceleration<\/a> by <a href=\"https:\/\/en.wikipedia.org\/wiki\/Strassen_algorithm\">Strassen<\/a>&#8211;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Coppersmith\u2013Winograd_algorithm\">type<\/a> fast matrix multiplication algorithms. For simplicity, we shall ignore these fast multiplication techniques for the remainder of this post and assume dense <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> can be solved no faster than <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-e5cb36076a78b253a19d59a25efb2d78_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#51;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> operations.<\/span> but <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> only has <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7c819dfda6edfe85597026eed09192fa_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#61;&#32;&#78;&#94;&#50;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"101\" style=\"vertical-align: -5px;\"\/> nonzero entries. Thus, our proposition cannot hold in unmodified form.<\/p>\n\n\n\n<p>An even more concerning counterexample is given by a matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> whose graph <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> is a <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2bc43420d4f2cfe21ef40b1f2a45aad2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#41;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"138\" style=\"vertical-align: -5px;\"\/> 2D grid graph.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-1024x948.png\" alt=\"\" class=\"wp-image-302\" width=\"369\" height=\"341\" srcset=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-1024x948.png 1024w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-300x278.png 300w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-768x711.png 768w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph.png 1138w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><\/figure><\/div>\n\n\n\n<p>Sparse matrices with this sparsity pattern (or related ones) appear all the time in discretized partial differential equations in two dimensions. Moreover, they are truly sparse, only having <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-15f67613a19d3ed0b3387d81f272492c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#65;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"122\" style=\"vertical-align: -5px;\"\/> nonzero entries. Unforunately, no linear time elimination ordering exists. We have the following theorem:<\/p>\n\n\n\n<p><strong>Theorem:<\/strong> For <em>any<\/em> elimination ordering for a sparse matrix <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-11f4f587954b361e7d78940f65b8d70d_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"13\" style=\"vertical-align: 0px;\"\/> with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> being a <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2354d17f3c795ed4b40ca8789d48f308_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"83\" style=\"vertical-align: -2px;\"\/> 2D grid graph, in any elimination ordering, the Cholesky factorization <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4eed2dc3b4fbe0455e4900701465bd10_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;&#32;&#61;&#32;&#76;&#68;&#76;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"125\" style=\"vertical-align: 0px;\"\/> requires <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-368ba70e0e79f484d717139dc15fb447_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"63\" style=\"vertical-align: -5px;\"\/> operations and satisfies <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-085037199383299542a415265b3ac0ae_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#92;&#108;&#111;&#103;&#32;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"164\" style=\"vertical-align: -5px;\"\/>.<sup class=\"modern-footnotes-footnote \" data-mfn=\"11\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-11\">11<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-11\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"11\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Big_O_notation#Big_Omega_notation\">Big-Omega notation<\/a> is a cousin of Big-O notation. One should read <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2166600ddd0d2cd9d497577352d28945_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#102;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#103;&#40;&#78;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"129\" style=\"vertical-align: -5px;\"\/> as &#8220;<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b4ac6dad4842260cf98b6820884cb69c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#102;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"40\" style=\"vertical-align: -5px;\"\/> is no less than a constant multiple of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-8952e23b35a2ff6132dd5d1407d0b5b3_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#103;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/>, asymptotically&#8221;.<\/span>\n\n\n\n<p>The proof is contained in Theorem 10 and 11 (and the ensuing paragraph) of <a href=\"https:\/\/epubs.siam.org\/doi\/abs\/10.1137\/0716027?casa_token=bqyUvtRsYO0AAAAA:N0KyzxwLxYevKklE2YE1Y7CjwOkP2eeQk6xIhknBpCvuMJhMLnPkRBs6E46wn9Og6W3EqCcNG6Y\">classic paper by Lipton, Rose, and Tarjan<\/a>. Natural generalizations to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-1b031c8458e71f0e4df82ad61d36c0ca_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#100;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"10\" style=\"vertical-align: 0px;\"\/>-dimensional grid graphs give bounds of <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-76550ae597933b5356335afc6f1e6999_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#51;&#40;&#100;&#45;&#49;&#41;&#47;&#100;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"99\" style=\"vertical-align: -5px;\"\/> time and <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-022cde88d5dad6bdb20c4709f2b560ef_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#61;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#50;&#40;&#100;&#45;&#49;&#41;&#47;&#100;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"176\" style=\"vertical-align: -5px;\"\/> for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-fe3256c72e6179fefdfdfb8e45318c33_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#100;&#32;&#62;&#32;&#50;\" title=\"Rendered by QuickLaTeX.com\" height=\"14\" width=\"41\" style=\"vertical-align: -2px;\"\/>. In particular, for 2D finite difference and finite element discretizations, sparse Cholesky factorization takes <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-368ba70e0e79f484d717139dc15fb447_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"63\" style=\"vertical-align: -5px;\"\/> operations and produces a Cholesky factor with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-085037199383299542a415265b3ac0ae_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#92;&#108;&#111;&#103;&#32;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"164\" style=\"vertical-align: -5px;\"\/> in the best possible ordering. In 3D, sparse Cholesky factorization takes <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4691be82a62be5e71a7ea73cf9619452_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"50\" style=\"vertical-align: -5px;\"\/> operations and produces a Cholesky factor with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-66997df07a4369c9c666192678127549_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#78;&#94;&#123;&#52;&#47;&#51;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"140\" style=\"vertical-align: -5px;\"\/> in the best possible ordering.<\/p>\n\n\n\n<p>Fortunately, at least these complexity bounds are attainable: there is an ordering which produces a sparse Cholesky factorization with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-4eed2dc3b4fbe0455e4900701465bd10_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#80;&#65;&#80;&#94;&#92;&#116;&#111;&#112;&#32;&#61;&#32;&#76;&#68;&#76;&#94;&#92;&#116;&#111;&#112;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"125\" style=\"vertical-align: 0px;\"\/> requiring <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f18ef398198970e43010f0cc9352128a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"64\" style=\"vertical-align: -5px;\"\/> operations and with <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-65c0ce8fdae5fc3771ec1b81ad658a1f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#61;&#32;&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#78;&#92;&#108;&#111;&#103;&#32;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"165\" style=\"vertical-align: -5px;\"\/> nonzero entries in the Cholesky factor.<sup class=\"modern-footnotes-footnote \" data-mfn=\"12\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-12\">12<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-12\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"12\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Big_O_notation#Family_of_Bachmann\u2013Landau_notations\">Big-Theta notation<\/a> just means <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-0b03b43c141ac3abfbeeab83fca67ee0_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#102;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#103;&#40;&#78;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"130\" style=\"vertical-align: -5px;\"\/> if <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d68f451f47de77a041495531d09651a2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#102;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#103;&#40;&#78;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"131\" style=\"vertical-align: -5px;\"\/> and <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2166600ddd0d2cd9d497577352d28945_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#102;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#79;&#109;&#101;&#103;&#97;&#40;&#103;&#40;&#78;&#41;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"129\" style=\"vertical-align: -5px;\"\/><\/span> One such asymptotically optimal ordering is the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Nested_dissection\">nested dissection ordering<\/a>, one of the heuristics alluded to in the previous section. The nested dissection ordering proceeds as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Find a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Vertex_separator\">separator<\/a> <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b89471a11dd7fd85184a38ddb3ea9145_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> consisting of a small number of vertices in the graph <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> such that when <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b89471a11dd7fd85184a38ddb3ea9145_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> is removed from <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/>, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> is broken into a small number of edge-disjoint and roughly evenly sized pieces <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-476129585ca735c72f7891bae6badab4_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#49;&#44;&#92;&#108;&#100;&#111;&#116;&#115;&#44;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#107;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"76\" style=\"vertical-align: -4px;\"\/>.<sup class=\"modern-footnotes-footnote \" data-mfn=\"13\" data-mfn-post-scope=\"00000000000005890000000000000000_203\"><a href=\"javascript:void(0)\"  role=\"button\" aria-pressed=\"false\" aria-describedby=\"mfn-content-00000000000005890000000000000000_203-13\">13<\/a><\/sup><span id=\"mfn-content-00000000000005890000000000000000_203-13\" role=\"tooltip\" class=\"modern-footnotes-footnote__note\" tabindex=\"0\" data-mfn=\"13\">In particular, <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-dd52ebc4c1abc78c93aa9b0a2b2a11be_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"38\" style=\"vertical-align: -5px;\"\/> is the disjoint union <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-a693bb7a5c07fa1c9af183acff7bf275_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#40;&#65;&#41;&#32;&#61;&#32;&#83;&#32;&#92;&#99;&#117;&#112;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#49;&#32;&#92;&#99;&#117;&#112;&#32;&#92;&#99;&#100;&#111;&#116;&#115;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#107;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"173\" style=\"vertical-align: -5px;\"\/> and there are no edges between <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-8670b69d94d76a29a7c1dce256e5a91f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#105;\" title=\"Rendered by QuickLaTeX.com\" height=\"15\" width=\"16\" style=\"vertical-align: -3px;\"\/> and <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-822b0deb7511ed95812828d998d12134_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"17\" style=\"vertical-align: -6px;\"\/> for <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-a8766f0caa5067ca655f2ff4c29adc48_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#105;&#92;&#110;&#101;&#32;&#106;\" title=\"Rendered by QuickLaTeX.com\" height=\"17\" width=\"38\" style=\"vertical-align: -4px;\"\/>.<\/span><\/li><li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Recursion_(computer_science)\">Recursively<\/a> use nested dissection to eliminate each component <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-3372a71a1039760ee10ffcfa9a30c5bd_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#49;&#44;&#92;&#108;&#100;&#111;&#116;&#115;&#44;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#71;&#125;&#95;&#107;\" title=\"Rendered by QuickLaTeX.com\" height=\"16\" width=\"76\" style=\"vertical-align: -4px;\"\/> individually.<\/li><li>Eliminate <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b89471a11dd7fd85184a38ddb3ea9145_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> in any order.<\/li><\/ol>\n\n\n\n<p>For example, for the 2D grid graph, if we choose <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-b89471a11dd7fd85184a38ddb3ea9145_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> to be a cross through the center of the 2D grid graph, we have a separator of size <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-fd088823f90ca40f249759e3333ef5d8_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#124;&#83;&#124;&#32;&#61;&#32;&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"101\" style=\"vertical-align: -5px;\"\/> dividing the graph into <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2c983cf582fc147a02f90b132e5a73c5_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#52;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"9\" style=\"vertical-align: 0px;\"\/> roughly <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-8c8e30ea3cc43860b6f0f3891084f95f_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#47;&#50;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#47;&#50;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"117\" style=\"vertical-align: -5px;\"\/> pieces. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-separator-clearer-1024x939.png\" alt=\"\" class=\"wp-image-304\" width=\"371\" height=\"339\" srcset=\"https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-separator-clearer-1024x939.png 1024w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-separator-clearer-300x275.png 300w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-separator-clearer-768x704.png 768w, https:\/\/www.ethanepperly.com\/wp-content\/uploads\/2020\/07\/grid-graph-separator-clearer.png 1176w\" sizes=\"auto, (max-width: 371px) 100vw, 371px\" \/><\/figure><\/div>\n\n\n\n<p>Let us give a brief analysis of this nested dissection ordering. First, consider the sparsity of the Cholesky factor <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d3b9e15a409b573956409254b36bd798_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"53\" style=\"vertical-align: -5px;\"\/>. Let <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-cd463c1bd06ea7b5051654c3acc4d94a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#83;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"41\" style=\"vertical-align: -5px;\"\/> denote the number of nonzeros in <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d99fc63db67b7ceb9f44b2bc4b03bc89_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/> for an elimination of the <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2354d17f3c795ed4b40ca8789d48f308_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"83\" style=\"vertical-align: -2px;\"\/> 2D grid graph using the nested dissection ordering. Then step 2 of nested dissection requires us to recursively eliminate four <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-119c3e35d0e654a779f50ae7f8a1b774_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#47;&#52;&#125;&#32;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#47;&#52;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"22\" width=\"122\" style=\"vertical-align: -6px;\"\/> 2D grid graphs. After doing this, for step 3, all of the vertices of the separator might be connected to each other, so the separator graph will potentially have as many as <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-92ce8a430ec93929f2cb7bfc3324c55c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#124;&#83;&#124;&#94;&#50;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"124\" style=\"vertical-align: -5px;\"\/> edges, which result in nonzero entries in <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-d99fc63db67b7ceb9f44b2bc4b03bc89_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"12\" style=\"vertical-align: 0px;\"\/>. Thus, combining the fill-in from both steps, we get<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 43px;\"><span class=\"ql-right-eqno\"> (9) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-640bc64dfde401a78458336b4433aebd_l3.png\" height=\"43\" width=\"205\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#83;&#40;&#78;&#41;&#32;&#61;&#32;&#52;&#83;&#92;&#108;&#101;&#102;&#116;&#40;&#92;&#102;&#114;&#97;&#99;&#123;&#78;&#125;&#123;&#52;&#125;&#92;&#114;&#105;&#103;&#104;&#116;&#41;&#32;&#43;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#41;&#46; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>Solving this recurrence using the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Master_theorem_(analysis_of_algorithms)\">master theorem for recurrences<\/a> gives <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-1f61e4dab6afe404406755c9e6ab74d2_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#111;&#112;&#101;&#114;&#97;&#116;&#111;&#114;&#110;&#97;&#109;&#101;&#123;&#110;&#110;&#122;&#125;&#40;&#76;&#41;&#32;&#61;&#32;&#83;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#92;&#108;&#111;&#103;&#32;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"231\" style=\"vertical-align: -5px;\"\/>. If one instead wants the time <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-080cb7aca31ad1fd1d3a854c983711e6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#84;&#40;&#78;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"19\" width=\"42\" style=\"vertical-align: -5px;\"\/> required to compute the Cholesky factorization, note that for step 3, in the worst case, all of the vertices of the separator might be connected to each other, leading to a <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2354d17f3c795ed4b40ca8789d48f308_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"83\" style=\"vertical-align: -2px;\"\/> dense matrix. Since a <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-2354d17f3c795ed4b40ca8789d48f308_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#92;&#116;&#105;&#109;&#101;&#115;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;\" title=\"Rendered by QuickLaTeX.com\" height=\"18\" width=\"83\" style=\"vertical-align: -2px;\"\/> matrix requires <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-63c858c0d27ea23d679a5c235ca3751c_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#40;&#92;&#115;&#113;&#114;&#116;&#123;&#78;&#125;&#41;&#94;&#51;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"169\" style=\"vertical-align: -5px;\"\/>, we get the recurrence<\/p>\n\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 43px;\"><span class=\"ql-right-eqno\"> (10) <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7465f0976f998aadb326ad3ae5c65a51_l3.png\" height=\"43\" width=\"229\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#98;&#101;&#103;&#105;&#110;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125; &#84;&#40;&#78;&#41;&#32;&#61;&#32;&#52;&#84;&#92;&#108;&#101;&#102;&#116;&#40;&#92;&#102;&#114;&#97;&#99;&#123;&#78;&#125;&#123;&#52;&#125;&#92;&#114;&#105;&#103;&#104;&#116;&#41;&#32;&#43;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;&#44; &#92;&#101;&#110;&#100;&#123;&#101;&#113;&#117;&#97;&#116;&#105;&#111;&#110;&#42;&#125;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\n\n\n<p>which solves to <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-9358ae59878e9d72ade5f72ef74c13b6_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#84;&#40;&#78;&#41;&#32;&#61;&#32;&#92;&#109;&#97;&#116;&#104;&#99;&#97;&#108;&#123;&#79;&#125;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"132\" style=\"vertical-align: -5px;\"\/>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions<\/h2>\n\n\n\n<p>As we&#8217;ve seen, sparse direct methods (as exemplified here by sparse Cholesky) possess fundamental scalability challenges for solving large problems. For the important class of 2D and 3D discretized partial differential equations, the time to solve <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-bb1076898a88ac5d6a1c74d7932dd5fc_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#65;&#120;&#32;&#61;&#32;&#98;\" title=\"Rendered by QuickLaTeX.com\" height=\"13\" width=\"55\" style=\"vertical-align: 0px;\"\/> scales like <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f18ef398198970e43010f0cc9352128a_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#78;&#94;&#123;&#51;&#47;&#50;&#125;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"21\" width=\"64\" style=\"vertical-align: -5px;\"\/> and <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-f1b9f064b247e72a13c49448ad8298b0_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#92;&#84;&#104;&#101;&#116;&#97;&#40;&#78;&#94;&#50;&#41;\" title=\"Rendered by QuickLaTeX.com\" height=\"20\" width=\"51\" style=\"vertical-align: -5px;\"\/>, respectively. For truly large-scale problems, these limitations may be prohibitive for using such methods.<\/p>\n\n\n\n<p>This really is the beginning of the story, not the end for sparse matrices however. The scalability challenges for classical sparse direct methods has spawned <a href=\"https:\/\/en.wikipedia.org\/wiki\/Multigrid_method#Algebraic_MultiGrid_(AMG)\">many<\/a> <a href=\"https:\/\/sites.google.com\/a\/yale.edu\/laplacian\/\">exciting<\/a> <a href=\"https:\/\/onlinelibrary.wiley.com\/doi\/abs\/10.1002\/cpa.21582?casa_token=cyXoSrpI_f0AAAAA:rgA7PcboRS306iU5DwteiNs0njAVHydD3C_uOdH-_a3XFpGdvv26OEvge9IMlOQf0aF_BcuZyCpXBvLp\">different<\/a> <a href=\"https:\/\/epubs.siam.org\/doi\/abs\/10.1137\/09074543X\">approaches<\/a>, each of which combats the scalability challenges of sparse direct methods for a different class of sparse matrices in a different way. <\/p>\n\n\n\n<p><strong>Upshot:<\/strong> Sparse matrices occur everywhere in applied mathematics, and many operations on them can be done very fast. However, the speed of computing an <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ethanepperly.com\/wp-content\/ql-cache\/quicklatex.com-7502241092088409534a6e225be435c7_l3.png\" class=\"ql-img-inline-formula quicklatex-auto-format\" alt=\"&#76;&#85;\" title=\"Rendered by QuickLaTeX.com\" height=\"12\" width=\"26\" style=\"vertical-align: 0px;\"\/> factorization of a sparse matrix depends significantly on the arrangement of its nonzero entries. Many sparse matrices can be factored quickly, but some require significant time to factor in any reordering.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sparse matrices are an indispensable tool for anyone in computational science. I expect there are a very large number of simulation programs written in scientific research across the country which could be faster by ten to a hundred fold at least just by using sparse matrices! In this post, we&#8217;ll give a brief overview what<a class=\"more-link\" href=\"https:\/\/www.ethanepperly.com\/index.php\/2020\/07\/18\/big-ideas-in-applied-math-sparse-matrices\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","hentry","category-big-ideas-in-applied-math"],"_links":{"self":[{"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/comments?post=203"}],"version-history":[{"count":100,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":433,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/posts\/203\/revisions\/433"}],"wp:attachment":[{"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/media?parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/categories?post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ethanepperly.com\/index.php\/wp-json\/wp\/v2\/tags?post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}