[{"id":247851,"date":"2026-09-04T09:16:16","date_gmt":"2026-09-04T14:16:16","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247851"},"modified":"2026-09-04T09:20:10","modified_gmt":"2026-09-04T14:20:10","slug":"stable-rank","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/","title":{"rendered":"Computing a lower bound on matrix rank"},"content":{"rendered":"<p>Suppose you want to know the rank of an <em>n<\/em> \u00d7 <em>n<\/em> matrix <em>A<\/em>, the number of linearly independent rows of\u00a0<em>A<\/em>, or equivalently the number of linearly independent columns. There are at least three difficulties.<\/p>\n<h2>Difficulties in computing rank<\/h2>\n<p>First of all, rank is not a continuous function of a matrix. Since rank is an integer, an arbitrarily small change in the matrix could cause a discrete change in the rank [1]. A small error in computing\u00a0<em>A<\/em> could produce a matrix with a different rank.<\/p>\n<p>Second, finding the rank takes <em>O<\/em>(<em>n<\/em>\u00b3) operations, which may or may not be an issue depending on context.<\/p>\n<p>Third, you may not have the matrix\u00a0<em>A<\/em> in an explicit form. Maybe you&#8217;re able to compute products\u00a0<em>Av<\/em> for vectors\u00a0<em>v<\/em> but it&#8217;s not practical to form the entire matrix\u00a0<em>A<\/em>.<\/p>\n<h2>Rank-trace inequality<\/h2>\n<p>If you don&#8217;t need to know the rank of\u00a0<em>A<\/em> per se, but only need to know whether it is above a certain size, a lower bound on the rank may enough.<\/p>\n<p>Suppose\u00a0<em>A<\/em> is a Hermitian matrix. If\u00a0<em>A<\/em> is real, this means\u00a0<em>A<\/em> is symmetric. If\u00a0<em>A<\/em> is complex, this means\u00a0<em>A<\/em> equals its conjugate transpose. Then the rank-trace inequality says<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"background-color: white;\" src=\"https:\/\/www.johndcook.com\/rank_trace1.svg\" alt=\"\\operatorname{rank}(A)\\ge\\frac{(\\operatorname{tr} A)^2}{\\operatorname{tr}(A^2)}\" width=\"143\" height=\"49\" \/><br \/>\nThe quantity on the right hand side is known as the <strong>stable rank<\/strong> of\u00a0<em>A<\/em>. It&#8217;s not a rank in any algebraic sense, but it gives a lower bound on rank. And it solves the three problems listed above.<\/p>\n<h3>Stability<\/h3>\n<p>First of all, trace\u00a0<em>is<\/em> a continuous function of a matrix, and so stable rank is also a continuous function of a matrix, provided the denominator isn&#8217;t zero. A small change to a matrix only makes a small change to its stable rank. That&#8217;s why stable rank is called stable.<\/p>\n<h3>Efficiency<\/h3>\n<p>Second, although computing rank takes <em>O<\/em>(<em>n<\/em>\u00b3) operations, computing stable rank\u00a0takes only <em>O<\/em>(<em>n<\/em>\u00b2) operations, though this isn&#8217;t immediately obvious.<\/p>\n<p>The trace of <em>A<\/em> takes <em>n<\/em> operations: simply sum the elements on the diagonal of <em>A<\/em>. But how do you take the trace of <em>A<\/em>\u00b2? Squaring <em>A<\/em> takes <em>n<\/em>\u00b3 operations, and so if you had to square <em>A<\/em> to find the trace of <em>A<\/em>\u00b2 the rank-trace inequality would have no efficiency advantage over finding the rank of <em>A<\/em>. But you can compute the trace of <em>A<\/em>\u00b2 via<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"background-color: white;\" src=\"https:\/\/www.johndcook.com\/trace_A2.svg\" alt=\"\\operatorname{tr}(A^2) = \\sum_{i=1}^n \\sum_{j=1}^n |a_{ij}|^2\" width=\"171\" height=\"57\" \/><\/p>\n<h3>Formation<\/h3>\n<p>Now suppose you don&#8217;t have the matrix <em>A<\/em> per se but you do have a way of probing <em>A<\/em>, computing the product of vectors with <em>A<\/em>. Maybe <em>A<\/em> is too large to fit into memory, or explicitly computing the elements of <em>A<\/em> would take too long.<\/p>\n<p>There are Monte Carlo algorithms for estimating the traces of <em>A<\/em> and <em>A<\/em>\u00b2 that could be used together to estimate the stable rank of <em>A<\/em>.<\/p>\n<h2>Demonstration<\/h2>\n<p>The following Python code illustrates the discussion above.<\/p>\n<pre>import numpy as np\r\n\r\nnp.random.seed(20260904)\r\nn = 5\r\nB = np.random.randn(n, n)\r\nA = B.T @ B + 1e-8 * np.eye(n)  # Gram matrix plus a tiny shift =&gt; SPD\r\n\r\nrank_A = np.linalg.matrix_rank(A)\r\ntr_A = np.trace(A)\r\ntr_A2 = np.trace(A @ A) # matrix product \r\nsum_sq = np.sum(A * A) # element-by-element product\r\nstable_rank = (tr_A ** 2) \/ tr_A2\r\n\r\nprint(f\"A =\\n{A}\\n\")\r\nprint(f\"rank(A)              = {rank_A}\")\r\nprint(f\"tr(A)                = {tr_A:.12f}\")\r\nprint(f\"tr(A^2) direct       = {tr_A2:.12f}\")\r\nprint(f\"tr(A^2) indirect     = {sum_sq:.12f}\")\r\nprint(f\"stable rank          = {stable_rank:.12f}\")\r\n<\/pre>\n<p>The code above produces the output below.<\/p>\n<pre>A =\r\n[[ 1.09945682  0.4899665   0.98901845  0.66983113 -1.35006341]\r\n [ 0.4899665   0.98531254  0.35067791  0.89757603 -0.72037507]\r\n [ 0.98901845  0.35067791  4.31233926  0.94556225 -0.54819048]\r\n [ 0.66983113  0.89757603  0.94556225  1.3494295  -1.33840786]\r\n [-1.35006341 -0.72037507 -0.54819048 -1.33840786  3.54858332]]\r\n\r\nrank(A)              = 5\r\ntr(A)                = 11.295121449420\r\ntr(A^2) direct       = 51.035447533673\r\ntr(A^2) indirect     = 51.035447533673\r\nstable rank          = 2.499826585688\r\n<\/pre>\n<p>[1] Topological argument: A map from a connected space (such as \u211d<sup><em>n<\/em>\u00d7<em>n<\/em><\/sup>) onto a discrete space (such as \u2124) cannot be continuous, otherwise the inverse images of the points in the range would partition the connected space into disjoint open sets, violating the definition of a connected space.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Suppose you want to know the rank of an n \u00d7 n matrix A, the number of linearly independent rows of\u00a0A, or equivalently the number of linearly independent columns. There are at least three difficulties. Difficulties in computing rank First of all, rank is not a continuous function of a matrix. Since rank is an [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5,9],"tags":[198],"class_list":["post-247851","post","type-post","status-publish","format-standard","hentry","category-computing","category-math","tag-linear-algebra"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"linear algebra\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Computing a lower bound on matrix rank\" \/>\n\t\t<meta property=\"og:description\" content=\"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-04T14:16:16+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-04T14:20:10+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Computing a lower bound on matrix rank\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Computing a lower bound on matrix rank","description":"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/","robots":"max-image-preview:large","keywords":"linear algebra","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Computing a lower bound on matrix rank","og:description":"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/","article:published_time":"2026-09-04T14:16:16+00:00","article:modified_time":"2026-09-04T14:20:10+00:00","twitter:card":"summary","twitter:title":"Computing a lower bound on matrix rank","twitter:description":"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247851","title":null,"description":"Why computing the rank of a matrix can be difficult and how the rank-trace inequality lower bound solves the difficulties if a lower bound is adequate.","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-09-04 13:08:46","updated":"2026-09-04 14:41:01","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/computing\/\" title=\"Computing\">Computing<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tComputing a lower bound on matrix rank\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Computing","link":"https:\/\/www.johndcook.com\/blog\/category\/computing\/"},{"label":"Computing a lower bound on matrix rank","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/04\/stable-rank\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247851"}],"version-history":[{"count":5,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247851\/revisions"}],"predecessor-version":[{"id":247856,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247851\/revisions\/247856"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247847,"date":"2026-09-03T18:34:41","date_gmt":"2026-09-03T23:34:41","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247847"},"modified":"2026-09-04T06:01:12","modified_gmt":"2026-09-04T11:01:12","slug":"hugging-face-easter-egg","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/","title":{"rendered":"Hugging Face Easter Egg"},"content":{"rendered":"<p>NVIDIA has offered to buy Hugging Face for $12,930,300,000.<\/p>\n<p>129303 is the Unicode code point for the Hugging Face emoj (U+1F917), which you can verify with the following Python code.<\/p>\n<pre>\r\n&gt;&gt;&gt; import unicodedata\r\n&gt;&gt;&gt; 129303 == 0x1F917\r\nTrue\r\n&gt;&gt;&gt; unicodedata.name(chr(0x1F917))\r\n'HUGGING FACE'\r\n<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.johndcook.com\/huggingface.png\" width=\"200\" height=\"200\" alt=\"Hugging Face emoji\" class=\"aligncenter size-medium\" \/><\/p>\n<h2>Related posts<\/h2>\n<ul>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2022\/09\/30\/preventing-emoji\/'>Prevent characters from displaying as emoji<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2025\/03\/09\/tengwar\/'>Unicode, Tolkien, and Privacy<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2025\/03\/09\/unicode-surrogates\/'>Unicode surrogates<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2022\/10\/02\/flags-unicode\/'>Making flags in Unicode<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>NVIDIA has offered to buy Hugging Face for $12,930,300,000. 129303 is the Unicode code point for the Hugging Face emoj (U+1F917), which you can verify with the following Python code. &gt;&gt;&gt; import unicodedata &gt;&gt;&gt; 129303 == 0x1F917 True &gt;&gt;&gt; unicodedata.name(chr(0x1F917)) &#8216;HUGGING FACE&#8217; Related posts Prevent characters from displaying as emoji Unicode, Tolkien, and Privacy Unicode [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[135],"class_list":["post-247847","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-unicode"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Unicode Easter Egg in NVIDIA&#039;s offer to buy Hugging Face\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"unicode\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Hugging Face Easter Egg\" \/>\n\t\t<meta property=\"og:description\" content=\"Unicode Easter Egg in NVIDIA&#039;s offer to buy Hugging Face\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-03T23:34:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-04T11:01:12+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Hugging Face Easter Egg\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Unicode Easter Egg in NVIDIA&#039;s offer to buy Hugging Face\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Hugging Face Easter Egg","description":"Unicode Easter Egg in NVIDIA's offer to buy Hugging Face","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/","robots":"max-image-preview:large","keywords":"unicode","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Hugging Face Easter Egg","og:description":"Unicode Easter Egg in NVIDIA's offer to buy Hugging Face","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/","article:published_time":"2026-09-03T23:34:41+00:00","article:modified_time":"2026-09-04T11:01:12+00:00","twitter:card":"summary","twitter:title":"Hugging Face Easter Egg","twitter:description":"Unicode Easter Egg in NVIDIA's offer to buy Hugging Face","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247847","title":null,"description":"Unicode Easter Egg in NVIDIA's offer to buy Hugging Face","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-09-03 23:15:55","updated":"2026-09-04 11:34:04","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/uncategorized\/\" title=\"Uncategorized\">Uncategorized<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHugging Face Easter Egg\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Uncategorized","link":"https:\/\/www.johndcook.com\/blog\/category\/uncategorized\/"},{"label":"Hugging Face Easter Egg","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/hugging-face-easter-egg\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247847","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247847"}],"version-history":[{"count":3,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247847\/revisions"}],"predecessor-version":[{"id":247850,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247847\/revisions\/247850"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247847"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247845,"date":"2026-09-03T12:21:45","date_gmt":"2026-09-03T17:21:45","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247845"},"modified":"2026-09-03T12:21:45","modified_gmt":"2026-09-03T17:21:45","slug":"new-rsa-number-factored","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/","title":{"rendered":"New RSA number factored"},"content":{"rendered":"<p>Eric Lu <a href=\"https:\/\/x.com\/penlume\/status\/2095372672356212876?s=20\">announced<\/a> on X today that he has factored RSA-260, a number <em>N<\/em> with 260 digits (862 bits) that is the product of two large primes [1].<\/p>\n<p>RSA numbers are challenge problems posed to gauge the security of RSA encryption, which rests on the difficulty of factoring large numbers [2]. The naming scheme is confusing because RSA-<em>n<\/em> might have\u00a0<em>n<\/em> digits or\u00a0<em>n<\/em> bits. For example, RSA-768 is smaller than RSA-260 because the former has 768 bits and the latter has 260 digits.<\/p>\n<p>RSA-260 is the largest RSA number factored so far. What does the news of its factorization say about the security of RSA?<\/p>\n<p>Based on equations <a href=\"https:\/\/www.johndcook.com\/blog\/2025\/09\/30\/time-needed-to-factor-large-integers\/\">here<\/a>, an RSA key with 862 bits would have a security level of 74 bits, i.e. the same security level as symmetric encryption with a 74-bit key. The minimum recommended RSA key size now is 2048 bits, which has a security level of 107 bits.<\/p>\n<p>Security levels are on a logarithmic scale: each additional bit of security doubles the effort required to break the encryption by brute force. So breaking a 2048-bit RSA key would take 2<sup>34<\/sup>, roughly 10<sup>10<\/sup>, times more effort than factoring RSA-260. All this depends on numerous assumptions, such as the state of factorization algorithms and the non-existence of CRQC [3].<\/p>\n<h2>Related posts<\/h2>\n<ul>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2019\/02\/11\/rsa-duplication-flaws\/'>RSA implementation flaws<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2023\/08\/05\/rsa-private-key\/'>Generating and inspecting an RSA key<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2025\/08\/05\/martin-gardners-rsa\/'>Martin Gardner&#8217;s RSA article<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2026\/06\/13\/rsa-munitions-t-shirt\/'>RSA munitions T-shirt<\/a><\/li>\n<\/ul>\n<p>[1] <em>N<\/em> = <em>pq<\/em> = 22112825529529666435281085255026230927612089502470015394413748319128822941402001986512729726569746599085900330031400051170742204560859276357953757185954298838958709229238491006703034124620545784566413664540684214361293017694020846391065875914794251435144458199<\/p>\n<p><em>p<\/em> = 4397328654844826923795068102505872571721883526553349659561256924505973939597593482272505698004801207988043088656411102133523080581<\/p>\n<p><em>q<\/em> = 5028695206842569864686141618253083416610081090075366674776775706538324961364412200138116378509733307971876652984898985905923678379<\/p>\n<p>[2] The ability to efficiently factor large primes would break RSA. It&#8217;s possible that there&#8217;s a way to break RSA without being able to factor large numbers. More on that <a href=\"https:\/\/www.johndcook.com\/blog\/2025\/01\/06\/rsa-factoring\/\">here<\/a>.<\/p>\n<p>[3] Cryptographically-relevant quantum computer. Quantum computers exist, but so far they&#8217;re cryptographically irrelevant. So far quantum computers cannot factor 21 without <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/03\/31\/quantum-y2k\/\">cheating<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eric Lu announced on X today that he has factored RSA-260, a number N with 260 digits (862 bits) that is the product of two large primes [1]. RSA numbers are challenge problems posed to gauge the security of RSA encryption, which rests on the difficulty of factoring large numbers [2]. The naming scheme is [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[43],"class_list":["post-247845","post","type-post","status-publish","format-standard","hentry","category-computing","tag-cryptography"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"cryptography\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"New RSA number factored\" \/>\n\t\t<meta property=\"og:description\" content=\"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-03T17:21:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-03T17:21:45+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"New RSA number factored\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"New RSA number factored","description":"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/","robots":"max-image-preview:large","keywords":"cryptography","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"New RSA number factored","og:description":"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/","article:published_time":"2026-09-03T17:21:45+00:00","article:modified_time":"2026-09-03T17:21:45+00:00","twitter:card":"summary","twitter:title":"New RSA number factored","twitter:description":"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247845","title":null,"description":"A new record has been set for factoring RSA challenge numbers. What does the latest development say about the security of RSA public key encryption?","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-09-03 16:45:15","updated":"2026-09-03 17:55:00","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/computing\/\" title=\"Computing\">Computing<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tNew RSA number factored\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Computing","link":"https:\/\/www.johndcook.com\/blog\/category\/computing\/"},{"label":"New RSA number factored","link":"https:\/\/www.johndcook.com\/blog\/2026\/09\/03\/new-rsa-number-factored\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247845","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247845"}],"version-history":[{"count":1,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247845\/revisions"}],"predecessor-version":[{"id":247846,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247845\/revisions\/247846"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247831,"date":"2026-08-31T18:26:12","date_gmt":"2026-08-31T23:26:12","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247831"},"modified":"2026-09-01T08:07:10","modified_gmt":"2026-09-01T13:07:10","slug":"patented-application-of-linear-algebra","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/","title":{"rendered":"Patented application of linear algebra"},"content":{"rendered":"<p>I just found out Brian Beckman and I got a patent on work we did for GSI Technology [1]. Nearly all the work I do is under an NDA, so I don&#8217;t often get a chance to talk about my projects. This work is public now that it&#8217;s in a patent; I suppose it has been public since the application was published.<\/p>\n<p>Brian did most of the work on the project. My contribution was to mathematically formalize low-level operations on sheets of bits using linear algebra over a binary field. Lots of Hadamard products and outer products, if I remember correctly. When you can reduce computations to algebra, you can prove that a sequence of operations is correct, and you can find optimizations by simplifying expressions.<\/p>\n<p>The patent mentions a programming language called Tartan. I suggested calling it plaid because it used matrices with mask patterns that reminded me of a plaid pattern, and Brian countered saying we should call it Tartan. I like that name better.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium\" src=\"https:\/\/www.johndcook.com\/tartan2.png\" alt=\"Figure 5B from patent\" width=\"550\" height=\"514\" \/><\/p>\n<p style=\"text-align: center;\">Figure 5B from the patent.<\/p>\n<p>[1] Brian Beckman and John D. Cook. Compiler for a parallel processor. U.S. Patent 12,717,871 B2. Applicant\/Assignee: GSI Technology Inc., Sunnyvale, CA.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just found out Brian Beckman and I got a patent on work we did for GSI Technology [1]. Nearly all the work I do is under an NDA, so I don&#8217;t often get a chance to talk about my projects. This work is public now that it&#8217;s in a patent; I suppose it has [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[198],"class_list":["post-247831","post","type-post","status-publish","format-standard","hentry","category-computing","tag-linear-algebra"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"linear algebra\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Patented application of linear algebra\" \/>\n\t\t<meta property=\"og:description\" content=\"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-31T23:26:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-01T13:07:10+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Patented application of linear algebra\" \/>\n\t\t<meta name=\"twitter:description\" content=\"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Patented application of linear algebra","description":"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/","robots":"max-image-preview:large","keywords":"linear algebra","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Patented application of linear algebra","og:description":"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/","article:published_time":"2026-08-31T23:26:12+00:00","article:modified_time":"2026-09-01T13:07:10+00:00","twitter:card":"summary","twitter:title":"Patented application of linear algebra","twitter:description":"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247831","title":null,"description":"New patent that uses linear algebra over a binary field as part of the formalization of a parallel compiler","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-31 22:22:32","updated":"2026-09-01 13:59:01","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/computing\/\" title=\"Computing\">Computing<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPatented application of linear algebra\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Computing","link":"https:\/\/www.johndcook.com\/blog\/category\/computing\/"},{"label":"Patented application of linear algebra","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/31\/patented-application-of-linear-algebra\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247831"}],"version-history":[{"count":4,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247831\/revisions"}],"predecessor-version":[{"id":247835,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247831\/revisions\/247835"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247823,"date":"2026-08-28T09:35:36","date_gmt":"2026-08-28T14:35:36","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247823"},"modified":"2026-08-28T20:35:01","modified_gmt":"2026-08-29T01:35:01","slug":"making-the-unnecessary-easier","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/","title":{"rendered":"Making the unnecessary easier"},"content":{"rendered":"<p>I watched a few videos this morning, looking for ideas of what I could use AI to do.<\/p>\n<p>In one video, someone had an agent monitor tech news sites every 30 minutes to notify him of a variety of developments. No doubt that&#8217;s less effort than visiting a bunch of sites every half hour, but not monitoring tech news in real time takes even less effort.<\/p>\n<p>Another video mentioned having Grok Bot order a sandwich through DoorDash. If I want a sandwich, I make a sandwich.<\/p>\n<p>One video showed how to manage dozens messaging services. Maybe you could just not use dozens of messaging services.<\/p>\n<p>And of course there are videos on creating agents to monitor the agents that monitor your news, order your sandwiches, and manage your messages.<\/p>\n<p>All the use cases I saw were ways to using technology mitigate problems caused by technology, making it easier to do things that don&#8217;t need to be done, or at least things that I don&#8217;t need to do.<\/p>\n<p>Of course different people have different needs. Some people have a professional need to monitor news in real time, for example, and having an agent help with that could be big win. I suspect, however, that the use cases that you&#8217;ll see most often in YouTube videos have been made up to appeal to a wide audience rather than to scratch the author&#8217;s itch.<\/p>\n<p>Productivity is deeply personal. As I said in an <a href=\"https:\/\/www.johndcook.com\/blog\/2023\/06\/03\/productive-productivity\/\">earlier post<\/a>, the scripts I&#8217;ve found most useful are of <em>zero<\/em> interest to anyone else because they are so specific to my work. I&#8217;ve mostly automated tasks with Python and bash, not with AI.<\/p>\n<p>I&#8217;m not trying to avoid using AI. As I said at the top of the post I&#8217;m looking for more ways to take advantage of it. But I don&#8217;t want to fall into the trap of doing more easily what doesn&#8217;t need to be done. Or, to put a finer point on it, I don&#8217;t want to find ways for <em>my business<\/em> to do things that <em>we<\/em> do not need to do, things that other businesses may need to do.<\/p>\n<h2>Related posts<\/h2>\n<ul>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2023\/06\/03\/productive-productivity\/'>Productive productivity<\/a><\/li>\n<li class='link'><a href='https:\/\/www.johndcook.com\/blog\/2010\/12\/07\/cascading-needs\/'>Maybe you only need it because you have it<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I watched a few videos this morning, looking for ideas of what I could use AI to do. In one video, someone had an agent monitor tech news sites every 30 minutes to notify him of a variety of developments. No doubt that&#8217;s less effort than visiting a bunch of sites every half hour, but [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[260],"tags":[],"class_list":["post-247823","post","type-post","status-publish","format-standard","hentry","category-ai"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn&#039;t need to be done.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Making the unnecessary easier\" \/>\n\t\t<meta property=\"og:description\" content=\"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn&#039;t need to be done.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-28T14:35:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-29T01:35:01+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Making the unnecessary easier\" \/>\n\t\t<meta name=\"twitter:description\" content=\"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn&#039;t need to be done.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Making the unnecessary easier","description":"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn't need to be done.","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Making the unnecessary easier","og:description":"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn't need to be done.","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/","article:published_time":"2026-08-28T14:35:36+00:00","article:modified_time":"2026-08-29T01:35:01+00:00","twitter:card":"summary","twitter:title":"Making the unnecessary easier","twitter:description":"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn't need to be done.","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247823","title":null,"description":"The best uses of AI take a lot of thought to find and are very particular to your context. Passive use of AI makes it easier to do what doesn't need to be done.","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-28 13:17:23","updated":"2026-08-29 02:11:07","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/ai\/\" title=\"AI\">AI<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tMaking the unnecessary easier\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"AI","link":"https:\/\/www.johndcook.com\/blog\/category\/ai\/"},{"label":"Making the unnecessary easier","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/28\/making-the-unnecessary-easier\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247823"}],"version-history":[{"count":3,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247823\/revisions"}],"predecessor-version":[{"id":247827,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247823\/revisions\/247827"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247823"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247823"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247814,"date":"2026-08-27T08:14:35","date_gmt":"2026-08-27T13:14:35","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247814"},"modified":"2026-08-27T08:45:29","modified_gmt":"2026-08-27T13:45:29","slug":"second-solutions","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/","title":{"rendered":"Second solutions"},"content":{"rendered":"<p>This post provides a couple examples to go along with two <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/\">earlier<\/a> <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/\">posts<\/a>.<\/p>\n<p>The pattern we&#8217;re illustrating is families of polynomials\u00a0<em>p<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) that each satisfy a differential equation and a three-term recurrence. The differential equations have a second solution\u00a0<em>q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) that is the larger solution with respect to\u00a0<em>x<\/em> but the smaller solution with respect to\u00a0<em>n<\/em>.<\/p>\n<p>In both the examples below <em>p<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) is a polynomial, and so bounded on the interval [\u22121, 1], and <em>q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) is not a polynomial, with singularities at \u00b11. This is analogous to the previous examples with Bessel functions <em>J<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) and <em>Q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) that satisfy the same differential equation but have contrasting behavior with respect to\u00a0<em>x<\/em> versus\u00a0<em>n<\/em>.<\/p>\n<h2>Legendre polynomials<\/h2>\n<p>The differential equation<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"background-color: white;\" src=\"https:\/\/www.johndcook.com\/legendre_de.svg\" alt=\"(1-x^2)\\,y^{\\prime\\prime} - 2x\\,y^\\prime + n(n+1)\\,y = 0 \" width=\"258\" height=\"23\" \/><\/p>\n<p>has two solutions for each <em>n<\/em>, <em>P<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) and <em>Q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium\" src=\"https:\/\/www.johndcook.com\/legendre_P_Q.png\" width=\"600\" height=\"450\" \/><\/p>\n<p>The solutions <em>P<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) are the Legendre polynomials. The solutions <em>Q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) are not polynomials but involve a term log((1 + <em>x<\/em>)\/(1 \u2212 <em>x<\/em>)) that blows up at 1 and \u22121. But for fixed <em>x<\/em> and increasing <em>n<\/em>, <em>P<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) grows exponentially and <em>Q<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) decays exponentially, provided |<em>x<\/em>| &gt; 1.<\/p>\n<h2>Chebyshev polynomials<\/h2>\n<p>The differential equation<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"background-color: white;\" src=\"https:\/\/www.johndcook.com\/chebyshev_de.svg\" alt=\"(1-x^2)\\,y^{\\prime\\prime} - x\\,y^\\prime + n^2\\,y = 0\" width=\"204\" height=\"23\" \/><\/p>\n<p>has two solutions for each <em>n<\/em>, <em>T<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) and <em>V<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium\" src=\"https:\/\/www.johndcook.com\/chebyshev_T_V.png\" width=\"600\" height=\"438\" \/><\/p>\n<p>The solutions <em>T<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) are the Chebyshev polynomials. The solutions <em>V<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) are not polynomials but involve a term \u221a(<em>x<\/em>\u00b2 \u2014 1) that become vertical up at 1 and \u22121. But for fixed <em>x<\/em> with |<em>x<\/em>| &gt; 1 and increasing <em>n<\/em>, <em>T<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) grows exponentially and <em>V<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) decays exponentially.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post provides a couple examples to go along with two earlier posts. The pattern we&#8217;re illustrating is families of polynomials\u00a0pn(x) that each satisfy a differential equation and a three-term recurrence. The differential equations have a second solution\u00a0qn(x) that is the larger solution with respect to\u00a0x but the smaller solution with respect to\u00a0n. In both [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[47,129],"class_list":["post-247814","post","type-post","status-publish","format-standard","hentry","category-math","tag-differential-equations","tag-special-functions"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"differential equations,special functions\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Second solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-27T13:14:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-27T13:45:29+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Second solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Second solutions","description":"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/","robots":"max-image-preview:large","keywords":"differential equations,special functions","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Second solutions","og:description":"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/","article:published_time":"2026-08-27T13:14:35+00:00","article:modified_time":"2026-08-27T13:45:29+00:00","twitter:card":"summary","twitter:title":"Second solutions","twitter:description":"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247814","title":null,"description":"Examples of orthogonal polynomials and second solutions. How they behave with respect to x and with respect to n.","keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-27 12:12:33","updated":"2026-09-01 17:09:41","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/math\/\" title=\"Math\">Math<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tSecond solutions\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Math","link":"https:\/\/www.johndcook.com\/blog\/category\/math\/"},{"label":"Second solutions","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/27\/second-solutions\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247814"}],"version-history":[{"count":7,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247814\/revisions"}],"predecessor-version":[{"id":247821,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247814\/revisions\/247821"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247731,"date":"2026-08-26T13:51:13","date_gmt":"2026-08-26T18:51:13","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247731"},"modified":"2026-08-26T13:51:13","modified_gmt":"2026-08-26T18:51:13","slug":"what-is-the-quality-of-software-that-ai-writes","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/","title":{"rendered":"What is the quality of software that AI writes?"},"content":{"rendered":"<p>AI-powered coding agents increase productivity for many developers. But do these agents produce good-quality code?<\/p>\n<p>Some say this doesn&#8217;t matter, we are heading toward dark software factories with source code never inspected, and <a href=\"https:\/\/www.reddit.com\/r\/singularity\/comments\/1veslal\/elon_musk_the_next_step_is_getting_rid_of_source\/\">maybe<\/a> we should <a href=\"https:\/\/x.com\/elonmusk\/status\/2084304083851034949\">eliminate<\/a> source code altogether&#8212;&#8220;source code is the new assembly code&#8221;.<\/p>\n<p>Others have a different view. Humans sometimes need to debug source code. Source code may need to be audited by humans for compliance. Code should be clear enough for a human to inspect and reason about the algorithms and behavior. Also, good code quality can make the code more legible to agents and reduce unnecessary context.<\/p>\n<p>Developer teams can have many different ideas of what constitutes high-quality software and good coding style. Though there are many valid ways to write code, there is also wide consensus on general <a href=\"https:\/\/blog.codacy.com\/code-complexity\">principles<\/a> of code quality. For example, avoiding very large single functions or modules, avoiding code duplication, avoiding undisciplined feature creep or patchy code and avoiding unnecessarily deep class hierarchies or function call chains. Some coding style choices are testable empirically for impact on developer productivity. Furthermore, some code complexity measures can be computed objectively and programmatically.<\/p>\n<p>My experiences are with GPT 5.5 (Extra High reasoning) and 5.6 (Extra High, Max and occasionally Ultra). Much of my experience is &#8220;out of the box&#8221; usage of Codex, with simple AGENTS.md file, though I am working on <a href=\"https:\/\/openai.com\/index\/harness-engineering\">improving<\/a> the engineering of guidance files, and it is helping. My source code is mostly Python. Unfortunately it is difficult to generalize any one set of experiences universally, since developers have different code bases, languages, models, harnesses and AGENTS.md files. One-shotting a simple computer game or website would be very different from developing a complex research code in a new domain.<\/p>\n<p>At first glance, the AI-written code is not incomprehensible. It does not use odd variable names like &#8220;iiii&#8221; or &#8220;a87275,&#8221; and it does not look like it came out of an <a href=\"https:\/\/www.ioccc.org\/\">obfuscated code competition<\/a>. But, in my experience, still the generated code has deficiencies:<\/p>\n<ul>\n<li>The agent has a tendency to write much more code than is necessary (commonly 2-3X more&#8212;see also related findings <span style=\"color: #3366ff;\"><a style=\"color: #3366ff;\" href=\"https:\/\/arxiv.org\/abs\/2603.24755\">here<\/a><\/span>). Though it is capable of deleting code, its primary impulse seems to be to write more code.<\/li>\n<li>You can work with the agent to shorten the code, but it takes work. The agent it seems is not fluent in finding structural simplifications and then extracting commonalities. In one session I spent 1\/2 hour having the agent write a few hundred lines of code, and 4 hours to get it to shorten and simplify the code. You can imagine the kind of technical debt this would accumulate.<\/li>\n<li>It behaves as though code simplification is much more out of its reach than code generation. At times it just completely fails to do some simplification task I ask it to do.<\/li>\n<li>It has no instinct for when to break a file into multiple files for conceptual clarity, even if a file becomes over 10,000 lines long.<\/li>\n<li>It can reinvent a similar but different helper function in different code modules rather than designing a simple reusable function once.<\/li>\n<li>It can make massive function argument lists with 10-20 arguments rather than recognizing that the parameters may form a coherent concept representable as an abstraction or parameter object.<\/li>\n<li>Importantly, it can define functions based on abstractions that do not model the underlying domain well and are hard to decipher. When I called it on this, it said: &#8220;You\u2019re right. The code is naming implementation mechanics instead of stating intent &#8230; it forces the reader to mentally execute several layers of infrastructure just to discover that it means.&#8221;<\/li>\n<li>It often invents terminology that cannot instantly be understood by the reader (the source code analogy of <span style=\"color: #3366ff;\"><a style=\"color: #3366ff;\" href=\"https:\/\/sensible.com\/dont-make-me-think\/\">Don&#8217;t Make Me Think<\/a><\/span>).<\/li>\n<li>It can repeat the same expression multiple times instead of defining a variable with a meaningful name to represent the quantity.<\/li>\n<li>It can hardwire unexplained \u201cmagic constants\u201d into the code instead of defining them with meaningful names.<\/li>\n<\/ul>\n<p>Indeed, when pressed, the models are sometimes capable of doing better. For example, for a hard design problem, 5.6 Ultra was capable of creating a good object design that was a good match to the problem domain, when I asked it to look hard at the problem&#8212;better than the less sophisticated models.<\/p>\n<p>I would certainly expect that with more engineering of the agent guidance files, many or most of these problems would get better. However, it should not require extreme measures to get coding agents to write good code.<\/p>\n<p>I have not compared other coding agents, but it would not surprise me if they had similar issues. Rightly, the coding models have been optimized for their software development utility, and this has undoubtedly succeeded in a revolutionary way.<\/p>\n<p>It seems there is not yet a widely accepted code-quality benchmark playing the role for frontier coding models that SWE-bench has played for software engineering capability (though there are <a href=\"https:\/\/labs.scale.com\/leaderboard\/sweatlas-refactoring\">efforts<\/a>). It\u2019s especially interesting because many aspects of code quality are verifiable, making the problem seemingly quite amenable to treatment in post-training. I am hoping that someone can put together a good benchmark for this problem, and that the frontier labs will embrace these kinds of evaluations in model development.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AI-powered coding agents increase productivity for many developers. But do these agents produce good-quality code? Some say this doesn&#8217;t matter, we are heading toward dark software factories with source code never inspected, and maybe we should eliminate source code altogether&#8212;&#8220;source code is the new assembly code&#8221;. Others have a different view. Humans sometimes need to [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[260,16],"tags":[329,330,328],"class_list":["post-247731","post","type-post","status-publish","format-standard","hentry","category-ai","category-software-development","tag-ai-coding-tools","tag-ai-slop","tag-software-quality"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Wayne Joubert\"\/>\n\t<meta name=\"keywords\" content=\"ai coding tools,ai slop,software quality\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"What is the quality of software that AI writes?\" \/>\n\t\t<meta property=\"og:description\" content=\"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-26T18:51:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-26T18:51:13+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"What is the quality of software that AI writes?\" \/>\n\t\t<meta name=\"twitter:description\" content=\"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"What is the quality of software that AI writes?","description":"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/","robots":"max-image-preview:large","keywords":"ai coding tools,ai slop,software quality","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"What is the quality of software that AI writes?","og:description":"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/","article:published_time":"2026-08-26T18:51:13+00:00","article:modified_time":"2026-08-26T18:51:13+00:00","twitter:card":"summary","twitter:title":"What is the quality of software that AI writes?","twitter:description":"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247731","title":null,"description":"AI software agents can vastly increase developer productivity. But what is the quality of the code they produce? Here we examine some issues and concerns.","keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-24 19:33:34","updated":"2026-09-01 17:09:41","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/software-development\/\" title=\"Software development\">Software development<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWhat is the quality of software that AI writes?\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Software development","link":"https:\/\/www.johndcook.com\/blog\/category\/software-development\/"},{"label":"What is the quality of software that AI writes?","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/what-is-the-quality-of-software-that-ai-writes\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247731"}],"version-history":[{"count":65,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247731\/revisions"}],"predecessor-version":[{"id":247813,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247731\/revisions\/247813"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247744,"date":"2026-08-26T07:16:17","date_gmt":"2026-08-26T12:16:17","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247744"},"modified":"2026-08-26T07:20:09","modified_gmt":"2026-08-26T12:20:09","slug":"junk-solutions","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/","title":{"rendered":"Junk solutions"},"content":{"rendered":"<p>When you&#8217;re interested in studying a family of functions, it can be useful to look at a differential equation that the functions solve. This is a theme I&#8217;ve written about several times, most recently <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/10\/inverse-differential-equations\/\">here<\/a>\u00a0and <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/01\/why-polynomial-coefficients\/\">here<\/a>, but also three years ago <a href=\"https:\/\/www.johndcook.com\/blog\/2023\/07\/04\/useful-de\/\">here<\/a>.<\/p>\n<p>Orthogonal polynomials are mathematically elegant as well as very useful in applications [1]. Various families of orthogonal polynomials satisfy various differential equations. These equations have a polynomial and non-polynomial solutions. What use are the latter?<\/p>\n<p>If the differential equation modeled something physical, then the second solution would be necessary to have a complete basis of solutions. But if the differential equation is only instrumental in studying the orthogonal polynomials, what use is a non-polynomial solution?<\/p>\n<p>These non-polynomial solutions turn out to be useful. <strong>Just as &#8220;junk&#8221; DNA turned out not to be junk, these &#8220;junk&#8221; solutions are important<\/strong>. Junk DNA doesn&#8217;t directly code for proteins, but it regulates DNA that does code for proteins and serves other purposes. Similarly, these non-polynomial solutions carry information related to the polynomial solutions.<\/p>\n<p>For example, orthogonal polynomials are used to construct numerical integration methods, such as Gaussian quadrature, and the associated non-polynomial solutions describe the error in these integration methods. Incidentally, Gaussian quadrature is based on Legendre polynomials, mentioned in the <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/\">previous post<\/a>. For every family of orthogonal polynomials there is a corresponding integration method. See <a href=\"https:\/\/www.johndcook.com\/OrthogonalPolynomials.pdf\">these notes<\/a>.<\/p>\n<p>Another tie-in to recent posts is that these non-polynomial solutions are the minimal solution to the polynomial family&#8217;s <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/three-term-recurrences\/\">three-term recurrence<\/a>, the solution that takes <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/\">extra care<\/a> to compute numerically.<\/p>\n<p>This post has been very high-level, alluding to ideas without going into details. I&#8217;d like to write future posts that go into more depth regarding the ideas introduced here.<\/p>\n<p>&nbsp;<\/p>\n<p>[1] &#8220;Real analysts cannot do without Fourier, complex analysts cannot do without Laurent, and numerical analysts cannot do without Chebyshev [polynomials].&#8221; &#8212; Lloyd N. Trefethen&#8221;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When you&#8217;re interested in studying a family of functions, it can be useful to look at a differential equation that the functions solve. This is a theme I&#8217;ve written about several times, most recently here\u00a0and here, but also three years ago here. Orthogonal polynomials are mathematically elegant as well as very useful in applications [1]. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[47,129],"class_list":["post-247744","post","type-post","status-publish","format-standard","hentry","category-math","tag-differential-equations","tag-special-functions"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"differential equations,special functions\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Junk solutions\" \/>\n\t\t<meta property=\"og:description\" content=\"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-26T12:16:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-26T12:20:09+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Junk solutions\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Junk solutions","description":"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/","robots":"max-image-preview:large","keywords":"differential equations,special functions","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Junk solutions","og:description":"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/","article:published_time":"2026-08-26T12:16:17+00:00","article:modified_time":"2026-08-26T12:20:09+00:00","twitter:card":"summary","twitter:title":"Junk solutions","twitter:description":"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247744","title":null,"description":"A solution that seems to be just an unneeded artifact might turn out to be important. Example of orthogonal polynomials.","keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-26 11:15:47","updated":"2026-09-01 17:09:41","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/math\/\" title=\"Math\">Math<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tJunk solutions\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Math","link":"https:\/\/www.johndcook.com\/blog\/category\/math\/"},{"label":"Junk solutions","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/junk-solutions\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247744"}],"version-history":[{"count":3,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247744\/revisions"}],"predecessor-version":[{"id":247751,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247744\/revisions\/247751"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247742,"date":"2026-08-26T05:51:32","date_gmt":"2026-08-26T10:51:32","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247742"},"modified":"2026-08-26T05:51:32","modified_gmt":"2026-08-26T10:51:32","slug":"ultraspherical","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/","title":{"rendered":"Ultraspherical"},"content":{"rendered":"<p>When I hear the term <em>ultraspherical<\/em>\u00a0I think of something extremely spherical. For example, a baseball is spherical, but a billiard ball is more spherical. Maybe a highly polished billiard ball is ultraspherical.<\/p>\n<p>Using this line of thought, the term <strong>ultraspherical polynomial<\/strong>\u00a0is inexplicable. This is an example of the <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/23\/arcane-terminology\/\">arcane terminology<\/a> I wrote about recently. In this post I&#8217;ll explain what it conveys.<\/p>\n<p>A spherical polynomial is a polynomial that naturally falls out of solving Laplace&#8217;s equation in spherical coordinates, using separation of variables. Legendre polynomials are spherical polynomials.<\/p>\n<p><strong>Gegenbauer polynomials<\/strong> are so called because a man named Gegenbauer studied them, just as Legendre polynomials take their name from Legendre. Gegenbauer polynomials are also called ultraspherical polynomials. Why is that?<\/p>\n<p>There are two possible reasons. I&#8217;m not sure which is the historical reason, but both are plausible and are useful mnemonics.<\/p>\n<p>Ultraspherical polynomials are not extremely spherical, they&#8217;re <em>beyond<\/em> spherical in some sense. More modern terminology uses the hyper- prefix rather than ultra-, which helps a bit.<\/p>\n<p>Ultraspherical polynomials are beyond spherical in two ways. Gegenbauer polynomials are a generalization of Legendre polynomials, so they&#8217;re beyond Legendre polynomials in this sense.<\/p>\n<p>More importantly, Gegenbauer polynomials fall out of solving Laplace&#8217;s equation on a hypersphere, i.e. a sphere in \u211d<sup><em>n<\/em><\/sup>\u00a0for <em>n<\/em> &gt; 3, just as Legendre polynomials fall out of the case\u00a0<em>n<\/em> = 3. It makes sense to call these polynomials <strong>hyperspherical<\/strong> because they fall out of solving an equation on a hypersphere. Unfortunately the classical term is <em>ultraspherical<\/em> rather than <em>hyperspherical<\/em>.<\/p>\n<p>I think, but I&#8217;m not sure, that at one time higher dimensional spheres were called hyperspheres, but the the higher dimensional analog of spherical coordinates was called ultraspherical coordinates. If so, it would be understandable that the adjective modifying <em>coordinates<\/em> would be applied to the polynomials that result from solving equations in these coordinates.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When I hear the term ultraspherical\u00a0I think of something extremely spherical. For example, a baseball is spherical, but a billiard ball is more spherical. Maybe a highly polished billiard ball is ultraspherical. Using this line of thought, the term ultraspherical polynomial\u00a0is inexplicable. This is an example of the arcane terminology I wrote about recently. In [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[47,129],"class_list":["post-247742","post","type-post","status-publish","format-standard","hentry","category-math","tag-differential-equations","tag-special-functions"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"What are ultraspherical polynomials? What does &quot;ultra&quot; mean in this context?\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"differential equations,special functions\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Ultraspherical\" \/>\n\t\t<meta property=\"og:description\" content=\"What are ultraspherical polynomials? What does &quot;ultra&quot; mean in this context?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-26T10:51:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-26T10:51:32+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Ultraspherical\" \/>\n\t\t<meta name=\"twitter:description\" content=\"What are ultraspherical polynomials? What does &quot;ultra&quot; mean in this context?\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Ultraspherical","description":"What are ultraspherical polynomials? What does \"ultra\" mean in this context?","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/","robots":"max-image-preview:large","keywords":"differential equations,special functions","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Ultraspherical","og:description":"What are ultraspherical polynomials? What does &quot;ultra&quot; mean in this context?","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/","article:published_time":"2026-08-26T10:51:32+00:00","article:modified_time":"2026-08-26T10:51:32+00:00","twitter:card":"summary","twitter:title":"Ultraspherical","twitter:description":"What are ultraspherical polynomials? What does &quot;ultra&quot; mean in this context?","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247742","title":null,"description":"What are ultraspherical polynomials? What does \"ultra\" mean in this context?","keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-26 10:24:50","updated":"2026-09-01 17:09:42","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/math\/\" title=\"Math\">Math<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tUltraspherical\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Math","link":"https:\/\/www.johndcook.com\/blog\/category\/math\/"},{"label":"Ultraspherical","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/26\/ultraspherical\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247742"}],"version-history":[{"count":1,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247742\/revisions"}],"predecessor-version":[{"id":247743,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247742\/revisions\/247743"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":247737,"date":"2026-08-24T20:47:47","date_gmt":"2026-08-25T01:47:47","guid":{"rendered":"https:\/\/www.johndcook.com\/blog\/?p=247737"},"modified":"2026-08-30T20:44:15","modified_gmt":"2026-08-31T01:44:15","slug":"numerical-instability-recurrece","status":"publish","type":"post","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/","title":{"rendered":"Numerical (in)stability of recurrence relations"},"content":{"rendered":"<p>The <a href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/three-term-recurrences\/\">previous post<\/a> gave several examples of three-term recurrence relations for special functions. These relations can be computationally useful, but they have to be applied carefully.<\/p>\n<p>Several years ago I wrote a post on <a href=\"https:\/\/www.johndcook.com\/blog\/2020\/01\/17\/stable-recurrence-relations\/\">stable and unstable recurrences<\/a>. In that post I show that the stability of the recurrence relation for Bessel functions produces depends on which kind of Bessel function and which direction the recurrence is applied.<\/p>\n<p>In the forward direction, computing higher order values from lower order values, works well for Bessel functions of the second kind <em>Y<\/em><sub><em>n<\/em><\/sub> but not for Bessel functions of the first kind <em>J<\/em><sub><em>n<\/em><\/sub>. In the reverse direction, the recurrence is stable for <em>J<\/em><sub><em>n<\/em><\/sub> but not for <em>Y<\/em><sub><em>n<\/em><\/sub>.<\/p>\n<p>I didn&#8217;t explain in that post why this is. In this post I will.<\/p>\n<p>Second order linear difference equations have two independent solutions, just like second order linear differential equations. For both kinds of equations, all solutions are linear combinations of the two solutions. Suppose one solution grows with <em>n<\/em> and the other decays. You may want to compute the decaying solution, but in doing so you might pick up a small component of the growing solution due to rounding error. <a href=\"https:\/\/www.johndcook.com\/blog\/2013\/11\/12\/sensitive-dependence-on-initial-conditions\/\">This post<\/a> illustrates this phenomena for differential equations, and <a href=\"https:\/\/www.johndcook.com\/blog\/2020\/01\/17\/stable-recurrence-relations\/\">this post<\/a> illustrates it for difference equations.<\/p>\n<p>When you look at a plot of Bessel functions in a text book, you&#8217;ll probably see a few plots of <em>J<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) and<em>Y<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) for a few small values of\u00a0<em>n<\/em>. The functions seem to behave roughly the same way, like sine and cosine. And that&#8217;s true,\u00a0<strong>as functions of <em>x<\/em><\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium\" src=\"https:\/\/www.johndcook.com\/bessel_vary_x.png\" width=\"480\" height=\"360\" \/><\/p>\n<p>But it&#8217;s not true for <em>J<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) and<em>Y<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) as functions of\u00a0<em>n<\/em> for fixed\u00a0<em>x<\/em>. As\u00a0<em>n<\/em> increases, <em>J<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) decays to zero and <em>Y<\/em><sub><em>n<\/em><\/sub>(<em>x<\/em>) goes off to \u2212\u221e.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium\" src=\"https:\/\/www.johndcook.com\/bessel_vary_nu.png\" width=\"480\" height=\"360\" \/><\/p>\n<p>That&#8217;s the source of numerical instability. And there will be similar instability problems for other recurrences where the ratios of the two independent solutions goes to zero or infinity as a function of\u00a0<em>n<\/em>.<\/p>\n<p>There are techniques for computing the solution that does not diverge, the so-called minimal solution, such as Miller&#8217;s algorithm mentioned <a href=\"https:\/\/www.johndcook.com\/blog\/2020\/01\/17\/stable-recurrence-relations\/\">here<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The previous post gave several examples of three-term recurrence relations for special functions. These relations can be computationally useful, but they have to be applied carefully. Several years ago I wrote a post on stable and unstable recurrences. In that post I show that the stability of the recurrence relation for Bessel functions produces depends [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[9],"tags":[129],"class_list":["post-247737","post","type-post","status-publish","format-standard","hentry","category-math","tag-special-functions"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Why are recurrence relations stable in one direction and unstable in the other?\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"John\"\/>\n\t<meta name=\"keywords\" content=\"special functions\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"John D. Cook | Applied Mathematics Consulting\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Numerical (in)stability of recurrence relations\" \/>\n\t\t<meta property=\"og:description\" content=\"Why are recurrence relations stable in one direction and unstable in the other?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-08-25T01:47:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-08-31T01:44:15+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Numerical (in)stability of recurrence relations\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Why are recurrence relations stable in one direction and unstable in the other?\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Numerical (in)stability of recurrence relations","description":"Why are recurrence relations stable in one direction and unstable in the other?","canonical_url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/","robots":"max-image-preview:large","keywords":"special functions","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"John D. Cook | Applied Mathematics Consulting","og:type":"article","og:title":"Numerical (in)stability of recurrence relations","og:description":"Why are recurrence relations stable in one direction and unstable in the other?","og:url":"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/","article:published_time":"2026-08-25T01:47:47+00:00","article:modified_time":"2026-08-31T01:44:15+00:00","twitter:card":"summary","twitter:title":"Numerical (in)stability of recurrence relations","twitter:description":"Why are recurrence relations stable in one direction and unstable in the other?","twitter:image":"https:\/\/www.johndcook.com\/blog\/wp-content\/uploads\/2022\/05\/twittercard.png"},"aioseo_meta_data":{"post_id":"247737","title":null,"description":"Why are recurrence relations stable in one direction and unstable in the other?","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"created":"2026-08-25 00:55:15","updated":"2026-08-31 01:45:58","ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.johndcook.com\/blog\/category\/math\/\" title=\"Math\">Math<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tNumerical (in)stability of recurrence relations\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.johndcook.com\/blog"},{"label":"Math","link":"https:\/\/www.johndcook.com\/blog\/category\/math\/"},{"label":"Numerical (in)stability of recurrence relations","link":"https:\/\/www.johndcook.com\/blog\/2026\/08\/24\/numerical-instability-recurrece\/"}],"_links":{"self":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/comments?post=247737"}],"version-history":[{"count":3,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247737\/revisions"}],"predecessor-version":[{"id":247829,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/posts\/247737\/revisions\/247829"}],"wp:attachment":[{"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/media?parent=247737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/categories?post=247737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.johndcook.com\/blog\/wp-json\/wp\/v2\/tags?post=247737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}]