From 1b8c26385458f988ea81b9d62bce0d10ba568fd9 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 28 Jan 2025 02:54:43 +0000 Subject: [PATCH] Build --- .../index.html | 230 + .../index.html | 175 +- .../index.html | 175 +- .../color-cube-meets-rubik-s-cube/index.html | 175 +- .../index.html | 309 + .../index.html | 175 +- .../rotation-matrices/index.html | 173 +- .../index.html | 175 +- .../the-soma-cube-again/index.html | 175 +- .../index.html | 175 +- .../index.html | 175 +- .../index.html | 175 +- .../index.html | 175 +- .../exploring-matrices-exercises/index.html | 175 +- .../exploring-matrices/index.html | 175 +- .../grafix-users-guide/index.html | 175 +- .../happy-birthday-john-gilbert/index.html | 175 +- .../matrices-in-action-grafix-2-0/index.html | 175 +- .../index.html | 256 + .../my-chat-with-chatgpt/index.html | 175 +- .../index.html | 305 + .../index.html | 175 +- 2023/season-s-greetings/index.html | 213 + .../index.html | 175 +- .../index.html | 175 +- 2023/special-notice/index.html | 217 + .../three-wordle-assistants/index.html | 175 +- .../index.html | 175 +- 2023/wordle-sneak-previews/index.html | 230 + .../index.html | 175 +- .../a-treacherous-svd/index.html | 175 +- .../chaotic-swinging-sticks/index.html | 175 +- .../closest-pair-of-points-problem/index.html | 173 +- .../index.html | 173 +- .../index.html | 175 +- .../index.html | 175 +- .../ibm-hexadecimal-floating-point/index.html | 175 +- .../lights-camera-action-and-sound/index.html | 175 +- .../index.html" | 175 +- .../na-digest-and-na-net/index.html | 175 +- .../nick-higham-1961-2024/index.html | 175 +- 2024/r-squared-is-bigger-better/index.html | 324 + .../index.html | 175 +- .../index.html | 175 +- .../index.html | 175 +- .../index.html" | 175 +- .../index.html | 175 +- .../index.html | 175 +- 404.html | 93 + Gemfile | 15 - LICENSE | 21 - README.md | 26 - _config.yml | 98 - _data/authors.yml | 6 - _posts/mathworks/2022-10-17-p=9309.md | 170 - _posts/mathworks/2022-10-21-p=9375.md | 91 - _posts/mathworks/2023-12-20-p=10936.md | 74 - _posts/mathworks/2023-3-24-p=10155.md | 91 - _posts/mathworks/2023-4-1-p=10251.md | 166 - _posts/mathworks/2023-4-4-p=10302.md | 78 - _posts/mathworks/2023-6-28-p=10382.md | 117 - _posts/mathworks/2024-5-4-p=11136.md | 185 - about/index.html | 107 + archive/index.html | 386 + assets/css/highlight.css | 199 + assets/css/style.css | 219 + assets/images/favicon.png | Bin 0 -> 689723 bytes assets/images/hpc-social-blue.png | Bin 0 -> 689723 bytes assets/images/icon/facebook.svg | 6 + assets/images/icon/github.svg | 6 + assets/images/icon/instagram.svg | 6 + assets/images/icon/linkedin.svg | 6 + assets/images/icon/me.svg | 65 + assets/images/icon/twitter.svg | 6 + assets/images/icon/whatsapp.svg | 6 + assets/images/icon/youtube.svg | 6 + assets/scripts.js | 12 + atom.xml | 12932 ++++++++++++++++ feed.json | 704 + feed.xml | 3791 +++++ index.html | 207 +- page/2/index.html | 207 + page/3/index.html | 145 + pages/404.md | 7 - pages/about.md | 19 - pages/archive.md | 21 - pages/atom.xml | 29 - pages/feed.json | 61 - pages/tags.md | 29 - robots.txt | 1 + sitemap.xml | 213 + tags/index.html | 96 + 92 files changed, 27774 insertions(+), 2027 deletions(-) create mode 100644 2022/an-interactive-version-of-colorcubes/index.html rename _posts/mathworks/2022-7-21-p=8810.md => 2022/an-interesting-and-perhaps-new-matrix/index.html (62%) rename _posts/mathworks/2022-10-23-p=9417.md => 2022/christian-reinsch-roland-bulirsch-and-the-svd/index.html (69%) rename _posts/mathworks/2022-12-10-p=9491.md => 2022/color-cube-meets-rubik-s-cube/index.html (53%) create mode 100644 2022/modfun-a-short-program-produces-impressive-graphics/index.html rename _posts/mathworks/2022-8-21-p=8840.md => 2022/polygons-polyshapes-and-puzzles/index.html (66%) rename _posts/mathworks/2022-5-18-p=8651.md => 2022/rotation-matrices/index.html (65%) rename _posts/mathworks/2022-9-6-p=9032.md => 2022/rubik-s-cube-superflips-and-god-s-number/index.html (63%) rename _posts/mathworks/2022-6-10-p=8768.md => 2022/the-soma-cube-again/index.html (51%) rename _posts/mathworks/2022-9-25-p=9227.md => 2022/trio-a-wooden-puzzle-from-the-czech-republic/index.html (58%) rename _posts/mathworks/2023-6-17-p=10373.md => 2023/arls-automatically-regularized-least-squares/index.html (66%) rename _posts/mathworks/2023-12-13-p=10855.md => 2023/blog-post-number-300-vibrating-logo/index.html (64%) rename _posts/mathworks/2023-11-16-p=10812.md => 2023/bouncing-bucky-ball-at-flipbook-mini-hack/index.html (56%) rename _posts/mathworks/2023-9-25-p=10694.md => 2023/exploring-matrices-exercises/index.html (61%) rename _posts/mathworks/2023-9-12-p=10526.md => 2023/exploring-matrices/index.html (74%) rename _posts/mathworks/2023-2-10-p=9678.md => 2023/grafix-users-guide/index.html (70%) rename _posts/mathworks/2023-6-7-p=10349.md => 2023/happy-birthday-john-gilbert/index.html (54%) rename _posts/mathworks/2023-2-4-p=9612.md => 2023/matrices-in-action-grafix-2-0/index.html (65%) create mode 100644 2023/minigallery-sampler-of-matlab-test-matrices/index.html rename _posts/mathworks/2023-2-22-p=9816.md => 2023/my-chat-with-chatgpt/index.html (55%) create mode 100644 2023/my-chat-with-ernie-a-chinese-chat-bot/index.html rename _posts/mathworks/2023-3-3-p=9867.md => 2023/r2-d2-rotations-and-dilations-in-two-dimensions/index.html (54%) create mode 100644 2023/season-s-greetings/index.html rename _posts/mathworks/2023-1-10-p=9596.md => 2023/singular-matrix-pencils-and-the-qz-algorithm-update/index.html (65%) rename _posts/mathworks/2023-1-5-p=9569.md => 2023/singular-matrix-pencils-and-the-qz-algorithm/index.html (54%) create mode 100644 2023/special-notice/index.html rename _posts/mathworks/2023-3-28-p=10191.md => 2023/three-wordle-assistants/index.html (66%) rename _posts/mathworks/2023-3-11-p=10023.md => 2023/wordbot-and-words-my-wordle-assistants/index.html (58%) create mode 100644 2023/wordle-sneak-previews/index.html rename _posts/mathworks/2024-5-19-p=11276.md => 2024/a-sixty-year-old-program-for-predicting-the-future/index.html (69%) rename _posts/mathworks/2024-7-15-p=11379.md => 2024/a-treacherous-svd/index.html (60%) rename _posts/mathworks/2024-2-20-p=11022.md => 2024/chaotic-swinging-sticks/index.html (51%) rename _posts/mathworks/2024-3-28-p=11120.md => 2024/closest-pair-of-points-problem/index.html (63%) rename _posts/mathworks/2024-12-18-p=12305.md => 2024/code-for-sonic-and-ten-sonic-movies/index.html (54%) rename _posts/mathworks/2024-10-7-p=11696.md => 2024/experience-with-chatbots-generating-matlab/index.html (59%) rename _posts/mathworks/2024-1-12-p=10964.md => 2024/exponential-fitting-separable-least-squares-and-quahogs/index.html (67%) rename _posts/mathworks/2024-5-25-p=11324.md => 2024/ibm-hexadecimal-floating-point/index.html (66%) rename _posts/mathworks/2024-11-16-p=11916.md => 2024/lights-camera-action-and-sound/index.html (67%) rename _posts/mathworks/2024-10-23-p=11813.md => "2024/m\303\266bius-mertens-and-redheffer/index.html" (75%) rename _posts/mathworks/2024-8-31-p=11437.md => 2024/na-digest-and-na-net/index.html (76%) rename _posts/mathworks/2024-1-25-p=10982.md => 2024/nick-higham-1961-2024/index.html (55%) create mode 100644 2024/r-squared-is-bigger-better/index.html rename _posts/mathworks/2024-9-30-p=11648.md => 2024/redheffer-and-mertens-accelerated/index.html (57%) rename _posts/mathworks/2024-9-27-p=11609.md => 2024/redheffer-and-mertens-continued/index.html (51%) rename _posts/mathworks/2024-9-23-p=11534.md => 2024/redheffer-mertens-and-one-million-dollars/index.html (75%) rename _posts/mathworks/2024-12-8-p=12099.md => "2024/sonic-adds-sound-to-logo-recam\303\241n-chaos/index.html" (51%) rename _posts/mathworks/2024-6-27-p=11345.md => 2024/supersum-in-defense-of-floating-point-arithmetic/index.html (64%) rename _posts/mathworks/2024-3-15-p=11077.md => 2024/twenty-years-of-parallel-matlab/index.html (53%) create mode 100644 404.html delete mode 100644 Gemfile delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 _config.yml delete mode 100644 _data/authors.yml delete mode 100644 _posts/mathworks/2022-10-17-p=9309.md delete mode 100644 _posts/mathworks/2022-10-21-p=9375.md delete mode 100644 _posts/mathworks/2023-12-20-p=10936.md delete mode 100644 _posts/mathworks/2023-3-24-p=10155.md delete mode 100644 _posts/mathworks/2023-4-1-p=10251.md delete mode 100644 _posts/mathworks/2023-4-4-p=10302.md delete mode 100644 _posts/mathworks/2023-6-28-p=10382.md delete mode 100644 _posts/mathworks/2024-5-4-p=11136.md create mode 100644 about/index.html create mode 100644 archive/index.html create mode 100644 assets/css/highlight.css create mode 100644 assets/css/style.css create mode 100644 assets/images/favicon.png create mode 100644 assets/images/hpc-social-blue.png create mode 100644 assets/images/icon/facebook.svg create mode 100644 assets/images/icon/github.svg create mode 100644 assets/images/icon/instagram.svg create mode 100644 assets/images/icon/linkedin.svg create mode 100644 assets/images/icon/me.svg create mode 100644 assets/images/icon/twitter.svg create mode 100644 assets/images/icon/whatsapp.svg create mode 100644 assets/images/icon/youtube.svg create mode 100644 assets/scripts.js create mode 100644 atom.xml create mode 100644 feed.json create mode 100644 feed.xml create mode 100644 page/2/index.html create mode 100644 page/3/index.html delete mode 100755 pages/404.md delete mode 100755 pages/about.md delete mode 100644 pages/archive.md delete mode 100755 pages/atom.xml delete mode 100755 pages/feed.json delete mode 100644 pages/tags.md create mode 100644 robots.txt create mode 100644 sitemap.xml create mode 100644 tags/index.html diff --git a/2022/an-interactive-version-of-colorcubes/index.html b/2022/an-interactive-version-of-colorcubes/index.html new file mode 100644 index 0000000..5905a64 --- /dev/null +++ b/2022/an-interactive-version-of-colorcubes/index.html @@ -0,0 +1,230 @@ + + + + + + + An Interactive Version of colorcubes - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

An Interactive Version of colorcubes

+

A 231-character static version of colorcubes in the current MiniHack generated quite a bit of interest. So I am posting the full version, where you can change number of cubes and the view point, at this link.

+

Contents

+

Animation

+

Quiz

What is the color of the cubelet, or cubelets, in the center?

+


Get + the MATLAB code

+ Published with MATLAB® R2022a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-7-21-p=8810.md b/2022/an-interesting-and-perhaps-new-matrix/index.html similarity index 62% rename from _posts/mathworks/2022-7-21-p=8810.md rename to 2022/an-interesting-and-perhaps-new-matrix/index.html index 517ead2..88c2ae4 100644 --- a/_posts/mathworks/2022-7-21-p=8810.md +++ b/2022/an-interesting-and-perhaps-new-matrix/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-07-21 04:38:23' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/07/20/an-interesting-and-perhaps-new-matrix/?s_tid=feedtopost -slug: an-interesting-and-perhaps-new-matrix -title: An Interesting, and Perhaps New, Matrix ---- - -

I do not recall having seen this matrix before, but I will not be surprised to learn that somebody else already knows all about it, especially if that person's name is Nick.

+ + + + + + + An Interesting, and Perhaps New, Matrix - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

An Interesting, and Perhaps New, Matrix

+

I do not recall having seen this matrix before, but I will not be surprised to learn that somebody else already knows all about it, especially if that person's name is Nick.

Contents

Q

I've been investigating the matrices generated by this elegant one-liner.

    Q = @(n) (-n:n).^2 + (-n:n)'.^2;
@@ -300,4 +367,76 @@ 

Q

I've be % Comments in the Comments, or in email to me, are welcome. ##### SOURCE END ##### 4c513405f3644e5fbcae1bf70683cb1d ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-10-23-p=9417.md b/2022/christian-reinsch-roland-bulirsch-and-the-svd/index.html similarity index 69% rename from _posts/mathworks/2022-10-23-p=9417.md rename to 2022/christian-reinsch-roland-bulirsch-and-the-svd/index.html index 647cf11..92c7bb0 100644 --- a/_posts/mathworks/2022-10-23-p=9417.md +++ b/2022/christian-reinsch-roland-bulirsch-and-the-svd/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-10-23 23:41:27' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/10/23/christian-reinsch-roland-bulirsch-and-the-svd/?s_tid=feedtopost -slug: christian-reinsch-roland-bulirsch-and-the-svd -title: Christian Reinsch, Roland Bulirsch, and the SVD ---- - -

Christian Reinsch and Roland Bulirsch both passed away recently, Reinsch on October 8 and Bulirsch on September 21. Reinsch was 88 years old and Bulirsch was 89. Both of them were retired professors of numerical analysis at the Technical University of Munich. Both of them were friends of mine. But in almost all other ways, they were very different people.

+ + + + + + + Christian Reinsch, Roland Bulirsch, and the SVD - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Christian Reinsch, Roland Bulirsch, and the SVD

+

Christian Reinsch and Roland Bulirsch both passed away recently, Reinsch on October 8 and Bulirsch on September 21. Reinsch was 88 years old and Bulirsch was 89. Both of them were retired professors of numerical analysis at the Technical University of Munich. Both of them were friends of mine. But in almost all other ways, they were very different people.

Contents

Wilkinson and Reinsch

The Handbook for Automatic Computation, Volume II, Linear Algebra, is a research monograph published in 1971 by Springer-Verlag. This Handbook was edited by J. H. Wilkinson and Christian Reinsch and includes dozens of Algol procedures by 19 different authors for solving systems of simultaneous equations and computing matrix eigenvalues and singular values.

Wilkinson and colleagues at the National Physical Laboratory in Teddington, England wrote around half of the Algol procedures in the Handbook. Reinsch authored several procedures himself and reviewed and tested most, if not all, of the entire Handbook.

@@ -261,4 +328,76 @@

Munich Visit

My la % to polish off a few of those one-liter German beer steins before % closing down the place. ##### SOURCE END ##### f2dde2cc84e245d09b99f58b9781b0eb ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-12-10-p=9491.md b/2022/color-cube-meets-rubik-s-cube/index.html similarity index 53% rename from _posts/mathworks/2022-12-10-p=9491.md rename to 2022/color-cube-meets-rubik-s-cube/index.html index d510a65..52d127a 100644 --- a/_posts/mathworks/2022-12-10-p=9491.md +++ b/2022/color-cube-meets-rubik-s-cube/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-12-10 02:41:01' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/12/09/color-cube-meets-rubiks-cube/?s_tid=feedtopost -slug: color-cube-meets-rubik-s-cube -title: Color Cube Meets Rubik’s Cube ---- - -

I have made a half dozen blog posts about Rubik's Cube so far this year. And, during the MATLAB Central Mini Hack in October, I resurrected an old code about the Color Cube. Now, a combination of the two, Rubik/Color Qube, creates an elegant tool for investigating Matrices in Action.

+ + + + + + + Color Cube Meets Rubik’s Cube - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Color Cube Meets Rubik’s Cube

+

I have made a half dozen blog posts about Rubik's Cube so far this year. And, during the MATLAB Central Mini Hack in October, I resurrected an old code about the Color Cube. Now, a combination of the two, Rubik/Color Qube, creates an elegant tool for investigating Matrices in Action.

Contents

Opening

Here is the opening screen shot of Rubik/Color Qube, one of the most elaborate MATLAB programs that I have ever written.

@@ -197,4 +264,76 @@

Software

Qube< % |Qube| is available as a self-extracting MATLAB archive at this link, % . ##### SOURCE END ##### ce9c453c88254608ad0e691ca4711df7 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/2022/modfun-a-short-program-produces-impressive-graphics/index.html b/2022/modfun-a-short-program-produces-impressive-graphics/index.html new file mode 100644 index 0000000..c80b473 --- /dev/null +++ b/2022/modfun-a-short-program-produces-impressive-graphics/index.html @@ -0,0 +1,309 @@ + + + + + + + modfun, A Short Program Produces Impressive Graphics - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

modfun, A Short Program Produces Impressive Graphics

+

This nifty graphics gem started with a contribution by Paul Villain to the MATLAB 2022 Mini Hack, currently taking place on MATLAB Central.

+

Contents

+

modfun

Villain's contribution is 102 mod 500 . My rewrite is modfun. Villain's 102 and 500 become the parameters m and n.

+
  modfun(m,n) connects n points, z(j), equally spaced
+  around the complex unit circle, by n+1 straight lines.
+  The j-th line connects z(j+1) to z(mod(j*m,n)+1).

code

The basic code uses complex arithmetic and is only eight lines long. When the graphics is done with line instead of plot, it is not necessary to use hold on.

+
  function modfun(m,n)
+      init_fig
+      z = exp(2i*pi*(0:n)/n);
+      for j = 0:n
+          zj = [z(j+1),z(mod(j*m,n)+1)];
+          line(real(zj),imag(zj))
+      end
+  end

The initialization makes line possible.

+
  function init_fig
+      axis([-1 1 -1 1])
+      axis square
+      axis off
+  end

Animation

This animation of modfun(105,200) has one frame for every five lines.

+

+

Gallery

A sample.

+

+

+

Quiz

Match these calls to modfun to the plots in the Gallery.

+
  modfun(88,179)
+  modfun(89,220)
+  modfun(99,200)
+  modfun(101,200)
+  modfun(111,200)
+  modfun(113,188)
+  modfun(126,188)
+  modfun(126,200)

Software

An interactive modfun.

+

modfun.m.

+


Get + the MATLAB code

+ Published with MATLAB® R2022a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-8-21-p=8840.md b/2022/polygons-polyshapes-and-puzzles/index.html similarity index 66% rename from _posts/mathworks/2022-8-21-p=8840.md rename to 2022/polygons-polyshapes-and-puzzles/index.html index 3892a8b..c062bd6 100644 --- a/_posts/mathworks/2022-8-21-p=8840.md +++ b/2022/polygons-polyshapes-and-puzzles/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-08-21 15:42:36' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/08/21/polygons-polyshapes-and-puzzles/?s_tid=feedtopost -slug: polygons-polyshapes-and-puzzles -title: Polygons, Polyshapes and Puzzles ---- - -

Until recently, I knew nothing about the polyshape object in MATLAB. Now I can use polyshape to simulate an extraordinary puzzle.

+ + + + + + + Polygons, Polyshapes and Puzzles - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Polygons, Polyshapes and Puzzles

+

Until recently, I knew nothing about the polyshape object in MATLAB. Now I can use polyshape to simulate an extraordinary puzzle.

Contents

Puzzles

The Web site Art of Play, from some folks in San Diego, has well over two-hundred puzzles. Recently, one of their most popular puzzles, Mighty Cheese, caught my attention. The idea is to move the slices of plastic cheese around within the frame in order to create a hole large enough to hold the little plastic mouse. However, when I last checked, Mighty Cheese was sold out. Not wanting to be dissuaded by the unavailability of the puzzle itself, and not knowing the solution, I set out to build a simulator.

@@ -250,4 +317,76 @@

Software

My code i % . ##### SOURCE END ##### 2f68df87f4004e7ea2832e4310206744 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-5-18-p=8651.md b/2022/rotation-matrices/index.html similarity index 65% rename from _posts/mathworks/2022-5-18-p=8651.md rename to 2022/rotation-matrices/index.html index aaa9f05..f94663a 100644 --- a/_posts/mathworks/2022-5-18-p=8651.md +++ b/2022/rotation-matrices/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-05-18 23:50:24' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/05/18/rotation-matrices/?s_tid=feedtopost -slug: rotation-matrices -title: Rotation Matrices ---- - -

The matrices in the following animations are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to Computer Added Design packages, to Computer Graphics Imagery in films, and to most popular video games. Many modern computers contain GPUs, Graphic Processing Units, which are optimized to compute the product of these matrices.

+ + + + + + + Rotation Matrices - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Rotation Matrices

+

The matrices in the following animations are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to Computer Added Design packages, to Computer Graphics Imagery in films, and to most popular video games. Many modern computers contain GPUs, Graphic Processing Units, which are optimized to compute the product of these matrices.

Contents

Rotations

The homogeneous coordinates system used in today's computer graphics software and hardware makes it possible to describe rotations, translations and many other operations with 3-by-3 and 4-by-4 matrices. These matrices operate on vectors with the position of an object, x, y and z , in the first three components.

Rotations about the coordinate axes are described by three matrices. Rotations about the x -axis are produced by $R_x$, which rotates y and z, while leaving x unchanged.

@@ -264,4 +331,74 @@

Software

The sourc ##### SOURCE END ##### fac94086e84b4ca1b5df2dbc8d19f63c ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-9-6-p=9032.md b/2022/rubik-s-cube-superflips-and-god-s-number/index.html similarity index 63% rename from _posts/mathworks/2022-9-6-p=9032.md rename to 2022/rubik-s-cube-superflips-and-god-s-number/index.html index d61846a..0b127b4 100644 --- a/_posts/mathworks/2022-9-6-p=9032.md +++ b/2022/rubik-s-cube-superflips-and-god-s-number/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-09-06 02:00:24' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/09/05/rubiks-cube-superflips-and-gods-number/?s_tid=feedtopost -slug: rubik-s-cube-superflips-and-god-s-number -title: Rubik’s Cube Superflips and God’s Number ---- - -
  • How hard is it to solve a Rubik's Cube?
  • When can you say that your Rubik's Cube is completely scrambled?
  • Why might the answer depend on where you went to school?
  • What interesting mathematical questions are involved?
+ + + + + + + Rubik’s Cube Superflips and God’s Number - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Rubik’s Cube Superflips and God’s Number

+
  • How hard is it to solve a Rubik's Cube?
  • When can you say that your Rubik's Cube is completely scrambled?
  • Why might the answer depend on where you went to school?
  • What interesting mathematical questions are involved?

Contents

Metrics

The difficulty of solving any configuration of a Rubik's Cube is the smallest number of moves required to return to the intial configuration where each face is showing a single color.

But what, exactly, is a move? The so-called quarter-turn metric says a move is turning any face by 90 degrees. The half-turn metric says turning any face by either 90 or 180 degrees is a single move. For example, using Singmaster notation and the quarter-turn metric, the sequence "L L", which turns the left face twice in the same direction, is two moves. But in the half-move metric, the sequence becomes "L2" and counts as a single move.

@@ -262,4 +329,76 @@

Compare

Let's comp % % ##### SOURCE END ##### 552a77033bf74984addf11ae10f9bb2e ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-6-10-p=8768.md b/2022/the-soma-cube-again/index.html similarity index 51% rename from _posts/mathworks/2022-6-10-p=8768.md rename to 2022/the-soma-cube-again/index.html index bae44b8..b9f654b 100644 --- a/_posts/mathworks/2022-6-10-p=8768.md +++ b/2022/the-soma-cube-again/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-06-10 09:07:52' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/06/10/the-soma-cube-again/?s_tid=feedtopost -slug: the-soma-cube-again -title: The Soma Cube, Again ---- - -

The Soma Cube brings back memories.

+ + + + + + + The Soma Cube, Again - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

The Soma Cube, Again

+

The Soma Cube brings back memories.

Contents

Piet Hein

Piet Hein (1905-1996) was an extraordinary Danish inventor, mathematician, poet and philosopher. He invented the Soma Cube puzzle in 1933. I wrote a blog post about Hein and some of his creations several years ago, Soma Cube 2016.

The Soma Cube puzzle has seven pieces. One of them is a V-shaped piece made from three cubelets. The other six pieces are L, T, Z, R, S, and Y with four cubelets each. That's a total of 27 cubelets, just enough to make a 3-by-3-by-3 cube. Sound familiar?

@@ -136,4 +203,76 @@

Update

I have comb % https://blogs.mathworks.com/cleve/files/Soma_osf.m> ##### SOURCE END ##### ba03413b3d6846149e5b9f9e92eb3300 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2022-9-25-p=9227.md b/2022/trio-a-wooden-puzzle-from-the-czech-republic/index.html similarity index 58% rename from _posts/mathworks/2022-9-25-p=9227.md rename to 2022/trio-a-wooden-puzzle-from-the-czech-republic/index.html index 1f5c05b..5a56d10 100644 --- a/_posts/mathworks/2022-9-25-p=9227.md +++ b/2022/trio-a-wooden-puzzle-from-the-czech-republic/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-09-25 17:00:41' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/09/25/trio-a-wooden-puzzle-from-the-czech-republic/?s_tid=feedtopost -slug: trio-a-wooden-puzzle-from-the-czech-republic -title: Trio, A Wooden Puzzle from the Czech Republic ---- - -

"Clever Toys" is a puzzle company in the Czech Republic. Their Web site describes five different hand-made, wooden puzzles that are related mathematically to the Rubik's Cube.

+ + + + + + + Trio, A Wooden Puzzle from the Czech Republic - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Trio, A Wooden Puzzle from the Czech Republic

+

"Clever Toys" is a puzzle company in the Czech Republic. Their Web site describes five different hand-made, wooden puzzles that are related mathematically to the Rubik's Cube.

Contents

Puzzle

Here is the photo of the puzzle "Trio".

@@ -210,4 +277,76 @@

Thanks

Thanks to S %% Thanks % Thanks to Steve Eddins and Tom Lane for help with this post. ##### SOURCE END ##### 233d0111a3a04a7896bd6aac6263df7c ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-6-17-p=10373.md b/2023/arls-automatically-regularized-least-squares/index.html similarity index 66% rename from _posts/mathworks/2023-6-17-p=10373.md rename to 2023/arls-automatically-regularized-least-squares/index.html index b2a9104..9022ccd 100644 --- a/_posts/mathworks/2023-6-17-p=10373.md +++ b/2023/arls-automatically-regularized-least-squares/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-06-17 00:57:05' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/06/16/arls-automatically-regularized-least-squares/?s_tid=feedtopost -slug: arls-automatically-regularized-least-squares -title: ARLS, Automatically Regularized Least Squares ---- - -

(I have a guest blogger today. Ron Jones worked with me in 1985 for his Ph. D. from the University of New Mexico. He retired recently after nearly 40 years at Sandia National Labs in Albuquerque and now has a chance to return to the problem he studied in his thesis. -- CBM)

+ + + + + + + ARLS, Automatically Regularized Least Squares - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

ARLS, Automatically Regularized Least Squares

+

(I have a guest blogger today. Ron Jones worked with me in 1985 for his Ph. D. from the University of New Mexico. He retired recently after nearly 40 years at Sandia National Labs in Albuquerque and now has a chance to return to the problem he studied in his thesis. -- CBM)

by Rondall Jones, rejones7@msn.com

Our interest is in automatically solving difficult linear systems,

  A*x = b

Such systems often arise, for example, in "inverse problems" in which the analyst is trying to reverse the effects of natural smoothing processes such as heat dissipation, optical blurring, or indirect sensing. These problems exhibit "ill-conditioning", which means that the solution results are overly sensitive to insignificant changes to the observations, which are given in the right-hand-side vector, b .

@@ -242,4 +309,76 @@ % . ##### SOURCE END ##### 95d95d5b92ad4c4ca262dfdb5ff7efe9 ---> \ No newline at end of file +--> + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-12-13-p=10855.md b/2023/blog-post-number-300-vibrating-logo/index.html similarity index 64% rename from _posts/mathworks/2023-12-13-p=10855.md rename to 2023/blog-post-number-300-vibrating-logo/index.html index 76c0c8e..1b91edf 100644 --- a/_posts/mathworks/2023-12-13-p=10855.md +++ b/2023/blog-post-number-300-vibrating-logo/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-12-13 18:23:26' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo/?s_tid=feedtopost -slug: blog-post-number-300-vibrating-logo -title: Blog Post Number 300, Vibrating Logo ---- - -

This is post number 300 of Cleve's Corner blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.

+ + + + + + + Blog Post Number 300, Vibrating Logo - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Blog Post Number 300, Vibrating Logo

+

This is post number 300 of Cleve's Corner blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.

Contents

Vibrating Logo

For my 300-th post, I want to take another look at our MathWorks logo. Here is a modified version of one of the animations that I entered in the recent MATLAB Flipbook Mini Hack.

@@ -316,4 +383,76 @@

vibrating_logo

\ No newline at end of file
+-->
+
+
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-11-16-p=10812.md b/2023/bouncing-bucky-ball-at-flipbook-mini-hack/index.html similarity index 56% rename from _posts/mathworks/2023-11-16-p=10812.md rename to 2023/bouncing-bucky-ball-at-flipbook-mini-hack/index.html index f269c1d..5720cb1 100644 --- a/_posts/mathworks/2023-11-16-p=10812.md +++ b/2023/bouncing-bucky-ball-at-flipbook-mini-hack/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-11-16 23:01:49' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/11/16/bouncing-bucky-ball-at-flipbook-mini-hack/?s_tid=feedtopost -slug: bouncing-bucky-ball-at-flipbook-mini-hack -title: Bouncing Bucky Ball at Flipbook Mini Hack ---- - -

The 2023 MATLAB Central Flipbook Mini Hack contest runs from November 6 until December 3. Over 200 entries have been submitted in the first two weeks.

+ + + + + + + Bouncing Bucky Ball at Flipbook Mini Hack - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Bouncing Bucky Ball at Flipbook Mini Hack

+

The 2023 MATLAB Central Flipbook Mini Hack contest runs from November 6 until December 3. Over 200 entries have been submitted in the first two weeks.

Contents

New Rules

This year's mini hack features short animations. The contest software runs the program you submit to make an animated GIF file with exactly 48 frames and an inner-frame delay time of 1/24 second. So, your animation will run for two seconds, then continuously repeat. If you want periodic motion, you need to be back where you started by frame 48.

In previous mini hacks, programs had to be Twitter length -- at most 255 characters long. Now, the new limit is 2,000 characters. Comments and formatting blanks are not counted. Remixes and reuse of other submissions is encouraged.

@@ -196,4 +263,76 @@

Thanks

Chen Lin, D % Chen Lin, David Wey and Vinay Ramesh are running the Mini Hack this year, ##### SOURCE END ##### 65f76a589bbd4188bfa9698c4a4437a7 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-9-25-p=10694.md b/2023/exploring-matrices-exercises/index.html similarity index 61% rename from _posts/mathworks/2023-9-25-p=10694.md rename to 2023/exploring-matrices-exercises/index.html index 7762dad..4b2f0b5 100644 --- a/_posts/mathworks/2023-9-25-p=10694.md +++ b/2023/exploring-matrices-exercises/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-09-25 17:57:28' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/09/25/exploring-matrices-exercises/?s_tid=feedtopost -slug: exploring-matrices-exercises -title: Exploring Matrices Exercises ---- - -

Try your hand at a few exercises involving Exploring Matrices.

+ + + + + + + Exploring Matrices Exercises - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Exploring Matrices Exercises

+

Try your hand at a few exercises involving Exploring Matrices.

Contents

Qube Simplified

I have simplified the Qube app by removing these four buttons.

@@ -370,4 +437,76 @@

Matrices and Cubes

\ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-9-12-p=10526.md b/2023/exploring-matrices/index.html similarity index 74% rename from _posts/mathworks/2023-9-12-p=10526.md rename to 2023/exploring-matrices/index.html index 9a9ef2c..33fc386 100644 --- a/_posts/mathworks/2023-9-12-p=10526.md +++ b/2023/exploring-matrices/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-09-12 03:11:52' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/09/11/exploring-matrices/?s_tid=feedtopost -slug: exploring-matrices -title: Exploring Matrices ---- - -

I have spent much of my career working to bring abstract linear algebra and practical matrix computation closer together. This project is my latest effort.

+ + + + + + + Exploring Matrices - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Exploring Matrices

+

I have spent much of my career working to bring abstract linear algebra and practical matrix computation closer together. This project is my latest effort.

Contents

Alibi

Over sixty years ago, as a sophomore contemplating a major in mathematics, I took a course entitled Survey of Modern Algebra. We used a now-classic textbook by MacLane and Birkhoff that featured abstract theorems about groups, rings, fields, vector spaces and linear algebra. I remember the colorful terms alias and alibi had something to do with change of basis and change of position, but I have never seen those terms again.

The next year, I took Numerical Analysis. We did some of the homework on a Burroughhs 205 Datatron and I wrote a machine language program to solve simultaneous linear equations. I was hooked.

@@ -360,4 +427,76 @@

Dedication

We dedi % he acquired the virus from a mosquito bite at his family's cabin % in Canada. ##### SOURCE END ##### 77d29507140c40a1a497777d9fd035e6 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-2-10-p=9678.md b/2023/grafix-users-guide/index.html similarity index 70% rename from _posts/mathworks/2023-2-10-p=9678.md rename to 2023/grafix-users-guide/index.html index 2412980..ced26de 100644 --- a/_posts/mathworks/2023-2-10-p=9678.md +++ b/2023/grafix-users-guide/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-02-10 18:36:06' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/02/10/grafix-users-guide/?s_tid=feedtopost -slug: grafix-users-guide -title: Grafix Users Guide ---- - -

This is a quick look at Grafix, our tool for exploring matrices via 3-D computer graphics.

+ + + + + + + Grafix Users Guide - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Grafix Users Guide

+

This is a quick look at Grafix, our tool for exploring matrices via 3-D computer graphics.

Contents

Matrices

The word matrix comes from the Latin word mater, which means mother or origin. Matrices provide the origins of much of modern applied mathematics and computational science.

@@ -308,4 +375,76 @@

Software

The MATLA % The MATLAB code for |Grafix| % ##### SOURCE END ##### c11525de7f124cdcb5896c8c3f89d4a8 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-6-7-p=10349.md b/2023/happy-birthday-john-gilbert/index.html similarity index 54% rename from _posts/mathworks/2023-6-7-p=10349.md rename to 2023/happy-birthday-john-gilbert/index.html index ea99eab..6a1a1a1 100644 --- a/_posts/mathworks/2023-6-7-p=10349.md +++ b/2023/happy-birthday-john-gilbert/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-06-07 14:48:32' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/06/07/happy-birthday-john-gilbert/?s_tid=feedtopost -slug: happy-birthday-john-gilbert -title: Happy Birthday, John Gilbert ---- - -

I have just returned from a one-day workshop at U. C. Santa Barbara honoring John Gilbert on his 70th birthday and his official retirement after 20 years on the UCSB faculty.

+ + + + + + + Happy Birthday, John Gilbert - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Happy Birthday, John Gilbert

+

I have just returned from a one-day workshop at U. C. Santa Barbara honoring John Gilbert on his 70th birthday and his official retirement after 20 years on the UCSB faculty.

Contents

New Mexico

I have known John since he was a teenager.

@@ -160,4 +227,76 @@

UCSB

After a dozen ##### SOURCE END ##### 6a6c6e1bce6a40f28847707c01157cbb ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-2-4-p=9612.md b/2023/matrices-in-action-grafix-2-0/index.html similarity index 65% rename from _posts/mathworks/2023-2-4-p=9612.md rename to 2023/matrices-in-action-grafix-2-0/index.html index 4b4ff5d..5fe9196 100644 --- a/_posts/mathworks/2023-2-4-p=9612.md +++ b/2023/matrices-in-action-grafix-2-0/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-02-04 13:00:33' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/02/04/matrices-in-action-grafix-2-0/?s_tid=feedtopost -slug: matrices-in-action-grafix-2-0 -title: Matrices In Action, Grafix 2.0 ---- - -

The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films, and to most popular video games.

+ + + + + + + Matrices In Action, Grafix 2.0 - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Matrices In Action, Grafix 2.0

+

The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films, and to most popular video games.

Contents

Grafix 2.0

Here is the opening screen from version 2.0 of Grafix, my tool for investigating the matrices involved in 3-D computer graphics. The MATLAB code for Grafix is availble here.

I am interested in the matrix in the panel, which I call M. Many matrices like this one describe the dyamic transformations to be made on a set of target objects in a complex three-dimensional scene. This particular M is the product of a scaling and a rotation that results in the size and orientation of the plane shown.

@@ -308,4 +375,76 @@

Suggestions

Refres % * % ##### SOURCE END ##### b13c7ab1c73c4ad7909fa2d7cd9764f2 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/2023/minigallery-sampler-of-matlab-test-matrices/index.html b/2023/minigallery-sampler-of-matlab-test-matrices/index.html new file mode 100644 index 0000000..3825380 --- /dev/null +++ b/2023/minigallery-sampler-of-matlab-test-matrices/index.html @@ -0,0 +1,256 @@ + + + + + + + MiniGallery, Sampler of MATLAB Test Matrices - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

MiniGallery, Sampler of MATLAB Test Matrices

+

MATLAB has dozens of test matrices. Here are a few.

+

Contents

+

+

Mini_Gallery

  • Random. A = sprand(n,n,0.25). Random sparse, density = 0.25.
  • Bucky. A = bucky. Sparse connectivity graph of the geodesic dome, the soccer ball, and the carbon-60 molecule.
  • Wilkinson. A = wilkinson(n). Wn+. Nearly equal double eigenvalues.
  • Band. A = triu(tril(A,2),-2). Elements near diagonal.
  • Triangular. A = triu(A). Elements on and above diagonal.
  • Hessenberg. A = triu(A,-1). Upper triangular plus one subdiagonal. See schur.
  • Permutation. A = sparse(randperm(n),1:n,1). One +1 in each row and column.
  • Companion. c = charpoly(A); A = [-c(2:end); eye(n-1,n)]. Traditional companion matrix.
  • Fiedler. c = charpoly(A); A = fiedler(-c(2:end)). Fiedler companion matrix.
  • Hankel. A = flip(gallery('toeppd',n)). Constant antidiagonals.
  • Toeplitz. A = gallery('toeppd',n). Constant diagonals.
  • Magic. A = magic(n). Magic square.
+

Collections

+

Blogs

+

Software

+


Get + the MATLAB code

+ Published with MATLAB® R2023a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-2-22-p=9816.md b/2023/my-chat-with-chatgpt/index.html similarity index 55% rename from _posts/mathworks/2023-2-22-p=9816.md rename to 2023/my-chat-with-chatgpt/index.html index 844a539..6fe1c67 100644 --- a/_posts/mathworks/2023-2-22-p=9816.md +++ b/2023/my-chat-with-chatgpt/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-02-22 02:06:53' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/02/21/my-chat-with-chatgpt/?s_tid=feedtopost -slug: my-chat-with-chatgpt -title: My Chat With ChatGPT ---- - -

While it is still fresh in my mind, I want to describe the conversation I had with a publicly available version of ChatGPT, the much-discussed large language model, LLM, for conversational artificial intelligence.

+ + + + + + + My Chat With ChatGPT - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

My Chat With ChatGPT

+

While it is still fresh in my mind, I want to describe the conversation I had with a publicly available version of ChatGPT, the much-discussed large language model, LLM, for conversational artificial intelligence.

Contents

Mixed Reception

A newer version of ChatGPT than the one I used is available to selected journalists and computer industry observers. Their reaction has been, shall I say, mixed. At first, some of the reports were positive and even ecstatic. Most of these early reports were from people whose primary concern is the stock market, not AI technology. Many of the more recent and more careful reports have been negative and critical.

Where Is Sydney?

I have given ChatGPT the nickname "Chad". Some early users of one of Chad's competitors asked deliberately provocative questions and encountered a cranky alter-ego named "Sydney". I didn't ask my Chad any unfair questions and didn't encounter any Sydney's.

@@ -181,4 +248,76 @@

Truth

Steve Eddins % % <> ##### SOURCE END ##### 49d101acd4414820a4f6fe4b080b1113 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/2023/my-chat-with-ernie-a-chinese-chat-bot/index.html b/2023/my-chat-with-ernie-a-chinese-chat-bot/index.html new file mode 100644 index 0000000..84a5eea --- /dev/null +++ b/2023/my-chat-with-ernie-a-chinese-chat-bot/index.html @@ -0,0 +1,305 @@ + + + + + + + My Chat with Ernie, a Chinese Chat Bot - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

My Chat with Ernie, a Chinese Chat Bot

+

I recently had an opportunity to chat with Ernie, the Large Language Model currently under development at the Chinese internet search giant, Baidu. As I expected, Ernie's responses are in Chinese. I don't speak Chinese, so I have asked Google Translate for the response in English.

+

Contents

+

Embarrassingly Parallel

One of my questions that Microsoft's ChatGPT answered incorrectly was

+
   Who coined the term "embarrassingly parallel?"

Ernie's response to the same question was

+

+

Goggle translate:

+
   Who coined the embarrassing word parallel?

Well that's a very unfortunate misunderstanding. And, it's just repeating the question. That's an old trick; the mother of all chat bots, Eliza , used it over sixty years ago.

+

Love MATLAB?

One of the questions I often ask when I meet someone for the first time is

+
  Do you use MATLAB?

Earnie's reply was

+

+

Google translation is

+
  I think I love you.

Well, that's nice, but doesn't really answer my question.

+

Cleve's Corner

Can a chat bot assist with writing this blog? I don't expect help with the MATLAB code, or with the graphics, or with any mathematics. How about the prose, if it isn't too technical.

+

Here is the opening sentence of the post I made a few weeks ago.

+
   The 4-by-4 matrices in the panels on the following screenshots
+   are at the heart of computer graphics.

I asked Ernie how that would look in Chinese. Ernie responded with

+

+

When Google translates that back to English, we get

+
   The 4×4 matrix in the screenshot panel below is at the heart of
+   computer graphics.

Ernie decided to make the sentence singular, which happens to shorten it. But I am afraid that isn't much help for this blog.

+

Conclusion

I have already described my chat with ChatGPT. This Chinese competitor is certainly not an improvement. For now, I will continue to produce this blog the old fashioned way, without any "help" from AI.

+


Get + the MATLAB code

+ Published with MATLAB® R2023a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-3-3-p=9867.md b/2023/r2-d2-rotations-and-dilations-in-two-dimensions/index.html similarity index 54% rename from _posts/mathworks/2023-3-3-p=9867.md rename to 2023/r2-d2-rotations-and-dilations-in-two-dimensions/index.html index 4180247..d4d618f 100644 --- a/_posts/mathworks/2023-3-3-p=9867.md +++ b/2023/r2-d2-rotations-and-dilations-in-two-dimensions/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-03-03 19:50:25' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/03/03/r2-d2-rotations-and-dilations-in-two-dimensions/?s_tid=feedtopost -slug: r2-d2-rotations-and-dilations-in-two-dimensions -title: R2-D2, Rotations and Dilations in Two Dimensions ---- - -

R2_D2 is is the name I've given a new MATLAB program that provides animations of 2-by-2 rotation and dilation matrices. I admit I chose "dilations" so the acronym would be memorable, but otherwise the code has little to do with the famous Star Wars droid.

+ + + + + + + R2-D2, Rotations and Dilations in Two Dimensions - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

R2-D2, Rotations and Dilations in Two Dimensions

+

R2_D2 is is the name I've given a new MATLAB program that provides animations of 2-by-2 rotation and dilation matrices. I admit I chose "dilations" so the acronym would be memorable, but otherwise the code has little to do with the famous Star Wars droid.

Contents

House

This outline of a house is featured in Experiments with MATLAB. The data are the 11 blue dots. The coordinates of each dot form a 2-by-1 vector; the 2-by-2 rotation and dilation matrices multiply each of these vectors separately. (The lines between the dots complete the picture and are not involved in any computation.)

@@ -199,4 +266,76 @@

Further Reading

If % _Experiments with MATLAB_>. % Exercise 4.14 is particularly handy. ##### SOURCE END ##### 0fd9ed7550fd4ba3911f9d86fad47cd5 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/2023/season-s-greetings/index.html b/2023/season-s-greetings/index.html new file mode 100644 index 0000000..e19a5a2 --- /dev/null +++ b/2023/season-s-greetings/index.html @@ -0,0 +1,213 @@ + + + + + + + Season’s Greetings - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Season’s Greetings

+

Season's Greeings

+


Get + the MATLAB code

+ Published with MATLAB® R2023a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-1-10-p=9596.md b/2023/singular-matrix-pencils-and-the-qz-algorithm-update/index.html similarity index 65% rename from _posts/mathworks/2023-1-10-p=9596.md rename to 2023/singular-matrix-pencils-and-the-qz-algorithm-update/index.html index 240258f..2df5bfd 100644 --- a/_posts/mathworks/2023-1-10-p=9596.md +++ b/2023/singular-matrix-pencils-and-the-qz-algorithm-update/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-01-10 21:45:12' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/01/10/singular-matrix-pencils-and-the-qz-algorithm-update/?s_tid=feedtopost -slug: singular-matrix-pencils-and-the-qz-algorithm-update -title: Singular Matrix Pencils and the QZ Algorithm, Update ---- - -

(The January 5 posting was premature and incomplete.)

+ + + + + + + Singular Matrix Pencils and the QZ Algorithm, Update - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Singular Matrix Pencils and the QZ Algorithm, Update

+

(The January 5 posting was premature and incomplete.)

This year, 2023, is the 50-th anniversary of the QZ algorithm for the generalized matrix eigenvalue problem,

  Ax = λBx

The algorithm avoids inverting either A or B. And, importantly, the QZ algorithm can be used to detect and analyze exceptional instances of the problem known as singular pencils. These pencils do not occur in the standard eigenvalue problem where B is the identity matrix.

Contents

@@ -452,4 +519,76 @@

3-by-3 example

 ##### SOURCE END ##### 8891e70a294b4c03bb99ac1e6e01b5a5
--->
\ No newline at end of file
+-->
+
+
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-1-5-p=9569.md b/2023/singular-matrix-pencils-and-the-qz-algorithm/index.html similarity index 54% rename from _posts/mathworks/2023-1-5-p=9569.md rename to 2023/singular-matrix-pencils-and-the-qz-algorithm/index.html index 1cd52ce..76c541b 100644 --- a/_posts/mathworks/2023-1-5-p=9569.md +++ b/2023/singular-matrix-pencils-and-the-qz-algorithm/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-01-05 16:37:04' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/01/05/singular-matrix-pencils-and-the-qz-algorithm/?s_tid=feedtopost -slug: singular-matrix-pencils-and-the-qz-algorithm -title: Singular Matrix Pencils and the QZ Algorithm ---- - -

This year, 2023, is the 50-th anniversary of the QZ algorithm for generalized matrix eignenvalue problems,

+ + + + + + + Singular Matrix Pencils and the QZ Algorithm - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Singular Matrix Pencils and the QZ Algorithm

+

This year, 2023, is the 50-th anniversary of the QZ algorithm for generalized matrix eignenvalue problems,

Ax = λBx
 

The algorithm computes these eigevalues without inverting either A or B. And, the QZ-algorithm can help detect and analyze exceptional situaions known as singular pencils.

Contents

@@ -388,4 +455,76 @@

Example

+	
+
+ + + + + + + + + + +
+ + + + + diff --git a/2023/special-notice/index.html b/2023/special-notice/index.html new file mode 100644 index 0000000..f4ae61c --- /dev/null +++ b/2023/special-notice/index.html @@ -0,0 +1,217 @@ + + + + + + + Special Notice - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Special Notice

+

Special Notice

+

If you have been following my posts about Wordle, be sure to see the puzzle in today's New York Times, Tuesday, April 4.

+


Get + the MATLAB code

+ Published with MATLAB® R2023a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-3-28-p=10191.md b/2023/three-wordle-assistants/index.html similarity index 66% rename from _posts/mathworks/2023-3-28-p=10191.md rename to 2023/three-wordle-assistants/index.html index 1ec85b5..50ba16e 100644 --- a/_posts/mathworks/2023-3-28-p=10191.md +++ b/2023/three-wordle-assistants/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-03-28 03:00:55' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/03/27/three-wordle-assistants/?s_tid=feedtopost -slug: three-wordle-assistants -title: Three Wordle Assistants ---- - -

When I tackle a Wordle puzzle, I like to make all the key decisions myself. My three assistants set up puzzles and suggest words when I ask for help, but I guide the actual solution. My assistants also make it possible for me to play Wordle anywhere, anytime, even when my laptop is in airplane mode. I don't need the New York Times or access to the Web.

+ + + + + + + Three Wordle Assistants - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Three Wordle Assistants

+

When I tackle a Wordle puzzle, I like to make all the key decisions myself. My three assistants set up puzzles and suggest words when I ask for help, but I guide the actual solution. My assistants also make it possible for me to play Wordle anywhere, anytime, even when my laptop is in airplane mode. I don't need the New York Times or access to the Web.

Contents

Three Assistants

Wordler, Words and Wordie are the three assistants. Wordler replaces the Times by generating puzzles and evaluating responses. Words provides lists of possible responses. Wordie handles the Wordler Window and colors the letters gray, green or gold.

Vocabulary

Words has a vocabulary of 4665 five-letter English words. Any of them are acceptable responses. The vocabulary begins with

@@ -269,4 +336,76 @@

Software

Working o % and running it yourself. ##### SOURCE END ##### 5b2bc84c600a4474a0eabbc4d9bb6ab8 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2023-3-11-p=10023.md b/2023/wordbot-and-words-my-wordle-assistants/index.html similarity index 58% rename from _posts/mathworks/2023-3-11-p=10023.md rename to 2023/wordbot-and-words-my-wordle-assistants/index.html index 69a80a9..46fe372 100644 --- a/_posts/mathworks/2023-3-11-p=10023.md +++ b/2023/wordbot-and-words-my-wordle-assistants/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-03-11 19:07:02' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/03/11/wordbot-and-words-my-wordle-assistants/?s_tid=feedtopost -slug: wordbot-and-words-my-wordle-assistants -title: WordBot and Words, My Wordle Assistants ---- - -

I am late joining the Wordle craze. Over a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video. But my programs for Wordle Assistants are different. WordBot doesn't try to solve any puzzles and Words just supplies lists of possible words. I enjoy providing the solution logic myself.

+ + + + + + + WordBot and Words, My Wordle Assistants - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

WordBot and Words, My Wordle Assistants

+

I am late joining the Wordle craze. Over a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video. But my programs for Wordle Assistants are different. WordBot doesn't try to solve any puzzles and Words just supplies lists of possible words. I enjoy providing the solution logic myself.

Here are two examples, taken from recent Wordle puzzles in the New York Times.

Contents

Wednesday

WordBot has a list of 4676 possible words, but knows nothing about their probabilities, so I don't ask for any assistance with the opening guess.

@@ -240,4 +307,76 @@

Software

+ +

+ + + + + + + + + + +
+ + + + + diff --git a/2023/wordle-sneak-previews/index.html b/2023/wordle-sneak-previews/index.html new file mode 100644 index 0000000..426c30a --- /dev/null +++ b/2023/wordle-sneak-previews/index.html @@ -0,0 +1,230 @@ + + + + + + + Wordle Sneak Previews - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Wordle Sneak Previews

+

Contents

+

Early Birds

There several sites on the Web that reveal the solution to the Wordle puzzle in the New York Times while it is still in play. Some of these sites are in India, where India Standard Time is 9-1/2 hours ahead of Eastern Daylight Time, so India sees the puzzle long before the USA does. These sites surround their puzzle clues with ads and are trying to get more visitors.

+

For a while, whenever I get a chance, I intend try to update this animation with the latest reveals. I don't have any obvious ads, but I have to admit that my own motivation is similar to the other sites.

+

+


Get + the MATLAB code

+ Published with MATLAB® R2023a

+
+ + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-5-19-p=11276.md b/2024/a-sixty-year-old-program-for-predicting-the-future/index.html similarity index 69% rename from _posts/mathworks/2024-5-19-p=11276.md rename to 2024/a-sixty-year-old-program-for-predicting-the-future/index.html index 11b3c1c..bc1cb58 100644 --- a/_posts/mathworks/2024-5-19-p=11276.md +++ b/2024/a-sixty-year-old-program-for-predicting-the-future/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-05-19 16:55:03' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/05/19/a-sixty-year-old-program-for-predicting-the-future/?s_tid=feedtopost -slug: a-sixty-year-old-program-for-predicting-the-future -title: A Sixty-Year Old Program for Predicting the Future ---- - -
+ + + + + + + A Sixty-Year Old Program for Predicting the Future - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

A Sixty-Year Old Program for Predicting the Future

+

The graphics in my post about R^2 were produced by an updated version of a sixty-year old program involving the U.S. census. Originally, the program was based on census data from 1900 to 1960 and sought to predict the population in 1970. The software back then was written in Fortran, the predominate technical programming language a half century ago. I have updated the MATLAB version of the program so that it now uses census data from 1900 to 2020.

@@ -397,4 +464,76 @@

Software % . ##### SOURCE END ##### 02c7b1cd1f114211a874bb3dcae61323 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-7-15-p=11379.md b/2024/a-treacherous-svd/index.html similarity index 60% rename from _posts/mathworks/2024-7-15-p=11379.md rename to 2024/a-treacherous-svd/index.html index 2af96db..3e9c9d8 100644 --- a/_posts/mathworks/2024-7-15-p=11379.md +++ b/2024/a-treacherous-svd/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-07-15 15:39:04' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/07/15/a-treacherous-svd/?s_tid=feedtopost -slug: a-treacherous-svd -title: A Treacherous SVD ---- - -
+ + + + + + + A Treacherous SVD - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

A Treacherous SVD

+

A few days ago, a bug report from our office in Cambridge caught my attention. Computing the singular values and singular vectors of a particular matrix would sometimes cause MATLAB to crash.

@@ -359,4 +426,76 @@

Now what? ##### SOURCE END ##### e32dbb50b2604a45be30742645bd3bea ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-2-20-p=11022.md b/2024/chaotic-swinging-sticks/index.html similarity index 51% rename from _posts/mathworks/2024-2-20-p=11022.md rename to 2024/chaotic-swinging-sticks/index.html index 68947b2..8e2afc2 100644 --- a/_posts/mathworks/2024-2-20-p=11022.md +++ b/2024/chaotic-swinging-sticks/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-02-20 16:24:41' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/02/20/chaotic-swinging-sticks/?s_tid=feedtopost -slug: chaotic-swinging-sticks -title: Chaotic Swinging Sticks ---- - -
+ + + + + + + Chaotic Swinging Sticks - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Chaotic Swinging Sticks

+

The Swinging Sticks is a kinetic sculpture that exhibits chaotic motion. The device became very popular after it upstaged Tony Stark in Iron Man 2. My daughter Carolyn gave me a desktop version of Swinging Sticks for Christmas. I immediately set out to simulate it.

@@ -194,4 +261,76 @@

Code %% Code % ##### SOURCE END ##### 3007bf720ec7402cb273ace1e6e2d61e ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-3-28-p=11120.md b/2024/closest-pair-of-points-problem/index.html similarity index 63% rename from _posts/mathworks/2024-3-28-p=11120.md rename to 2024/closest-pair-of-points-problem/index.html index ca2b224..ae28099 100644 --- a/_posts/mathworks/2024-3-28-p=11120.md +++ b/2024/closest-pair-of-points-problem/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-03-28 20:00:00' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/03/28/closest-pair-of-points-problem/?s_tid=feedtopost -slug: closest-pair-of-points-problem -title: Closest Pair of Points Problem ---- + + + + + + + Closest Pair of Points Problem - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + -

The Closest Pair of Points problem is a standard topic in an algorithms course today, but when I taught such a course fifty years ago, the algorithm was not yet known.

+ + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Closest Pair of Points Problem

+

The Closest Pair of Points problem is a standard topic in an algorithms course today, but when I taught such a course fifty years ago, the algorithm was not yet known.

Contents

California Dreaming

Imagine you are driving a car on the Harbor Freeway in southern California with typical Los Angeles traffic conditions. Among the many things you might want to know is which pair of vehicles is nearest each other.

This is an instance of the Closest Pair of Points problem:

@@ -309,4 +376,76 @@

References

Ling Qi % Stein, Clifford. _Introduction to Algorithms (4th ed.)_. % MIT Press and McGraw-Hill. ISBN 0-262-04630-X. 1312 pp. ##### SOURCE END ##### fc0430dede624952a83439140fe547ff ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-12-18-p=12305.md b/2024/code-for-sonic-and-ten-sonic-movies/index.html similarity index 54% rename from _posts/mathworks/2024-12-18-p=12305.md rename to 2024/code-for-sonic-and-ten-sonic-movies/index.html index fb4141e..1aa3bfa 100644 --- a/_posts/mathworks/2024-12-18-p=12305.md +++ b/2024/code-for-sonic-and-ten-sonic-movies/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-12-18 15:13:08' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/12/18/code-for-sonic-and-ten-sonic-movies/?s_tid=feedtopost -slug: code-for-sonic-and-ten-sonic-movies -title: Code for Sonic and Ten Sonic Movies ---- - -
+ + + + + + + Code for Sonic and Ten Sonic Movies - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Code for Sonic and Ten Sonic Movies

+

Two previous blog posts, Dec. 12, 2024 and Nov. 16, 2024, introduced "Sonic", my new tool for incorporating sound in videos. Today's blog post includes a link to the MATLAB source code for Sonic, as well as links to new versions of ten examples.

@@ -341,4 +408,74 @@

Ten Movies ##### SOURCE END ##### 6be05d5d2be34097bc51738847d9f5b6 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-10-7-p=11696.md b/2024/experience-with-chatbots-generating-matlab/index.html similarity index 59% rename from _posts/mathworks/2024-10-7-p=11696.md rename to 2024/experience-with-chatbots-generating-matlab/index.html index acdcf79..b65a793 100644 --- a/_posts/mathworks/2024-10-7-p=11696.md +++ b/2024/experience-with-chatbots-generating-matlab/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-10-07 14:31:38' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/10/07/experience-with-chatbots-generating-matlab/?s_tid=feedtopost -slug: experience-with-chatbots-generating-matlab -title: Experience With Chatbots Generating MATLAB ---- - -
+ + + + + + + Experience With Chatbots Generating MATLAB - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Experience With Chatbots Generating MATLAB

+

A friend is investigating the use of generative AI in his classes. I asked two different popular chatbots to write MATLAB programs for a mathematically nontrivial problem. Both chatbots understood my query and both wrote plausible MATLAB programs, but one of the programs was not correct. My recommendation for coursework: carefully read and test programs produced by generative AI and repair any incorrect ones.

@@ -331,4 +398,76 @@

Happy Ending % challenge students to check the results carefully % and repair any incorrect programs. ##### SOURCE END ##### b5785d3ceb4b4ff38b92ec4f957e13e3 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-1-12-p=10964.md b/2024/exponential-fitting-separable-least-squares-and-quahogs/index.html similarity index 67% rename from _posts/mathworks/2024-1-12-p=10964.md rename to 2024/exponential-fitting-separable-least-squares-and-quahogs/index.html index 4c296e2..8ccb1e0 100644 --- a/_posts/mathworks/2024-1-12-p=10964.md +++ b/2024/exponential-fitting-separable-least-squares-and-quahogs/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-01-12 16:35:32' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/01/12/exponential-fitting-separable-least-squares-and-quahogs/?s_tid=feedtopost -slug: exponential-fitting-separable-least-squares-and-quahogs -title: Exponential Fitting, Separable Least Squares, and Quahogs ---- - -

We have been investigating a recent bug report about fitnlm, the Statistics and Machine Learning Toolbox function for robust fitting of nonlinear models.

+ + + + + + + Exponential Fitting, Separable Least Squares, and Quahogs - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Exponential Fitting, Separable Least Squares, and Quahogs

+

We have been investigating a recent bug report about fitnlm, the Statistics and Machine Learning Toolbox function for robust fitting of nonlinear models.

Contents

Quahogs

The bug report comes from Greg Pelletier, an independent research scientist and biogeochemical modeler in Olympia, Washington. Greg has been studying the vulnerability of sensitive marine organisms to increases in ocean acidification. One of the most important of these organisms is Mercenaria mercenaria, the hard clam.

@@ -309,4 +376,76 @@

Thanks

Thanks to G % to Tom Lane for his statistical expertise. ##### SOURCE END ##### 0a292e90c48540ba9ef9da619b32e8e7 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-5-25-p=11324.md b/2024/ibm-hexadecimal-floating-point/index.html similarity index 66% rename from _posts/mathworks/2024-5-25-p=11324.md rename to 2024/ibm-hexadecimal-floating-point/index.html index a20a4ec..1a00f02 100644 --- a/_posts/mathworks/2024-5-25-p=11324.md +++ b/2024/ibm-hexadecimal-floating-point/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-05-25 15:51:21' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/05/25/ibm-hexadecimal-floating-point/?s_tid=feedtopost -slug: ibm-hexadecimal-floating-point -title: IBM Hexadecimal Floating Point ---- - -
+ + + + + + + IBM Hexadecimal Floating Point - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

IBM Hexadecimal Floating Point

+

Our technical support group recently received a request for a tool that would convert IBM System/360 hexadecimal floating point numbers to the IEEE-754 format. I am probably the only one left at MathWorks that actually used IBM mainframe computers. I thought we had seen the last of hexadecimal arithmetic years ago. But, it turns out that the hexadecimal floating point format is alive and well.

@@ -413,4 +480,76 @@

Software ##### SOURCE END ##### 54dd3908d741477c9a1ad45b553487d5 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-11-16-p=11916.md b/2024/lights-camera-action-and-sound/index.html similarity index 67% rename from _posts/mathworks/2024-11-16-p=11916.md rename to 2024/lights-camera-action-and-sound/index.html index f967b43..16fb9c7 100644 --- a/_posts/mathworks/2024-11-16-p=11916.md +++ b/2024/lights-camera-action-and-sound/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-11-16 06:03:58' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/11/16/lights-camera-action-and-sound/?s_tid=feedtopost -slug: lights-camera-action-and-sound -title: Lights, Camera, Action — and Sound ---- - -
+ + + + + + + Lights, Camera, Action — and Sound - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Lights, Camera, Action — and Sound

+

I am very excited to incorporate sound in animations. This blog post has five examples with links to videos enclosed in '+ + + +'.

@@ -403,4 +470,76 @@

Blackjack % <> % ##### SOURCE END ##### ef605386b1c14b589860f69f1d2032a2 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-10-23-p=11813.md "b/2024/m\303\266bius-mertens-and-redheffer/index.html" similarity index 75% rename from _posts/mathworks/2024-10-23-p=11813.md rename to "2024/m\303\266bius-mertens-and-redheffer/index.html" index c38f1f4..cb8b238 100644 --- a/_posts/mathworks/2024-10-23-p=11813.md +++ "b/2024/m\303\266bius-mertens-and-redheffer/index.html" @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-10-23 00:53:53' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/10/22/mobius-mertens-and-redheffer/?s_tid=feedtopost -slug: möbius-mertens-and-redheffer -title: Möbius, Mertens and Redheffer ---- - -
+ + + + + + + Möbius, Mertens and Redheffer - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Möbius, Mertens and Redheffer

+

Recently, I have made a series of blog posts about Redheffer matrices and the Mertens conjecture. After each of the posts, readers and colleagues offered suggestions to speed up the calculations. Here is a summary of what I have learned.

@@ -621,4 +688,76 @@

Performance ##### SOURCE END ##### a7956cd39e4e4b2da601dae253a9ad13 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-8-31-p=11437.md b/2024/na-digest-and-na-net/index.html similarity index 76% rename from _posts/mathworks/2024-8-31-p=11437.md rename to 2024/na-digest-and-na-net/index.html index 3627617..575fa54 100644 --- a/_posts/mathworks/2024-8-31-p=11437.md +++ b/2024/na-digest-and-na-net/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-08-31 21:44:36' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/08/31/na_digest-and-na_net/?s_tid=feedtopost -slug: na-digest-and-na-net -title: NA_Digest and NA_Net ---- - -
+ + + + + + + NA_Digest and NA_Net - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

NA_Digest and NA_Net

+

The NA-Digest is an electronic newsletter for the numerical analysis and scientific software community. The NA-Digest is one of world's first examples of social networking. The Digest is one of the forces that makes our community a living, viable community.

The Digest is part of NA-Net, which also includes Netlib, a collection of mathematical software, papers, and databases.

@@ -535,4 +602,76 @@

References % Zurich, Institut fuer Informatik, 1988. ##### SOURCE END ##### ad3526f9a6bc4fedb6f2b87f8bc0de10 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-1-25-p=10982.md b/2024/nick-higham-1961-2024/index.html similarity index 55% rename from _posts/mathworks/2024-1-25-p=10982.md rename to 2024/nick-higham-1961-2024/index.html index 15373c6..d3b9772 100644 --- a/_posts/mathworks/2024-1-25-p=10982.md +++ b/2024/nick-higham-1961-2024/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-01-25 16:36:37' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/01/25/nick-higham-1961-2024/?s_tid=feedtopost -slug: nick-higham-1961-2024- -title: Nick Higham (1961-2024) ---- - -

Nick Higham passed away last Saturday. Nick was a close friend of mine and a great friend of MATLAB. I will leave it to others to describe his research and teaching, his many honors, and his service to our community, especially SIAM. I have just a few, more personal, comments.

+ + + + + + + Nick Higham (1961-2024) - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Nick Higham (1961-2024)

+

Nick Higham passed away last Saturday. Nick was a close friend of mine and a great friend of MATLAB. I will leave it to others to describe his research and teaching, his many honors, and his service to our community, especially SIAM. I have just a few, more personal, comments.

Contents

NA Digest

Monday's NA Digest led off with this from Nick's wife Francoise and his brother Des.

@@ -181,4 +248,76 @@

Goodbye

Our busine % Goodbye Nick. ##### SOURCE END ##### 062397ce6659461698190fb5b2757714 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/2024/r-squared-is-bigger-better/index.html b/2024/r-squared-is-bigger-better/index.html new file mode 100644 index 0000000..908b159 --- /dev/null +++ b/2024/r-squared-is-bigger-better/index.html @@ -0,0 +1,324 @@ + + + + + + + R-squared. Is Bigger Better? - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

R-squared. Is Bigger Better?

+
+

The coefficient of determination, R-squared or R^2, is a popular statistic that describes how well a regression model fits data. It measures the proportion of variation in data that is predicted by a model. However, that is all that R^2 measures. It is not appropriate for any other use. For example, it does not support extrapolation beyond the domain of the data. It does not suggest that one model is preferable to another.

+ +

I recently watched high school students participate in the final round of a national mathematical modeling competition. The teams' presentations were excellent; they were well-prepared, mathematically sophisticated, and informative. Unfortunately, many of the presentations abused R^2. It was used to compare different fits, to justify extrapolation, and to recommend public policy.

+ +

This was not the first time that I have seen abuses of R^2. As educators and authors of mathematical software, we must do more to expose its limitations. There are dozens of pages and videos on the web describing R^2, but few of them warn about possible misuse.

+ +

+R^2 is easily computed. If y is a vector of observations, f is a fit to the data and ybar = mean(y), then

+ +
   R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2
+

If the data are centered, then ybar = 0 and R^2 is between zero and one.

+ + +

One of my favorite examples is the United States Census. Here is the population, in millions, every ten years since 1900.

+ +
   t         p
+  ____    _______
+  1900     75.995
+  1910     91.972
+  1920    105.711
+  1930    123.203
+  1940    131.669
+  1950    150.697
+  1960    179.323
+  1970    203.212
+  1980    226.505
+  1990    249.633
+  2000    281.422
+  2010    308.746
+  2020    331.449
+

There are 13 observations. So, we can do a least-squares fit by a polynomial of any degree less than 12 and can interpolate by a polynomial of degree 12. Here are four such fits and the corresponding R^2 values. As the degree increases, so does R^2. Interpolation fits the data exactly and earns a perfect core.

+ +

Which fit would you choose to predict the population in 2030, or even to estimate the population between census years?

+ +
R2_census
+
+

Thanks to Peter Perkins and Tom Lane for help with this post.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ + + +
+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-9-30-p=11648.md b/2024/redheffer-and-mertens-accelerated/index.html similarity index 57% rename from _posts/mathworks/2024-9-30-p=11648.md rename to 2024/redheffer-and-mertens-accelerated/index.html index a9d543d..8d0a17d 100644 --- a/_posts/mathworks/2024-9-30-p=11648.md +++ b/2024/redheffer-and-mertens-accelerated/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-09-30 14:28:40' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/09/30/redheffer-and-mertens-accelerated/?s_tid=feedtopost -slug: redheffer-and-mertens-accelerated -title: Redheffer and Mertens, Accelerated ---- - -
+ + + + + + + Redheffer and Mertens, Accelerated - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Redheffer and Mertens, Accelerated

+

Shortly after I published the second post about the Mertens conjecture, a reader's comment suggested a new approach to computing Redheffer determinants and the Mertens function. It is now possible to compute a half-million values of the Mertens function in about five hours.

@@ -316,4 +383,76 @@

mertens_plot % determinants. They have been replaced by a good friend, backslash. ##### SOURCE END ##### 3267a823a3ca4544ace75a24a1cc6636 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-9-27-p=11609.md b/2024/redheffer-and-mertens-continued/index.html similarity index 51% rename from _posts/mathworks/2024-9-27-p=11609.md rename to 2024/redheffer-and-mertens-continued/index.html index 34b4ecf..d152a9a 100644 --- a/_posts/mathworks/2024-9-27-p=11609.md +++ b/2024/redheffer-and-mertens-continued/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-09-27 12:28:39' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/09/27/redheffer-and-mertens-continued/?s_tid=feedtopost -slug: redheffer-and-mertens-continued -title: Redheffer and Mertens, Continued ---- - -
+ + + + + + + Redheffer and Mertens, Continued - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Redheffer and Mertens, Continued

+

Shortly after I posted Redheffer, Mertens and One-Million Dollars a few days ago, Mathworks' Pat Quillen made an important observation about computing the Mertens function.

@@ -207,4 +274,76 @@

Mertens conjecture % million-dollar prize. ##### SOURCE END ##### 1007044f00b340cd8467bc0b1324ad0e ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-9-23-p=11534.md b/2024/redheffer-mertens-and-one-million-dollars/index.html similarity index 75% rename from _posts/mathworks/2024-9-23-p=11534.md rename to 2024/redheffer-mertens-and-one-million-dollars/index.html index 4c44240..cac7637 100644 --- a/_posts/mathworks/2024-9-23-p=11534.md +++ b/2024/redheffer-mertens-and-one-million-dollars/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-09-23 17:12:35' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/09/23/redheffer-mertens-and-one-million-dollars/?s_tid=feedtopost -slug: redheffer-mertens-and-one-million-dollars -title: Redheffer, Mertens and One-Million Dollars ---- - -
+ + + + + + + Redheffer, Mertens and One-Million Dollars - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Redheffer, Mertens and One-Million Dollars

+

I didn't know anything about these topics until a couple of weeks ago. Now I can't stop thinking about them.

@@ -608,4 +675,76 @@

References ##### SOURCE END ##### 500e91acec4e4151a58ba494fb74b941 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-12-8-p=12099.md "b/2024/sonic-adds-sound-to-logo-recam\303\241n-chaos/index.html" similarity index 51% rename from _posts/mathworks/2024-12-8-p=12099.md rename to "2024/sonic-adds-sound-to-logo-recam\303\241n-chaos/index.html" index 773bcfa..2753a86 100644 --- a/_posts/mathworks/2024-12-8-p=12099.md +++ "b/2024/sonic-adds-sound-to-logo-recam\303\241n-chaos/index.html" @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-12-08 11:51:55' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/12/08/sonic-adds-sound-to-logo-recaman-chaos/?s_tid=feedtopost -slug: sonic-adds-sound-to-logo-recamán-chaos -title: Sonic Adds Sound to Logo, Recamán, Chaos ---- - -
+ + + + + + + Sonic Adds Sound to Logo, Recamán, Chaos - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Sonic Adds Sound to Logo, Recamán, Chaos

+

I introduced Sonic in my blog post last month. Today I will use Sonic to add sound to the graphics from three old posts, the vibrating L-shaped membrane, the Recamán sequence and the chaotic behavior of the Swinging Sticks.

@@ -209,4 +276,76 @@

Triple feature % all three movies. ##### SOURCE END ##### 91e688fef9a140df96e3d2ba28e351b3 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-6-27-p=11345.md b/2024/supersum-in-defense-of-floating-point-arithmetic/index.html similarity index 64% rename from _posts/mathworks/2024-6-27-p=11345.md rename to 2024/supersum-in-defense-of-floating-point-arithmetic/index.html index d46b6b7..6ee7c3c 100644 --- a/_posts/mathworks/2024-6-27-p=11345.md +++ b/2024/supersum-in-defense-of-floating-point-arithmetic/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-06-27 17:54:38' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/06/27/supersum-in-defense-of-floating-point-arithmetic/?s_tid=feedtopost -slug: supersum-in-defense-of-floating-point-arithmetic -title: SuperSum, In Defense of Floating Point Arithmetic ---- - -
+ + + + + + + SuperSum, In Defense of Floating Point Arithmetic - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

SuperSum, In Defense of Floating Point Arithmetic

+

Floating point arithmetic doesn't get the respect it deserves. Many people consider it mysterious, fuzzy, unpredictable. These misgivings often occur in discussion of vector sums. Our provocatively named SuperSum is intended to calm these fears.

@@ -425,4 +492,76 @@

Conclusion % However, for complete reliability, use |SuperSum|. There is no % substitute for the right answer. ##### SOURCE END ##### 7bd084f1e3e84c86b0c419e2b2dcd8b5 ---> \ No newline at end of file +--> + +

+
+ +
+ + + + + + + + + + +
+ + + + + diff --git a/_posts/mathworks/2024-3-15-p=11077.md b/2024/twenty-years-of-parallel-matlab/index.html similarity index 53% rename from _posts/mathworks/2024-3-15-p=11077.md rename to 2024/twenty-years-of-parallel-matlab/index.html index 25d633a..6f7060b 100644 --- a/_posts/mathworks/2024-3-15-p=11077.md +++ b/2024/twenty-years-of-parallel-matlab/index.html @@ -1,20 +1,87 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-03-15 18:05:58' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/03/15/twenty-years-of-parallel-matlab/?s_tid=feedtopost -slug: twenty-years-of-parallel-matlab -title: Twenty Years of Parallel MATLAB ---- - -

I have just returned from the MathWorks company meeting celebrating our 40th Anniversary. In one of the presentations, Jos Martin described how Parallel MATLAB was introduced almost twenty years ago. Here are a few slides from Jos's talk.

+ + + + + + + Twenty Years of Parallel MATLAB - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+ +
+ Share:  + +
+
+ +
+ This is a crosspost from   Cleve’s Corner: Cleve Moler on Mathematics and Computing Cleve Moler is the author of the first MATLAB, one of the founders of MathWorks, and is currently Chief Mathematician at the company. He writes here about MATLAB, scientific computing and interesting mathematics.. See the original post here.
+ +
+

Twenty Years of Parallel MATLAB

+

I have just returned from the MathWorks company meeting celebrating our 40th Anniversary. In one of the presentations, Jos Martin described how Parallel MATLAB was introduced almost twenty years ago. Here are a few slides from Jos's talk.

Contents

Why There Wasn't Any Parallel MATLAB

In MATLAB News and Notes for spring 1995, I wrote a one-page Cleve's Corner titled "Why there isn't any parallel MATLAB." There were three reasons.

  • Memory model. MATLAB would generate a matrix on a host machine, split it into roughly equally sized submatrices, and distribute each submatrix to a node. But it took far longer to distribute the data then it did to do the computation. Any matrix that would fit into memory on the host was too small to make effective use of the parallel computer itself.
@@ -181,4 +248,76 @@

Now There is a Parallel MATLAB \ No newline at end of file +--> + +

+
+ +
+ + + + + + + +
+ + +
+ + + + + diff --git a/404.html b/404.html new file mode 100644 index 0000000..e3e674c --- /dev/null +++ b/404.html @@ -0,0 +1,93 @@ + + + + + + + 404: Page not found - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

404: Page not found

+

Whoops! We couldn’t find that link! Go home or just admire this cute animation.

+ +
+ + +
+ + + + + diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 3faaee2..0000000 --- a/Gemfile +++ /dev/null @@ -1,15 +0,0 @@ -source "https://rubygems.org" -gem 'jekyll' -gem 'jekyll-feed' -gem 'jekyll-paginate' -gem 'jekyll-sitemap' -gem 'jekyll-relative-links' -gem "tzinfo-data", "~> 1.2021" -gem 'github-pages' -gem "hpc-social-blog-theme", :git => "https://github.com/hpc-social/hpc-social-blog-theme.git", :branch => "main" - -# windows specific -gem 'wdm', '>= 0.1.0' - -# update ruby version -gem 'webrick' diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 10d0126..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Vanessa Sochat, HPC Social Community - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index e0545cf..0000000 --- a/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# hpc.social Commercial Syndicated Blog - -![assets/images/blog.png](assets/images/blog.png) - -This is the repository for the [syndicated blog](https://hpc.social/projects/blog/) for the hpc.social community! -Note that we have three flavors of blogs - an aggregated [personal blog](https://hpc.social/personal-blog/) along with a collection -of community blogs served from [syndicated community blog](https://hpc.social/community-blog/), and the blog -here for commercial entities. The criteria for adding content feeds here is the following: - -> The commercial blog space is for vendor and company voices that don't fit in the personal or community spaces. We advocate for learning resources, tutorials, and related content, and encourage contributors to not use this as an advertising space. - -You can see the background for this discussion in [this thread](https://github.com/hpc-social/blog/pull/13). -Contribution steps are the equivalent across our community blogs, and you can -read about them [here](https://github.com/hpc-social/blog). - -## Development - -Note that we develop with a [shared theme](https://github.com/hpc-social/hpc-social-blog-theme) -you can generally update here via: - -```bash -$ bundle install -$ bundle update -``` - -And any changes to the theme should bed one there (and thus consistent across the sites). diff --git a/_config.yml b/_config.yml deleted file mode 100644 index b7ff375..0000000 --- a/_config.yml +++ /dev/null @@ -1,98 +0,0 @@ -title: hpc.social - Aggregated Commercial Blog -description: Vendor and commercial posts in the hpc.social community -author: vsoch -baseurl: "/commercial-blog" -url: "https://hpc.social" -keywords: hpc, community -lang: en-US -timezone: America/Denver -repo: https://github.com/hpc-social/commercial-blog - -# Social Profiles -twitter_username: hpc_social -github_username: hpc-social -logo: assets/images/hpc-social-blue.png - -# We use the aqua color for this one -badge_color: "#e0e0e1" - -# And our theme! -theme: hpc-social-blog-theme - - -author: - name: hpc.social - bio: High Performance Computing
Practitioners
and friends /#hpc - picture: assets/images/hpc-social-blue.png - github: hpc-social - twitter: hpc_social - email: info@hpc.social - -collections: - pages: - output: true - permalink: /:name - posts: - output: true - permalink: /:year/:title/ - - -defaults: - - - scope: - path: "" - values: - layout: "default" - - - scope: - path: "" - type: "pages" - values: - layout: "page" - - - scope: - path: "" - type: "posts" - values: - layout: "post" - comments: true - -# Navigation -navbar-links: - Home: "https://hpc.social/" - Community: - - About: "about" - Posts: - - All Posts: "posts" - - Archive: "archive" - -# Build settings -exclude: ["_site", "vendor", ".github"] - - -markdown: kramdown -kramdown: - input: GFM - syntax_highlighter: rouge - -comments: true -paginate: 20 -paginate_path: "/page/:num" - -plugins: - - jekyll-feed - - jekyll-paginate - - jekyll-sitemap - - jekyll-relative-links - -exclude: - - .jekyll-cache - - Gemfile - - Gemfile.lock - - LICENSE - - README.md - - vendor - -relative_links: - enabled: true - collections: false diff --git a/_data/authors.yml b/_data/authors.yml deleted file mode 100644 index 34e40b3..0000000 --- a/_data/authors.yml +++ /dev/null @@ -1,6 +0,0 @@ -- name: "MathWorks Blogs" - tag: "mathworks" - feeds: - - https://feeds.feedburner.com/mathworks/moler - url: https://blogs.mathworks.com/matlab/ - image: https://www.mathworks.com/images/responsive/global/pic-header-mathworks-logo.svg diff --git a/_posts/mathworks/2022-10-17-p=9309.md b/_posts/mathworks/2022-10-17-p=9309.md deleted file mode 100644 index 7c91f7c..0000000 --- a/_posts/mathworks/2022-10-17-p=9309.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-10-17 23:17:12' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/10/17/modfun-a-short-program-produces-impressive-graphics/?s_tid=feedtopost -slug: modfun-a-short-program-produces-impressive-graphics -title: modfun, A Short Program Produces Impressive Graphics ---- - -

This nifty graphics gem started with a contribution by Paul Villain to the MATLAB 2022 Mini Hack, currently taking place on MATLAB Central.

-

Contents

-

modfun

Villain's contribution is 102 mod 500 . My rewrite is modfun. Villain's 102 and 500 become the parameters m and n.

-
  modfun(m,n) connects n points, z(j), equally spaced
-  around the complex unit circle, by n+1 straight lines.
-  The j-th line connects z(j+1) to z(mod(j*m,n)+1).

code

The basic code uses complex arithmetic and is only eight lines long. When the graphics is done with line instead of plot, it is not necessary to use hold on.

-
  function modfun(m,n)
-      init_fig
-      z = exp(2i*pi*(0:n)/n);
-      for j = 0:n
-          zj = [z(j+1),z(mod(j*m,n)+1)];
-          line(real(zj),imag(zj))
-      end
-  end

The initialization makes line possible.

-
  function init_fig
-      axis([-1 1 -1 1])
-      axis square
-      axis off
-  end

Animation

This animation of modfun(105,200) has one frame for every five lines.

-

-

Gallery

A sample.

-

-

-

Quiz

Match these calls to modfun to the plots in the Gallery.

-
  modfun(88,179)
-  modfun(89,220)
-  modfun(99,200)
-  modfun(101,200)
-  modfun(111,200)
-  modfun(113,188)
-  modfun(126,188)
-  modfun(126,200)

Software

An interactive modfun.

-

modfun.m.

-


Get - the MATLAB code

- Published with MATLAB® R2022a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2022-10-21-p=9375.md b/_posts/mathworks/2022-10-21-p=9375.md deleted file mode 100644 index 6742c5e..0000000 --- a/_posts/mathworks/2022-10-21-p=9375.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2022-10-21 20:58:02' -layout: post -original_url: https://blogs.mathworks.com/cleve/2022/10/21/an-interactive-version-of-colorcubes/?s_tid=feedtopost -slug: an-interactive-version-of-colorcubes -title: An Interactive Version of colorcubes ---- - -

A 231-character static version of colorcubes in the current MiniHack generated quite a bit of interest. So I am posting the full version, where you can change number of cubes and the view point, at this link.

-

Contents

-

Animation

-

Quiz

What is the color of the cubelet, or cubelets, in the center?

-


Get - the MATLAB code

- Published with MATLAB® R2022a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2023-12-20-p=10936.md b/_posts/mathworks/2023-12-20-p=10936.md deleted file mode 100644 index b709e31..0000000 --- a/_posts/mathworks/2023-12-20-p=10936.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-12-20 14:13:20' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/12/20/seasons-greetings-2/?s_tid=feedtopost -slug: season-s-greetings -title: Season’s Greetings ---- - -

Season's Greeings

-


Get - the MATLAB code

- Published with MATLAB® R2023a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2023-3-24-p=10155.md b/_posts/mathworks/2023-3-24-p=10155.md deleted file mode 100644 index bc9ce18..0000000 --- a/_posts/mathworks/2023-3-24-p=10155.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-03-24 19:18:10' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/03/24/wordle-sneak-previews/?s_tid=feedtopost -slug: wordle-sneak-previews -title: Wordle Sneak Previews ---- - -

Contents

-

Early Birds

There several sites on the Web that reveal the solution to the Wordle puzzle in the New York Times while it is still in play. Some of these sites are in India, where India Standard Time is 9-1/2 hours ahead of Eastern Daylight Time, so India sees the puzzle long before the USA does. These sites surround their puzzle clues with ads and are trying to get more visitors.

-

For a while, whenever I get a chance, I intend try to update this animation with the latest reveals. I don't have any obvious ads, but I have to admit that my own motivation is similar to the other sites.

-

-


Get - the MATLAB code

- Published with MATLAB® R2023a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2023-4-1-p=10251.md b/_posts/mathworks/2023-4-1-p=10251.md deleted file mode 100644 index 0e83f35..0000000 --- a/_posts/mathworks/2023-4-1-p=10251.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-04-01 05:00:26' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/04/01/my-chat-with-ernie-a-chinese-chat-bot/?s_tid=feedtopost -slug: my-chat-with-ernie-a-chinese-chat-bot -title: My Chat with Ernie, a Chinese Chat Bot ---- - -

I recently had an opportunity to chat with Ernie, the Large Language Model currently under development at the Chinese internet search giant, Baidu. As I expected, Ernie's responses are in Chinese. I don't speak Chinese, so I have asked Google Translate for the response in English.

-

Contents

-

Embarrassingly Parallel

One of my questions that Microsoft's ChatGPT answered incorrectly was

-
   Who coined the term "embarrassingly parallel?"

Ernie's response to the same question was

-

-

Goggle translate:

-
   Who coined the embarrassing word parallel?

Well that's a very unfortunate misunderstanding. And, it's just repeating the question. That's an old trick; the mother of all chat bots, Eliza , used it over sixty years ago.

-

Love MATLAB?

One of the questions I often ask when I meet someone for the first time is

-
  Do you use MATLAB?

Earnie's reply was

-

-

Google translation is

-
  I think I love you.

Well, that's nice, but doesn't really answer my question.

-

Cleve's Corner

Can a chat bot assist with writing this blog? I don't expect help with the MATLAB code, or with the graphics, or with any mathematics. How about the prose, if it isn't too technical.

-

Here is the opening sentence of the post I made a few weeks ago.

-
   The 4-by-4 matrices in the panels on the following screenshots
-   are at the heart of computer graphics.

I asked Ernie how that would look in Chinese. Ernie responded with

-

-

When Google translates that back to English, we get

-
   The 4×4 matrix in the screenshot panel below is at the heart of
-   computer graphics.

Ernie decided to make the sentence singular, which happens to shorten it. But I am afraid that isn't much help for this blog.

-

Conclusion

I have already described my chat with ChatGPT. This Chinese competitor is certainly not an improvement. For now, I will continue to produce this blog the old fashioned way, without any "help" from AI.

-


Get - the MATLAB code

- Published with MATLAB® R2023a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2023-4-4-p=10302.md b/_posts/mathworks/2023-4-4-p=10302.md deleted file mode 100644 index 3c5d191..0000000 --- a/_posts/mathworks/2023-4-4-p=10302.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-04-04 15:12:36' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/04/04/special-notice/?s_tid=feedtopost -slug: special-notice -title: Special Notice ---- - -

Special Notice

-

If you have been following my posts about Wordle, be sure to see the puzzle in today's New York Times, Tuesday, April 4.

-


Get - the MATLAB code

- Published with MATLAB® R2023a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2023-6-28-p=10382.md b/_posts/mathworks/2023-6-28-p=10382.md deleted file mode 100644 index b2df95b..0000000 --- a/_posts/mathworks/2023-6-28-p=10382.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2023-06-28 16:34:09' -layout: post -original_url: https://blogs.mathworks.com/cleve/2023/06/28/minigallery-sampler-of-matlab-test-matrices/?s_tid=feedtopost -slug: minigallery-sampler-of-matlab-test-matrices -title: MiniGallery, Sampler of MATLAB Test Matrices ---- - -

MATLAB has dozens of test matrices. Here are a few.

-

Contents

-

-

Mini_Gallery

  • Random. A = sprand(n,n,0.25). Random sparse, density = 0.25.
  • Bucky. A = bucky. Sparse connectivity graph of the geodesic dome, the soccer ball, and the carbon-60 molecule.
  • Wilkinson. A = wilkinson(n). Wn+. Nearly equal double eigenvalues.
  • Band. A = triu(tril(A,2),-2). Elements near diagonal.
  • Triangular. A = triu(A). Elements on and above diagonal.
  • Hessenberg. A = triu(A,-1). Upper triangular plus one subdiagonal. See schur.
  • Permutation. A = sparse(randperm(n),1:n,1). One +1 in each row and column.
  • Companion. c = charpoly(A); A = [-c(2:end); eye(n-1,n)]. Traditional companion matrix.
  • Fiedler. c = charpoly(A); A = fiedler(-c(2:end)). Fiedler companion matrix.
  • Hankel. A = flip(gallery('toeppd',n)). Constant antidiagonals.
  • Toeplitz. A = gallery('toeppd',n). Constant diagonals.
  • Magic. A = magic(n). Magic square.
-

Collections

-

Blogs

-

Software

-


Get - the MATLAB code

- Published with MATLAB® R2023a

-
- \ No newline at end of file diff --git a/_posts/mathworks/2024-5-4-p=11136.md b/_posts/mathworks/2024-5-4-p=11136.md deleted file mode 100644 index 806e372..0000000 --- a/_posts/mathworks/2024-5-4-p=11136.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -author: MathWorks Blogs -author_tag: mathworks -blog_subtitle: Cleve Moler is the author of the first MATLAB, one of the founders - of MathWorks, and is currently Chief Mathematician at the company. He writes here - about MATLAB, scientific computing and interesting mathematics. -blog_title: 'Cleve’s Corner: Cleve Moler on Mathematics and Computing' -blog_url: https://blogs.mathworks.com/cleve -category: mathworks -date: '2024-05-04 14:33:38' -layout: post -original_url: https://blogs.mathworks.com/cleve/2024/05/04/r-squared-is-bigger-better/?s_tid=feedtopost -slug: r-squared-is-bigger-better- -title: R-squared. Is Bigger Better? ---- - -
-

The coefficient of determination, R-squared or R^2, is a popular statistic that describes how well a regression model fits data. It measures the proportion of variation in data that is predicted by a model. However, that is all that R^2 measures. It is not appropriate for any other use. For example, it does not support extrapolation beyond the domain of the data. It does not suggest that one model is preferable to another.

- -

I recently watched high school students participate in the final round of a national mathematical modeling competition. The teams' presentations were excellent; they were well-prepared, mathematically sophisticated, and informative. Unfortunately, many of the presentations abused R^2. It was used to compare different fits, to justify extrapolation, and to recommend public policy.

- -

This was not the first time that I have seen abuses of R^2. As educators and authors of mathematical software, we must do more to expose its limitations. There are dozens of pages and videos on the web describing R^2, but few of them warn about possible misuse.

- -

-R^2 is easily computed. If y is a vector of observations, f is a fit to the data and ybar = mean(y), then

- -
   R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2
-

If the data are centered, then ybar = 0 and R^2 is between zero and one.

- - -

One of my favorite examples is the United States Census. Here is the population, in millions, every ten years since 1900.

- -
   t         p
-  ____    _______
-  1900     75.995
-  1910     91.972
-  1920    105.711
-  1930    123.203
-  1940    131.669
-  1950    150.697
-  1960    179.323
-  1970    203.212
-  1980    226.505
-  1990    249.633
-  2000    281.422
-  2010    308.746
-  2020    331.449
-

There are 13 observations. So, we can do a least-squares fit by a polynomial of any degree less than 12 and can interpolate by a polynomial of degree 12. Here are four such fits and the corresponding R^2 values. As the degree increases, so does R^2. Interpolation fits the data exactly and earns a perfect core.

- -

Which fit would you choose to predict the population in 2030, or even to estimate the population between census years?

- -
R2_census
-
-

Thanks to Peter Perkins and Tom Lane for help with this post.

- - -

-
-Get - the MATLAB code - -
-
- Published with MATLAB® R2024a
-

- -
- - \ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..2c6a613 --- /dev/null +++ b/about/index.html @@ -0,0 +1,107 @@ + + + + + + + About the hpc.social Community Blog - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

About the hpc.social Community Blog

+

This belongs in the hpc.social family of blogs. In particular, this is an aggregated feed of commercial posts that meet the following criteria:

+ +
+

The commercial blog space is for vendor and company voices that don’t fit in the personal or community spaces. We advocate for learning resources, tutorials, and related content, and encourage contributors to not use this as an advertising space.

+
+ +

The hpc.social blogs aims to share ideas, news, and stories from diverse people, centers and groups across the High Performance Computing (HPC) community. +Whether you are an advanced practitioner, a developer that touches HPC, or a novice, your voice is welcome here. This community blog reflects exactly that - a syndicated feed of our community voices. It’s one places that you can subscribe to via a variety of channels (below) and also follow instructions to contribute a commercial feed.

+ +

+ +

+ +

As a word of caution, we curate authors at the point of adding the blog, but do not regularly curate individual posts that are added nightly via automation. The opinions expressed here are owned by the authors and do not reflect the opinion of the hpc.social community at large. Offensive or inappropriate posts should be reported to info@hpc.social if you wish to report anonymously. You can also submit a pull request to remove the offending feed if you are comfortable doing so publicly.

+ + +
+ + +
+ + + + + diff --git a/archive/index.html b/archive/index.html new file mode 100644 index 0000000..a4c21e1 --- /dev/null +++ b/archive/index.html @@ -0,0 +1,386 @@ + + + + + + + Archive - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

Archive

+ + +

+ + + +
+ + + + +

2024

+ +

2023

+ +

2022

+ + +
+ +
+ + +
+ + + + + diff --git a/assets/css/highlight.css b/assets/css/highlight.css new file mode 100644 index 0000000..92791bb --- /dev/null +++ b/assets/css/highlight.css @@ -0,0 +1,199 @@ +.highlight table td { padding: 5px; } +.highlight table pre { margin: 0; } +.highlight .gh { + color: #999999; +} +.highlight .sr { + color: #f6aa11; +} +.highlight .go { + color: #888888; +} +.highlight .gp { + color: #555555; +} +.highlight .gs { +} +.highlight .gu { + color: #aaaaaa; +} +.highlight .nb { + color: #f6aa11; +} +.highlight .cm { + color: #75715e; +} +.highlight .cp { + color: #75715e; +} +.highlight .c1 { + color: #75715e; +} +.highlight .cs { + color: #75715e; +} +.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf { + color: #75715e; +} +.highlight .err { + color: #960050; +} +.highlight .gr { + color: #960050; +} +.highlight .gt { + color: #960050; +} +.highlight .gd { + color: #49483e; +} +.highlight .gi { + color: #49483e; +} +.highlight .ge { + color: #49483e; +} +.highlight .kc { + color: #66d9ef; +} +.highlight .kd { + color: #66d9ef; +} +.highlight .kr { + color: #66d9ef; +} +.highlight .no { + color: #66d9ef; +} +.highlight .kt { + color: #66d9ef; +} +.highlight .mf { + color: #ae81ff; +} +.highlight .mh { + color: #ae81ff; +} +.highlight .il { + color: #ae81ff; +} +.highlight .mi { + color: #ae81ff; +} +.highlight .mo { + color: #ae81ff; +} +.highlight .m, .highlight .mb, .highlight .mx { + color: #ae81ff; +} +.highlight .sc { + color: #ae81ff; +} +.highlight .se { + color: #ae81ff; +} +.highlight .ss { + color: #ae81ff; +} +.highlight .sd { + color: #e6db74; +} +.highlight .s2 { + color: #e6db74; +} +.highlight .sb { + color: #e6db74; +} +.highlight .sh { + color: #e6db74; +} +.highlight .si { + color: #e6db74; +} +.highlight .sx { + color: #e6db74; +} +.highlight .s1 { + color: #e6db74; +} +.highlight .s, .highlight .sa, .highlight .dl { + color: #e6db74; +} +.highlight .na { + color: #a6e22e; +} +.highlight .nc { + color: #a6e22e; +} +.highlight .nd { + color: #a6e22e; +} +.highlight .ne { + color: #a6e22e; +} +.highlight .nf, .highlight .fm { + color: #a6e22e; +} +.highlight .vc { + color: #ffffff; + background-color: #272822; +} +.highlight .nn { + color: #ffffff; + background-color: #272822; +} +.highlight .nl { + color: #ffffff; + background-color: #272822; +} +.highlight .ni { + color: #ffffff; + background-color: #272822; +} +.highlight .bp { + color: #ffffff; + background-color: #272822; +} +.highlight .vg { + color: #ffffff; + background-color: #272822; +} +.highlight .vi { + color: #ffffff; + background-color: #272822; +} +.highlight .nv, .highlight .vm { + color: #ffffff; + background-color: #272822; +} +.highlight .w { + color: #ffffff; + background-color: #272822; +} +.highlight { + color: #ffffff; + padding: 5px; + background-color: #272822; +} +.highlight .n, .highlight .py, .highlight .nx { + color: #ffffff; + background-color: #272822; +} +.highlight .ow { + color: #f92672; +} +.highlight .nt { + color: #f92672; +} +.highlight .k, .highlight .kv { + color: #f92672; +} +.highlight .kn { + color: #f92672; +} +.highlight .kp { + color: #f92672; +} +.highlight .o { + color: #f92672; +} diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..a619c05 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,219 @@ +:root { + --bg-color: #161f29; + --bg-hover-color:#36404c; + --body-bg: #10171e; + --primary-font-color: #bfbfbf; + --primary-link-color: aqua; + --border-color: #6a6a6a; +} + +[data-theme="light"] { + --bg-color: #fafafa; + --bg-hover-color: #ececec; + --body-bg: #fff; + --primary-font-color: #000; + --primary-link-color: darkred; + --border-color: #dadada; +} + +[data-theme="dark"] { + --bg-color: #161f29; + --bg-hover-color:#36404c; + --body-bg: #10171e; + --primary-font-color: #bfbfbf; + --border-color: #6a6a6a; +} + +.author-badge { + background-color: #e0e0e1; + margin-right: 5px; + color: black; + padding:0px 5px; + border-radius:2px; +} + +.btn { + cursor: pointer; +} + +body{ + font-family: 'Catamaran', sans-serif; + font-weight: 300; + background: var(--body-bg); + color: var(--primary-font-color); + margin: 0; + padding: 5px; +} +.container{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + width: 60%; + margin-left: auto; + margin-right: auto; +} +.post-container{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; +} + +.footer{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: 100%; + padding: 5px 10px; + background: var(--bg-color); + border:1px var(--border-color); +} + +.post-list{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 5px 10px; + margin-bottom: 5px; + background:var(--bg-color); + border: 1px var(--border-color); +} + +.post-list:hover{ + background: var(--bg-hover-color); +} + +.post-list .post-title{width: 80%; color: var(--primary-font-color); font-weight: 600;} +.post-list .post-date{width: 20%; text-align: right;} + +.post-header{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 5px 10px; + margin-bottom: 5px; + background:var(--bg-color); + border:1px var(--border-color); +} + +.post-header .post-share{font-weight: 600; color: var(--primary-font-color); display: flex; justify-content: flex-end; align-items: center;} +.post-header .post-date{font-weight: 600;} +.post-header .post-share a{display: flex;} + +.tags-container{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + margin-top: 20px; + margin-bottom: 20px; +} + +.post-tag{margin-bottom: 5px;} + +.tags{display: flex; flex-wrap: wrap; justify-content: space-between;} +.tag{background: var(--bg-color); padding: 5px 10px; margin-right: 10px; margin-bottom: 10px; display: flex; align-items: center;} + +.navigation{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + margin-bottom: 5px; + background:var(--bg-color); + border:1px var(--border-color); + +} +.navigation .prev{width: 45%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--primary-font-color); font-weight: 600; padding: 5px 10px;} +.navigation .next{width: 45%; color: var(--primary-font-color); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-weight: 600; text-align: right; padding: 5px 10px;} + +.pagination{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 5px 10px; + margin-bottom: 5px; +} +.pagination .prev{color: var(--primary-font-color); font-weight: 600;} +.pagination .next{color: var(--primary-font-color); font-weight: 600; text-align: right;} + +.blog-post-content{ + width: 100%; + font-size: 18px; +} + +.post-tag{background: var(--bg-color); color:var(--primary-font-color); padding: 5px 10px;} + +.profile{ + width: 100%; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding: 5px 10px; + margin-bottom: 20px; +} +.profile-image-container{width: 40%;} +.profile-image{width: 128px; height: 128px; border-radius: 50%; transition: transform .2s;} +.profile-image:hover{transform: scale(1.05);} +.profile-about{width:60%; text-align: right;} + +.font-2{font-size: 2rem;} +.font-1-5{font-size: 1.5rem;} +.font-1-2{font-size: 1.2rem;} +.font-0-8{font-size: .8rem;} + +.text-right{text-align: right;} +.w-100{width: 100%!important;} + +a:hover{text-decoration: none;} +a{color: var(--primary-link-color); text-decoration: none;} +.footer a{color: var(--primary-font-color); text-decoration: none;} +img{max-width: 100%;} +figure{margin:0; padding: 15px;} +pre{font-size: 14px; max-width: 90vw; overflow: auto;} +.social-icon{height: 24px;} + +@media (min-width: 1200px){ + .container, .container-lg, .container-md, .container-sm, .container-xl { + max-width: 800px; + } +} + +@media (min-width: 1440px){ + .container, .container-lg, .container-md, .container-sm, .container-xl { + max-width: 960px; + } +} +@media only screen and (max-width: 768px) { + .container{width: 100%;} + .mode:after { + line-height: 22px; + left: 1px; + } + h1{font-size: 1.5rem;} + .profile-image{width: 96px; height: 96px;} +} + +[data-theme="dark"] .social-icon{filter: invert(100%) sepia(50%) saturate(0%) hue-rotate(360deg) brightness(100%) contrast(100%);} +.mode {float: right;position: relative;margin: auto;width: 42px;height: 22px;background: #F1F2F4;border-radius: 20px;cursor: pointer;} +.mode:after {content: "☀️";position: absolute;top: 0;left: 4px;font-size: 14px;height: 22px;line-height: 23px;text-align: center;transition: all 0.3s ease;} +.mode.active {background: #0771ca;} +.mode.active:after {content: "🌛";transform: translateX(20px);} +.mode.active span {transform: translateX(0);} +.mode span {position: absolute;z-index: 1;margin: 2px;display: block;width: 18px;height: 18px;background: white;border-radius: 50%;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);transform: translateX(20px);transition: all 0.4s ease;} diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9918eeda5a2af872785f7bb0d6c57ce834022661 GIT binary patch literal 689723 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

Vm^6wJq5FbY-N!K+Ax3spGA=*MF&pV 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

LehtMM8(`hAl% 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:YJPAVf&jn-Rh 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

Vm^6wJq5FbY-N!K+Ax3spGA=*MF&pV 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

LehtMM8(`hAl% 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:YJPAVf&jn-Rh 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 mCdG)`!S;vn|MVK--{TKj!raj^ + + + + + diff --git a/assets/images/icon/github.svg b/assets/images/icon/github.svg new file mode 100644 index 0000000..22590d3 --- /dev/null +++ b/assets/images/icon/github.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/icon/instagram.svg b/assets/images/icon/instagram.svg new file mode 100644 index 0000000..04baeca --- /dev/null +++ b/assets/images/icon/instagram.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/icon/linkedin.svg b/assets/images/icon/linkedin.svg new file mode 100644 index 0000000..6266267 --- /dev/null +++ b/assets/images/icon/linkedin.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/icon/me.svg b/assets/images/icon/me.svg new file mode 100644 index 0000000..7331b5e --- /dev/null +++ b/assets/images/icon/me.svg @@ -0,0 +1,65 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/assets/images/icon/twitter.svg b/assets/images/icon/twitter.svg new file mode 100644 index 0000000..69511c4 --- /dev/null +++ b/assets/images/icon/twitter.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/icon/whatsapp.svg b/assets/images/icon/whatsapp.svg new file mode 100644 index 0000000..3b91dd0 --- /dev/null +++ b/assets/images/icon/whatsapp.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/images/icon/youtube.svg b/assets/images/icon/youtube.svg new file mode 100644 index 0000000..d951b94 --- /dev/null +++ b/assets/images/icon/youtube.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/scripts.js b/assets/scripts.js new file mode 100644 index 0000000..c71f5ce --- /dev/null +++ b/assets/scripts.js @@ -0,0 +1,12 @@ +function toggleNightMode(){ + if(document.documentElement.getAttribute('data-theme') == 'light'){ + document.documentElement.setAttribute('data-theme', 'dark'); + document.getElementById('mode-switcher').classList.add('active'); + localStorage.setItem("theme","dark"); + } + else{ + document.documentElement.setAttribute('data-theme', 'light'); + document.getElementById('mode-switcher').classList.remove('active'); + localStorage.setItem("theme",""); + } +} diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..eb6069d --- /dev/null +++ b/atom.xml @@ -0,0 +1,12932 @@ + + + + hpc.social - Aggregated Commercial Blog + + + 2025-01-27T19:54:42-07:00 + https://hpc.social + + hpc.social + info@hpc.social + + + + + Code for Sonic and Ten Sonic Movies + + 2024-12-18T15:13:08-07:00 + https://hpc.social/2024/code-for-sonic-and-ten-sonic-movies + <div class="content"><!--introduction--> +<p>Two previous blog posts, <a href="https://blogs.mathworks.com/cleve/2024/12/08/sonic-adds-sound-to-logo-recaman-chaos/">Dec. 12, 2024</a> and <a href="https://blogs.mathworks.com/cleve/2024/11/16/lights-camera-action-and-sound/">Nov. 16, 2024</a>, introduced "Sonic", my new tool for incorporating sound in videos. Today's blog post includes a link to the MATLAB source code for Sonic, as well as links to new versions of ten examples.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#430e1f71-5674-4dd0-9822-ecdf14267246">Code</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#261cb182-c13b-4b1e-9932-f52485ff1334">Sonic</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c9a4823d-d0b6-48fd-a9f0-388f00ec93b3">Ten Movies</a> +</li> +</ul> +</div> + +<h4>Code<a name="430e1f71-5674-4dd0-9822-ecdf14267246"></a> +</h4> +<p>The MATLAB code for Sonic and all the examples is available in this 11 MB <tt>zip</tt> file.</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/Sonic.zip">Sonic.zip</a> +</p> + +<h4>Sonic<a name="261cb182-c13b-4b1e-9932-f52485ff1334"></a> +</h4> +<p>There are two ways to generate the musical sounds. The three movies Warm-Up, TanSin and Blackjack use recordings of C-major scales played on three different pianos. All the other movies rely on <a href="https://www.mathworks.com/help/signal/ref/resample.html">resampling</a> a single note from a trumpet, xylophone or piano.</p> + +<p>The function <tt>sonic_examples(kases,n)</tt> is a driver for <tt>sonic</tt>. The first parameter, <tt>kases</tt>, is an integer vector of desired examples, 0 though 9. The second parameter, <tt>n</tt>, is the number of desired samples.</p> + +<div> +<ul> +<li>n = 25 is very fast</li> +<li>n = 100 is reasonable</li> +<li>n = 200 is the default</li> +<li>n = 300 is overkill</li> +</ul> +</div> + +<h4>Ten Movies<a name="c9a4823d-d0b6-48fd-a9f0-388f00ec93b3"></a> +</h4> +<p>Here are links to new versions of the animated videos, and the final frames.</p> + +<p> +<b>0. Warm-Up</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_0.mp4">sonic_examples_0.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_0.png" vspace="5" /> </p> + +<p> +<b>1. Lissajous</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_1.mp4">sonic_examples_1.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_1.png" vspace="5" /> </p> + +<p> +<b>2. Mertens</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_2.mp4">sonic_examples_2.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_2.png" vspace="5" /> </p> + +<p> +<b>3. TanSin</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_3.mp4">sonic_examples_3.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_3.png" vspace="5" /> </p> + +<p> +<b>4. Van der Pol</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_4.mp4">sonic_examples_4.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_4.png" vspace="5" /> </p> + +<p> +<b>5. VdP Derivative</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_5.mp4">sonic_examples_5.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_5.png" vspace="5" /> </p> + +<p> +<b>6. Blackjack</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_6.mp4">sonic_examples_6.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_6.png" vspace="5" /> </p> + +<p> +<b>7. Vibrating L-shaped Membrane</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_7.mp4">sonic_examples_7.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_7.png" vspace="5" /> </p> + +<p> +<b>8. Recam&aacute;n Sequence</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_8.mp4">sonic_examples_8.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_8.png" vspace="5" /> </p> + +<p> +<b>9. Swinging Sticks</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/sonic_examples_9.mp4">sonic_examples_9.mp4</a> +</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sonic_examples_9.png" vspace="5" /> </p> + +<!-- + function grabCode_6be05d5d2be34097bc51738847d9f5b6() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='6be05d5d2be34097bc51738847d9f5b6 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 6be05d5d2be34097bc51738847d9f5b6'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024b<br /> +</p> + +</div> + +<!-- +6be05d5d2be34097bc51738847d9f5b6 ##### SOURCE BEGIN ##### +%% Code for Sonic and Ten Sonic Movies +% Two previous blog posts, +% <https://blogs.mathworks.com/cleve/2024/12/08/sonic-adds-sound-to-logo-recaman-chaos/ +% Dec. 12, 2024> and +% <https://blogs.mathworks.com/cleve/2024/11/16/lights-camera-action-and-sound/ +% Nov. 16, 2024>, +% introduced "Sonic", my new tool for incorporating sound in videos. +% Today's blog post includes a link to the MATLAB source code for Sonic, +% as well as links to new versions of ten examples. + +%% Code +% The MATLAB code for Sonic and all the examples is available in this +% 11 MB |zip| file. +% +% <https://blogs.mathworks.com/cleve/files/Sonic.zip Sonic.zip> +% +%% Sonic +% There are two ways to generate the musical sounds. +% The three movies Warm-Up, TanSin and Blackjack use recordings +% of C-major scales played on three different pianos. +% All the other movies rely on +% <https://www.mathworks.com/help/signal/ref/resample.html resampling> +% a single note from a trumpet, xylophone or piano. +% +% The function |sonic_examples(kases,n)| is a driver for |sonic|. +% The first parameter, |kases|, is an integer vector of desired examples, +% 0 though 9. The second parameter, |n|, is the number of desired samples. +% +% * n = 25 is very fast +% * n = 100 is reasonable +% * n = 200 is the default +% * n = 300 is overkill + +%% Ten Movies +% Here are links to new versions of the animated videos, and the final +% frames. +% +% *0. Warm-Up* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_0.mp4 sonic_examples_0.mp4> +% +% <<sonic_examples_0.png>> +% + +%% +% *1. Lissajous* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_1.mp4 sonic_examples_1.mp4> +% +% <<sonic_examples_1.png>> + +%% +% *2. Mertens* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_2.mp4 sonic_examples_2.mp4> +% +% <<sonic_examples_2.png>> + +%% +% *3. TanSin* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_3.mp4 sonic_examples_3.mp4> +% +% <<sonic_examples_3.png>> + +%% +% *4. Van der Pol* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_4.mp4 sonic_examples_4.mp4> +% +% <<sonic_examples_4.png>> + +%% +% *5. VdP Derivative* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_5.mp4 sonic_examples_5.mp4> +% +% <<sonic_examples_5.png>> + +%% +% *6. Blackjack* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_6.mp4 sonic_examples_6.mp4> +% +% <<sonic_examples_6.png>> + +%% +% *7. Vibrating L-shaped Membrane* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_7.mp4 sonic_examples_7.mp4> +% +% <<sonic_examples_7.png>> + +%% +% *8. Recamán Sequence* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_8.mp4 sonic_examples_8.mp4> +% +% <<sonic_examples_8.png>> + +%% +% *9. Swinging Sticks* +% +% <https://blogs.mathworks.com/cleve/files/sonic_examples_9.mp4 sonic_examples_9.mp4> +% +% <<sonic_examples_9.png>> + +%% + + +##### SOURCE END ##### 6be05d5d2be34097bc51738847d9f5b6 +--> + + + + + Sonic Adds Sound to Logo, Recamán, Chaos + + 2024-12-08T11:51:55-07:00 + https://hpc.social/2024/sonic-adds-sound-to-logo-recamán-chaos + <div class="content"><!--introduction--> +<p>I introduced Sonic in my <a href="https://blogs.mathworks.com/cleve/2024/11/16/lights-camera-action-and-sound">blog post</a> last month. Today I will use Sonic to add sound to the graphics from three old posts, the vibrating L-shaped membrane, the Recam&aacute;n sequence and the chaotic behavior of the Swinging Sticks.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#8beb910f-b7ff-4f4a-957c-1af21319f187">Vibrating L-shaped Membrane</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#3e98e8b6-2291-4284-b4d0-c3b6da33bdc7">Recam&aacute;n</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#cf487494-235c-48ab-8849-b0e0d6a1099e">Swinging Sticks</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#1f278f40-79e9-42e7-877e-dad57ee84e1f">Triple feature</a> +</li> +</ul> +</div> + +<h4>Vibrating L-shaped Membrane<a name="8beb910f-b7ff-4f4a-957c-1af21319f187"></a> +</h4> +<p>For almost fifty years, I have wanted to <i>hear</i> the MathWorks logo. I have written about the L-shaped membrane many times, <a href="https://www.mathworks.com/content/dam/mathworks/tag-team/Objects/t/72943_92021v00Cleve_L_Shaped_Membrane_Nov_2003.pdf">link #1</a>, <a href="https://blogs.mathworks.com/cleve/2014/10/13/mathworks-logo-part-one-why-is-it-l-shaped/">link #2</a>, <a href="https://blogs.mathworks.com/cleve/2014/11/17/mathworks-logo-part-four-method-of-particular-solutions-generates-the-logo/">link #3</a>.</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/L_membrane.mp4">Click on this link</a> and listen to the audio in a Sonic movie of the vibrating membrane. The sound is generated by resampling one tone from a xylophone.</p> + +<p>And here is one frame from the movie.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/L_membrane_png.png" vspace="5" /> </p> + +<h4>Recam&aacute;n<a name="3e98e8b6-2291-4284-b4d0-c3b6da33bdc7"></a> +</h4> +<p>The inventor of the <a href="https://en.wikipedia.org/wiki/Recam%C3%A1n%27s_sequence">Recam&aacute;n sequence</a> is a Columbian mathematician, Bernardo Recam&aacute;n Santos. The sequence is <a href="https://oeis.org/A005132">A005132</a> in the OEIS, the On-Line Encyclopedia of Integer Sequences. Here is <a href="https://blogs.mathworks.com/cleve/2018/07/09/the-oeis-and-the-recaman-sequence">my blog post</a>.</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/Recaman.mp4">Click on this link</a> and the listen to the audio in a Sonic movie of the Recam&aacute;n sequence. The sound is generated by resampling the middle-C key of a piano.</p> + +<p>Here is one frame from the movie.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Recaman_png.png" vspace="5" /> </p> + +<h4>Swinging Sticks<a name="cf487494-235c-48ab-8849-b0e0d6a1099e"></a> +</h4> +<p>The <a href="https://www.the-swinging-sticks.com/en">Swinging Sticks</a> is a kinetic sculpture that exhibits chaotic behavior. I have added sound to my <a href="https://blogs.mathworks.com/cleve/2024/02/20/chaotic-swinging-sticks/">blog post</a> about the sticks.</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/Sticks.mp4">Here is the link</a> to a Sonic movie of the Swinging Sticks. The audio is also generated by resampling one tone from a xylophone.</p> + +<p>And, here is one frame from the movie.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/sticks_png.png" vspace="5" /> </p> + +<h4>Triple feature<a name="1f278f40-79e9-42e7-877e-dad57ee84e1f"></a> +</h4> +<p> +<a href="https://blogs.mathworks.com/cleve/files/Sonic2_all.mp4">Click on this link</a> to see -- and <i>hear</i>-- all three movies.</p> + +<!-- + function grabCode_91e688fef9a140df96e3d2ba28e351b3() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='91e688fef9a140df96e3d2ba28e351b3 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 91e688fef9a140df96e3d2ba28e351b3'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +91e688fef9a140df96e3d2ba28e351b3 ##### SOURCE BEGIN ##### +%% Sonic Adds Sound to Logo, Recamán, Chaos +% I introduced Sonic in my +% <https://blogs.mathworks.com/cleve/2024/11/16/lights-camera-action-and-sound +% blog post> last month. Today I will use Sonic to add sound to the +% graphics from three old posts, the vibrating L-shaped membrane, +% the Recamán sequence and the chaotic behavior of the +% Swinging Sticks. +% +%% Vibrating L-shaped Membrane +% For almost fifty years, I have wanted to _hear_ the MathWorks logo. +% I have written about the L-shaped membrane many times, +% <https://www.mathworks.com/content/dam/mathworks/tag-team/Objects/t/72943_92021v00Cleve_L_Shaped_Membrane_Nov_2003.pdf +% link #1>, +% <https://blogs.mathworks.com/cleve/2014/10/13/mathworks-logo-part-one-why-is-it-l-shaped/ +% link #2>, +% <https://blogs.mathworks.com/cleve/2014/11/17/mathworks-logo-part-four-method-of-particular-solutions-generates-the-logo/ +% link #3>. +% +% <https://blogs.mathworks.com/cleve/files/L_membrane.mp4 +% Click on this link> and +% listen to the audio in a Sonic movie of the vibrating membrane. +% The sound is generated by resampling one tone from a xylophone. +% +% And here is one frame from the movie. +% +% <<L_membrane_png.png>> +% + +%% Recamán +% The inventor of the +% <https://en.wikipedia.org/wiki/Recam%C3%A1n%27s_sequence +% Recamán sequence> is a Columbian mathematician, Bernardo Recamán Santos. +% The sequence is <https://oeis.org/A005132 A005132> in the OEIS, +% the On-Line Encyclopedia of Integer Sequences. +% Here is +% <https://blogs.mathworks.com/cleve/2018/07/09/the-oeis-and-the-recaman-sequence +% my blog post>. +% +% <https://blogs.mathworks.com/cleve/files/Recaman.mp4 +% Click on this link> and the +% listen to the audio in a Sonic movie of the Recamán sequence. +% The sound is generated by resampling +% the middle-C key of a piano. +% +% Here is one frame from the movie. +% +% <<Recaman_png.png>> +% + +%% Swinging Sticks +% The <https://www.the-swinging-sticks.com/en Swinging Sticks> +% is a kinetic sculpture that exhibits chaotic behavior. +% I have added sound to my +% <https://blogs.mathworks.com/cleve/2024/02/20/chaotic-swinging-sticks/ +% blog post> about the sticks. +% +% <https://blogs.mathworks.com/cleve/files/Sticks.mp4 +% Here is the link> to a Sonic movie of the Swinging Sticks. +% The audio is also generated by resampling +% one tone from a xylophone. +% +% +% And, here is one frame from the movie. +% +% <<sticks_png.png>> + +%% Triple feature +% <https://blogs.mathworks.com/cleve/files/Sonic2_all.mp4 +% Click on this link> to see REPLACE_WITH_DASH_DASH and _hear_REPLACE_WITH_DASH_DASH +% all three movies. + +##### SOURCE END ##### 91e688fef9a140df96e3d2ba28e351b3 +--> + + + + + Lights, Camera, Action — and Sound + + 2024-11-16T06:03:58-07:00 + https://hpc.social/2024/lights-camera-action-and-sound + <div class="content"><!--introduction--> +<p>I am very excited to incorporate sound in animations. This blog post has five examples with links to videos enclosed in <tt>'+ + + +'</tt>.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#beb66eab-d057-4b35-b679-ceb8341bac55">Mertens</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#acc96bc1-84ad-4503-af62-3207c0cddc9d">Lissajous</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c8bcb2e7-342f-4b58-a7ba-b3d7f7034476">tansin</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#7e32cd92-b6a9-46ec-aa1c-980089ff6833">Van der Pol</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#e791b241-63f8-4987-a4d3-4451b5b8f39d">Blackjack</a> +</li> +</ul> +</div> + +<h4>Mertens<a name="beb66eab-d057-4b35-b679-ceb8341bac55"></a> +</h4> +<p>I began making animations with sound while investigating the <a href="https://blogs.mathworks.com/cleve/2024/09/23/redheffer-mertens-and-one-million-dollars/">Mertens Conjecture</a>. The <a href="https://oeis.org/A002321">OEIS</a> page offers an opportunity to listen to the Mertens sequence, but I wanted more control.</p> + +<p>The <tt>resample</tt> function is the Signal Processing Toolbox resamples a signal at a fraction, <tt>p/q</tt>, times the original sample rate. The sound in this Mertens example is generated from a recording of piano playing middle C that is resampled to simulate the other notes.</p> + +<p>Here is a link to a 40-second video of <tt>M(n)</tt> and <tt>sqrt(n)</tt> for <tt>n = 200</tt>. (Homework: How long would the video last if <tt>n = 10^8</tt>? Post your answers in the comments.)</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/mertens.mp4">https://blogs.mathworks.com/cleve/files/mertens.mp4</a> +</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p>Here is a static graphic, the last frame of the video.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens.png" vspace="5" /> </p> + +<h4>Lissajous<a name="acc96bc1-84ad-4503-af62-3207c0cddc9d"></a> +</h4> +<p>You may well have seen <a href="https://en.wikipedia.org/wiki/Lissajous_curve">Lissajous curves</a> before, but have you ever <i>listened</i> to them? They were first studied extensively by <a href="https://en.wikipedia.org/wiki/Jules_Antoine_Lissajous">Jules Lissajous</a>, a nineteenth-century French physicist. There are many Lissajous curves similar to the following, where the trajectory in the <tt>x-y</tt> plane is described by two functions of a parameter <tt>t</tt>.</p> + +<pre class="language-matlab"> +n = 200; +t = 3*pi*(-1:2/n:1); +x = 5*cos(t)+3*cos(5/3*t); +y = 5*sin(t)-sin(5/3*t); +</pre> +<p>This 40-second video employs sound produced by resampling a note from a xylophone.</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/lissajous.mp4">https://blogs.mathworks.com/cleve/files/lissajous.mp4</a> +</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p>Here is the last frame.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/lissajous.png" vspace="5" /> </p> + +<h4>tansin<a name="c8bcb2e7-342f-4b58-a7ba-b3d7f7034476"></a> +</h4> +<p>I have used variations of <a href="https://blogs.mathworks.com/cleve/2012/09/24/supremum">this function</a> many times.</p> + +<pre>F = @(x) tan(sin(x))+sin(tan(x));</pre> +<p>When <tt>x</tt> approaches an integer multiple of <tt>pi</tt>, both <tt>sin(x)</tt> and <tt>tan(x)</tt> approach zero, so <tt>F(x)</tt> also approaches zero. But when <tt>x</tt> approaches an odd multiple of <tt>pi/2</tt>, <tt>tan(x)</tt> becomes infinite, so both <tt>sin(tan(x))</tt> and <tt>F(x)</tt> oscillate infinitely often.</p> + +<p>Here is a link to a 45-second video of <tt>F(x)</tt> for <tt>n = 200</tt> evenly spaced values of <tt>x</tt> between <tt>-2pi</tt> and <tt>2pi</tt>. If we increase <tt>n</tt>, we would see more of the oscillations at the singularities. The sound comes from resampling a single note played by a trumpet.</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/tansin.mp4">https://blogs.mathworks.com/cleve/files/tansin.mp4</a> +</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/tansin.png" vspace="5" /> </p> + +<h4>Van der Pol<a name="7e32cd92-b6a9-46ec-aa1c-980089ff6833"></a> +</h4> +<p>Quoting <a href="https://en.wikipedia.org/wiki/Van_der_Pol_oscillator">Wikipedia</a>.</p> + +<pre> In the study of dynamical systems, the van der Pol oscillator + (named for Dutch physicist Balthasar van der Pol) is a + non-conservative, oscillating system with non-linear damping.</pre> +<p>In this video, we see -- and hear -- the numerical solution, computed by <tt>ode45</tt>, of the Van der Pol equation at <tt>n</tt> points between <tt>t = 0</tt> and <tt>t = 20</tt>. The damping parameter is <tt>mu = 2</tt>.</p> + +<p>The sound comes from a recording of a student practicing a piano. In this case we have scales spanning four octaves, so no resampling is required.</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/vanderpol.mp4">https://blogs.mathworks.com/cleve/files/vanderpol.mp4</a> +</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/vanderpol.png" vspace="5" /> </p> + +<h4>Blackjack<a name="e791b241-63f8-4987-a4d3-4451b5b8f39d"></a> +</h4> +<p>The card game Blackjack is another example that I use frequently; see <a href="https://www.mathworks.com/company/technical-articles/simulating-blackjack-with-matlab.html">"Simulating Blackjack"</a> and <a href="https://www.mathworks.com/matlabcentral/fileexchange/4404-blackjack">MATLAB file exchange</a>. The video shows a simulation of a few hundred hands, starting each hand with a $10 bet. The sound comes from a piano playing a C-major scale. Again, resampling is not necessary.</p> + +<p>The emerging histograms in the video, and the static outcome in the final frame, show the percentages observed for each of ten possible outcomes. The histograms can be compared with those in the <a href="https://www.mathworks.com/company/technical-articles/simulating-blackjack-with-matlab.html">"Simulating Blackjack"</a> article that describes the use of the Parallel Computing Toolbox to play 10,000 hands with these results.</p> + +<pre class="codeinput">bjpercent +</pre> +<pre class="codeoutput"> " Push, player and dealer have equal totals not exceeding 21 " + " Win, player's total is greater than dealer's and does not exceed 21 " + " Lose, dealer's total is greater than player's and does not exceed 21 " + " Blackjack, player has 21 with two cards, dealer does not " + " " + " $-40 0.03 Split and double, lose both " + " $-30 0.17 Split and double, lose one " + " $-20 4.71 Split or double, lose " + " $-10 42.94 Lose " + " $ 0 9.06 Push " + " $+10 32.13 Win " + " $+15 4.44 Blackjack " + " $+20 6.19 Split or double, win " + " $+30 0.28 Split and double, win one " + " $+40 0.06 Split and double, win both " +</pre> +<p>(Homework. This simulation happens to have three hands with the very rare swings of more than $20. Find the hand numbers where such rare events occur. Post your answers in the comments. Hint: watch the emerging histograms.)</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/blackjack.mp4">https://blogs.mathworks.com/cleve/files/blackjack.mp4</a> +</p> + +<p> +<b>+ + + + + + + + + + + + + + + + + + + + + + + + + + + +</b> +</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/blackjack.png" vspace="5" /> </p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/bj100K.png" vspace="5" /> </p> + +<!-- + function grabCode_ef605386b1c14b589860f69f1d2032a2() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='ef605386b1c14b589860f69f1d2032a2 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' ef605386b1c14b589860f69f1d2032a2'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024b<br /> +</p> + +</div> + +<!-- +ef605386b1c14b589860f69f1d2032a2 ##### SOURCE BEGIN ##### +%% Lights, Camera, Action REPLACE_WITH_DASH_DASH and Sound +% I am very excited to incorporate sound in animations. +% This blog post has five examples with +% links to videos enclosed in |'+ + + +'|. + +%% Mertens +% I began making animations with sound while investigating the +% <https://blogs.mathworks.com/cleve/2024/09/23/redheffer-mertens-and-one-million-dollars/ +% Mertens Conjecture>. +% The <https://oeis.org/A002321 OEIS> page +% offers an opportunity to listen to the Mertens sequence, but +% I wanted more control. +% +% The |resample| function is the Signal Processing Toolbox +% resamples a signal at a fraction, |p/q|, times the original sample rate. +% The sound in this Mertens example is generated from a recording of piano +% playing middle C that is resampled to simulate the other notes. +% +% Here is a link to a 40-second video of |M(n)| and |sqrt(n)| +% for |n = 200|. +% (Homework: How long would the video last if |n = 10^8|? +% Post your answers in the comments.) +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <https://blogs.mathworks.com/cleve/files/mertens.mp4> +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% Here is a static graphic, the last frame of the video. +% +% <<mertens.png>> +% + +%% Lissajous +% You may well have seen <https://en.wikipedia.org/wiki/Lissajous_curve +% Lissajous curves> before, but have you ever +% _listened_ to them? +% They were first studied extensively by +% <https://en.wikipedia.org/wiki/Jules_Antoine_Lissajous Jules Lissajous>, +% a nineteenth-century French physicist. +% There are many Lissajous curves similar to the following, where +% the trajectory in the |x-y| plane is described by two functions of +% a parameter |t|. +% +% n = 200; +% t = 3*pi*(-1:2/n:1); +% x = 5*cos(t) + 3*cos(5/3*t); +% y = 5*sin(t) - sin(5/3*t); +% +% This 40-second video employs sound produced by resampling a note +% from a xylophone. +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <https://blogs.mathworks.com/cleve/files/lissajous.mp4> +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% Here is the last frame. +% +% <<lissajous.png>> +% + +%% tansin +% I have used variations of +% <https://blogs.mathworks.com/cleve/2012/09/24/supremum this function> +% many times. +% +% F = @(x) tan(sin(x))+sin(tan(x)); +% +% When |x| approaches an integer multiple of |pi|, both |sin(x)| and |tan(x)| +% approach zero, so |F(x)| also approaches zero. But when |x| approaches +% an odd multiple of |pi/2|, |tan(x)| becomes infinite, so both |sin(tan(x))| +% and |F(x)| oscillate infinitely often. +% +% Here is a link to a 45-second video +% of |F(x)| for |n = 200| evenly spaced values of |x| between |-2pi| and +% |2pi|. +% If we increase |n|, we would see more of the oscillations at the +% singularities. The sound comes from resampling a single note +% played by a trumpet. +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <https://blogs.mathworks.com/cleve/files/tansin.mp4> +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <<tansin.png>> +% + +%% Van der Pol +% Quoting +% <https://en.wikipedia.org/wiki/Van_der_Pol_oscillator Wikipedia>. +% +% In the study of dynamical systems, the van der Pol oscillator +% (named for Dutch physicist Balthasar van der Pol) is a +% non-conservative, oscillating system with non-linear damping. +% +% In this video, we see REPLACE_WITH_DASH_DASH and hear REPLACE_WITH_DASH_DASH the numerical solution, computed +% by |ode45|, of the Van der Pol equation at |n| points between +% |t = 0| and |t = 20|. The damping parameter is |mu = 2|. +% +% The sound comes from a recording of a student practicing a piano. +% In this case we have scales spanning four octaves, so no resampling +% is required. +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <https://blogs.mathworks.com/cleve/files/vanderpol.mp4> +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <<vanderpol.png>> +% + +%% Blackjack +% The card game Blackjack is another example that I use frequently; see +% <https://www.mathworks.com/company/technical-articles/simulating-blackjack-with-matlab.html +% "Simulating Blackjack"> and +% <https://www.mathworks.com/matlabcentral/fileexchange/4404-blackjack +% MATLAB file exchange>. +% The video shows a simulation of a few hundred hands, +% starting each hand with a $10 bet. +% The sound comes from a piano playing a C-major scale. +% Again, resampling is not necessary. +% +% The emerging histograms in the video, and the static outcome in +% the final frame, show the percentages observed for each +% of ten possible outcomes. +% The histograms can be compared with those in the +% <https://www.mathworks.com/company/technical-articles/simulating-blackjack-with-matlab.html +% "Simulating Blackjack"> +% article that describes the use of the Parallel Computing Toolbox +% to play 10,000 hands with these results. + + bjpercent +%% +% (Homework. This simulation happens to have three hands with +% the very rare swings of more than $20. Find the hand numbers +% where such rare events occur. Post your answers in the comments. +% Hint: watch the emerging histograms.) + +%% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <https://blogs.mathworks.com/cleve/files/blackjack.mp4> +% +% *+ + + + + + + + + + + + + + + + + + + + + + + + + + + +* +% +% <<blackjack.png>> +% +% <<bj100K.png>> +% +##### SOURCE END ##### ef605386b1c14b589860f69f1d2032a2 +--> + + + + + Möbius, Mertens and Redheffer + + 2024-10-23T00:53:53-06:00 + https://hpc.social/2024/möbius-mertens-and-redheffer + <div class="content"><!--introduction--> +<p>Recently, I have made <a href="https://blogs.mathworks.com/cleve/">a series of blog posts</a> about Redheffer matrices and the Mertens conjecture. After each of the posts, readers and colleagues offered suggestions to speed up the calculations. Here is a summary of what I have learned.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#32215cb4-c6e7-4c82-a09c-be2a0e403218">M&ouml;bius Function</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#2421ff74-677d-4dda-9728-8ad0f481f610">Mertens Function</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#fbbf8ec1-839c-4bd7-9416-f48ae24df402">Redheffer Matrices</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#2c3c2db6-e1d2-41c4-8a2b-d1efbabe86e7">OEIS</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#a6e6f284-1b69-42f0-a04f-f9e20891cdbc">Ten Million</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#888c9931-3060-4b47-8405-ed484be2f796">Mertens Conjecture</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#21f44074-f0af-4aa2-b6a3-adb1a2756ea2">Conjecture is False</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#e485344f-bda2-4d4d-9fd0-e7102df79117">Matrices</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#5ffa1b4e-3fe8-4908-a32c-b41a2d162cd6">Sparsity</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#39aa4540-d55c-47d1-882b-33b04368d495">Computing Mertens</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#25c55aa9-7b26-4eb8-ae66-fbfbefea38b1">#1</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#4c32719f-3698-4320-a518-3b9d554916f9">#2</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#1d535f36-08d5-4044-87d1-b3aa7094574a">#3</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#4b32160d-f00c-46f0-861a-4fe8cf231394">#4</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#e624ea53-1063-4c25-a75f-c186f877d82c">#5</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#75297d30-41f2-45ca-ad62-8e710261ee95">Performance</a> +</li> +</ul> +</div> + +<h4>M&ouml;bius Function<a name="32215cb4-c6e7-4c82-a09c-be2a0e403218"></a> +</h4> +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mobius.jpg" vspace="5" /> </p> + +<p>The function named after the mid-nineteenth century German mathematician <a href="https://en.wikipedia.org/wiki/August_Ferdinand_M%C3%B6bius">August M&ouml;bius</a> is fundamental to the study of prime numbers. The M&ouml;bius function maps the positive integers onto -1,0 and +1.</p> + +<pre> mu(n) = 0 if n has a repeated prime factor, + = (-1)^(number prime factors) if the factors of n are not repeated</pre> +<p>Here is my code for the M&ouml;bius function. It relies on <tt>factor(n)</tt> which uses a sieve to find the prime factors of <tt>n</tt>.</p> + +<pre> function mu = mobius(n) + % mu = mobius(n) returns mu(1:n). + mu = -eye(1,n); + for k = 2:n + f = factor(k); + d = diff([1 f]); + if any(d == 0) + mu(k) = 0; + else + mu(k) = (-1)^length(f); + end + end + end</pre> +<p>Here is a graph of <tt>mu(n)</tt> for <tt>n</tt> = 1:40. For example, <tt>mu(29:31)</tt> are all -1 because 29 and 31 are both prime and 30 has an odd number of prime factors, 2, 3 and 5.</p> + +<pre class="language-matlab"> + mu = moebius(40); + plot(1:40,mu,<span class="string">'.-'</span>,<span class="string">'linewidth'</span>,1.5,<span class="string">'markersize'</span>,16) + axis([-242-1.51.5]) + title(<span class="string">'M&ouml;bius function'</span>) +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mertens_finale_blog_01.png" vspace="5" /> <h4>Mertens Function<a name="2421ff74-677d-4dda-9728-8ad0f481f610"></a> +</h4> +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mertens.jpg" vspace="5" /> </p> + +<p>The Mertens function is named after the late-nineteenth century Polish mathematician <a href="https://en.wikipedia.org/wiki/Franz_Mertens">Franz Mertens</a>. The function, which we denote by <tt>M(n)</tt>, is simply the partial sums of the M&ouml;bius function. The MATLAB code is very short.</p> + +<pre> function M = mertens(n) + % M = mertens(n) returns Mertens(1:n). + mu = moebius(n); + M = cumsum([1 mu(2:n)]); + end</pre> +<p>Here is a graph of <tt>M(n)</tt> for <tt>n</tt> = 1:40.</p> + +<pre class="language-matlab"> + M = mertens(40); + plot(1:40,M,<span class="string">'.-'</span>,<span class="string">'linewidth'</span>,1.5,<span class="string">'markersize'</span>,16) + axis([-242-4.51.5]) + title(<span class="string">'Mertens function'</span>) +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mertens_finale_blog_02.png" vspace="5" /> <h4>Redheffer Matrices<a name="fbbf8ec1-839c-4bd7-9416-f48ae24df402"></a> +</h4> +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Redheffer.jpg" vspace="5" /> </p> + +<p>The twentieth-century American mathematician <a href="https://en.wikipedia.org/wiki/Raymond_Redheffer">Ray Redheffer</a>, who was a professor at UCLA for 55 years, had a wide range of interests. He was the author of several popular textbooks, the inventor of the electronic game <a href="https://en.wikipedia.org/wiki/Nim">Nim</a> and, with Ray and Charles Eames, the creator of a four-meter long poster <a href="https://www.worthpoint.com/worthopedia/1966-ray-charles-eames-office-men-1724813663">Men of Modern Mathematics</a>.</p> + +<p>The n-by-n Redheffer's matrix <tt>R(n)</tt> is a matrix of zeros and ones. For <tt>j &gt; 1</tt>, the element <tt>R(k,j)</tt> equals one if <tt>j</tt> is a divisor of <tt>k</tt>. And importantly, for <tt>j = 1</tt>, the first column <tt>R(:,1)</tt> is all ones.</p> + +<pre> function R = redheffer(n) + k = 1:n; + j = k'; + R = (mod(k,j) == 0); + R(:,1) = 1; + end</pre> +<p>Nick Higham put Redheffer's matrix in the <a href="https://blogs.mathworks.com/cleve/2019/06/24/bohemian-matrices-in-the-matlab-gallery/">MATLAB Gallery</a> several years ago. Here is a spy plot of the 200-by-200.</p> + +<pre class="language-matlab"> + R = gallery(<span class="string">'redheff'</span>,200); + spy(R) + title(<span class="string">'Redheffer'</span>) +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mertens_finale_blog_03.png" vspace="5" /> <h4>OEIS<a name="2c3c2db6-e1d2-41c4-8a2b-d1efbabe86e7"></a> +</h4> +<p>In the Online Encyclopedia of Integer Sequences, the Mertens function is <a href="http://oeis.org/A002321">OEIS/A002321</a>. One of the many cool features of the OEIS is "listen", which generates music driven by the sequences. Take a look -- and a listen -- to my 63 second movie about A002321.</p> + +<p> +<a href="https://blogs.mathworks.com/cleve/files/mertens_plot.mp4">https://blogs.mathworks.com/cleve/files/mertens_plot.mp4</a> +</p> + +<h4>Ten Million<a name="a6e6f284-1b69-42f0-a04f-f9e20891cdbc"></a> +</h4> +<p>Here are plots of <tt>M(1:n)</tt> with <tt>n</tt> ranging from 100 to 10 million. Each plot after the first also shows the range of the previous plot. I will discuss the red lines in the next section</p> + +<pre class="language-matlab"> + load<span class="string"> mertens</span><span class="string"> M</span> + tiledlayout(2,3) + <span class="keyword">for</span> n = 10.^(2:7) + nexttile + mertens_plot(M(1:n)) + <span class="keyword">end</span> +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mertens_finale_blog_04.png" vspace="5" /> <h4>Mertens Conjecture<a name="888c9931-3060-4b47-8405-ed484be2f796"></a> +</h4> +<p>The red lines above are plots of <tt>&plusmn;sqrt(n)</tt>. They clearly bound <tt>M(n)</tt> for <tt>n</tt> up to 10 million. The Mertens Conjecture is that this holds for all <tt>n</tt>.</p> + +<pre> |M(n)| &lt; sqrt(n) for all n &gt; 0</pre> +<p>The conjecture appears in a 1885 letter from Thomas Stieltjes to Charles Hermite and in a 1897 paper by Mertens.</p> + +<p> +<a href="https://en.wikipedia.org/wiki/Mertens_conjecture">Wikipedia</a> says</p> + +<pre> It is a striking example of a mathematical conjecture proven false + despite a large amount of computational evidence in its favor.</pre> +<h4>Conjecture is False<a name="21f44074-f0af-4aa2-b6a3-adb1a2756ea2"></a> +</h4> +<p>In 1985, 100 years after the Stieltjes letter, Andrew Odlyzko and Herman te Riele proved that the conjecture is false. Their proof is indirect. They prove the existence of infinitely many <tt>n</tt> for which</p> + +<pre> |M(n)|/sqrt(n) &gt; 1.06</pre> +<p>But they do not know the value of any particular <tt>n</tt>. They informally estimate that such an <tt>n</tt> would be greater than 10^30 and probably much larger.</p> + +<h4>Matrices<a name="e485344f-bda2-4d4d-9fd0-e7102df79117"></a> +</h4> +<p>Let's get back to the world of matrices. It is not obvious, but is true, that the determinants of Redheffer matrices are equal to the Mertens function.</p> + +<pre> det(R(n)) = M(n)</pre> +<p>So, if I could have proved that</p> + +<pre> |det(R(n))| &lt; sqrt(n) for all n &gt; 0</pre> +<p>I would have had a proof of the Riemann Hypothesis.</p> + +<p>It might appear that I am out of the clutches of number theory and safely back to matrix computation. But that illusion does not last for long.</p> + +<h4>Sparsity<a name="5ffa1b4e-3fe8-4908-a32c-b41a2d162cd6"></a> +</h4> +<p>The <tt>0(n^3)</tt> memory required by the Redheffer matrix from the gallery runs out of steam quickly. We need to take advantage of sparsity. This function generates the sparse representation of a Redheffer matrix directly.</p> + +<pre> function R = spredheffer(n) + j = (1:n)'; + k = ones(n,1); + m = n; + for i = 2:n + t = [1 i:i:n]; + p = length(t); + j(m+(1:p)) = t; + k(m+(1:p)) = i; + m = m+p; + end + R = sparse(k,j,1,n,n); + end</pre> +<h4>Computing Mertens<a name="39aa4540-d55c-47d1-882b-33b04368d495"></a> +</h4> +<p>Here are five methods for computing the Mertens function.</p> + +<h4>#1<a name="25c55aa9-7b26-4eb8-ae66-fbfbefea38b1"></a> +</h4> +<p>The first simply takes the determinant of the Redheffer matrix in the <tt>gallery</tt>.</p> + +<pre> M = det(gallery('redheff',n))</pre> +<h4>#2<a name="4c32719f-3698-4320-a518-3b9d554916f9"></a> +</h4> +<p>The sparse Gaussian elimination function <tt>lu</tt> with one input and four sparse outputs is designed for solving sparse linear systems. Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to reduce fill-in while maintaining numerical stability. The determinant of the input matrix is the product of the four determinants of the output matrices. Two them are triangular and two are permutations, so it is easy, and quick, to compute their determinants.</p> + +<pre> R = spredheffer(n); + [L,U,P,Q] = lu(R) + M = det(L)*det(U)*det(P)*det(Q);</pre> +<h4>#3<a name="1d535f36-08d5-4044-87d1-b3aa7094574a"></a> +</h4> +<p>Pat Quillen realized that by interchanging the first and last columns, there would be little fill-in. We need only one determinant.</p> + +<pre> R = spredheffer(n); + R(:,[1 n]) = R(:,[n 1]); + M = -det(R);</pre> +<h4>#4<a name="4b32160d-f00c-46f0-861a-4fe8cf231394"></a> +</h4> +<p>A thoughtful reader of the blog submitted a suggestion based on the Schur complement. Suppose <tt>E</tt> is a block matrix,</p> + +<pre> E = [A B + C D]</pre> +<p>Schur's formula for the determinant of <tt>E</tt> is</p> + +<pre> det(E) = det(D)*det(A - B*(D\C))</pre> +<p>Apply this to <tt>R(n)</tt> with <tt>A</tt> the (1,1) entry, which is 1, and <tt>D</tt> the lower (n-1)-by-(n-1) submatrix, which is upper triangular with ones on the diagonal and determinant equal 1. This leads to method #4 which uses backslash with a sparse, unit, upper triangular matrix. There is a Redheffer matrix, but no determinant.</p> + +<pre> S = spredheffer(n); + e = ones(n-1,1); + M = 1 - e'*(S(2:n,2:n)\e);</pre> +<h4>#5<a name="e624ea53-1063-4c25-a75f-c186f877d82c"></a> +</h4> +<p>Once we have generated <tt>R(n)</tt> and computed <tt>M(n)</tt>, how do we get <tt>R(n+1)</tt> and <tt>M(n+1)</tt>? After several iterations of this approach, I found myself without any matrices and only the original definitions of M&ouml;bius and Mertens.</p> + +<pre> mu = mobius(n); + M = cumsum([1 mu(2:n)]);</pre> +<h4>Performance<a name="75297d30-41f2-45ca-ad62-8e710261ee95"></a> +</h4> +<p>Let's summarize the five methods. The first four generate a single, isolated value of <tt>M(n)</tt>. Method #5 generates <tt>M(n)</tt> for all <tt>n</tt> from 1 to any specified maximum.</p> + +<pre> matrix function dets M</pre> +<pre> #1 full gallery 1 1 + #2 sparse lu 4 1 + #3 sparse swap 1 1 + #4 sparse \ 0 1 + #5 none factor 0 many</pre> +<p>Time in seconds to compute <tt>M(n)</tt> on my Lenovo T14 laptop running Windows.</p> + +<pre> n 2e4 2e5 2e6 2e7</pre> +<pre> #1 28.652 - - - + #2 0.344 21.77 - - + #3 0.086 1.29 16.4 + #4 0.055 0.65 6.7 70.1 + #5 0.075 0.80 10.7 204.5</pre> +<!-- + function grabCode_a7956cd39e4e4b2da601dae253a9ad13() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='a7956cd39e4e4b2da601dae253a9ad13 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' a7956cd39e4e4b2da601dae253a9ad13'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +a7956cd39e4e4b2da601dae253a9ad13 ##### SOURCE BEGIN ##### +%% Möbius, Mertens and Redheffer +% Recently, I have made +% <https://blogs.mathworks.com/cleve/ a series of blog posts> +% about Redheffer matrices and the Mertens conjecture. +% After each of the posts, readers and colleagues +% offered suggestions to speed up the calculations. +% Here is a summary of what I have learned. + +%% Möbius Function +% +% <<Mobius.jpg>> +% +% The function named after the mid-nineteenth century German +% mathematician +% <https://en.wikipedia.org/wiki/August_Ferdinand_M%C3%B6bius +% August Möbius> +% is fundamental to the study of prime numbers. +% The Möbius function maps the positive integers onto -1,0 and +1. +% +% mu(n) = 0 if n has a repeated prime factor, +% = (-1)^(number prime factors) if the factors of n are not repeated +% +% Here is my code for the Möbius function. It relies on |factor(n)| +% which uses a sieve to find the prime factors of |n|. +% +% function mu = mobius(n) +% % mu = mobius(n) returns mu(1:n). +% mu = -eye(1,n); +% for k = 2:n +% f = factor(k); +% d = diff([1 f]); +% if any(d == 0) +% mu(k) = 0; +% else +% mu(k) = (-1)^length(f); +% end +% end +% end +% +% Here is a graph of |mu(n)| for |n| = 1:40. For example, +% |mu(29:31)| are all -1 because 29 and 31 are both prime +% and 30 has an odd number of prime factors, 2, 3 and 5. +% + mu = moebius(40); + plot(1:40,mu,'.-','linewidth',1.5,'markersize',16) + axis([-2 42 -1.5 1.5]) + title('Möbius function') + +%% Mertens Function +% +% <<Mertens.jpg>> +% +% The Mertens function is named after the late-nineteenth century Polish +% mathematician +% <https://en.wikipedia.org/wiki/Franz_Mertens Franz Mertens>. +% The function, which we denote by |M(n)|, is simply the partial sums +% of the Möbius function. The MATLAB code is very short. +% +% function M = mertens(n) +% % M = mertens(n) returns Mertens(1:n). +% mu = moebius(n); +% M = cumsum([1 mu(2:n)]); +% end +% +% Here is a graph of |M(n)| for |n| = 1:40. +% + M = mertens(40); + plot(1:40,M,'.-','linewidth',1.5,'markersize',16) + axis([-2 42 -4.5 1.5]) + title('Mertens function') + +%% Redheffer Matrices +% +% <<Redheffer.jpg>> +% +% The twentieth-century American mathematician +% <https://en.wikipedia.org/wiki/Raymond_Redheffer Ray Redheffer>, +% who was a professor at UCLA for 55 years, +% had a wide range of interests. +% He was the author of several popular textbooks, the inventor +% of the electronic game <https://en.wikipedia.org/wiki/Nim Nim> +% and, with Ray and Charles Eames, the creator of a four-meter long poster +% <https://www.worthpoint.com/worthopedia/1966-ray-charles-eames-office-men-1724813663 +% Men of Modern Mathematics>. +% +% The n-by-n Redheffer's matrix |R(n)| is a matrix of zeros and ones. +% For |j > 1|, the element |R(k,j)| equals one if |j| is a divisor of |k|. +% And importantly, for |j = 1|, the first column |R(:,1)| is all ones. +% +% function R = redheffer(n) +% k = 1:n; +% j = k'; +% R = (mod(k,j) == 0); +% R(:,1) = 1; +% end +% +% Nick Higham put Redheffer's matrix in the +% <https://blogs.mathworks.com/cleve/2019/06/24/bohemian-matrices-in-the-matlab-gallery/ +% MATLAB Gallery> several years ago. +% Here is a spy plot of the 200-by-200. +% + R = gallery('redheff',200); + spy(R) + title('Redheffer') + +%% OEIS +% In the Online Encyclopedia of Integer Sequences, the Mertens function +% is <http://oeis.org/A002321 OEIS/A002321>. One of the many cool +% features of the OEIS is "listen", which generates music driven by +% the sequences. +% Take a look REPLACE_WITH_DASH_DASH and a listen REPLACE_WITH_DASH_DASH to my 63 second movie about A002321. +% +% <https://blogs.mathworks.com/cleve/files/mertens_plot.mp4> + +%% Ten Million +% Here are plots of |M(1:n)| with |n| ranging from 100 to 10 million. +% Each plot after the first also shows the range of the previous plot. +% I will discuss the red lines in the next section +% + load mertens M + tiledlayout(2,3) + for n = 10.^(2:7) + nexttile + mertens_plot(M(1:n)) + end + +%% Mertens Conjecture +% The red lines above are plots of |±sqrt(n)|. +% They clearly bound |M(n)| for |n| up to 10 million. +% The Mertens Conjecture is that this holds for all |n|. +% +% |M(n)| < sqrt(n) for all n > 0 +% +% The conjecture appears in a 1885 letter from Thomas Stieltjes to +% Charles Hermite and in a 1897 paper by Mertens. +% +% <https://en.wikipedia.org/wiki/Mertens_conjecture Wikipedia> says +% +% It is a striking example of a mathematical conjecture proven false +% despite a large amount of computational evidence in its favor. + +%% Conjecture is False +% In 1985, 100 years after the Stieltjes letter, Andrew Odlyzko +% and Herman te Riele proved that the conjecture is false. +% Their proof is indirect. They prove the existence of +% infinitely many |n| for which +% +% |M(n)|/sqrt(n) > 1.06 +% +% But they do not know the value of any particular |n|. They informally +% estimate that such an |n| would be greater than 10^30 and probably +% much larger. + +%% Matrices +% Let's get back to the world of matrices. It is not obvious, +% but is true, that the determinants of Redheffer matrices +% are equal to the Mertens function. +% +% det(R(n)) = M(n) +% +% So, if I could have proved that +% +% |det(R(n))| < sqrt(n) for all n > 0 +% +% I would have had a proof of the Riemann Hypothesis. +% +% It might appear that I am out of the clutches of number theory +% and safely back to matrix computation. But that illusion does +% not last for long. + +%% Sparsity +% The |0(n^3)| memory required by the Redheffer matrix +% from the gallery runs out of steam quickly. +% We need to take advantage of sparsity. +% This function generates the sparse representation of +% a Redheffer matrix directly. +% +% function R = spredheffer(n) +% j = (1:n)'; +% k = ones(n,1); +% m = n; +% for i = 2:n +% t = [1 i:i:n]; +% p = length(t); +% j(m+(1:p)) = t; +% k(m+(1:p)) = i; +% m = m+p; +% end +% R = sparse(k,j,1,n,n); +% end +% +%% Computing Mertens +% Here are five methods for computing the Mertens function. +% + +%% #1 +% The first simply takes the determinant of the Redheffer matrix +% in the |gallery|. +% +% M = det(gallery('redheff',n)) +% + +%% #2 +% The sparse Gaussian elimination function |lu| with one +% input and four sparse outputs is designed for solving sparse linear +% systems. Written primarily +% by Tim Davis and included in his UMFPACK package, the function +% uses an unsymmetric pattern multifrontal pivoting strategy +% to reduce fill-in while maintaining numerical stability. +% The determinant of the input matrix is the product of the four +% determinants of the output matrices. Two them are triangular and two +% are permutations, so it is easy, and quick, to compute their determinants. +% +% R = spredheffer(n); +% [L,U,P,Q] = lu(R) +% M = det(L)*det(U)*det(P)*det(Q); +% + +%% #3 +% Pat Quillen realized that by interchanging the first and last +% columns, there would be little fill-in. We need only one determinant. +% +% R = spredheffer(n); +% R(:,[1 n]) = R(:,[n 1]); +% M = -det(R); +% + +%% #4 +% +% A thoughtful reader of the blog submitted a suggestion based on the +% Schur complement. Suppose |E| is a block matrix, +% +% E = [A B +% C D] +% +% Schur's formula for the determinant of |E| is +% +% det(E) = det(D)*det(A - B*(D\C)) +% +% Apply this to |R(n)| with |A| the (1,1) entry, which is 1, +% and |D| the lower (n-1)-by-(n-1) submatrix, which is upper triangular +% with ones on the diagonal and determinant equal 1. This leads to method +% #4 which uses backslash with a sparse, unit, upper triangular matrix. +% There is a Redheffer matrix, but no determinant. +% +% S = spredheffer(n); +% e = ones(n-1,1); +% M = 1 - e'*(S(2:n,2:n)\e); +% + +%% #5 +% Once we have generated |R(n)| and computed |M(n)|, how do we get +% |R(n+1)| and |M(n+1)|? After several iterations of this approach, +% I found myself without any matrices and only the original definitions +% of Möbius and Mertens. +% +% mu = mobius(n); +% M = cumsum([1 mu(2:n)]); +% + +%% Performance +% Let's summarize the five methods. The first four generate +% a single, isolated value of |M(n)|. Method #5 generates +% |M(n)| for all |n| from 1 to any specified maximum. +% +% matrix function dets M +% +% #1 full gallery 1 1 +% #2 sparse lu 4 1 +% #3 sparse swap 1 1 +% #4 sparse \ 0 1 +% #5 none factor 0 many +% +% Time in seconds to compute |M(n)| on my Lenovo T14 laptop +% running Windows. +% +% n 2e4 2e5 2e6 2e7 +% +% #1 28.652 - - - +% #2 0.344 21.77 - - +% #3 0.086 1.29 16.4 +% #4 0.055 0.65 6.7 70.1 +% #5 0.075 0.80 10.7 204.5 + + +##### SOURCE END ##### a7956cd39e4e4b2da601dae253a9ad13 +--> + + + + + Experience With Chatbots Generating MATLAB + + 2024-10-07T14:31:38-06:00 + https://hpc.social/2024/experience-with-chatbots-generating-matlab + <div class="content"><!--introduction--> +<p>A friend is investigating the use of generative AI in his classes. I asked two different popular chatbots to write MATLAB programs for a mathematically nontrivial problem. Both chatbots understood my query and both wrote plausible MATLAB programs, but one of the programs was not correct. My recommendation for coursework: carefully read and test programs produced by generative AI and repair any incorrect ones.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#0c48695a-3a4f-46a2-9d9c-23506fc3aae1">Redheffer, Mertens and Ahalt</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#40ba61bb-33a4-43e5-9193-7a3889fb91f5">Program number one</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#8d0098c5-f272-4317-8eef-f58166e680af">Program number two</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#a1a49807-f649-4010-af50-85a315d67540">Program number three</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c38da925-a549-4542-bb35-198572a00c66">Happy Ending</a> +</li> +</ul> +</div> + +<h4>Redheffer, Mertens and Ahalt<a name="0c48695a-3a4f-46a2-9d9c-23506fc3aae1"></a> +</h4> +<p>Frequent readers of this blog know about my recent obsession with Redheffer matrices and the Mertens conjecture. So, when my friend Stan Ahalt visited from North Carolina State a few days ago, and wanted to discuss the use of generative AI in the new Data Science curriculum, I suggested asking chatbots to write MATLAB programs that check the Mertens conjecture.</p> + +<p>We logged onto the web sites for two different AI companies. Our query was the same at both sites.</p> + +<pre>Please write a MATLAB program to test the Mertens conjecture.</pre> +<p>I was pleasantly surprised when both systems knew about MATLAB and understood the query. One of the systems replied:</p> + +<pre>Certainly! I'll create a MATLAB program to test the Mertens +conjecture. First, let me briefly explain what the Mertens +conjecture is, and then I'll provide the code. +The Mertens conjecture states that the Mertens function M(n) +is bounded by &radic;n for all positive integers n. Mathematically, +it can be expressed as:</pre> +<pre>|M(n)| &le; &radic;n for all n &gt; 1</pre> +<pre>Where M(n) is the Mertens function, defined as the sum of +the M&ouml;bius function μ(k) for all positive integers k up to n:</pre> +<pre>M(n) = Σ μ(k) for k = 1 to n</pre> +<pre>Here's a MATLAB program to test this conjecture.</pre> +<h4>Program number one<a name="40ba61bb-33a4-43e5-9193-7a3889fb91f5"></a> +</h4> +<p>The program from one of the web sites begins:</p> + +<pre>function M = test_Mertens(n) + % Function to test the Mertens conjecture for a given n + % Returns true if the conjecture holds for all values up to n, false otherwise</pre> +<p>This is followed by code to sum the M&ouml;bius function and verify that <tt>abs(M) &lt; sqrt(n)</tt>. The crucial <tt>mobius</tt> is a straight-forward implementation of the definition. The code relies on MATLAB intrinsics, <tt>factor</tt> and <tt>unique</tt>.</p> + +<pre>function mu = mobius(k) + % Function to calculate the M&ouml;bius function of k + % Factorize k + p = factor(k); + % Check for square factors + if length(p) ~= length(unique(p)) + mu = 0; + else + mu = (-1)^length(p); + end +end</pre> +<p>I was very pleased. The entire program is only 40 lines long, eminently readable, and correct.</p> + +<h4>Program number two<a name="8d0098c5-f272-4317-8eef-f58166e680af"></a> +</h4> +<p>The program from the other web site is more sophisticated. It knows enough about MATLAB to use its cumulative summation.</p> + +<pre>M = cumsum(mu);</pre> +<p>Here is the crucial <tt>mobius</tt> function. At first glance, it looks OK. Is it?</p> + +<pre>function mu = mobius(n) + % Calculate M&ouml;bius function values up to n + mu = ones(1, n); + for i = 2:sqrt(n) + if mu(i) == 1 + for j = i^2:i:n + if mod(j, i^2) == 0 + mu(j) = 0; + else + mu(j) = -mu(j); + end + end + end + end +end</pre> +<p>As you have guessed, program number two is not correct. Even its own plot reveals that something is amiss.</p> + +<h4>Program number three<a name="a1a49807-f649-4010-af50-85a315d67540"></a> +</h4> +<p>Let's return to the second Web site and make a more specific query.</p> + +<pre>Please write a MATLAB program that uses Redheffer +matrices to test the Mertens conjecture.</pre> +<p>The resulting program generates a Redheffer matrix with</p> + +<pre>R = zeros(n,n); +for i = 1:n + for j = 1:n + if mod(i, j) == 0 + R(i, j) = 1; + end + end +end</pre> +<p>It computes the determinant to obtain the Mertens value, <tt>M(n)</tt>. It is able to confirm the conjecture for all the <tt>n</tt> in the given range.</p> + +<p>What's wrong now? Look at the plot. The computed <tt>M(n)</tt> is always equal to one. Why?</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/program3.png" vspace="5" /> </p> + +<h4>Happy Ending<a name="c38da925-a549-4542-bb35-198572a00c66"></a> +</h4> +<p>Program number three can be repaired by adding one line to the code that generates <tt>R</tt>. What is that line? Respond in the comments.</p> + +<p>Look at the good side. Instead of just using AI to do homework, we can challenge students to check the results carefully and repair any incorrect programs.</p> + +<!-- + function grabCode_b5785d3ceb4b4ff38b92ec4f957e13e3() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='b5785d3ceb4b4ff38b92ec4f957e13e3 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' b5785d3ceb4b4ff38b92ec4f957e13e3'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +b5785d3ceb4b4ff38b92ec4f957e13e3 ##### SOURCE BEGIN ##### +%% Experience With Chatbots Generating MATLAB +% A friend is investigating the use of generative AI in his classes. +% I asked two different popular chatbots to write +% MATLAB programs for a mathematically nontrivial problem. +% Both chatbots understood my query and both wrote plausible +% MATLAB programs, but one of the programs was not correct. +% My recommendation for coursework: carefully read and test +% programs produced by generative AI and repair any incorrect ones. + +%% Redheffer, Mertens and Ahalt +% Frequent readers of this blog know about my recent obsession +% with Redheffer matrices and the Mertens conjecture. +% So, when my friend Stan Ahalt visited from North Carolina State +% a few days ago, and wanted to discuss the use of generative AI in +% the new Data Science curriculum, I suggested asking chatbots +% to write MATLAB programs that check the Mertens conjecture. + +%% +% We logged onto the web sites for two different AI companies. +% Our query was the same at both sites. +% +% Please write a MATLAB program to test the Mertens conjecture. +% +% I was pleasantly surprised when both systems knew about MATLAB +% and understood the query. +% One of the systems replied: +% +% Certainly! I'll create a MATLAB program to test the Mertens +% conjecture. First, let me briefly explain what the Mertens +% conjecture is, and then I'll provide the code. +% The Mertens conjecture states that the Mertens function M(n) +% is bounded by √n for all positive integers n. Mathematically, +% it can be expressed as: +% +% |M(n)| ≤ √n for all n > 1 +% +% Where M(n) is the Mertens function, defined as the sum of +% the Möbius function μ(k) for all positive integers k up to n: +% +% M(n) = Σ μ(k) for k = 1 to n +% +% Here's a MATLAB program to test this conjecture. +% + +%% Program number one +% The program from one of the web sites begins: +% +% function M = test_Mertens(n) +% % Function to test the Mertens conjecture for a given n +% % Returns true if the conjecture holds for all values up to n, false otherwise +% +% This is followed by code to sum the Möbius function and verify that +% |abs(M) < sqrt(n)|. +% The crucial |mobius| is a straight-forward implementation +% of the definition. The code relies on MATLAB intrinsics, |factor| +% and |unique|. +% +% function mu = mobius(k) +% % Function to calculate the Möbius function of k +% % Factorize k +% p = factor(k); +% % Check for square factors +% if length(p) ~= length(unique(p)) +% mu = 0; +% else +% mu = (-1)^length(p); +% end +% end + +%% +% I was very pleased. The entire program is only 40 lines long, +% eminently readable, and correct. + +%% Program number two +% The program from the other web site is more sophisticated. +% It knows enough about MATLAB to use its cumulative summation. +% +% M = cumsum(mu); +% +% Here is the crucial |mobius| function. At first glance, it looks OK. +% Is it? +% +% function mu = mobius(n) +% % Calculate Möbius function values up to n +% mu = ones(1, n); +% for i = 2:sqrt(n) +% if mu(i) == 1 +% for j = i^2:i:n +% if mod(j, i^2) == 0 +% mu(j) = 0; +% else +% mu(j) = -mu(j); +% end +% end +% end +% end +% end +% +% As you have guessed, program number two is not correct. +% Even its own plot reveals that something is amiss. + +%% Program number three +% Let's return to the second Web site and make a more specific query. +% +% Please write a MATLAB program that uses Redheffer +% matrices to test the Mertens conjecture. +% +% The resulting program generates a Redheffer matrix with +% +% R = zeros(n,n); +% for i = 1:n +% for j = 1:n +% if mod(i, j) == 0 +% R(i, j) = 1; +% end +% end +% end +% +% It computes the determinant to obtain the Mertens value, |M(n)|. +% It is able to confirm the conjecture for all the |n| +% in the given range. +% +% What's wrong now? Look at the plot. The computed |M(n)| is always +% equal to one. Why? +% +% <<program3.png>> +% + +%% Happy Ending +% Program number three can be repaired by adding one line to the code that +% generates |R|. What is that line? Respond in the comments. +% +% Look at the good side. Instead of just using AI +% to do homework, we can +% challenge students to check the results carefully +% and repair any incorrect programs. +##### SOURCE END ##### b5785d3ceb4b4ff38b92ec4f957e13e3 +--> + + + + + Redheffer and Mertens, Accelerated + + 2024-09-30T14:28:40-06:00 + https://hpc.social/2024/redheffer-and-mertens-accelerated + <div class="content"><!--introduction--> +<p>Shortly after I published the second post about the <a href="https://blogs.mathworks.com/cleve/2024/09/27/redheffer-and-mertens-continued/">Mertens conjecture</a>, a reader's comment suggested a new approach to computing Redheffer determinants and the Mertens function. It is now possible to compute a half-million values of the Mertens function in about five hours.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#7d362761-695e-4474-88df-0a49bd91d0a1">Block matrices</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#3237700b-50f8-4cce-a2a4-ce2a67875d0f"><tt>redmert</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c59e3dbe-0a74-4f7c-839b-a92e38cb63c3">Inside <tt>redmert</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#6c005e64-ccd7-4f61-bab0-eec89c74cdd4">mertens_plot</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#dc3123c4-88e4-4acc-87ef-5dce4750f795">Postscript</a> +</li> +</ul> +</div> + +<h4>Block matrices<a name="7d362761-695e-4474-88df-0a49bd91d0a1"></a> +</h4> +<p>The comment references the <a href="https://en.wikipedia.org/wiki/Determinant#Block_matrices">Wikipedia article</a> on block matrices.</p> + +<pre> You could also consider the matrix as a 2x2 block matrix and + use the formula for the determinant of a block matrix [1]. + A = redheffer(n); + M = full(A(1,1) - A(1, 2:end) * (A(2:end,2:end) \ A(2:end, 1))); + Since the (n-1)x(n-1) block is upper triangular, the solve becomes + a back-substitution.</pre> +<h4> +<tt>redmert</tt><a name="3237700b-50f8-4cce-a2a4-ce2a67875d0f"></a> +</h4> +<p>My new program is named <tt>redmert</tt>, an abbreviation of Redheffer-Mertens. It uses the fact that <tt>redheffer(n)</tt> is obtained from <tt>redheffer(n-1)</tt> by appending the last column.</p> + +<p>Let <tt>R(n)</tt> denote the upper or right-triangular part of <tt>redheffer(n)</tt>.</p> + +<pre> R(n) = triu(redheffer(n))</pre> +<p> +<tt>R(n)</tt> is sparse, upper triangular and has ones on the diagonal. The indices of the nonzeros in the last column of <tt>R(n)</tt> are the factors of <tt>n</tt>. For example, here is <tt>R(8)</tt>.</p> + +<pre class="codeinput"> +R8 = full(triu(redheffer(8))) +</pre> +<pre class="codeoutput">R8 = + 1 1 1 1 1 1 1 1 + 0 1 0 1 0 1 0 1 + 0 0 1 0 0 1 0 0 + 0 0 0 1 0 0 0 1 + 0 0 0 0 1 0 0 0 + 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 1 +</pre> +<p>The idea behind <tt>redmert</tt> is to compute a sequence of Redheffer matrices, <tt>R</tt>, and associated values of the Mertens function, <tt>M</tt>.</p> + +<pre> [M,R] = redmert(p,R)</pre> +<p>The input is a scalar integer <tt>p</tt>, the desired sequence length, and a sparse matrix <tt>R</tt>, the upper triangle of a Redheffer matrix of some order, <tt>n</tt>. The output is an integer vector of values <tt>M(n+1:n+p)</tt> and the upper triangle of the Redheffer matrix of order <tt>n+p</tt>. This output <tt>R</tt> can then be used as the input <tt>R</tt> in another call to <tt>redmert</tt>.</p> + +<p>The sequence is started with an empty <tt>R</tt>.</p> + +<p>For example,</p> + +<pre class="codeinput"> +[M,R] = redmert(8,[]); +</pre> +<p>The output is <tt>mertens(n), n = 1:8</tt>, and <tt>R8</tt> from the example above.</p> + +<pre class="codeinput"> +MR8 = full(R) +</pre> +<pre class="codeoutput"> +M = + 1 + 0 + -1 + -1 + -2 + -1 + -2 + -2 +R8 = + 1 1 1 1 1 1 1 1 + 0 1 0 1 0 1 0 1 + 0 0 1 0 0 1 0 0 + 0 0 0 1 0 0 0 1 + 0 0 0 0 1 0 0 0 + 0 0 0 0 0 1 0 0 + 0 0 0 0 0 0 1 0 + 0 0 0 0 0 0 0 1 +</pre> +<h4>Inside <tt>redmert</tt><a name="c59e3dbe-0a74-4f7c-839b-a92e38cb63c3"></a> +</h4> +<p>The entire code for <tt>redmert</tt> is twelve lines long. It manipulates sparse matrices and uses sparse backslash to solve a triangular system. Nothing else is required.</p> + +<p>Lines 7 and 8 generate the last column of <tt>R</tt> and lines 9 and 10 implement the new idea about block matrices.</p> + +<pre class="codeinput"> +dbtype <span class="string">redmert</span> +</pre> +<pre class="codeoutput"> +1 function [M,R] = redmert(p,Rin) +2 M = zeros(p,1); +3 R = sparse(triu(Rin)); +4 n = size(R,1); +5 for q = 1:p +6 n = n+1; +7 k = (mod(n,1:n) == 0); +8 R(k,n) = 1; +9 e = ones(n-1,1); +10 M(q) = R(1,1) - e'*(R(2:n,2:n)\e); +11 end +12 end +</pre> +<h4>mertens_plot<a name="6c005e64-ccd7-4f61-bab0-eec89c74cdd4"></a> +</h4> +<p>It takes about five hours for <tt>redmert</tt> to compute half a million values on my laptop.</p> + +<pre> n = 0.5e6; + p = 0.5e4; + R = sparse([]); + M = []; + for k = p:p:n + disp(k) + [Mout,R] = redmert(p,R); + M = [M; Mout]; + mertens_plot(M) + end</pre> +<pre class="codeinput"> +mertens_plot +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/redmert_blog_01.png" vspace="5" /> <h4>Postscript<a name="dc3123c4-88e4-4acc-87ef-5dce4750f795"></a> +</h4> +<p>I started this project by being surprised to find myself computing determinants. Now I am back to my long-time position disparaging determinants. They have been replaced by a good friend, backslash.</p> + +<!-- + function grabCode_3267a823a3ca4544ace75a24a1cc6636() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='3267a823a3ca4544ace75a24a1cc6636 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 3267a823a3ca4544ace75a24a1cc6636'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +3267a823a3ca4544ace75a24a1cc6636 ##### SOURCE BEGIN ##### +%% Redheffer and Mertens, Accelerated +% Shortly after I published the second post about the +% <https://blogs.mathworks.com/cleve/2024/09/27/redheffer-and-mertens-continued/ +% Mertens conjecture>, +% a reader's comment suggested a new approach to +% computing Redheffer determinants and the Mertens function. +% It is now possible to compute a half-million values of the +% Mertens function in about five hours. + +%% Block matrices +% The comment references the +% <https://en.wikipedia.org/wiki/Determinant#Block_matrices +% Wikipedia article> on block matrices. +% +% You could also consider the matrix as a 2x2 block matrix and +% use the formula for the determinant of a block matrix [1]. +% A = redheffer(n); +% M = full(A(1,1) - A(1, 2:end) * (A(2:end,2:end) \ A(2:end, 1))); +% Since the (n-1)x(n-1) block is upper triangular, the solve becomes +% a back-substitution. + +%% |redmert| +% My new program is named |redmert|, an abbreviation of +% Redheffer-Mertens. It uses the fact that +% |redheffer(n)| is obtained from |redheffer(n-1)| by appending +% the last column. +% +% Let |R(n)| denote the upper or right-triangular +% part of |redheffer(n)|. +% +% R(n) = triu(redheffer(n)) +% +% |R(n)| is sparse, upper triangular and has ones on the +% diagonal. +% The indices of the nonzeros in the last column of |R(n)| +% are the factors of |n|. +% For example, here is |R(8)|. + + R8 = full(triu(redheffer(8))) + +%% +% The idea behind |redmert| is to compute a sequence +% of Redheffer matrices, |R|, and associated values of the +% Mertens function, |M|. +% +% [M,R] = redmert(p,R) +% +% The input is a scalar integer |p|, the desired sequence length, +% and a sparse matrix |R|, the upper triangle of a Redheffer +% matrix of some order, |n|. +% The output is an integer vector of values |M(n+1:n+p)| and +% the upper triangle of the Redheffer matrix of order |n+p|. +% This output |R| can then be used as the input |R| in another +% call to |redmert|. +% +% The sequence is started with an empty |R|. +% +% For example, +% + [M,R] = redmert(8,[]); + +%% +% The output is |mertens(n), n = 1:8|, and |R8| from the example +% above. + + M + R8 = full(R) + +%% Inside |redmert| +% The entire code for |redmert| is twelve lines long. +% It manipulates sparse matrices and uses sparse backslash +% to solve a triangular system. Nothing else is required. +% +% Lines 7 and 8 generate the last column of |R| and lines 9 and 10 +% implement the new idea about block matrices. + + dbtype redmert + +%% mertens_plot +% It takes about five hours for |redmert| +% to compute half a million values on my laptop. +% +% n = 0.5e6; +% p = 0.5e4; +% R = sparse([]); +% M = []; +% for k = p:p:n +% disp(k) +% [Mout,R] = redmert(p,R); +% M = [M; Mout]; +% mertens_plot(M) +% end + + mertens_plot + +%% Postscript +% I started this project by being surprised to find +% myself computing determinants. +% Now I am back to my long-time position disparaging +% determinants. They have been replaced by a good friend, backslash. + +##### SOURCE END ##### 3267a823a3ca4544ace75a24a1cc6636 +--> + + + + + Redheffer and Mertens, Continued + + 2024-09-27T12:28:39-06:00 + https://hpc.social/2024/redheffer-and-mertens-continued + <div class="content"><!--introduction--> +<p>Shortly after I posted <a href="https://blogs.mathworks.com/cleve/2024/09/23/redheffer-mertens-and-one-million-dollars/">Redheffer, Mertens and One-Million Dollars</a> a few days ago, Mathworks' Pat Quillen made an important observation about computing the Mertens function.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#f3fcd244-9ad3-4849-93ca-a831a5999c61"><tt>mertens</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#22db8fd3-aa25-4f76-9360-af77b6b20726">Mertens function</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#9ebbd5e7-4600-435d-8b80-56634f314af3">Mertens computation</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#d25d727c-f7fb-41b5-a32e-eab8c9e0caae">Mertens conjecture</a> +</li> +</ul> +</div> + +<h4> +<tt>mertens</tt><a name="f3fcd244-9ad3-4849-93ca-a831a5999c61"></a> +</h4> +<p>The elements in the first column of the Redheffer matrix, <tt>A = redheffer(n)</tt>, are all equal to one. That dense column does not make MATLAB happy about computing <tt>det(A)</tt> . However, the last column of <tt>A</tt> has only a few nonzero elements and so Pat suggested interchanging the first and last columns before computing the determinant. This makes a world of difference. (Thanks, Pat.)</p> + +<pre class="codeinput">type<span class="string">mertens</span> +</pre> +<pre class="codeoutput"> +function M = mertens(n) + if n &gt; 1 + A = redheffer(n); + A(:,[1 n]) = A(:,[n 1]); + M = -round(det(A)); + else + M = 1; + end +end +</pre> +<p>The time required to compute <tt>det(A)</tt> varies with the sparsity of the last column, but it is only a little more than the time to compute <tt>redheffer(n)</tt> in the first place.</p> + +<pre class="codeinput">mertens2_time +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/mertens2_blog_01.png" vspace="5" /> <h4>Mertens function<a name="22db8fd3-aa25-4f76-9360-af77b6b20726"></a> +</h4> +<p>Pat's change makes it possible to take <tt>n</tt> up to a quarter of a million, and beyond. Here is a new plot of the Mertens function <tt>M(n)</tt> and the <tt>sqrt(n)</tt> bounds of the Mertens conjecture.</p> + +<pre class="codeinput">mertens_plot +</pre> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/mertens2_blog_02.png" vspace="5" /> <p>There are a quarter of a million points in the data for this plot. Fortunately, the .PNG file used for the blog only needs to sample the data.</p> + +<h4>Mertens computation<a name="9ebbd5e7-4600-435d-8b80-56634f314af3"></a> +</h4> +<p>The job that I ran on my laptop to compute one-quarter of a million values of <tt>M(n)</tt> is still running. It currently is past 0.35 million and takes less than two seconds for each value. I may keep the job running over the weekend, just to see how far it gets.</p> + +<p>The task is embarrassingly parallel. If I had a pool with a million processors, I could have each processor compute one value. I would then just have to collect the results, but that doesn't involve any arithmetic.</p> + +<h4>Mertens conjecture<a name="d25d727c-f7fb-41b5-a32e-eab8c9e0caae"></a> +</h4> +<p>You can see from the plot why late 19th- and early 20th-century mathematicians believed that the Mertens conjecture,</p> + +<pre> |M(n)| &lt; sqrt(n) for all n,</pre> +<p>might be true. It is hard to imagine that the plot of <tt>M(n)</tt> ever escapes <tt>sqrt(n)</tt>.</p> + +<p>We now know that <tt>M(n)</tt> eventually does escape, but only barely and only briefly. We also know that all the computation we can do with determinants of Redheffer's matrix will never prove or disprove the conjecture or win that million-dollar prize.</p> + +<!-- + function grabCode_1007044f00b340cd8467bc0b1324ad0e() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='1007044f00b340cd8467bc0b1324ad0e ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 1007044f00b340cd8467bc0b1324ad0e'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +1007044f00b340cd8467bc0b1324ad0e ##### SOURCE BEGIN ##### +%% Redheffer and Mertens, Continued +% Shortly after I posted +% <https://blogs.mathworks.com/cleve/2024/09/23/redheffer-mertens-and-one-million-dollars/ +% Redheffer, Mertens and One-Million Dollars> +% a few days ago, Mathworks' Pat Quillen made an important observation +% about computing the Mertens function. + +%% |mertens| +% The elements in the first column of the Redheffer matrix, +% |A = redheffer(n)|, are all equal to one. That dense column +% does not make MATLAB happy about computing |det(A)| . +% However, the last column of |A| has only a few nonzero elements and so +% Pat suggested interchanging the first and last columns +% before computing the determinant. This makes a world of difference. +% (Thanks, Pat.) + + type mertens + +%% +% The time required to compute |det(A)| varies with the sparsity of +% the last column, but it is only a little more than the time +% to compute |redheffer(n)| in the first place. + + mertens2_time + +%% Mertens function +% Pat's change makes it possible to take |n| up to a quarter of a million, +% and beyond. Here is a new plot of the Mertens function |M(n)| and the +% |sqrt(n)| bounds of the Mertens conjecture. + + mertens_plot + +%% +% There are a quarter of a million points in the data for this plot. +% Fortunately, the .PNG file used for the blog only needs to sample +% the data. + +%% Mertens computation +% The job that I ran on my laptop to compute one-quarter of +% a million values of |M(n)| is still running. It currently +% is past 0.35 million and takes less than two seconds for each value. +% I may keep the job running over the weekend, just to see how +% far it gets. +% +% The task is embarrassingly parallel. If I had a pool with +% a million processors, I could have each processor compute one +% value. I would then just have to collect the results, but that +% doesn't involve any arithmetic. + +%% Mertens conjecture +% You can see from the plot why late 19th- and early 20th-century +% mathematicians believed that the Mertens conjecture, +% +% |M(n)| < sqrt(n) for all n, +% +% might be true. +% It is hard to imagine that the plot of |M(n)| ever escapes +% |sqrt(n)|. +% +% We now know that |M(n)| eventually does escape, +% but only barely and only briefly. We also know that all the +% computation we can do with determinants of Redheffer's matrix +% will never prove or disprove the conjecture or win that +% million-dollar prize. + +##### SOURCE END ##### 1007044f00b340cd8467bc0b1324ad0e +--> + + + + + Redheffer, Mertens and One-Million Dollars + + 2024-09-23T17:12:35-06:00 + https://hpc.social/2024/redheffer-mertens-and-one-million-dollars + <div class="content"><!--introduction--> +<p>I didn't know anything about these topics until a couple of weeks ago. Now I can't stop thinking about them.</p> + +<div> +<ul> +<li>Redheffer's matrix has been in the <a href="https://blogs.mathworks.com/cleve/2019/06/24/bohemian-matrices-in-the-matlab-gallery/">MATLAB Gallery</a> for a long time, but I have ignored it .</li> +<li>Redheffer's matrix can be used to compute Mertens function and investigate the <a href="https://en.wikipedia.org/wiki/Mertens_conjecture">Mertens conjecture</a>.</li> +<li>A proof of the Mertens conjecture would also provide a proof of the <a href="https://en.wikipedia.org/wiki/Riemann_hypothesis">Riemann hypothesis</a>.</li> +<li>For nearly a century, all the available computational evidence indicated that the Mertens conjecture was likely to be true.</li> +<li>The Riemann hypothesis is the most important unsolved problem in mathematics and wins a Clay prize worth <a href="https://www.claymath.org/millennium/riemann-hypothesis">one-million dollars</a>.</li> +<li>MATLAB's sparse matrix functions turn out to be useful in an investigation of Redheffer's matrix and the Mertens conjecture.</li> +<li>However, it has been known since 1985 that the Mertens conjecture is false.</li> +</ul> +</div> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#82c24739-64fc-4329-b610-b923ff740e51">Redheffer's Matrix</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#fdc9a386-44e5-43bb-a9c1-8580cdb11520">M&ouml;bius Function</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#ebef8c86-e7dd-4ca8-9f35-7da51c2313c4">Mertens Function</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#36e351c3-4c49-43ab-8776-9f5f5e7011f6">Mertens Conjecture</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#4b56c506-95ad-4d6b-8f23-569f167616b7">Mertens Meets Redheffer</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#f8ff3cc0-f3e0-4d4d-84f5-b3049b3af76f">Redheffer Sparsity</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#3cf9c9a2-aba7-4a78-b8f2-96522c7fc05d"><tt>redheffer</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#221d2a42-3916-44d9-b314-debfbcfbaced">Sparse LU</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c293a71a-bd97-4107-8fc8-3063376e0ea7"><tt>mertens</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#5dc1b513-cf9c-43c7-a3b7-06e75d99e97e">Mertens Conjecture Is False</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#4247c5bb-c39a-4a0a-88a9-4859dcc0e793">Postscripts</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#8b8af9b2-9248-420a-9072-b53f5d344050">References</a> +</li> +</ul> +</div> + +<h4>Redheffer's Matrix<a name="82c24739-64fc-4329-b610-b923ff740e51"></a> +</h4> +<p> +<a href="https://en.wikipedia.org/wiki/Raymond_Redheffer">Raymond Redheffer</a> (1921-2005) was an American mathematician, a professor at UCLA for 55 years, the author of several popular textbooks, the inventor of the electronic game <a href="https://en.wikipedia.org/wiki/Nim">Nim</a> and, with Ray and Charles Eames, the creator of a four-meter long poster <a href="https://www.worthpoint.com/worthopedia/1966-ray-charles-eames-office-men-1724813663">Men of Modern Mathematics</a>.</p> + +<p>Redheffer's matrix is a matrix of zeros and ones. <tt>A(k,j)</tt> equals one if <tt>j</tt> is a divisor of <tt>k</tt>. In addition, the first column is all ones.</p> + +<pre> function A = redheffer(n) + k = 1:n; + j = k'; + A = (mod(k,j) == 0); + A(:,1) = 1; + end</pre> +<p>Or</p> + +<pre> A = gallery('redheff',n)</pre> +<p>Here is the 10-by-10.</p> + +<pre class="codeinput"> + A = redheffer(10); + disp(full(A)) +</pre> +<pre class="codeoutput"> + 1 1 1 1 1 1 1 1 1 1 + 1 1 0 1 0 1 0 1 0 1 + 1 0 1 0 0 1 0 0 1 0 + 1 0 0 1 0 0 0 1 0 0 + 1 0 0 0 1 0 0 0 0 1 + 1 0 0 0 0 1 0 0 0 0 + 1 0 0 0 0 0 1 0 0 0 + 1 0 0 0 0 0 0 1 0 0 + 1 0 0 0 0 0 0 0 1 0 + 1 0 0 0 0 0 0 0 0 1 +</pre> +<p>And here is a spy plot of the 200-by-200.</p> + +<pre class="codeinput"> + A = redheffer(200); + spy(A) + title(<span class="string">'redheffer(200)'</span>) +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens_blog2_01.png" vspace="5" /> <h4>M&ouml;bius Function<a name="fdc9a386-44e5-43bb-a9c1-8580cdb11520"></a> +</h4> +<p>The M&ouml;bius function was introduced in 1832 by German mathematician August M&ouml;bius and is ubiquitous in the study of prime numbers. For positive integers <tt>n</tt>, <tt>μ(n)</tt> is</p> + +<div> +<ul> +<li> +<tt>0</tt> if <tt>n</tt> has a squared prime factor,</li> +<li> +<tt>+1</tt> if <tt>n</tt> is square-free and has an even number of prime factors,</li> +<li> +<tt>-1</tt> if <tt>n</tt> is square-free and has an odd number of prime factors.</li> +</ul> +</div> + +<h4>Mertens Function<a name="ebef8c86-e7dd-4ca8-9f35-7da51c2313c4"></a> +</h4> +<p> +<a href="https://en.wikipedia.org/wiki/Franz_Mertens">Franz Mertens</a> (1840-1927) was a Polish mathematician who spent most of his career in Austria at the University of Vienna. Here is a <a href="https://mathshistory.st-andrews.ac.uk/Biographies/Mertens/">link</a> to a biography of Mertens at the University of St. Andrews MacTutor project.</p> + +<p>The Mertens function is sum of values of the M&ouml;bius function. For a positive integer <tt>n</tt>, the Mertens function is</p> + +<pre> M(n) = sum(μ(1:n))</pre> +<p>So <tt>M(n)</tt> is the difference between the number of square-free integers with an even number of prime factors and those with an odd number.</p> + +<p>This graphic shows <tt>M(n)</tt> for <tt>n = 1:100000</tt>.</p> + +<pre class="codeinput"> + mertens_plot_2 +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens_blog2_02.png" vspace="5" /> <h4>Mertens Conjecture<a name="36e351c3-4c49-43ab-8776-9f5f5e7011f6"></a> +</h4> +<p>The Mertens function <tt>M(n)</tt> fluctuates wildly and grows slowly with increasing <tt>n</tt>. The graphic shows that M(n) is easily bounded by of <tt>sqrt(n)</tt> and <tt>-sqrt(n)</tt>, at least for <tt>n</tt> less than <tt>100k</tt>. The Mertens conjecture is that this continues for larger <tt>n</tt>.</p> + +<pre> -sqrt(n) &lt; M(n) &lt; sqrt(n) for all n</pre> +<p>The conjecture was included in a letter from Stieltjes to Hermite in 1895 and in a paper by Mertens in 1897. The result is important since a proof of the Mertens conjecture would imply the truth of the Riemann hypothesis.</p> + +<h4>Mertens Meets Redheffer<a name="4b56c506-95ad-4d6b-8f23-569f167616b7"></a> +</h4> +<p>I became interested in all this when I learned that the determinant of the MATLAB Gallery matrix which I have ignored for years is related to the Riemann hypothesis and the million-dollar prize.</p> + +<pre> M(n) = det(gallery('redheff',n))</pre> +<p>I know very little about the distribution of prime numbers and computing values of the M&ouml;bius function. On the other hand, I know a lot about numerical linear algebra and computing determinants.</p> + +<p>In general, I am dead set against computing determinants. They are often used to check for singularity or to somehow compute eigenvalues. But here the determinant is an integer counter of modest size.</p> + +<h4>Redheffer Sparsity<a name="f8ff3cc0-f3e0-4d4d-84f5-b3049b3af76f"></a> +</h4> +<p>Computing <tt>M(n)</tt> directly with <tt>det(redheffer(n))</tt> requires <tt>O(n^2)</tt> space and <tt>O(n^3)</tt> time and is not practical for large <tt>n</tt>.</p> + +<p>However, <tt>A = redheffer(n)</tt> is modestly sparse. Here is the fraction of nonzeros.</p> + +<pre> s = nnz(A)/n^2</pre> +<pre class="codeinput"> + disp(sparsity) +</pre> +<pre class="codeoutput"> + n s + _____ ________ + 10000 0.001037 + 20000 0.000553 + 30000 0.000382 + 40000 0.000294 + 50000 0.000239 + 60000 0.000203 + 70000 0.000176 + 80000 0.000156 + 90000 0.000139 + 1e+05 0.000127 +</pre> +<p>Taking advantage of this sparsity and the MATLAB tools for sparse matrix computation provide linear space complexity and perhaps <tt>O(n^2)</tt> time complexity.</p> + +<h4> +<tt>redheffer</tt><a name="3cf9c9a2-aba7-4a78-b8f2-96522c7fc05d"></a> +</h4> +<p>Here is MATLAB code to generate a sparse <tt>redheffer(n)</tt> without creating any full intermediate matrices.</p> + +<pre class="codeinput">type<span class="string"> redheffer</span> +</pre> +<pre class="codeoutput"> + function A = redheffer(n) + j(1:n) = (1:n)'; + k(1:n) = 1; + m = n; + for i = 2:n + t = [1 i:i:n]'; + p = length(t); + j(m+(1:p)) = t; + k(m+(1:p)) = i; + m = m+p; + end + A = sparse(k,j,1,n,n); + end +</pre> +<p>As expected, we see that the execution time for <tt>redheffer(n)</tt> is a linear function of <tt>n</tt>. (The space required also grows linearly.)</p> + +<pre class="codeinput"> + redheffer_time +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens_blog2_03.png" vspace="5" /> <h4>Sparse LU<a name="221d2a42-3916-44d9-b314-debfbcfbaced"></a> +</h4> +<p>The MATLAB Gaussian elimination function <tt>lu</tt> with one sparse input and four sparse outputs is designed for solving sparse linear systems.</p> + +<pre> [L,U,P,Q] = lu(A)</pre> +<p>Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to find permutations <tt>P</tt> and <tt>Q</tt> so that <tt>L</tt> is lower triangular, <tt>U</tt> is upper triangular and</p> + +<pre> P*A*Q = L*U</pre> +<p>Consequently, the determinant of <tt>A</tt> is the product of four easily computed determinants.</p> + +<pre> det(A) = det(L)*det(U)*det(P)*det(Q)</pre> +<p>The pivoting strategy aims to reduce fill-in while maintaining numerical stability.</p> + +<p>For example, here are <tt>L</tt> and <tt>U</tt> for the Redheffer matrix in the spy plot near the top of this blog post.</p> + +<pre class="codeinput"> + close + A = redheffer(200); + [L,U,P,Q] = lu(A); + spy(L|U) + title(<span class="string">'L|U'</span>) +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens_blog2_04.png" vspace="5" /> <p>And here are the four determinants.</p> + +<pre class="codeinput"> + dets = [det(L),det(U),det(P),det(Q)]; + disp(dets) +</pre> +<pre class="codeoutput"> + 1 -8 -1 -1 +</pre> +<p>Finally, <tt>M(200)</tt> is</p> + +<pre class="codeinput"> + M_200 = det(L)*det(U)*det(P)*det(Q) +</pre> +<pre class="codeoutput"> + M_200 = + -8 +</pre> +<h4> +<tt>mertens</tt><a name="c293a71a-bd97-4107-8fc8-3063376e0ea7"></a> +</h4> +<p>Mertens function can be computed with four lines of code.</p> + +<pre class="codeinput"> + type<span class="string"> mertens</span> +</pre> +<pre class="codeoutput"> + function M = mertens(n) + der = @(x) full(round(prod(diag(x)))); + A = redheffer(n); + [L,U,P,Q] = lu(A); + M = der(L)*der(U)*det(P)*det(Q); + end +</pre> +<p>Execution time for <tt>mertens</tt> is dominated by the time in sparse <tt>lu</tt>. The time required to compute the four determinants is an order of magnitude smaller than the other two.</p> + +<p>Experimentally, we see that the time complexity of sparse <tt>lu</tt> is <tt>O(n^2)</tt>, but we have no proof.</p> + +<pre class="codeinput"> + mertens_time +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/mertens_blog2_05.png" vspace="5" /> <h4>Mertens Conjecture Is False<a name="5dc1b513-cf9c-43c7-a3b7-06e75d99e97e"></a> +</h4> +<p>The Mertens conjecture stood for nearly 100 years before it was proved false in 1985 by Andrew Odlyzko and Herman te Riele. The authors present indirect proofs that</p> + +<pre> lim sup (n -&gt; inf) M(n)/sqrt(n) &gt; 1.06</pre> +<pre> lim inf (n -&gt; inf) M(n)/sqrt(n) &lt; -1.009</pre> +<p>Odlyzko and te Riele do not actually produce any value of <tt>n</tt> for which <tt>M(n) &gt; sqrt(x)</tt>. They suspect that any Mertens conjecture counterexample requires <tt>n</tt> &gt; $10^{30}$, which is far beyond any computation possible today.</p> + +<p>Odlyzko and te Riele also describe several complete tabulations of <tt>M(n)</tt> for <tt>n</tt> as large as $7.8 \cdot 10^{9}$ . These computations do not use Redheffer determinants.</p> + +<h4>Postscripts<a name="4247c5bb-c39a-4a0a-88a9-4859dcc0e793"></a> +</h4> +<p>To tell the truth, I did not really expect to find any Mertens or Riemann counterexamples. I did, however, enjoy computing determinants for the first time and discovering an unexpected use for sparse LU.</p> + +<p>Thanks a lot to Tim Davis for his help with this post.</p> + +<h4>References<a name="8b8af9b2-9248-420a-9072-b53f5d344050"></a> +</h4> +<p>A. M. Odlyzko and H. J. J. te Riele, "Disproof of the Mertens conjecture", <i>Journal f&uuml;r die reine und angewandte Mathematik</i>, Vol. 357 (1985), Pages138-160. <a href="https://eudml.org/doc/152712">https://eudml.org/doc/152712</a>.</p> + +<p>Timothy A. Davis, "A Column Pre-Ordering Strategy for the Unsymmetric-Pattern Multifrontal Method", <i>ACM Transactions on Mathematical Software</i>, Vol. 30, No. 2, June 2004, Pages 165&ndash;195. <a href="https://dl.acm.org/doi/abs/10.1145/992200.992205">https://dl.acm.org/doi/abs/10.1145/992200.992205</a>.</p> + +<!-- + function grabCode_500e91acec4e4151a58ba494fb74b941() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='500e91acec4e4151a58ba494fb74b941 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 500e91acec4e4151a58ba494fb74b941'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +500e91acec4e4151a58ba494fb74b941 ##### SOURCE BEGIN ##### +%% Redheffer, Mertens, Riemann and $1M +% I didn't know anything about these topics until a couple of +% weeks ago. Now I can't stop thinking about them. +% +% * Redheffer's matrix has been in the +% <https://blogs.mathworks.com/cleve/2019/06/24/bohemian-matrices-in-the-matlab-gallery/ +% MATLAB Gallery> for a long time, but I have ignored it . +% * Redheffer's matrix can be used to compute Mertens function and +% investigate the +% <https://en.wikipedia.org/wiki/Mertens_conjecture +% Mertens conjecture>. +% * A proof of the Mertens conjecture would also provide a proof of the +% <https://en.wikipedia.org/wiki/Riemann_hypothesis Riemann hypothesis>. +% * For nearly a century, all the available computational evidence +% indicated that the Mertens conjecture was likely to be true. +% * The Riemann hypothesis is the most important unsolved problem in +% mathematics and wins a Clay prize worth +% <https://www.claymath.org/millennium/riemann-hypothesis +% one-million dollars>. +% * MATLAB's sparse matrix functions turn out to be useful +% in an investigation of Redheffer's matrix and the Mertens conjecture. +% * However, it has been known since 1985 that the Mertens +% conjecture is false. + +%% Redheffer's Matrix +% <https://en.wikipedia.org/wiki/Raymond_Redheffer Raymond Redheffer> +% (1921-2005) was an American mathematician, a professor at UCLA for +% 55 years, the author of several popular textbooks, the inventor +% of the electronic game <https://en.wikipedia.org/wiki/Nim Nim> +% and, with Ray and Charles Eames, the creator of a four-meter long poster +% <https://www.worthpoint.com/worthopedia/1966-ray-charles-eames-office-men-1724813663 +% Men of Modern Mathematics>. +% +% Redheffer's matrix is a matrix of zeros and ones. +% |A(k,j)| equals one if |j| is a divisor of |k|. +% In addition, the first column is all ones. +% +% function A = redheffer(n) +% k = 1:n; +% j = k'; +% A = (mod(k,j) == 0); +% A(:,1) = 1; +% end +% +% Or +% +% A = gallery('redheff',n) +% +% Here is the 10-by-10. + + A = redheffer(10); + disp(full(A)) + +%% +% And here is a spy plot of the 200-by-200. + + A = redheffer(200); + spy(A) + title('redheffer(200)') + +%% Möbius Function +% The Möbius function was introduced in 1832 by German mathematician +% August Möbius and is ubiquitous in the study of prime numbers. +% For positive integers |n|, |μ(n)| is +% +% * |0| if |n| has a squared prime factor, +% * |+1| if |n| is square-free and has an even number of prime factors, +% * |-1| if |n| is square-free and has an odd number of prime factors. +% +%% Mertens Function +% <https://en.wikipedia.org/wiki/Franz_Mertens Franz Mertens> +% (1840-1927) was a Polish mathematician who spent most of his +% career in Austria at the University of Vienna. +% Here is a +% <https://mathshistory.st-andrews.ac.uk/Biographies/Mertens/ +% link> to a biography of Mertens at the University of St. Andrews +% MacTutor project. +% +% The Mertens function is sum of values of the Möbius function. +% For a positive integer |n|, the Mertens function is +% +% M(n) = sum(μ(1:n)) +% +% So |M(n)| is the difference between the number of square-free +% integers with an even number of prime factors and those with an +% odd number. +% +% This graphic shows |M(n)| for |n = 1:100000|. + + mertens_plot_2 + +%% Mertens Conjecture +% The Mertens function |M(n)| fluctuates wildly and grows slowly with +% increasing |n|. The graphic shows that M(n) is easily bounded +% by of |sqrt(n)| and |-sqrt(n)|, at least for |n| less than |100k|. +% The Mertens conjecture is that this continues for larger |n|. +% +% -sqrt(n) < M(n) < sqrt(n) for all n +% +% The conjecture was included in a letter from Stieltjes to +% Hermite in 1895 and in a paper by Mertens in 1897. +% The result is important since a proof of the Mertens conjecture +% would imply the truth of the Riemann hypothesis. + +%% Mertens Meets Redheffer +% I became interested in all this when I learned that +% the determinant of the MATLAB Gallery matrix which I have +% ignored for years is related to the Riemann hypothesis and +% the million-dollar prize. +% +% M(n) = det(gallery('redheff',n)) +% +% I know very little about the distribution of prime numbers and +% computing values of the Möbius function. On the other hand, +% I know a lot about numerical linear algebra and computing determinants. +% +% In general, I am dead set against computing determinants. +% They are often used to check for singularity or to somehow +% compute eigenvalues. But here the determinant is an +% integer counter of modest size. + +%% Redheffer Sparsity +% Computing |M(n)| directly with |det(redheffer(n))| requires +% |O(n^2)| space and |O(n^3)| time and is not practical for +% large |n|. +% +% However, |A = redheffer(n)| is modestly sparse. +% Here is the fraction of nonzeros. +% +% s = nnz(A)/n^2 + + disp(sparsity) + +%% +% Taking advantage of this sparsity and the MATLAB tools for +% sparse matrix computation provide +% linear space complexity and perhaps |O(n^2)| time complexity. + +%% |redheffer| +% Here is MATLAB code to generate a sparse |redheffer(n)| without +% creating any full intermediate matrices. + + + type redheffer + +%% +% As expected, we see that the execution time for |redheffer(n)| +% is a linear function of |n|. (The space required also grows linearly.) + + redheffer_time + +%% Sparse LU +% The MATLAB Gaussian elimination function |lu| with one sparse +% input and four sparse outputs +% is designed for solving sparse linear systems. +% +% [L,U,P,Q] = lu(A) +% +% Written primarily +% by Tim Davis and included in his UMFPACK package, the function +% uses an unsymmetric pattern multifrontal pivoting strategy to +% find permutations |P| and |Q| so that |L| is lower triangular, +% |U| is upper triangular and +% +% P*A*Q = L*U +% +% Consequently, the determinant of |A| is the product of four easily +% computed determinants. +% +% det(A) = det(L)*det(U)*det(P)*det(Q) +% +% The pivoting strategy aims to reduce fill-in while maintaining +% numerical stability. + +%% +% For example, here are |L| and |U| for the Redheffer matrix +% in the spy plot near the top of this blog post. + + close + A = redheffer(200); + [L,U,P,Q] = lu(A); + spy(L|U) + title('L|U') + +%% +% And here are the four determinants. + + dets = [det(L), det(U), det(P), det(Q)]; + disp(dets) + +%% +% Finally, |M(200)| is + + M_200 = det(L)*det(U)*det(P)*det(Q) + +%% |mertens| +% Mertens function can be computed with four lines of code. + + type mertens + +%% +% Execution time for |mertens| is dominated by the time in sparse |lu|. +% The time required to compute the four determinants is an order of +% magnitude smaller than the other two. +% +% Experimentally, we see that the time complexity of sparse |lu| is +% |O(n^2)|, but we have no proof. + + mertens_time + +%% Mertens Conjecture Is False +% The Mertens conjecture stood for nearly 100 years before it was +% proved false in 1985 by Andrew Odlyzko and Herman te Riele. +% The authors present indirect proofs that +% +% lim sup (n -> inf) M(n)/sqrt(n) > 1.06 +% +% lim inf (n -> inf) M(n)/sqrt(n) < -1.009 +% +% Odlyzko and te Riele do not actually produce any value of |n| for +% which |M(n) > sqrt(x)|. They suspect that any Mertens conjecture +% counterexample requires |n| > $10^{30}$, which is far beyond any +% computation possible today. +% +% Odlyzko and te Riele also describe several complete tabulations of +% |M(n)| for |n| as large as $7.8 \cdot 10^{9}$ . These computations +% do not use Redheffer determinants. + +%% Postscripts +% To tell the truth, I did not really expect to find any Mertens or +% Riemann counterexamples. I did, however, enjoy computing determinants +% for the first time and discovering an unexpected use for sparse LU. +% +% Thanks a lot to Tim Davis for his help with this post. + +%% References +% A. M. Odlyzko and H. J. J. te Riele, +% "Disproof of the Mertens conjecture", +% _Journal für die reine und angewandte Mathematik_, +% Vol. 357 (1985), Pages138-160. <https://eudml.org/doc/152712>. +% +% Timothy A. Davis, +% "A Column Pre-Ordering Strategy for the Unsymmetric-Pattern Multifrontal +% Method", +% _ACM Transactions on Mathematical Software_, +% Vol. 30, No. 2, June 2004, Pages 165–195. +% <https://dl.acm.org/doi/abs/10.1145/992200.992205>. +% + + +##### SOURCE END ##### 500e91acec4e4151a58ba494fb74b941 +--> + + + + + NA_Digest and NA_Net + + 2024-08-31T21:44:36-06:00 + https://hpc.social/2024/na-digest-and-na-net + <div class="content"><!--introduction--> +<p>The <a href="https://www.netlib.org/na-digest-html/">NA-Digest</a> is an electronic newsletter for the numerical analysis and scientific software community. The NA-Digest is one of world's first examples of social networking. The Digest is one of the forces that makes our community a living, viable community.</p> + +<p>The Digest is part of NA-Net, which also includes <a href="https://www.netlib.org/">Netlib</a>, a collection of mathematical software, papers, and databases.</p> + +<p>For its first forty years, the NA-Digest has had only four editors. Now, we are <a href="https://www.netlib.org/na-digest-html/24/v24n11.html">adding two more</a>. As we do that, I would like to take a personal look back at the history of the NA-Digest.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#42644b1c-8ee9-4edf-8399-1ffb5ba7f590">Gene and Mark</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#22096a5c-5e18-461e-9393-60f6a3bbb50c">Jack and Eric</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#1fd1e215-f726-417a-aa69-971302131b6f">Tammy and Danny</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#7c1ce1c2-47b9-4c04-a89b-6f5b35367817">David and Alex</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#a8dab39f-1171-4d72-8485-cc39142450cd">Archive</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#319b8bc4-61b1-47d7-a372-6ea6ffd20197">Members</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#82cfa35d-28ab-4312-984e-623267f106d4">Important Postings</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#2e3065dc-2d44-4a9f-96fc-d8376c9b2490">Thanks</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#8f0306a7-58c2-424a-bae9-f87fb1ae7dc5">References</a> +</li> +</ul> +</div> + +<h4>Gene and Mark<a name="42644b1c-8ee9-4edf-8399-1ffb5ba7f590"></a> +</h4> +<p>Like many other developments in the numerical analysis world, the Digest began with <a href="https://en.wikipedia.org/wiki/Gene_H._Golub">Gene Golub</a>. In the early 1980's, Golub was chair of Stanford's Computer Science Department. Email was a new thing and Gene maintained a list of email addresses for his many friends around the world. Email addresses came in many different formats; today's system of domain names was not yet in wide spread use.</p> + +<p>In 1984, Mark Kent, one of Gene's grad students, with help from Ray Tuminaro, Mark Crispin and Dan Kolkowitz, wrote software that used Gene's list in an email forwarding service. Mail sent to</p> + +<p> +<tt>na.</tt><i>name</i><tt>@su-score</tt> +</p> + +<p>would be forwarded to the person with that last name. And email sent to</p> + +<p> +<tt>na@su-score</tt> +</p> + +<p>would be forwarded to everyone on the list.</p> + +<p>Gene and Mark Kent began to gather contributions together and send the collection out periodically. By February 1987, this had evolved into a moderated weekly newsletter. Gene dubbed these email services the <i>NA-Net</i>.</p> + +<p>Nick Trefethen has this memory.</p> + +<pre> Early in the days of email, domain names were all over the place. + I think there was a period when Gene was using xxx.na for the + names of numerical analysts. Then somebody decided addresses should + end with the country, giving us .uk and .fr and .ch and all + that. For a period, we found that a lot of our numerical + analysis emails were being directed to Namibia!</pre> +<p>In 1987, Gene asked me to moderate NA-Digest temporarily while he went on a sabbatical. That temporary position ultimately lasted 18 years, until 2005.</p> + +<h4>Jack and Eric<a name="22096a5c-5e18-461e-9393-60f6a3bbb50c"></a> +</h4> +<p> +<a href="https://history.siam.org/oralhistories/dongarra.htm">Jack Dongarra</a> began his career at Argonne National Laboratory. Jack's colleague, Eric Grosse, began his career at Bell Labs. In 1984, Jack and Eric created Netlib, a software repository and distribution service, and merged it with NA-Net. In 1989, Jack and the NA-Net system moved from Argonne to Oak Ridge National Lab and the University of Tennessee.</p> + +<p>Keith Moore, at the University of Tennessee, rewrote the NA-Net software and maintained the servers for many years.</p> + +<p>Gerald Ragghianti, the Technical Services Leader at Tennessee's Innovative Computer Lab, currently maintains the NA-Net software and servers.</p> + +<h4>Tammy and Danny<a name="1fd1e215-f726-417a-aa69-971302131b6f"></a> +</h4> +<p>In 2005, I asked Tammy Kolda, who was then at Sandia Labs in Livermore, to be the NA-Digest editor. Tammy's <a href="https://www.google.com/search?q=tamara+kolda">Wikipedia page</a> reveals that her given name is "Tamara", but everybody calls her "Tammy". She left Sandia is 2021 and now has her own consulting company, <a href="https://www.mathsci.ai/">MathSci.ai</a>.</p> + +<p>In 2010, Tammy recommended that Danny Dunlavy, from Sandia Labs in Albuquerque, take over as editor. He has been the editor for 14 years. Danny's day job at Sandia's <a href="https://www.sandia.gov/ccr">Center for Computing Research</a> involves a wide range of fields including computer architecture, cognitive modeling and discrete mathematics.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/OldEditors.png" vspace="5" /> </p> + +<h4>David and Alex<a name="7c1ce1c2-47b9-4c04-a89b-6f5b35367817"></a> +</h4> +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/NewEditors.png" vspace="5" /> </p> + +<p> +<a href="https://www.netlib.org/na-digest-html/24/v24n11.html">Starting next week</a>, NA-Digest and NA-Net will move <a href="https://en.wikipedia.org/wiki/Lock,_stock,_and_barrel">lock, stock, and barrel</a> to Cornell University. The new editors are <a href="https://www.cs.cornell.edu/~bindel/bio">David Bindell</a> and <a href="https://pi.math.cornell.edu/~ajt/">Alex Townsend</a>. Cornell's IT organization will be taking over the logistics.</p> + +<p>David, Alex and <a href="https://www.cs.cornell.edu/~damle/#About">Anil Damle</a> are also the hosts for <a href="https://householder-symposium.github.io">Householder XXII</a>, June 8-13, 2025.</p> + +<h4>Archive<a name="a8dab39f-1171-4d72-8485-cc39142450cd"></a> +</h4> +<p>Every issue of NA-Digest since February 1987 is available at <a href="https://www.netlib.org/na-digest-html">https://www.netlib.org/na-digest-html</a>.</p> + +<h4>Members<a name="319b8bc4-61b1-47d7-a372-6ea6ffd20197"></a> +</h4> +<p>When I succeeded Gene as editor in 1987, there were about 800 names on the NA-Net mailing list. Today, in 2024, there are a little over 10,000. Discontinuities in the size of the list result when unused and illegitimate names are removed.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/NA_Digs.png" vspace="5" /> </p> + +<h4>Important Postings<a name="82cfa35d-28ab-4312-984e-623267f106d4"></a> +</h4> +<p>I have made three personally important announcements in the Digest over the years.</p> + +<p> +<b>October 29, 1989</b> +</p> + +<p>In 1989 I was working at <a href="https://blogs.mathworks.com/cleve/2013/11/25/the-ardent-titan-part-1/">Ardent Computer</a>, a startup in Silicon Valley. I announced in NA-Digest that MathWorks was looking for a numerical analyst. (Note the MathWorks telephone number near the end of this announcement.)</p> + +<pre> From: Cleve Moler &lt;na.moler@na-net.stanford.edu&gt; + Date: Sun Oct 29 10:39:38 PST 1989 + Subject: Positions at The MathWorks</pre> +<pre> The MathWorks is the company which develops and markets MATLAB. + The company currently employs about 30 people and expects to + add three or four more soon. The company headquarters is in + East Natick, Massachusetts, which is about a half hour drive + west of Boston.</pre> +<pre> The background and interests expected for the various positions + available range from numerical linear algebra and matrix computation + to systems programming and graphics. Educational level and + experience expected range from inexperienced beginner willing + to learn to seasoned Ph.D. with a personal library of M-files.</pre> +<pre> For more information, send email to na.moler@na-net.stanford.edu + or phone me at 408-732-0400. Or, contact the MathWorks' president, + John Little, with email to jnl@mathworks.com, phone 508-653-1415, + or write to:</pre> +<pre> The MathWorks + 21 Eliot Street + South Natick, MA 01760</pre> +<p> +<b>November 26, 1989</b> +</p> + +<p>Shortly after that announcement, <a href="https://en.wikipedia.org/wiki/Stardent_Inc.">Ardent imploded</a> and I said that I was taking the job myself.</p> + +<pre> From: Cleve Moler &lt;moler@mathworks.com&gt; + Date: Sun Nov 26 09:16:32 PST 1989 + Subject: Change of Address for Moler</pre> +<pre> A couple of weeks ago, I made an announcement here that + The MathWorks, the MATLAB company, was looking to fill several + positions, including one for a numerical analyst. Now, I've + decided to take that slot myself. I'm one of the founders of + MathWorks, and have always been a consultant to the company, but + now I'll be a full time employee. For a while at least, I'll + be working out of my home in California, even though MathWorks + headquarters is in Massachusetts. (There are already a couple + of other MathWorks developers in the Bay Area.) + . . . + My electronic address is "moler@mathworks.com". If your mailer + can't find the route via uunet to mathworks.com, you can still + use "na.moler@na-net.stanford.edu".</pre> +<p> +<b>November 16, 2007</b> +</p> + +<p>In November 2007 I was attending the Super Computing conference in Reno. I had rented a car and intended to drive to the Bay Area after the conference. But my wife called me and said, "Hey Cleve, have you heard that Gene is in the hospital?" I left SC immediately and drove to Palo Alto. Two days later we sent out a special issue of the Digest:</p> + +<pre> From: Cleve Moler &lt;Cleve.Moler@mathworks.com&gt; + Date: Fri, 16 Nov 2007 17:55:42 -0500 + Subject: Gene Golub, 1932 - 2007</pre> +<pre> Gene Golub, founder of the NA Digest, passed away today, Friday, November 16, + at the Stanford University Hospital. He was 75 years old.</pre> +<pre> Gene returned home to Stanford recently from a trip to Hong Kong. He was + planning to leave again Tuesday on another trip, this one to Zurich where the + ETH was to honor him with a special degree. Instead, Sunday night he went to + the emergency room because he was "feeling lousy". On Tuesday, he was found + to have AML, acute myelogenous leukemia, a form of cancer that affects the + white blood cells. This is a potentially curable disease and he was expecting + to begin chemotherapy today. But serious complications developed suddenly + over night.</pre> +<pre> I was able to see Gene for an hour last night and he was in reasonably good + spirits. Mike Saunders was trying to get Gene's laptop to use dial-up over + the hospital's phone system because Gene said he was a couple of days behind + on his email. I was planning to get a wireless card for his machine today. + None of us had any idea how suddenly the situation would worsen.</pre> +<pre> The Stanford ICME students have created a memorial blog at + http://genehgolub.blogspot.com .</pre> +<pre> Our community has lost its foremost member. He was a valued colleague and + friend. Goodbye, Gene.</pre> +<pre> -- Cleve Moler</pre> +<h4>Thanks<a name="2e3065dc-2d44-4a9f-96fc-d8376c9b2490"></a> +</h4> +<div> +<ul> +<li>Gene Golub and Mark Kent for creating NA-Digest and NA-Net.</li> +<li>Tammy Kolda and Danny Dunlavy for editing the Digest for two decades.</li> +<li>Jack Dongarra, Eric Grosse, Keith Moore and Geri Ragghianti for creating Netlib and for hosting the system for four decades.</li> +<li>David Bindel and Alex Townsend for joining this team.</li> +</ul> +</div> + +<h4>References<a name="8f0306a7-58c2-424a-bae9-f87fb1ae7dc5"></a> +</h4> +<p>Jack Dongarra, Gene Golub, Eric Grosse, Cleve Moler and Keith Moore. "Netlib and NA-Net: Building a Scientific Computing Community", <a href="https://ieeexplore.ieee.org/document/4544554"><i>IEEE Annals of the History of Computing</i></a>, (Volume: 30, Issue: 2, April-June 2008). <a href="https://blogs.mathworks.com/cleve/files/icl-utk-351-2008.pdf">A PDF is available here</a>.</p> + +<p>Mark Kent, <a href="https://www.research-collection.ethz.ch/handle/20.500.11850/68968">The Numerical Analysis Net (NA-NET)</a>, Technical Report 85, ETH Zurich, Institut fuer Informatik, 1988.</p> + +<!-- + function grabCode_ad3526f9a6bc4fedb6f2b87f8bc0de10() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='ad3526f9a6bc4fedb6f2b87f8bc0de10 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' ad3526f9a6bc4fedb6f2b87f8bc0de10'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +ad3526f9a6bc4fedb6f2b87f8bc0de10 ##### SOURCE BEGIN ##### +%% NA_Digest and NA_Net +% The <https://www.netlib.org/na-digest-html/ NA-Digest> +% is an electronic newsletter for the numerical analysis and +% scientific software community. +% The NA-Digest is one of world's first examples of social networking. +% The Digest is one of the forces that makes our community +% a living, viable community. +% +% The Digest is part of NA-Net, which also includes +% <https://www.netlib.org/ Netlib>, a collection of mathematical software, +% papers, and databases. +% +% For its first forty years, the NA-Digest has had only four editors. +% Now, we are +% <https://www.netlib.org/na-digest-html/24/v24n11.html +% adding two more>. +% As we do that, I would like to take a personal look back at the +% history of the NA-Digest. + +%% Gene and Mark +% Like many other developments in the numerical analysis world, +% the Digest began with <https://en.wikipedia.org/wiki/Gene_H._Golub +% Gene Golub>. In the early 1980's, Golub was chair of Stanford's +% Computer Science Department. Email was a new thing and Gene +% maintained a list of email addresses for his many friends +% around the world. Email addresses came in many different formats; +% today's system of domain names was not yet in wide spread use. +% +% In 1984, Mark Kent, one of Gene's grad students, +% with help from Ray Tuminaro, Mark Crispin and Dan Kolkowitz, +% wrote software that used Gene's list in an email +% forwarding service. Mail sent to +% +% |na.|_name_|@su-score| +% +% would be forwarded to the person with that last name. And email sent to +% +% |na@su-score| +% +% would be forwarded to everyone on the list. +% +% Gene and Mark Kent +% began to gather contributions together +% and send the collection out periodically. By February 1987, this +% had evolved into a moderated weekly newsletter. +% Gene dubbed these email services the _NA-Net_. +% +% Nick Trefethen has this memory. +% +% Early in the days of email, domain names were all over the place. +% I think there was a period when Gene was using xxx.na for the +% names of numerical analysts. Then somebody decided addresses should +% end with the country, giving us .uk and .fr and .ch and all +% that. For a period, we found that a lot of our numerical +% analysis emails were being directed to Namibia! +% +% In 1987, Gene asked me to moderate NA-Digest temporarily while he +% went on a sabbatical. That temporary position ultimately +% lasted 18 years, until 2005. +% + +%% Jack and Eric +% <https://history.siam.org/oralhistories/dongarra.htm Jack Dongarra> +% began his career at Argonne National Laboratory. Jack's colleague, +% Eric Grosse, began his career at Bell Labs. +% In 1984, Jack and Eric created Netlib, a software repository and +% distribution service, and merged it with NA-Net. +% In 1989, Jack and the NA-Net system moved from Argonne to +% Oak Ridge National Lab and the University of Tennessee. +% +% Keith Moore, at the University of Tennessee, +% rewrote the NA-Net software and maintained the servers for many years. +% +% Gerald Ragghianti, the Technical Services Leader at +% Tennessee's Innovative Computer Lab, currently maintains the NA-Net +% software and servers. + +%% Tammy and Danny +% In 2005, I asked Tammy Kolda, who was then at Sandia Labs +% in Livermore, to be the NA-Digest editor. +% Tammy's <https://www.google.com/search?q=tamara+kolda Wikipedia page> +% reveals that her given name is "Tamara", but everybody calls her "Tammy". +% She left Sandia is 2021 and now has her own consulting company, +% <https://www.mathsci.ai/ MathSci.ai>. +% +% In 2010, Tammy recommended that Danny Dunlavy, from Sandia Labs in +% Albuquerque, take over as editor. He has been the editor for 14 years. +% Danny's day job at Sandia's +% <https://www.sandia.gov/ccr Center for Computing Research> +% involves a wide range of fields including computer architecture, +% cognitive modeling and discrete mathematics. +% +% <<OldEditors.png>> +% + +%% David and Alex +% +% <<NewEditors.png>> +% +% <https://www.netlib.org/na-digest-html/24/v24n11.html +% Starting next week>, NA-Digest and NA-Net will move +% <https://en.wikipedia.org/wiki/Lock,_stock,_and_barrel +% lock, stock, and barrel> to Cornell University. +% The new editors are +% <https://www.cs.cornell.edu/~bindel/bio David Bindell> +% and +% <https://pi.math.cornell.edu/~ajt/ Alex Townsend>. +% Cornell's IT organization will be taking over the logistics. +% +% David, Alex and <https://www.cs.cornell.edu/~damle/#About Anil Damle> +% are also the hosts for +% <https://householder-symposium.github.io Householder XXII>, +% June 8-13, 2025. + +%% Archive +% Every issue of NA-Digest since February 1987 +% is available at +% <https://www.netlib.org/na-digest-html>. + +%% Members +% When I succeeded Gene as editor in 1987, there were about 800 names +% on the NA-Net mailing list. Today, in 2024, there are a little +% over 10,000. +% Discontinuities in the size of the list result when +% unused and illegitimate names are removed. +% +% <<NA_Digs.png>> + +%% Important Postings +% I have made three personally important announcements in the Digest over +% the years. +% +% *October 29, 1989* +% +% In 1989 I was working at +% <https://blogs.mathworks.com/cleve/2013/11/25/the-ardent-titan-part-1/ +% Ardent Computer>, a startup in Silicon Valley. +% I announced in NA-Digest that MathWorks was looking for a numerical +% analyst. (Note the MathWorks telephone number near the end of this +% announcement.) +% +% From: Cleve Moler <na.moler@na-net.stanford.edu> +% Date: Sun Oct 29 10:39:38 PST 1989 +% Subject: Positions at The MathWorks +% +% The MathWorks is the company which develops and markets MATLAB. +% The company currently employs about 30 people and expects to +% add three or four more soon. The company headquarters is in +% East Natick, Massachusetts, which is about a half hour drive +% west of Boston. +% +% The background and interests expected for the various positions +% available range from numerical linear algebra and matrix computation +% to systems programming and graphics. Educational level and +% experience expected range from inexperienced beginner willing +% to learn to seasoned Ph.D. with a personal library of M-files. +% +% For more information, send email to na.moler@na-net.stanford.edu +% or phone me at 408-732-0400. Or, contact the MathWorks' president, +% John Little, with email to jnl@mathworks.com, phone 508-653-1415, +% or write to: +% +% The MathWorks +% 21 Eliot Street +% South Natick, MA 01760 +% +% *November 26, 1989* +% +% Shortly after that announcement, +% <https://en.wikipedia.org/wiki/Stardent_Inc. Ardent imploded> +% and I said that I was taking the job myself. +% +% From: Cleve Moler <moler@mathworks.com> +% Date: Sun Nov 26 09:16:32 PST 1989 +% Subject: Change of Address for Moler +% +% A couple of weeks ago, I made an announcement here that +% The MathWorks, the MATLAB company, was looking to fill several +% positions, including one for a numerical analyst. Now, I've +% decided to take that slot myself. I'm one of the founders of +% MathWorks, and have always been a consultant to the company, but +% now I'll be a full time employee. For a while at least, I'll +% be working out of my home in California, even though MathWorks +% headquarters is in Massachusetts. (There are already a couple +% of other MathWorks developers in the Bay Area.) +% . . . +% My electronic address is "moler@mathworks.com". If your mailer +% can't find the route via uunet to mathworks.com, you can still +% use "na.moler@na-net.stanford.edu". +% +% *November 16, 2007* +% +% In November 2007 I was attending the Super Computing conference in +% Reno. I had rented a car and intended to drive to the Bay Area +% after the conference. But my wife called me and said, +% "Hey Cleve, have you heard that Gene is in the hospital?" +% I left SC immediately and drove to Palo Alto. Two days later +% we sent out a special issue of the Digest: +% +% From: Cleve Moler <Cleve.Moler@mathworks.com> +% Date: Fri, 16 Nov 2007 17:55:42 -0500 +% Subject: Gene Golub, 1932 - 2007 +% +% Gene Golub, founder of the NA Digest, passed away today, Friday, November 16, +% at the Stanford University Hospital. He was 75 years old. +% +% Gene returned home to Stanford recently from a trip to Hong Kong. He was +% planning to leave again Tuesday on another trip, this one to Zurich where the +% ETH was to honor him with a special degree. Instead, Sunday night he went to +% the emergency room because he was "feeling lousy". On Tuesday, he was found +% to have AML, acute myelogenous leukemia, a form of cancer that affects the +% white blood cells. This is a potentially curable disease and he was expecting +% to begin chemotherapy today. But serious complications developed suddenly +% over night. +% +% I was able to see Gene for an hour last night and he was in reasonably good +% spirits. Mike Saunders was trying to get Gene's laptop to use dial-up over +% the hospital's phone system because Gene said he was a couple of days behind +% on his email. I was planning to get a wireless card for his machine today. +% None of us had any idea how suddenly the situation would worsen. +% +% The Stanford ICME students have created a memorial blog at +% http://genehgolub.blogspot.com . +% +% Our community has lost its foremost member. He was a valued colleague and +% friend. Goodbye, Gene. +% +% REPLACE_WITH_DASH_DASH Cleve Moler + +%% Thanks +% +% * Gene Golub and Mark Kent for creating NA-Digest and NA-Net. +% * Tammy Kolda and Danny Dunlavy for editing the Digest for two decades. +% * Jack Dongarra, Eric Grosse, Keith Moore and Geri Ragghianti for +% creating Netlib and for hosting the system for four decades. +% * David Bindel and Alex Townsend for joining this team. + +%% References +% +% Jack Dongarra, Gene Golub, Eric Grosse, Cleve Moler and Keith Moore. +% "Netlib and NA-Net: Building a Scientific Computing Community", +% <https://ieeexplore.ieee.org/document/4544554 +% _IEEE Annals of the History of Computing_>, +% (Volume: 30, Issue: 2, April-June 2008). +% <https://blogs.mathworks.com/cleve/files/icl-utk-351-2008.pdf +% A PDF is available here>. +% +% Mark Kent, +% <https://www.research-collection.ethz.ch/handle/20.500.11850/68968 +% The Numerical Analysis Net (NA-NET)>, Technical Report 85, ETH +% Zurich, Institut fuer Informatik, 1988. + +##### SOURCE END ##### ad3526f9a6bc4fedb6f2b87f8bc0de10 +--> + + + + + A Treacherous SVD + + 2024-07-15T15:39:04-06:00 + https://hpc.social/2024/a-treacherous-svd + <div class="content"><!--introduction--> +<p>A few days ago, a bug report from our office in Cambridge caught my attention. Computing the singular values and singular vectors of a particular matrix would sometimes cause MATLAB to crash.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#687983f8-4f5c-4ab6-8c9a-670d933db516">Two Computers</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#bb7d2817-a6f9-4636-b9a4-ec93834d3c2f">Math Libraries</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#b76d6ed5-ea1c-4dc5-876b-9e32dd95c51e">G3366394</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#66e487ba-0c85-4c88-a56d-87408f340dd4">Rank</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#0848e46c-23e0-40b5-9f63-5d781d53d2d0">Zero rows</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#b08e8c96-055a-4909-8778-d590028d1cb3">Fuzz</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#f72bffb3-25d4-4136-a01c-35ce3294dcc5">Flip</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#0a7fccdf-a476-4cd7-b66e-e52d0349aa3b">Now what?</a> +</li> +</ul> +</div> + +<h4>Two Computers<a name="687983f8-4f5c-4ab6-8c9a-670d933db516"></a> +</h4> +<p>I use two different two computers regularly. The machine in my home office is a Lenovo ThinkPad&reg; model T14, loaded with two external monitors, several external disc drives, a sound bar and a dedicated internet connection. My traveling machine is a Lenovo ThinkPad X1 Nano with no external hardware.</p> + +<p>The report of a crash in the SVD became even more interesting when I found that it happens on my office computer, but not on the portable. A quick check revealed that the CPUs on the two machines come from different manufacturers. The office computer uses an AMD&reg; Ryzen Pro 5 while the traveling machine uses an Intel&reg; Core i7.</p> + +<h4>Math Libraries<a name="bb7d2817-a6f9-4636-b9a4-ec93834d3c2f"></a> +</h4> +<p>The crash occurs several software layers deep in <a href="https://netlib.org/lapack/explore-3.3.0-html/d5/d1f/cgesvd_8f_source.html">CGESVD</a>, the LAPACK driver for single precision complex SVD. Various chip manufacturers provide math libraries that have been optimized for their CPUs. However, by default, MATLAB uses the reportedly faster Intel Math Kernel Library, MKL. It is possible to switch to other math libraries.</p> + +<p>We have experts at MathWorks who know far more about the details of these libraries than I do. They will soon sort this all out. In the meantime, here is what I have learned about the offending matrix.</p> + +<h4>G3366394<a name="b76d6ed5-ea1c-4dc5-876b-9e32dd95c51e"></a> +</h4> +<p>We refer to the matrix in the crash report by its case number in our bug tracking system. The matrix is of modest size but is otherwise unusual for several reasons. It is rectangular with fewer rows than columns, it is in single precision, and it is complex.</p> + +<pre> clear + load g3366394 X + whos</pre> +<pre> Name Size Bytes Class Attributes + X 219x384 672768 single complex</pre> +<p>The following code calling SVD with three outputs will crash MATLAB on my T14, but not on my X1.</p> + +<pre> trysvd = false + if trysvd + [U,S,V] = svd(X); + R = U*S*V' - X; + relres = norm(R)/norm(X) + end</pre> +<pre> trysvd = + logical + 0</pre> +<h4>Rank<a name="66e487ba-0c85-4c88-a56d-87408f340dd4"></a> +</h4> +<p>Computing the singular values without the vectors can be done on either machine. The following code uses double precision and then plots the singular values on a logarithmic scale with a line at single precision roundoff level.</p> + +<pre> S = svd(X); + semilogy(S,'.-') + ep = eps('single'); + line([0 230],[ep ep]) + axis([0 230 1e-15 10]) + legend({'singular values','eps(''single'')'})</pre> +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/semilogy.png" vspace="5" /> </p> + +<p>We see that the matrix is far from full rank. About half of its singular values are negligible. This is confirmed by</p> + +<pre> xrank = rank(X)</pre> +<pre> xrank = + 110</pre> +<h4>Zero rows<a name="0848e46c-23e0-40b5-9f63-5d781d53d2d0"></a> +</h4> +<p>The cause of the low rank is easy to find. This surf plot reveals that almost half of the rows are flat zero.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/full.png" vspace="5" /> </p> + +<p>Let's remove the zero rows.</p> + +<pre> c = sum(abs(X),2)==0; + nnzc = nnz(c) + X(c&gt;0,:) = [];</pre> +<pre> nnzc = + 109</pre> +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/reduced.png" vspace="5" /> </p> + +<p>The remaining matrix is full rank and it is safe to compute its singular vectors.</p> + +<pre> [U,S,V] = svd(X); + R = U*S*V' - X; + resnorm = norm(R)</pre> +<pre> resnorm = + 2.8191e-06</pre> +<h4>Fuzz<a name="b08e8c96-055a-4909-8778-d590028d1cb3"></a> +</h4> +<p>Removing the zero rows was the first work-around that I tried. There are many others. You can replace the zeros with any nonzero "fuzz".</p> + +<pre> fuzz = 1.e-20; + [U,S,V] = svd(X + fuzz*randn(size(X)));</pre> +<pre> resnorm = norm(U*S*V'-X)</pre> +<pre> resnorm = + 2.8222e-06</pre> +<h4>Flip<a name="f72bffb3-25d4-4136-a01c-35ce3294dcc5"></a> +</h4> +<p>You can reorder the matrix so that the zero rows are not at the beginning.</p> + +<pre> [U,S,V] = svd(flipud(X)); + U = flipud(U);</pre> +<pre> resnorm = norm(U*S*V'-X)</pre> +<pre> resnorm = + 2.3809e-06</pre> +<h4>Now what?<a name="0a7fccdf-a476-4cd7-b66e-e52d0349aa3b"></a> +</h4> +<p>How to avoid the crash is not the most important question. What causes the crash with the original matrix? We will find out and get it fixed.</p> + +<!-- + function grabCode_e32dbb50b2604a45be30742645bd3bea() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='e32dbb50b2604a45be30742645bd3bea ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' e32dbb50b2604a45be30742645bd3bea'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +e32dbb50b2604a45be30742645bd3bea ##### SOURCE BEGIN ##### +%% A Treacherous SVD +% A few days ago, a bug report from our office in Cambridge +% caught my attention. Computing the singular values and singular +% vectors of a particular matrix would sometimes cause MATLAB to crash. + +%% Two Computers +% I use two different two computers regularly. +% The machine in my home office is a Lenovo ThinkPad(R) +% model T14, loaded with two external monitors, several external +% disc drives, a sound bar and a dedicated internet connection. +% My traveling machine is a Lenovo ThinkPad X1 Nano with no external +% hardware. +% +% The report of a crash in the SVD became even more interesting when +% I found that it happens on my office computer, but not on the portable. +% A quick check revealed that the CPUs on the two machines come from +% different manufacturers. +% The office computer uses an AMD(R) Ryzen Pro 5 +% while the traveling machine uses an Intel(R) Core i7. +% + +%% Math Libraries +% The crash occurs several software layers deep in +% <https://netlib.org/lapack/explore-3.3.0-html/d5/d1f/cgesvd_8f_source.html +% CGESVD>, the LAPACK driver for single precision complex SVD. +% Various chip manufacturers provide math libraries that have been +% optimized for their CPUs. However, by default, MATLAB uses +% the reportedly faster Intel Math Kernel Library, MKL. +% It is possible to switch to other math libraries. +% +% We have experts at MathWorks who know far more about the details +% of these libraries than I do. They will soon sort this all out. +% In the meantime, here is what I have learned about the offending +% matrix. + +%% G3366394 +% We refer to the matrix in the crash report by its case +% number in our bug tracking system. +% The matrix is of modest size but +% is otherwise unusual for several reasons. +% It is rectangular with fewer rows than columns, +% it is in single precision, and it is complex. +% +% clear +% load g3366394 X +% whos +% +% Name Size Bytes Class Attributes +% X 219x384 672768 single complex + + +%% +% The following code calling SVD with three outputs +% will crash MATLAB on my T14, but not on my X1. +% +% trysvd = false +% if trysvd +% [U,S,V] = svd(X); +% R = U*S*V' - X; +% relres = norm(R)/norm(X) +% end +% +% trysvd = +% logical +% 0 + +%% Rank +% Computing the singular values without the vectors can be done +% on either machine. The following code uses double precision and +% then plots the singular values on a logarithmic scale with a +% line at single precision roundoff level. +% +% S = svd(X); +% semilogy(S,'.-') +% ep = eps('single'); +% line([0 230],[ep ep]) +% axis([0 230 1e-15 10]) +% legend({'singular values','eps(''single'')'}) +% +% <<semilogy.png>> + +%% +% We see that the matrix is far from full rank. +% About half of its singular values are negligible. +% This is confirmed by +% +% xrank = rank(X) +% +% xrank = +% 110 + +%% Zero rows +% The cause of the low rank is easy to find. +% This surf plot reveals that almost half of the rows are flat zero. +% +% <<full.png>> +% + +%% +% Let's remove the zero rows. +% +% c = sum(abs(X),2)==0; +% nnzc = nnz(c) +% X(c>0,:) = []; +% +% nnzc = +% 109 + +%% +% <<reduced.png>> +% + +%% +% The remaining matrix is full rank and it is safe to compute its +% singular vectors. +% +% [U,S,V] = svd(X); +% R = U*S*V' - X; +% resnorm = norm(R) +% +% resnorm = +% 2.8191e-06 + +%% Fuzz +% Removing the zero rows was the first work-around that I tried. +% There are many others. You can replace the zeros with any +% nonzero "fuzz". +% +% fuzz = 1.e-20; +% [U,S,V] = svd(X + fuzz*randn(size(X))); +% +% resnorm = norm(U*S*V'-X) +% +% resnorm = +% 2.8222e-06 + +%% Flip +% You can reorder the matrix so that the zero rows are not at the +% beginning. +% +% [U,S,V] = svd(flipud(X)); +% U = flipud(U); +% +% resnorm = norm(U*S*V'-X) +% +% resnorm = +% 2.3809e-06 + +%% Now what? +% How to avoid the crash is not the most important question. +% What causes the crash with the original matrix? +% We will find out and get it fixed. + + +##### SOURCE END ##### e32dbb50b2604a45be30742645bd3bea +--> + + + + + SuperSum, In Defense of Floating Point Arithmetic + + 2024-06-27T17:54:38-06:00 + https://hpc.social/2024/supersum-in-defense-of-floating-point-arithmetic + <div class="content"><!--introduction--> +<p>Floating point arithmetic doesn't get the respect it deserves. Many people consider it mysterious, fuzzy, unpredictable. These misgivings often occur in discussion of vector sums. Our provocatively named <i>SuperSum</i> is intended to calm these fears.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#6cc58603-9b70-4a29-bc08-fae5fe3d5db0">Ledgers</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#cc3635b6-5a76-4420-baeb-94c5b36a6573">Checksums</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#71f16826-8ff1-4a14-bc85-146da594d56f">Order</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#5356ff4e-b231-4d40-9404-17b0d0d882af">Speed</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#52953716-f4f9-4698-9680-8a5d38254f1e">Three Sums</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#f8a4c9a1-edd5-4ac3-9dca-bc7306b7de0f">Toy Example</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#8acba015-e19b-413e-8817-1e093e31ee2d">Second Test</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#e0e62ed1-a352-49ea-ac59-31107304d71e">Conclusion</a> +</li> +</ul> +</div> + +<h4>Ledgers<a name="6cc58603-9b70-4a29-bc08-fae5fe3d5db0"></a> +</h4> +<p>A <i>ledger</i> is a list of transactions in an account. <i>Auditing</i> the ledger involves comparing the total of the items with the change in the account balance.</p> + +<p>If <i>v</i> is a vector of transaction amounts, then we need to compute</p> + +<pre>sum(v)</pre> +<p>If this sum is equal to the change in the balance, then it is reasonable to assume that the ledger is correct. If not, the ledger must be examined line-by-line.</p> + +<h4>Checksums<a name="cc3635b6-5a76-4420-baeb-94c5b36a6573"></a> +</h4> +<p>Have you ever used a checksum for a file transfer? One checksum is computed before the file is sent. After the file has been sent over a questionable channel, a second checksum is computed on the receiving end. If the two checksums agree, the transmission was probably okay. If not, the file must be sent again.</p> + +<h4>Order<a name="71f16826-8ff1-4a14-bc85-146da594d56f"></a> +</h4> +<p>Floating point addition is not <i>associative</i>. This means</p> + +<pre>(a + b) + c</pre> +<p>is not necessarily the same as</p> + +<pre class="language-matlab">a+(b+c). +</pre> +<p>So the <i>order</i> of doing a computation is important.</p> + +<p>Computers are deterministic devices. If the same computation is done <i>in the same order</i> more than once, the results must be the same. If you get different sums from different runs on a fixed computer, then it must be because the order has been changed.</p> + +<h4>Speed<a name="5356ff4e-b231-4d40-9404-17b0d0d882af"></a> +</h4> +<p>In recent years, we have made the built-in function <tt>sum(x)</tt> faster by parallelizing it. The input vector is broken into several pieces, the sum of each piece is computed separately and simultaneously, then the partial sums are combined to give the final result. If the number and size of the pieces varies from run to run, the order varies and consequently the computed sums may vary.</p> + +<h4>Three Sums<a name="52953716-f4f9-4698-9680-8a5d38254f1e"></a> +</h4> +<p>Here are three replacements for <tt>nansum(x)</tt>, the version of <tt>sum(x)</tt> that skips over <tt>NaNs</tt> and <tt>infs</tt>.</p> + +<p> +<b>simplesum</b> +</p> + +<p>Avoid the effect of blocking in the built-in sum(x).</p> + +<pre>function s = simplesum(x) + % simplesum. s = simplesum(x), for vector(x). + % Force sequential order for sum(x). + % Skips NaNs and infs.</pre> +<pre> s = 0; + for k = 1:length(x) + if isfinite(x(k)) + s = s + x(k); + end + end +end</pre> +<p> +<b>KahanSum</b> +</p> + +<p>This is the Kahan summation algorithm. The sum is accumulated in two words, the more significant <tt>s</tt> and the correction <tt>c</tt>. If you were able to form <tt>s + c</tt> exactly, it would be more accurate than <tt>s</tt> alone.</p> + +<pre>function s = KahanSum(x) + % KahanSum. s = KahanSum(x), for vector(x). + % More accurate, but slower, than sum(x). + % Skips NaNs and infs. + % https://en.wikipedia.org/wiki/Kahan_summation_algorithm.</pre> +<pre> s = 0; % sum + c = 0; % correction + for k = 1:length(x) + if isfinite(x(k)) + y = x(k) - c; + t = s + y; + c = (t - s) - y; + s = t; + end + end +end</pre> +<p> +<b>SuperSum</b> +</p> + +<p>I gave it a pretentious name to grab attention. Use extended precision, with enough digits to hold any MATLAB double.</p> + +<pre>function s = SuperSum(x) + % SuperSum. s = SuperSum(x), for vector(x). + % Symbolic Math Toolbox extended precision. + % Skips NaNs and infs. + % + % 632 decimal digits holds every IEEE-754 double. + % 632 = ceil(log10(realmax) - log10(eps*realmin)); + % + din = digits(632); % Remember current setting + s = double(sum(sym(x(isfinite(x)),'D'))); + digits(din) % Restore +end</pre> +<h4>Toy Example<a name="f8a4c9a1-edd5-4ac3-9dca-bc7306b7de0f"></a> +</h4> +<p>A test case here at MathWorks, known by a French-Canadian name that translates to "toy example", has a vector <tt>e2</tt> of length 4243 and values that range from -3.3e7 to 6.8e9.</p> + +<p>When running tests involving floating point numbers it is a good idea to set the output format to <tt>hex</tt> so we can see every last bit.</p> + +<pre>format hex +load jeuTest e2 +x = e2;</pre> +<pre>[nansum(x) + simplesum(x) + KahanSum(x) + SuperSum(x)]</pre> +<pre>ans = + 423785e8206150e2 + 423785e8206150e0 + 423785e8206150e1 + 423785e8206150e1</pre> +<p>For <tt>jeuTest</tt>, Kahan summation gets the same result as <tt>SuperSum</tt>, while <tt>nansum</tt> and <tt>simplesum</tt> differ in the last bit or two.</p> + +<h4>Second Test<a name="8acba015-e19b-413e-8817-1e093e31ee2d"></a> +</h4> +<p>The vector length is only three, but the third term completely cancels the first, and the second term rises from obscurity. In this situation, <tt>KahanSum</tt> is no more accurate than <tt>sum</tt>.</p> + +<pre>format hex +x = [1 1e-14 -1]'</pre> +<pre>[nansum(x) + simplesum(x) + KahanSum(x) + SuperSum(x)]</pre> +<pre>x = + 3ff0000000000000 + 3d06849b86a12b9b + bff0000000000000</pre> +<pre>ans = + 3d06800000000000 + 3d06800000000000 + 3d06800000000000 + 3d06849b86a12b9b</pre> +<h4>Conclusion<a name="e0e62ed1-a352-49ea-ac59-31107304d71e"></a> +</h4> +<p>I will leave careful timing for another day. Let's just say that in situations like <tt>jeuTest</tt>, <tt>KahanSum</tt> is probably all you need. It is usually more accurate than <tt>sum</tt>, and not much slower.</p> + +<p>However, for complete reliability, use <tt>SuperSum</tt>. There is no substitute for the right answer.</p> + +<!-- + function grabCode_7bd084f1e3e84c86b0c419e2b2dcd8b5() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='7bd084f1e3e84c86b0c419e2b2dcd8b5 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 7bd084f1e3e84c86b0c419e2b2dcd8b5'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +7bd084f1e3e84c86b0c419e2b2dcd8b5 ##### SOURCE BEGIN ##### +%% SuperSum, In Defense of Floating Point Arithmetic +% Floating point arithmetic doesn't get the respect it deserves. +% Many people consider it mysterious, fuzzy, unpredictable. +% These misgivings often occur in +% discussion of vector sums. Our provocatively named +% _SuperSum_ is intended to calm these fears. + +%% Ledgers +% A _ledger_ is a list of transactions in an account. +% _Auditing_ the ledger involves comparing the total of +% the items with the change in the account balance. +% +% If _v_ is a vector of transaction amounts, then we +% need to compute +% +% sum(v) +% +% If this sum is equal to the change in the balance, then it is +% reasonable to assume that the ledger is correct. +% If not, the ledger must be examined line-by-line. +% +%% Checksums +% Have you ever used a checksum for a file transfer? +% One checksum is computed before the file is sent. After the file +% has been sent over a questionable channel, a second checksum is +% computed on the receiving end. If the two checksums agree, +% the transmission was probably okay. If not, the file must be +% sent again. + +%% Order +% Floating point addition is not _associative_. This means +% +% (a + b) + c +% +% is not necessarily the same as +% +% a + (b + c). +% +% So the _order_ of doing a computation is important. +% +% Computers are deterministic devices. If the same +% computation is done _in the same order_ more than once, +% the results must be the same. +% If you get different sums from different runs on a fixed +% computer, then it must be because the order has been +% changed. + +%% Speed +% In recent years, we have made the built-in function |sum(x)| +% faster by parallelizing it. The input vector is broken into +% several pieces, the sum of each piece is computed separately +% and simultaneously, then the partial sums are combined to give +% the final result. If the number and size of the pieces varies +% from run to run, the order varies and consequently the computed +% sums may vary. + +%% Three Sums +% Here are three replacements for |nansum(x)|, +% the version of |sum(x)| that skips over |NaNs| and |infs|. +% +% *simplesum* +% +% Avoid the effect of blocking in the built-in sum(x). +% +% function s = simplesum(x) +% % simplesum. s = simplesum(x), for vector(x). +% % Force sequential order for sum(x). +% % Skips NaNs and infs. +% +% s = 0; +% for k = 1:length(x) +% if isfinite(x(k)) +% s = s + x(k); +% end +% end +% end +% +% *KahanSum* +% +% This is the Kahan summation algorithm. +% The sum is accumulated in two words, the more significant +% |s| and the correction |c|. +% If you were able to form |s + c| exactly, it would be more +% accurate than |s| alone. +% +% function s = KahanSum(x) +% % KahanSum. s = KahanSum(x), for vector(x). +% % More accurate, but slower, than sum(x). +% % Skips NaNs and infs. +% % https://en.wikipedia.org/wiki/Kahan_summation_algorithm. +% +% s = 0; % sum +% c = 0; % correction +% for k = 1:length(x) +% if isfinite(x(k)) +% y = x(k) - c; +% t = s + y; +% c = (t - s) - y; +% s = t; +% end +% end +% end +% +% *SuperSum* +% +% I gave it a pretentious name to grab attention. +% Use extended precision, with enough digits to hold any MATLAB double. +% +% function s = SuperSum(x) +% % SuperSum. s = SuperSum(x), for vector(x). +% % Symbolic Math Toolbox extended precision. +% % Skips NaNs and infs. +% % +% % 632 decimal digits holds every IEEE-754 double. +% % 632 = ceil(log10(realmax) - log10(eps*realmin)); +% % +% din = digits(632); % Remember current setting +% s = double(sum(sym(x(isfinite(x)),'D'))); +% digits(din) % Restore +% end + +%% Toy Example +% A test case here at MathWorks, known by a French-Canadian name that +% translates to "toy example", has a vector |e2| +% of length 4243 and values that range from -3.3e7 to 6.8e9. +% +% When running tests involving floating point numbers +% it is a good idea to set the output format to |hex| +% so we can see every last bit. +% +% format hex +% load jeuTest e2 +% x = e2; +% +% [nansum(x) +% simplesum(x) +% KahanSum(x) +% SuperSum(x)] +% +% ans = +% 423785e8206150e2 +% 423785e8206150e0 +% 423785e8206150e1 +% 423785e8206150e1 +% +% For |jeuTest|, Kahan summation gets the same result as |SuperSum|, +% while |nansum| and |simplesum| differ in the last bit or two. +% + +%% Second Test +% The vector length is only three, but the third term completely +% cancels the first, and the second term rises from obscurity. +% In this situation, |KahanSum| is no more accurate than |sum|. +% +% format hex +% x = [1 1e-14 -1]' +% +% [nansum(x) +% simplesum(x) +% KahanSum(x) +% SuperSum(x)] +% +% x = +% 3ff0000000000000 +% 3d06849b86a12b9b +% bff0000000000000 +% +% ans = +% 3d06800000000000 +% 3d06800000000000 +% 3d06800000000000 +% 3d06849b86a12b9b + +%% Conclusion +% I will leave careful timing for another day. Let's just say that +% in situations like |jeuTest|, |KahanSum| is probably all you need. +% It is usually more accurate than |sum|, and not much slower. +% +% However, for complete reliability, use |SuperSum|. There is no +% substitute for the right answer. +##### SOURCE END ##### 7bd084f1e3e84c86b0c419e2b2dcd8b5 +--> + + + + + IBM Hexadecimal Floating Point + + 2024-05-25T15:51:21-06:00 + https://hpc.social/2024/ibm-hexadecimal-floating-point + <div class="content"><!--introduction--> +<p>Our technical support group recently received a request for a tool that would convert IBM System/360 hexadecimal floating point numbers to the IEEE-754 format. I am probably the only one left at MathWorks that actually used IBM mainframe computers. I thought we had seen the last of hexadecimal arithmetic years ago. But, it turns out that the hexadecimal floating point format is alive and well.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#927291b6-bb83-4c85-937c-8f20844b3c74">IBM System/360</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#43cbbb43-f2f5-4415-99df-f6a6c114c912">Formats</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#5d482994-2d0d-42fa-86e2-c98bc728ebbe">Data</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#099df223-ed1e-405e-917f-0cccd1d54a26"><tt>Hex_ieee</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#126c1d80-75f5-4879-841f-de925f083fc1"><tt>ieee2ibm</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#88d3bc9c-b626-4578-872e-b95f02057e43"><tt>ibm2ieee</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#64f8c2ec-011c-40a2-a2f3-a2926ee929ac">Examples</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#41ed0fce-64bf-4471-b2c3-e22645d184f5">Comparison</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#9e4ce83f-58b7-498d-b480-9f17c5c1f6e0">Software</a> +</li> +</ul> +</div> + +<h4>IBM System/360<a name="927291b6-bb83-4c85-937c-8f20844b3c74"></a> +</h4> +<p>The System/360 is a family of mainframe computers that IBM introduced in 1965 and that dominated the computer industry until PCs came along twenty years later. They range in size from desk-sized to systems that fill a large room.</p> + +<p>Here is a photo of a mid-sized model.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/ibm-360-60.png" vspace="5" /> </p> + +<p> +<i>System/360, Model 60.</i> <i>Photo from Ken Shirrif's blog, IBM 360/System Summary</i>.</p> + +<p>The System/360 architecture is byte-oriented, so it can handle business data processing as well as scientific and engineering computation. This leads to base-16, rather than base-2 or base-10, floating point arithmetic.</p> + +<pre>* Binary f*2^e 1/2&lt;=f&lt;1 +* Decimal f*10^e 1/10&lt;=f&lt;1 +* Hexadecimal f*16^e 1/16&lt;=f&lt;1</pre> +<h4>Formats<a name="43cbbb43-f2f5-4415-99df-f6a6c114c912"></a> +</h4> +<p>Floating point formats played an important role in technical computing in the early days. This table from <a href="https://www.amazon.com/exec/obidos/ASIN/0131653326/acmorg-20">FMM</a> lists formats that were in use in the 1970s, before IEEE-754 was introduced in 1985.</p> + +<p> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/fmm2.png" vspace="5" /> </p> + +<h4>Data<a name="5d482994-2d0d-42fa-86e2-c98bc728ebbe"></a> +</h4> +<p>The System/360 hexadecimal format is used in many industries for the preservation of data files.</p> + +<p> +<a href="https://www.crewes.org/ResearchLinks/FreeSoftware">CREWES</a>. Teaching exploration seismology. Comprehensive MATLAB toolbox for use with the textbook "Numerical Methods of Exploration Seismology with algorithms in Matlab" by Gary F. Margrave, a geoscience professor at the University of Calgary.</p> + +<p> +<a href="https://www.loc.gov/preservation/digital/formats/fdd/fdd000464.shtml">Library of Congress</a>. Government.</p> + +<p> +<a href="https://nssdc.gsfc.nasa.gov/nssdc/formats/IBM_32-Bit.html">NASA</a>. Astronautics.</p> + +<p> +<a href="https://support.sas.com/content/dam/SAS/support/en/technical-papers/record-layout-of-a-sas-version-5-or-6-data-set-in-sas-transport-xport-format.pdf">SAS</a>. Statistics and business analytics. SAS wrapers for C.</p> + +<p> +<a href="https://github.com/enthought/ibm2ieee">Enthought</a>. Python wrappers for C.</p> + +<h4> +<tt>Hex_ieee</tt><a name="099df223-ed1e-405e-917f-0cccd1d54a26"></a> +</h4> +<p> <a href="https://blogs.mathworks.com/cleve/files/Hex_ieee.m"><tt>Hex_ieee</tt></a>. I have two twenty-line MATLAB functions, <tt>ieee2ibm</tt> and <tt>ibm2ieee</tt>, that convert IEEE-754 floating point to and from IBM hexadecimal format.</p> + +<p>Three statements in the middle of <tt>ieee2ibm</tt> are the key to the entire operation. The first statement is</p> + +<pre> [~,e] = log2(x)</pre> +<p>With two output arguments, <tt>log2</tt> returns the mantissa and exponent of an IEEE-754 floating point number. The mantissa is not needed here.</p> + +<p>The second key statement</p> + +<pre> e = ceil(e/4)</pre> +<p>makes <tt>e</tt> divisible by 4. This turns <tt>e</tt> into the appropriate hexadecimal exponent so that the third statement</p> + +<pre> f = x.*16.^(-e)</pre> +<p>can produce the hexadecimal mantissa.</p> + +<h4> +<tt>ieee2ibm</tt><a name="126c1d80-75f5-4879-841f-de925f083fc1"></a> +</h4> +<pre>function z = ieee2ibm(x) + Convert IEEE-754 to IBM System 360 hexadecimal. + z = ieee2ibm(x) + Input x, real column vector. + Output z, length(x)-by-16 char. + Example: ieee2ibm(-118.625) = 'C276A00000000000'.</pre> +<pre> s = sign(x); % -1, 0, or 1 + x = abs(x); + x(x &lt; 16^(-65)) = 0; % Underflow + x(x &gt;= 16^63) = (1-eps/2)*16^63; % Overflow</pre> +<pre> [~,e] = log2(x); % base 2 exponent + e = ceil(e/4) % base 16 exponent + f = x.*16.^(-e); % base 16 mantissa</pre> +<pre> E = uint64((e+64)*2^56); % Assemb1e output + F = uint64(f*2^56); + S = uint64((1-s)*2^62); % 1 or 0 + z = dec2hex(S + E + F); % z = 'ZZFFFFFFFFFFFFFF' +end</pre> +<h4> +<tt>ibm2ieee</tt><a name="88d3bc9c-b626-4578-872e-b95f02057e43"></a> +</h4> +<pre>function x = ibm2ieee(z) + Convert IBM System 360 hexadecimal to IEEE-754. + x = ibm2ieee(z) + Input z, n-by-16 char. + Output x, n-by-1 double. + Example: ibm2ieee('C276A00000000000') = -118.625.</pre> +<pre> E = hex2dec(z(:,1:2)); % Disassemble input + F1 = hex2dec(z(:,3:8)); % &lt; 16^6 + F2 = hex2dec(z(:,9:end)); % &lt; 16^8 + s = sign(128-E); % -1 or 1</pre> +<pre> e = E-(s&gt;0)*64-(s&lt;0)*192; % base 16 exponent + f = F1/16^6 + F2/16^14; % base 16 mantissa + x = s.*f.*16.^e; +end</pre> +<h4>Examples<a name="64f8c2ec-011c-40a2-a2f3-a2926ee929ac"></a> +</h4> +<p>Underflow. Anything <tt>&lt; 16^(-65)</tt> is too small and is flushed to zero. There are no denormals.</p> + +<p>Overflow. Anything <tt>&gt;= 16^63</tt> is too large. There is no <tt>inf</tt> or <tt>NaN</tt>.</p> + +<pre>* 1.0 4110000000000000 +* 0.1 401999999999999A +* -pi C13243F6A8885A30 +* 5.3976e-79 0010000000000000 +* 7.2370e+75 7FFFFFFFFFFFFFF8</pre> +<h4>Comparison<a name="41ed0fce-64bf-4471-b2c3-e22645d184f5"></a> +</h4> +<p>S/360 hexadecimal has 7 exponent bits, while IEEE-754 has 11. Consequently, hexadecimal has a much smaller range, 5.4e-79 to 7.2e+75 versus 2.2e-308 to 1.8e+308.</p> + +<p>The base-16 normalization implies that hexadecimal effectively has between 53 and 56 mantissa bits. Counting the hidden bit, IEEE-754 also has 53. So, the accuracy of the two is pretty much the same.</p> + +<h4>Software<a name="9e4ce83f-58b7-498d-b480-9f17c5c1f6e0"></a> +</h4> +<p>My functions <tt>ieee2ibm</tt> and <tt>ieee2ibm</tt> described above, modified to handle both single and double, plus <tt>hex_test</tt>, which does what its name implies, are available at <a href="https://blogs.mathworks.com/cleve/files/Hex_ieee.m"><tt>Hex_ieee</tt></a>.</p> + +<p>Homework: What happens?</p> + +<pre>ok = 0; +for k = 1:10 + x = single(k/10); + ok(k) = hex_test(x); +end +ok</pre> +<!-- + function grabCode_54dd3908d741477c9a1ad45b553487d5() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='54dd3908d741477c9a1ad45b553487d5 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 54dd3908d741477c9a1ad45b553487d5'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +54dd3908d741477c9a1ad45b553487d5 ##### SOURCE BEGIN ##### +%% IBM Hexadecimal Floating Point +% Our technical support group recently received a request +% for a tool that would convert IBM System/360 hexadecimal +% floating point numbers to the IEEE-754 format. +% I am probably the only one left at MathWorks that actually used +% IBM mainframe computers. +% I thought we had seen the last of hexadecimal arithmetic years ago. +% But, it turns out that the hexadecimal floating point format +% is alive and well. + +%% IBM System/360 +% The System/360 is a family of mainframe computers that IBM +% introduced in 1965 and that dominated the computer industry +% until PCs came along twenty years later. They range in size +% from desk-sized to systems that fill a large room. +% +% Here is a photo of a mid-sized model. +% +% <<ibm-360-60.png>> +% +% _System/360, Model 60._ +% _Photo from Ken Shirrif's blog, IBM 360/System Summary_. +% +% The System/360 architecture is byte-oriented, so it can +% handle business +% data processing as well as scientific and engineering computation. +% This leads to base-16, rather than base-2 or base-10, +% floating point arithmetic. +% +% * Binary f*2^e 1/2<=f<1 +% * Decimal f*10^e 1/10<=f<1 +% * Hexadecimal f*16^e 1/16<=f<1 + +%% Formats +% Floating point formats played an important role in +% technical computing in the early days. +% This table from +% <https://www.amazon.com/exec/obidos/ASIN/0131653326/acmorg-20 +% FMM> lists formats that +% were in use in the 1970s, before IEEE-754 was introduced in 1985. +% +% <<fmm2.png>> +% + +%% Data +% The System/360 hexadecimal format is used in many industries for the +% preservation of data files. +% +% <https://www.crewes.org/ResearchLinks/FreeSoftware CREWES>. +% Teaching exploration seismology. +% Comprehensive MATLAB toolbox for use with the textbook +% "Numerical Methods of Exploration Seismology with algorithms in Matlab" +% by Gary F. Margrave, a geoscience professor at the University of Calgary. +% +% <https://www.loc.gov/preservation/digital/formats/fdd/fdd000464.shtml +% Library of Congress>. Government. +% +% <https://nssdc.gsfc.nasa.gov/nssdc/formats/IBM_32-Bit.html NASA>. +% Astronautics. +% +% <https://support.sas.com/content/dam/SAS/support/en/technical-papers/record-layout-of-a-sas-version-5-or-6-data-set-in-sas-transport-xport-format.pdf +% SAS>. +% Statistics and business analytics. SAS wrapers for C. +% +% <https://github.com/enthought/ibm2ieee Enthought>. Python wrappers for C. +% + +%% |Hex_ieee| +% <https://blogs.mathworks.com/cleve/files/Hex_ieee.m |Hex_ieee|>. +% I have two twenty-line MATLAB functions, |ieee2ibm| and |ibm2ieee|, +% that convert IEEE-754 floating point to and from IBM hexadecimal format. +% +% Three statements in the middle of |ieee2ibm| are the key to +% the entire operation. The first statement is +% +% [~,e] = log2(x) +% +% With two output arguments, |log2| returns the mantissa +% and exponent of an IEEE-754 floating point number. +% The mantissa is not needed here. +% +% The second key statement +% +% e = ceil(e/4) +% +% makes |e| divisible by 4. This turns |e| into the appropriate +% hexadecimal exponent so that the third statement +% +% f = x.*16.^(-e) +% +% can produce the hexadecimal mantissa. +% + +%% |ieee2ibm| +% function z = ieee2ibm(x) +% Convert IEEE-754 to IBM System 360 hexadecimal. +% z = ieee2ibm(x) +% Input x, real column vector. +% Output z, length(x)-by-16 char. +% Example: ieee2ibm(-118.625) = 'C276A00000000000'. +% +% s = sign(x); % -1, 0, or 1 +% x = abs(x); +% x(x < 16^(-65)) = 0; % Underflow +% x(x >= 16^63) = (1-eps/2)*16^63; % Overflow +% +% [~,e] = log2(x); % base 2 exponent +% e = ceil(e/4) % base 16 exponent +% f = x.*16.^(-e); % base 16 mantissa +% +% E = uint64((e+64)*2^56); % Assemb1e output +% F = uint64(f*2^56); +% S = uint64((1-s)*2^62); % 1 or 0 +% z = dec2hex(S + E + F); % z = 'ZZFFFFFFFFFFFFFF' +% end + +%% |ibm2ieee| +% function x = ibm2ieee(z) +% Convert IBM System 360 hexadecimal to IEEE-754. +% x = ibm2ieee(z) +% Input z, n-by-16 char. +% Output x, n-by-1 double. +% Example: ibm2ieee('C276A00000000000') = -118.625. +% +% E = hex2dec(z(:,1:2)); % Disassemble input +% F1 = hex2dec(z(:,3:8)); % < 16^6 +% F2 = hex2dec(z(:,9:end)); % < 16^8 +% s = sign(128-E); % -1 or 1 +% +% e = E-(s>0)*64-(s<0)*192; % base 16 exponent +% f = F1/16^6 + F2/16^14; % base 16 mantissa +% x = s.*f.*16.^e; +% end + +%% Examples +% Underflow. Anything |< 16^(-65)| is too small and is flushed to zero. +% There are no denormals. +% +% Overflow. Anything |>= 16^63| is too large. +% There is no |inf| or |NaN|. +% +% * 1.0 4110000000000000 +% * 0.1 401999999999999A +% * -pi C13243F6A8885A30 +% * 5.3976e-79 0010000000000000 +% * 7.2370e+75 7FFFFFFFFFFFFFF8 + +%% Comparison +% S/360 hexadecimal has 7 exponent bits, while IEEE-754 has 11. +% Consequently, hexadecimal has a much smaller range, 5.4e-79 to 7.2e+75 +% versus 2.2e-308 to 1.8e+308. +% +% The base-16 normalization implies that hexadecimal effectively has +% between 53 and 56 mantissa bits. Counting the hidden bit, +% IEEE-754 also has 53. So, the accuracy of the two is pretty much the +% same. + +%% Software +% My functions |ieee2ibm| and |ieee2ibm| described above, +% modified to handle both single and double, +% plus |hex_test|, which does what its name implies, are available at +% <https://blogs.mathworks.com/cleve/files/Hex_ieee.m |Hex_ieee|>. +% +% Homework: What happens? +% +% ok = 0; +% for k = 1:10 +% x = single(k/10); +% ok(k) = hex_test(x); +% end +% ok + + +##### SOURCE END ##### 54dd3908d741477c9a1ad45b553487d5 +--> + + + + + A Sixty-Year Old Program for Predicting the Future + + 2024-05-19T16:55:03-06:00 + https://hpc.social/2024/a-sixty-year-old-program-for-predicting-the-future + <div class="content"><!--introduction--> +<p>The graphics in <a href="https://blogs.mathworks.com/cleve/2024/05/04/r-squared-is-bigger-better/">my post about <tt>R^2</tt></a> were produced by an updated version of a sixty-year old program involving the U.S. census. Originally, the program was based on census data from 1900 to 1960 and sought to predict the population in 1970. The software back then was written in Fortran, the predominate technical programming language a half century ago. I have updated the MATLAB version of the program so that it now uses census data from 1900 to 2020.</p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#e46c5c76-356a-4c77-aea9-20aae3e00d62"><tt>censusapp2024</tt></a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#80c94327-eb2c-492a-8542-388485d68adc">Risky Business</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#97d3b2b7-4a14-4003-85b6-c7f854fc8d56">Splines</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c8daccba-8dbe-4dbf-a0c6-6bb0b66a1e38">Exponentials</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#b1af50c9-b8ea-4211-884b-79f28e12d34f">Predictions</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#acb134fb-dc9a-43cb-840b-0e7934c63e24">Conclusion</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#d945ac16-2ef7-4c75-a529-d64d03f50776">Blogs</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#c7c11668-f0eb-404b-b951-52729c417b5c">FMM</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#906b81f5-b694-47e8-9dee-fb0586a19671">Software</a> +</li> +</ul> +</div> + +<h4> +<tt>censusapp2024</tt><a name="e46c5c76-356a-4c77-aea9-20aae3e00d62"></a> +</h4> +<p>The latest version of the census application is now available at <a href="https://blogs.mathworks.com/cleve/files/censusapp_2024.m">censusapp2024</a>. Here are the data and the opening screenshot.</p> + +<pre class="codeinput">[t,p]=UScensus;fprintf(<span class="string">'%12d%12.3f\n'</span>,[t,p]') +</pre> +<pre class="codeoutput"> 1900 75.995 + 1910 91.972 + 1920 105.711 + 1930 123.203 + 1940 131.669 + 1950 150.697 + 1960 179.323 + 1970 203.212 + 1980 226.505 + 1990 249.633 + 2000 281.422 + 2010 308.746 + 2020 331.449 +</pre> +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/screenshot.png" vspace="5" /> </p> + +<h4>Risky Business<a name="80c94327-eb2c-492a-8542-388485d68adc"></a> +</h4> +<p>Today, MATLAB makes it easier to vary parameters and visualize results, but the underlying mathematical principles are unchanged:</p> + +<div> +<ul> +<li>Using polynomials to predict the future by extrapolating data is a risky business.</li> +</ul> +</div> + +<p>One new observation is added to the data every 10 years, when the United States does the decennial census. Originally there were only 7 observations; today there are 13. The program now allows you to fit the data exactly by interpolation with a polynomial of degree 12 or fit it approximately by polynomials of degree less than 12.</p> + +<p>Here are the least-squares fits with linear, cubic, and degree seven polynomials and the interpolating polynomial. As the polynomial degree increases, so does <tt>R^2</tt>, until <tt>R^2</tt> reaches one with the exact fit.</p> + +<p>Do any of these fits look like they could be used to predict future population growth?</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/polys.png" vspace="5" /> </p> + +<h4>Splines<a name="97d3b2b7-4a14-4003-85b6-c7f854fc8d56"></a> +</h4> +<p>In addition to polynomials, you can choose interpolation by three different <a href="https://blogs.mathworks.com/cleve/2019/04/29/makima-piecewise-cubic-interpolation/">piecewise Hermite cubics</a>.</p> + +<div> +<ul> +<li> +<tt>spline</tt> Continuous second derivate, "not-a-knot" end condition.</li> +<li> +<tt>pchip</tt> Continuous first derivative, strictly shape-preserving.</li> +<li> +<tt>makima</tt> Continuous first derivative, relaxed shape-preserving.</li> +</ul> +</div> + +<p>Since these fits interpolate the data, all their <tt>R^2</tt> values are one. But before 1900 and after 2020 these functions are cubic polynomials that are not designed for extrapolation.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/splines.png" vspace="5" /> </p> + +<h4>Exponentials<a name="c8daccba-8dbe-4dbf-a0c6-6bb0b66a1e38"></a> +</h4> +<p>It is also possible to do nonlinear least squares fits by an exponential, a logistic sigmoid, and an exponential of an exponetial known as the Gompertz model.</p> + +<div> +<ul> +<li> +<tt>exponential exp(b*t+c)</tt> +</li> +<li> +<tt>logistic a./(1+exp(-b*(t-c)))</tt> +</li> +<li> +<tt>gompertz a*exp(-b*exp(-c*t))</tt> +</li> +</ul> +</div> + +<p>An article by Kathleen and Even Tj&oslash;rve, from the Inland Norway University of Applied Sciences in Elverum, Norway, in the journal <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178691">PLOS ONE</a> has this to say about Gompertz. "The Gompertz model has been in use as a growth model even longer than its better known relative, the logistic model. The model, referred to at the time as the Gompertz theoretical law of mortality, was first suggested and first applied by Mr. Benjamin Gompertz in 1825. He fitted it to the relationship between increasing death rate and age, what he referred to as 'the average exhaustions of a man&rsquo;s power to avoid death&rdquo; or the 'portion of his remaining power to oppose destruction.' "</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/expos.png" vspace="5" /> </p> + +<h4>Predictions<a name="b1af50c9-b8ea-4211-884b-79f28e12d34f"></a> +</h4> +<p>Which fits are suitable for predicting future population size?</p> + +<p>Despite their large R^2 values, polynomials of any degree are not suitable because outside of the time interval they behave like polynomials and do not provide realistic predictions.</p> + +<p>Splines were never intended for extrapolation.</p> + +<p>That leaves the exponentials. The simple exponential model grows exponentially and is not suitable. The Gompertz fit does approach a finite asymptotic limit, but the value is an astronimical <tt>a</tt> = 2101, corresponding to 2.1 $\times 10^9$ inhabitants. Hopefully, that is out of the question.</p> + +<p>The logistic fit has an asymptotic limit of <tt>a</tt> = 655.7. We recently passed the value of <tt>t</tt> where <tt>p(t)</tt> reaches <tt>a/2</tt>, namely <tt>c</tt> = 2018. So, the logistic model predicts that the long-term size of the U.S. population will be about twice its current value. Is that realistic? Probably not.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/expos_future.png" vspace="5" /> </p> + +<h4>Conclusion<a name="acb134fb-dc9a-43cb-840b-0e7934c63e24"></a> +</h4> +<p>The British statistician George Box once said, "all models are wrong, some are useful." This is true of the models of the U. S. Census that I have discussed over the past sixty years.</p> + +<p>Here is <tt>censusapp2024</tt> after all its buttons have been pushed. The extrapolation date is set to 2040. White noise has been added to the data. The model is a fourth-degree polynomial with an <tt>R^2</tt> = 0.99. The <tt>R^2</tt> value and the error estimates produced by <tt>errs</tt> account for errors in the data, but not in the model.</p> + +<p>This particular model does a lousy job of predicting even twenty years in the future. Some of the other models are better, many are worse. Hopefully, their study is worthwhile.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/predict.png" vspace="5" /> </p> + +<h4>Blogs<a name="d945ac16-2ef7-4c75-a529-d64d03f50776"></a> +</h4> +<p>I have made blog posts about the census before, in <a href="https://blogs.mathworks.com/cleve/2020/11/06/anticipating-official-u-s-census-for-2020">2020</a> and in <a href="https://blogs.mathworks.com/cleve/2017/01/05/fitting-and-extrapolating-us-census-data">2017</a>.</p> + +<h4>FMM<a name="c7c11668-f0eb-404b-b951-52729c417b5c"></a> +</h4> +<p>Predicting population growth is featured in <i>Computer Methods for Mathematical Computations</i>, by George Forsythe, Mike Malcolm and myself, published by Prentice-Hall in 1977. That textbook is now available from an interesting smorgasbord of sources, including <a href="https://scholar.google.com/citations?view_op=view_citation&amp;hl=en&amp;user=rldfxOMAAAAJ&amp;citation_for_view=rldfxOMAAAAJ:buQ7SEKw-1sC">Google Scholar</a>, <a href="https://www.amazon.com/exec/obidos/ASIN/0131653326/acmorg-20">Amazon</a>, <a href="https://www.etsy.com/listing/1676520741/vintage-textbook-computer-methods-for">dizhasneatstuff</a>, <a href="https://www.abebooks.com/servlet/BookDetailsPL?bi=22650690419">Abe Books</a>, <a href="https://archive.org/details/computermethodsf00fors/page/18/mode/2up">Internet Archive</a>, <a href="https://www.pdas.com/fmm.html">PDAS</a>, <a href="https://search.worldcat.org/title/1150302502">WorldCat (Chinese)</a>.</p> + +<h4>Software<a name="906b81f5-b694-47e8-9dee-fb0586a19671"></a> +</h4> +<p> +<tt>censusapp2024</tt> is available at <a href="https://blogs.mathworks.com/cleve/files/censusapp_2024.m">censusapp2024</a>.</p> + +<!-- + function grabCode_02c7b1cd1f114211a874bb3dcae61323() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='02c7b1cd1f114211a874bb3dcae61323 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 02c7b1cd1f114211a874bb3dcae61323'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +02c7b1cd1f114211a874bb3dcae61323 ##### SOURCE BEGIN ##### +%% A Sixty-Year Old Program for Predicting the Future +% The graphics in +% <https://blogs.mathworks.com/cleve/2024/05/04/r-squared-is-bigger-better/ +% my post about |R^2|> were produced by an updated version of +% a sixty-year old program involving the U.S. census. +% Originally, the program was based on census data from 1900 to 1960 +% and sought to predict the population in 1970. +% The software back then was written in Fortran, +% the predominate technical programming language a half century ago. +% I have updated the MATLAB version of the program +% so that it now uses census data from 1900 to 2020. + +%% |censusapp2024| +% The latest version of the census application is now available at +% <https://blogs.mathworks.com/cleve/files/censusapp_2024.m +% censusapp2024>. Here are the data and the opening screenshot. + + [t,p] = UScensus; fprintf('%12d%12.3f\n',[t,p]') + +%% +% <<screenshot.png>> + +%% Risky Business +% Today, MATLAB makes it easier to vary parameters and visualize +% results, but the underlying mathematical principles are unchanged: +% +% * Using polynomials to predict +% the future by extrapolating data is a risky business. +% +% One new observation is added to the data +% every 10 years, when the United States does the decennial census. +% Originally there were only 7 observations; today there are 13. +% The program now allows you to fit the data exactly by interpolation with +% a polynomial of degree 12 or fit it approximately by +% polynomials of degree less than 12. +% +% Here are the least-squares fits with linear, cubic, and degree seven +% polynomials and the interpolating polynomial. +% As the polynomial degree increases, so does |R^2|, until |R^2| reaches +% one with the exact fit. +% +% Do any of these fits look like they could be used to predict future +% population growth? +% +% <<polys.png>> + +%% Splines +% In addition to polynomials, you can choose +% interpolation by three different +% <https://blogs.mathworks.com/cleve/2019/04/29/makima-piecewise-cubic-interpolation/ +% piecewise Hermite cubics>. +% +% * |spline| Continuous second derivate, "not-a-knot" end condition. +% * |pchip| Continuous first derivative, strictly shape-preserving. +% * |makima| Continuous first derivative, relaxed shape-preserving. +% +% Since these fits interpolate the data, all their |R^2| values are one. +% But before 1900 and after 2020 these functions are cubic polynomials +% that are not designed for extrapolation. +% +% <<splines.png>> + +%% Exponentials +% It is also possible to do nonlinear least squares fits by an exponential, +% a logistic sigmoid, and an exponential of an exponetial known as the +% Gompertz model. +% +% * |exponential exp(b*t+c)| +% * |logistic a./(1+exp(-b*(t-c)))| +% * |gompertz a*exp(-b*exp(-c*t))| +% +% An article by Kathleen and Even Tjørve, from the +% Inland Norway University of Applied Sciences in Elverum, Norway, +% in the journal +% <https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0178691 +% PLOS ONE> has this to say about Gompertz. +% "The Gompertz model has been in use as a growth model even longer +% than its better known relative, the logistic model. The model, +% referred to at the time as the Gompertz theoretical law of mortality, was +% first suggested and first applied by Mr. Benjamin Gompertz in 1825. +% He fitted it to the relationship between increasing death rate and age, +% what he referred to as 'the average exhaustions of a man’s power to +% avoid death” or the 'portion of his remaining power to oppose +% destruction.' " +% +% <<expos.png>> + +%% Predictions +% Which fits are suitable for predicting future population size? +% +% Despite their large R^2 values, polynomials of any degree +% are not suitable because outside of the time interval they behave +% like polynomials and do not provide realistic predictions. +% +% Splines were never intended for extrapolation. +% +% That leaves the exponentials. The simple exponential model grows +% exponentially and is not suitable. The Gompertz fit does approach +% a finite asymptotic limit, but the value is an astronimical |a| = 2101, +% corresponding to 2.1 $\times 10^9$ inhabitants. Hopefully, that is +% out of the question. +% +% The logistic fit has an asymptotic limit of |a| = 655.7. +% We recently passed the value of |t| where |p(t)| reaches |a/2|, +% namely |c| = 2018. So, the logistic model predicts that +% the long-term size of the U.S. population will be about twice its +% current value. Is that realistic? Probably not. +% +% <<expos_future.png>> +% + +%% Conclusion +% The British statistician George Box once said, "all models are wrong, +% some are useful." This is true of the models of the +% U. S. Census that I have discussed over the past sixty years. +% +% Here is |censusapp2024| after all its buttons have been pushed. +% The extrapolation date is set to 2040. +% White noise has been added to the data. +% The model is a fourth-degree polynomial with an |R^2| = 0.99. +% The |R^2| value and the error estimates produced by |errs| +% account for errors in the data, but not in the model. +% +% This particular model does a lousy job of predicting even twenty +% years in the future. +% Some of the other models are better, many are worse. +% Hopefully, their study is worthwhile. +% +% <<predict.png>> + +%% Blogs +% I have made blog posts about the census before, in +% <https://blogs.mathworks.com/cleve/2020/11/06/anticipating-official-u-s-census-for-2020 +% 2020> and in +% <https://blogs.mathworks.com/cleve/2017/01/05/fitting-and-extrapolating-us-census-data +% 2017>. + +%% FMM +% Predicting population growth is featured in +% _Computer Methods for Mathematical Computations_, +% by George Forsythe, Mike Malcolm and myself, +% published by Prentice-Hall in 1977. +% That textbook is now available from an interesting smorgasbord of +% sources, including +% <https://scholar.google.com/citations?view_op=view_citation&hl=en&user=rldfxOMAAAAJ&citation_for_view=rldfxOMAAAAJ:buQ7SEKw-1sC +% Google Scholar>, +% <https://www.amazon.com/exec/obidos/ASIN/0131653326/acmorg-20 Amazon>, +% <https://www.etsy.com/listing/1676520741/vintage-textbook-computer-methods-for +% dizhasneatstuff>, +% <https://www.abebooks.com/servlet/BookDetailsPL?bi=22650690419 +% Abe Books>, +% <https://archive.org/details/computermethodsf00fors/page/18/mode/2up +% Internet Archive>, +% <https://www.pdas.com/fmm.html PDAS>, +% <https://search.worldcat.org/title/1150302502 WorldCat (Chinese)>. + +%% Software +% |censusapp2024| is available at +% <https://blogs.mathworks.com/cleve/files/censusapp_2024.m +% censusapp2024>. +##### SOURCE END ##### 02c7b1cd1f114211a874bb3dcae61323 +--> + + + + + R-squared. Is Bigger Better? + + 2024-05-04T14:33:38-06:00 + https://hpc.social/2024/r-squared-is-bigger-better- + <div class="content"><!--introduction--> +<p>The <i>coefficient of determination</i>, R-squared or <tt>R^2</tt>, is a popular statistic that describes how well a regression model fits data. It measures the proportion of variation in data that is predicted by a model. However, that is <i>all</i> that <tt>R^2</tt> measures. It is <i>not</i> appropriate for any other use. For example, it does not support extrapolation beyond the domain of the data. It does not suggest that one model is preferable to another.</p> + +<p>I recently watched high school students participate in the final round of a national mathematical modeling competition. The teams' presentations were excellent; they were well-prepared, mathematically sophisticated, and informative. Unfortunately, many of the presentations abused <tt>R^2</tt>. It was used to compare different fits, to justify extrapolation, and to recommend public policy.</p> + +<p>This was not the first time that I have seen abuses of <tt>R^2</tt>. As educators and authors of mathematical software, we must do more to expose its limitations. There are dozens of pages and videos on the web describing <tt>R^2</tt>, but few of them warn about possible misuse.</p> + +<p> +<tt>R^2</tt> is easily computed. If <tt>y</tt> is a vector of observations, <tt>f</tt> is a fit to the data and <tt>ybar = mean(y)</tt>, then</p> + +<pre> R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2</pre> +<p>If the data are centered, then <tt>ybar = 0</tt> and <tt>R^2</tt> is between zero and one.</p> + +<!--/introduction--> +<p>One of my favorite examples is the United States Census. Here is the population, in millions, every ten years since 1900.</p> + +<pre> t p + ____ _______ + 1900 75.995 + 1910 91.972 + 1920 105.711 + 1930 123.203 + 1940 131.669 + 1950 150.697 + 1960 179.323 + 1970 203.212 + 1980 226.505 + 1990 249.633 + 2000 281.422 + 2010 308.746 + 2020 331.449</pre> +<p>There are 13 observations. So, we can do a least-squares fit by a polynomial of any degree less than 12 and can interpolate by a polynomial of degree 12. Here are four such fits and the corresponding <tt>R^2</tt> values. As the degree increases, so does <tt>R^2</tt>. Interpolation fits the data exactly and earns a perfect core.</p> + +<p>Which fit would you choose to predict the population in 2030, or even to estimate the population between census years?</p> + +<pre class="codeinput">R2_census +</pre> +<img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/R2_blog_01.png" vspace="5" /> <p>Thanks to Peter Perkins and Tom Lane for help with this post.</p> + +<!-- + function grabCode_c876d07b32bc454d8001573d08d2f7aa() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='c876d07b32bc454d8001573d08d2f7aa ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' c876d07b32bc454d8001573d08d2f7aa'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +c876d07b32bc454d8001573d08d2f7aa ##### SOURCE BEGIN ##### +%% R-squared. Is Bigger Better? +% The _coefficient of determination_, R-squared or |R^2|, is a popular +% statistic that describes how well a regression model fits data. +% It measures the proportion of variation in data that is +% predicted by a model. However, that is _all_ that |R^2| +% measures. It is _not_ appropriate for any other use. For example, +% it does not support extrapolation beyond the domain of the data. +% It does not suggest that one model is preferable to +% another. +% +% I recently watched high school students participate in the +% final round of a national mathematical modeling competition. +% The teams' presentations were excellent; they were +% well-prepared, mathematically sophisticated, and informative. +% Unfortunately, many of the presentations abused |R^2|. It was +% used to compare different fits, to justify extrapolation, +% and to recommend public policy. +% +% This was not the first time that I have seen abuses of |R^2|. +% As educators and authors of mathematical software, we must +% do more to expose its limitations. There are dozens of pages +% and videos on the web describing |R^2|, but few of them warn +% about possible misuse. +% +% |R^2| is easily computed. +% If |y| is a vector of observations, |f| is a fit to +% the data and |ybar = mean(y)|, then +% +% R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2 +% +% If the data are centered, then |ybar = 0| and |R^2| is between +% zero and one. + +%% +% One of my favorite examples is the United States Census. +% Here is the population, in millions, every ten years since 1900. +% +% t p +% ____ _______ +% 1900 75.995 +% 1910 91.972 +% 1920 105.711 +% 1930 123.203 +% 1940 131.669 +% 1950 150.697 +% 1960 179.323 +% 1970 203.212 +% 1980 226.505 +% 1990 249.633 +% 2000 281.422 +% 2010 308.746 +% 2020 331.449 +% +% There are 13 observations. So, we can do a least-squares fit +% by a polynomial of any degree less than 12 and can +% interpolate by a polynomial of degree 12. Here are four such +% fits and the corresponding |R^2| values. As the degree increases, +% so does |R^2|. Interpolation fits the data exactly and earns +% a perfect core. +% +% Which fit would you choose to predict the population in 2030, +% or even to estimate the population between census years? + +R2_census + +%% +% Thanks to Peter Perkins and Tom Lane for help with this post. + +##### SOURCE END ##### c876d07b32bc454d8001573d08d2f7aa +--> + + + + + Closest Pair of Points Problem + + 2024-03-28T20:00:00-06:00 + https://hpc.social/2024/closest-pair-of-points-problem + <div class="content"><!--introduction--><p>The Closest Pair of Points problem is a standard topic in an algorithms course today, but when I taught such a course fifty years ago, the algorithm was not yet known.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#0f62a942-c8a3-4395-8f83-9509ed1dabd0">California Dreaming</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#825b1d10-1532-4f6e-8927-6d9e45dbdb49">Closest Pair of Points</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#92c53c07-0f81-494a-91a7-c364eb3132ea"><tt>Pairs</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#05e723c3-e7a0-4091-bb97-463ac017b7e0"><tt>DivCon</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#387c9a5e-eee6-47d0-be8a-6ea3d8d95f8f"><tt>Center</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#53330f5c-f9a0-4060-ba34-e5e98e1c9ed4">Complexity</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#5d10f4df-79d5-46b8-9375-01260abdba40">Timing</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4de823af-8e67-4218-a471-d8def3204d38">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0dc6f3e8-7d3a-4381-8d34-13514fb2cad1">References</a></li></ul></div> +<h4>California Dreaming<a name="0f62a942-c8a3-4395-8f83-9509ed1dabd0"></a></h4><p>Imagine you are driving a car on the Harbor Freeway in southern California with typical Los Angeles traffic conditions. Among the many things you might want to know is which pair of vehicles is nearest each other.</p> +<p>This is an instance of the Closest Pair of Points problem:</p> +<div><ul><li>Given the location of <tt>n</tt> points in the plane, which pair of points is closest to each other?</li></ul></div> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/traffic.png" vspace="5" /> </p> +<h4>Closest Pair of Points<a name="825b1d10-1532-4f6e-8927-6d9e45dbdb49"></a></h4><p>It is convenient to represent the points by a vector of complex values. The distance between points <tt>z(k)</tt> and <tt>z(j)</tt> is then</p> +<pre> d = abs(z(k) - z(j))</pre><p>Here are a few points in the unit square. The closest pair is highlighted.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/pairs.png" vspace="5" /> </p> +<h4><tt>Pairs</tt><a name="92c53c07-0f81-494a-91a7-c364eb3132ea"></a></h4><p>The first algorithm you might think of computes the distances between all possible pairs of points and finds the minimum. This is a brute force approach that requires only a few lines of code.</p> +<pre>function d = Pairs(z) + % Pairs. + % d = Pairs(z) is the minimum distance between any two elements + % of the complex vector z.</pre><pre> n = length(z); + d = Inf; + for k = 1:n + for j = k+1:n + if abs(z(k) - z(j)) &lt; d + d = abs(z(k) - z(j)); + end + end + end +end</pre><h4><tt>DivCon</tt><a name="05e723c3-e7a0-4091-bb97-463ac017b7e0"></a></h4><p>DivCon stands for Divide and Conquer. In outline, the steps are:</p> +<div><ul><li>Divide the set of points into two halves.</li></ul></div> +<div><ul><li>Recursively, find the closest pair in each half.</li></ul></div> +<div><ul><li>Consider the case when the closest pair has one point in each half.</li></ul></div> +<div><ul><li>Terminate the recursion with sets of two or three points.</li></ul></div> +<pre>function d = DivCon(z,sorted) + % DivCon. + % d = DivCon(z) is the minimum distance between any two elements + % of the complex vector z. + % + % d = DivCon(z,true) is a recursive call with ascending real(z).</pre><pre> n = length(z); + if n &lt;= 3 + d = Pairs(z); + else + if nargin &lt; 2 || ~sorted + [~,p] = sort(real(z)); + z = z(p); + end + m = floor(n/2);</pre><pre> % Left half + dl = DivCon(z(1:m),true)</pre><pre> % Right half + dr = DivCon(z(m+1:end),true);</pre><pre> % Choose + d = min(dl,dr);</pre><pre> % Center strip + ds = Center(z,d); + d = min(ds,d); + end +end</pre><h4><tt>Center</tt><a name="387c9a5e-eee6-47d0-be8a-6ea3d8d95f8f"></a></h4><p>The delicate case involves the strip of points near the center dividing line. The width of the strip is the closest distance found in the recursion. Any closer pair with one point in each half must be in this strip.</p> +<pre>function d = Center(z,d) + % Center(z,d) is used by DivCon to examine the + % strip of half-width d about the center point.</pre><pre> n = length(z) + m = floor(n/2); + xh = real(z(m)); + [~,p] = sort(imag(z)); + z = z(p); + s = []; + for i = 1:n + if abs(real(z(i)) - xh) &lt; d + s = [s; z(i)]; + end + end</pre><pre> ns = length(s); + for k = 1:ns + for j = k+1:ns + if (imag(s(j)) - imag(s(k))) &lt; d &amp;&amp; abs(s(k) - s(j)) &lt; d + d = abs(s(k) - s(j)); + end + end + end +end</pre><h4>Complexity<a name="53330f5c-f9a0-4060-ba34-e5e98e1c9ed4"></a></h4><p>Let <tt>n</tt> be the number of points. An asymptotic execution-time complexity analysis involves <tt>n</tt> approaching infinity.</p> +<p>It is not hard to see that the complexity of the brute force algorithm implemented in <tt>Pairs</tt> is O(<tt>n</tt>^2).</p> +<p>There are <a href="https://www.google.com/search?q=closest+pair+of+points+(divide+and+conquer)">dozens of pages on the web</a> devoted to showing that the complexity of the divide and conquer algorithm implemented in <tt>DivCon</tt> and <tt>Center</tt> is O(<tt>n</tt>*log(<tt>n</tt>)). The best page that I have seen is the <a href="https://www.youtube.com/watch?v=6u_hWxbOc7E">YouTube video by Ling Qi</a>. The key to the analysis is showing that the inner loop in <tt>Center</tt> is executed at most 7 times for any <tt>n</tt>.</p> +<h4>Timing<a name="5d10f4df-79d5-46b8-9375-01260abdba40"></a></h4><p>We measured the execution time of <tt>Pairs(z)</tt> and <tt>DivCon(z)</tt> for <tt>n</tt> from 1,000 to 40,000 and computed the ratios of the two times. The complexity analysis predicts that this ratio is asymptotically</p> +<pre> O(n/log(n))</pre><p>Here are the timing results and a least square fit by <tt>n</tt>/log(<tt>n</tt>).</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/fit.png" vspace="5" /> </p> +<h4>Software<a name="4de823af-8e67-4218-a471-d8def3204d38"></a></h4><p>A self-extracting MATLAB archive is available at <a href="https://blogs.mathworks.com/cleve/files/TestDivCon_mzip.m">https://blogs.mathworks.com/cleve/files/TestDivCon_mzip.m</a></p> +<h4>References<a name="0dc6f3e8-7d3a-4381-8d34-13514fb2cad1"></a></h4><p>Ling Qi, IDeer7, <i>Closest Pair of Points (Divide and Conquer) Explained</i>. <a href="https://www.youtube.com/watch?v=6u_hWxbOc7E">https://www.youtube.com/watch?v=6u_hWxbOc7E</a>.</p> +<p>Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford. <i>Introduction to Algorithms (4th ed.)</i>. MIT Press and McGraw-Hill. ISBN 0-262-04630-X. 1312 pp.</p> +<!-- + function grabCode_fc0430dede624952a83439140fe547ff() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='fc0430dede624952a83439140fe547ff ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' fc0430dede624952a83439140fe547ff'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +fc0430dede624952a83439140fe547ff ##### SOURCE BEGIN ##### +%% The Closest Pair of Points Problem +% The Closest Pair of Points problem is a standard topic in an +% algorithms course today, but when I taught such +% a course fifty years ago, the algorithm was not yet known. + +%% California Dreaming +% Imagine you are driving a car on the Harbor Freeway in southern +% California with typical Los Angeles traffic conditions. +% Among the many things you might want to know is which pair of +% vehicles is nearest each other. +% +% This is an instance of the Closest Pair of Points problem: +% +% * Given the location of |n| points in the plane, which pair of points +% is closest to each other? +% +% <<traffic.png>> +% +%% Closest Pair of Points +% It is convenient to represent the points by a vector of complex values. +% The distance between points |z(k)| and |z(j)| is then +% +% d = abs(z(k) - z(j)) +% +% Here are a few points in the unit square. The closest pair is +% highlighted. +% +% <<pairs.png>> +% + +%% |Pairs| +% The first algorithm you might think of computes the distance +% between all possible pairs of points and finds the minimum. This is +% a brute force approach that requires only a few lines of code. +% +% function d = Pairs(z) +% % Pairs. +% % d = Pairs(z) is the minimum distance between any two elements +% % of the complex vector z. +% +% n = length(z); +% d = Inf; +% for k = 1:n +% for j = k+1:n +% if abs(z(k) - z(j)) < d +% d = abs(z(k) - z(j)); +% end +% end +% end +% end + +%% |DivCon| +% DivCon stands for Divide and Conquer. In outline, the steps are: +% +% * Divide the set of points into two halves. +% +% * Recursively, find the closest pair in each half. +% +% * Consider the case when the closest pair has one point in each half. +% +% * Terminate the recursion with sets of two or three points. +% +% function d = DivCon(z,sorted) +% % DivCon. +% % d = DivCon(z) is the minimum distance between any two elements +% % of the complex vector z. +% % +% % d = DivCon(z,true) is a recursive call with ascending real(z). +% +% n = length(z); +% if n <= 3 +% d = Pairs(z); +% else +% if nargin < 2 || ~sorted +% [~,p] = sort(real(z)); +% z = z(p); +% end +% m = floor(n/2); +% +% % Left half +% dl = DivCon(z(1:m),true) +% +% % Right half +% dr = DivCon(z(m+1:end),true); +% +% % Choose +% d = min(dl,dr); +% +% % Center strip +% ds = Center(z,d); +% d = min(ds,d); +% end +% end + +%% |Center| +% The delicate case involves the strip of points near the +% center dividing line. The width of the strip is the closest +% distance found in the recursion. Any closer pair with one point +% in each half must be in this strip. +% +% function d = Center(z,d) +% % Center(z,d) is used by DivCon to examine the +% % strip of half-width d about the center point. +% +% n = length(z) +% m = floor(n/2); +% xh = real(z(m)); +% [~,p] = sort(imag(z)); +% z = z(p); +% s = []; +% for i = 1:n +% if abs(real(z(i)) - xh) < d +% s = [s; z(i)]; +% end +% end +% +% ns = length(s); +% for k = 1:ns +% for j = k+1:ns +% if (imag(s(j)) - imag(s(k))) < d && abs(s(k) - s(j)) < d +% d = abs(s(k) - s(j)); +% end +% end +% end +% end + +%% Complexity +% Let |n| be the number of points. An asymptotic execution-time +% complexity analysis involves |n| approaching infinity. +% +% It is not hard to see that the complexity of the brute force algorithm +% implemented in |Pairs| is O(|n|^2). +% +% There are +% <https://www.google.com/search?q=closest+pair+of+points+(divide+and+conquer) +% dozens of pages on the web> devoted to showing that the complexity +% of the divide and conquer algorithm implemented in |DivCon| and |Center| +% is O(|n|*log(|n|)). The best page that I have seen is the +% <https://www.youtube.com/watch?v=6u_hWxbOc7E +% YouTube video by Ling Qi>. +% The key to the analysis is showing that the inner +% loop in |Center| is executed at most 7 times for any |n|. +% +%% Timing +% We measured the execution time of |Pairs(z)| and |DivCon(z)| for +% |n| from 1,000 to 40,000 and computed the ratios of the two times. +% The complexity analysis predicts that this ratio is asymptotically +% +% O(n/log(n)) +% +% Here are the timing results and a least square fit by |n|/log(|n|). +% +% <<fit.png>> + +%% Software +% A self-extracting MATLAB archive is available at +% <https://blogs.mathworks.com/cleve/files/TestDivCon_mzip.m> + +%% References +% +% Ling Qi, IDeer7, _Closest Pair of Points (Divide and Conquer) Explained_. +% <https://www.youtube.com/watch?v=6u_hWxbOc7E>. +% +% Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; +% Stein, Clifford. _Introduction to Algorithms (4th ed.)_. +% MIT Press and McGraw-Hill. ISBN 0-262-04630-X. 1312 pp. +##### SOURCE END ##### fc0430dede624952a83439140fe547ff +--> + + + + + Twenty Years of Parallel MATLAB + + 2024-03-15T18:05:58-06:00 + https://hpc.social/2024/twenty-years-of-parallel-matlab + <div class="content"><!--introduction--><p>I have just returned from the MathWorks company meeting celebrating our 40th Anniversary. In one of the presentations, Jos Martin described how Parallel MATLAB was introduced almost twenty years ago. Here are a few slides from Jos's talk.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#eb526631-dc7b-4d6f-b20d-0df539aebec4">Why There Wasn't Any Parallel MATLAB</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#46778056-77d3-4a5c-b5fe-b52d97931018">Twenty-seven Parallel MATLABs</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3df2759d-d597-4b19-9c05-c9112532cadc">Distributed Computing Toolbox</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7c5caf72-f3b8-485b-8b12-1c06813855e0">Supercomputing Conference</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9266c227-5e9f-4e31-9d7d-a8d89fc7b2d1">Bill Gates</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#85862059-8ccf-4c67-b17b-018619edab9f">Now There is a Parallel MATLAB</a></li></ul></div> +<h4>Why There Wasn't Any Parallel MATLAB<a name="eb526631-dc7b-4d6f-b20d-0df539aebec4"></a></h4><p>In <i>MATLAB News and Notes</i> for spring 1995, I wrote a one-page Cleve's Corner titled "Why there isn't any parallel MATLAB." There were three reasons.</p> +<div><ul><li>Memory model. MATLAB would generate a matrix on a host machine, split it into roughly equally sized submatrices, and distribute each submatrix to a node. But it took far longer to distribute the data then it did to do the computation. Any matrix that would fit into memory on the host was too small to make effective use of the parallel computer itself.</li></ul></div> +<div><ul><li>Granularity. The amount of work involved in a single matrix computation is too little to be effectively parallelized.</li></ul></div> +<div><ul><li>Business situation. There are too few potential customers at this time (1995) to undertake fundamental changes in MATLAB's architecture.</li></ul></div> +<p>This one-page note turned out to be one of my most widely cited publications.</p> +<p>.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Picture3.png" vspace="5" /> </p> +<p>.</p> +<h4>Twenty-seven Parallel MATLABs<a name="46778056-77d3-4a5c-b5fe-b52d97931018"></a></h4><p><a href="https://citeseerx.ist.psu.edu/document?repid=rep1&amp;type=pdf&amp;doi=0b90279927d97c5e4e2ae48a07f5a44f1abe7bac">A 2001 survey by Ron Choy</a> at MIT found 27 different projects that were developing some way to run MATLAB in parallel. All of them involved a MATLAB-based host program calling a fixed library of parallel functions, written in some other language, on the workers. None of the systems were capable of running arbitrary MATLAB programs in parallel. None of them were MathWorks products.</p> +<h4>Distributed Computing Toolbox<a name="3df2759d-d597-4b19-9c05-c9112532cadc"></a></h4><p><a href="https://www.hpcwire.com/2004/11/09/mathworks-unveils-computing-toolbox-for-matlab-and-simulink/">MathWorks introduced</a> the MATLAB Distributed Computing Toolbox in November 2004. We improvised this demo setup at our first Supercomputing Conference, SC2004 in Pittsburg,</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/SC2004.png" vspace="5" /> </p> +<p>.</p> +<h4>Supercomputing Conference<a name="7c5caf72-f3b8-485b-8b12-1c06813855e0"></a></h4><p>A year later, SC2005 was in Seattle and our booth featured four worker machines on a wire shelving unit purchased at a local Home Depot.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/SC2005.png" vspace="5" /> </p> +<p>.</p> +<h4>Bill Gates<a name="9266c227-5e9f-4e31-9d7d-a8d89fc7b2d1"></a></h4><p>Since Seattle was his home town, Bill Gates gave the keynote talk at SC2005. He announced that Microsoft was going into High Performance Computing and used the MathWorks Distributed Computing Toolbox in his demonstration.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Gates.png" vspace="5" /> </p> +<p>.</p> +<h4>Now There is a Parallel MATLAB<a name="85862059-8ccf-4c67-b17b-018619edab9f"></a></h4><p>So, a little more than ten years after the first Cleve's Corner about parallel computing, a second Cleve's Corner in <i>News and Notes</i> was able to reverse the situation.</p> +<p>.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Picture2.png" vspace="5" /> </p> +<!-- + function grabCode_14a73fc939e74d6a9266b6fa2deda9a3() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='14a73fc939e74d6a9266b6fa2deda9a3 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 14a73fc939e74d6a9266b6fa2deda9a3'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +14a73fc939e74d6a9266b6fa2deda9a3 ##### SOURCE BEGIN ##### +%% Twenty Years of Parallel MATLAB +% I have just returned from the MathWorks company meeting +% celebrating our 40th Anniversary. In one of the presentations, +% Jos Martin described how Parallel MATLAB was introduced +% almost twenty years ago. Here are a few slides +% from Jos's talk. + +%% Why There Wasn't Any Parallel MATLAB +% In _MATLAB News and Notes_ for spring 1995, I wrote a one-page +% Cleve's Corner titled "Why there isn't any parallel MATLAB." +% There were three reasons. +% +% * Memory model. MATLAB would generate a matrix on a host machine, +% split it into roughly equally sized submatrices, and distribute +% each submatrix to a node. But it took far longer to distribute +% the data then it did to do the computation. Any matrix that would +% fit into memory on the host was too small to make effective use +% of the parallel computer itself. +% +% * Granularity. The amount of work involved in a single matrix +% computation is too little to be effectively parallelized. +% +% * Business situation. There are too few potential customers +% at this time (1995) to undertake fundamental changes in +% MATLAB's architecture. +% +% This one-page note turned out to be one of my most widely cited +% publications. +% +% . +% +% <<Picture3.png>> +% +% . +% + +%% Twenty-seven Parallel MATLABs +% <https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=0b90279927d97c5e4e2ae48a07f5a44f1abe7bac +% A 2001 survey by Ron Choy> at MIT found 27 different projects +% that were developing some way to run MATLAB in parallel. +% All of them involved a MATLAB-based host program calling a fixed +% library of parallel functions, written in some other language, +% on the workers. +% None of the systems were capable of running arbitrary MATLAB programs +% in parallel. None of them were MathWorks products. +% + +%%% Distributed Computing Toolbox +% <https://www.hpcwire.com/2004/11/09/mathworks-unveils-computing-toolbox-for-matlab-and-simulink/ +% MathWorks introduced> +% the MATLAB Distributed Computing Toolbox in November 2004. +% We improvised this demo setup at our first Supercomputing +% Conference, SC2004 in Pittsburg, +% +% <<SC2004.png>> +% +% . +% + + +%% Supercomputing Conference +% A year later, SC2005 was in Seattle and our booth featured four worker +% machines on a wire shelving unit purchased at a local Home Depot. +% +% <<SC2005.png>> +% +% . +% + +%% Bill Gates +% Since Seattle was his home town, Bill Gates gave the keynote talk at +% SC2005. He announced that Microsoft was going into High Performance +% Computing and used the MathWorks Distributed Computing Toolbox in +% his demonstration. +% +% <<Gates.png>> +% +% . +% + + +%% Now There is a Parallel MATLAB +% So, a little more than ten years after the first Cleve's Corner +% about parallel computing, a second Cleve's Corner in _News and Notes_ +% was able to reverse the situation. +% +% . +% +% <<Picture2.png>> +% + + +##### SOURCE END ##### 14a73fc939e74d6a9266b6fa2deda9a3 +--> + + + + + Chaotic Swinging Sticks + + 2024-02-20T16:24:41-07:00 + https://hpc.social/2024/chaotic-swinging-sticks + <div class="content"><!--introduction--> +<p> +<a href="https://swingingsticks.com">The Swinging Sticks</a> is a kinetic sculpture that exhibits chaotic motion. The device became very popular after it upstaged Tony Stark in <a href="https://www.google.com/search?q=youtube+swinging+sticks+iron+man#fpstate=ive&amp;vld=cid:6a6186e3,vid:sbbjhNLiL3c,st:0">Iron Man 2</a>. My daughter Carolyn gave me a desktop version of Swinging Sticks for Christmas. I immediately set out to simulate it.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sculpture.png" vspace="5" /> </p> + +<!--/introduction--> +<h3>Contents</h3> +<div> +<ul> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#a9143ab6-8f3f-482e-92ee-35cf3f9190de">Chaotic Motion</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#bf97f3ad-e2a5-4421-9892-a8466b18022a">Swinging Sticks</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#3862e132-f69e-4702-85b6-6aeeb1406839">Sculpture</a> +</li> +<li> +<a href="https://feeds.feedburner.com/mathworks/moler#dd331fb2-a5f9-42c6-a538-5b2cb8c9b486">Code</a> +</li> +</ul> +</div> + +<h4>Chaotic Motion<a name="a9143ab6-8f3f-482e-92ee-35cf3f9190de"></a> +</h4> +<p>Chaotic motion appears random but isn't. Once the motion begins, the initial conditions together with Newton's law of motion, F = ma, determine subsequent behavior. There are no random forces. It may be difficult to predict positions, but they are well-determined, nonetheless.</p> + +<p>A classic example of chaotic motion is the double pendulum. One mass at end of a massless string swings about a fixed pivot, and a second mass is attached by a massless string to the first. My simulator of the classis double pendulum is available in Cleve's Lab, <a href="https://blogs.mathworks.com/cleve/2016/10/31/introducing-cleves-laboratory">swinger</a>, and a movie is available here <a href="https://blogs.mathworks.com/cleve/files/swinger.mp4">pendulum movie</a>.</p> + +<h4>Swinging Sticks<a name="bf97f3ad-e2a5-4421-9892-a8466b18022a"></a> +</h4> +<p>The swinging sticks are similar to the double pendulum. The sticks are two rods with uniformly distributed mass, different lengths and off-center pivots. The best way to view the motion is to download <a href="https://blogs.mathworks.com/cleve/files/swinging_sticks.m">this code</a> and run it in your own MATLAB. Otherwise, here in a short slow-motion animated GIF.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sticks_gif.gif" vspace="5" /> </p> + +<p>And, here is a longer <a href="https://blogs.mathworks.com/cleve/files/sticks.mp4">Swinging Sticks Video</a>.</p> + +<p>The motion of the shorter of the two rods is chaotic. Here are the orbits traced by the ends of the short rod.</p> + +<p> +<img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/chaos.png" vspace="5" /> </p> + +<h4>Sculpture<a name="3862e132-f69e-4702-85b6-6aeeb1406839"></a> +</h4> +<p>Swinging Sticks sculptures are available in various sizes and colors. <a href="https://swingingsticks.com">The Swinging Sticks</a>.</p> + +<p>Our mathematical model is of a frictionless perpetual motion machine. The real sculptures have an ingenious electromagnetic controller in the base that is claimed to run for two years on four AA batteries. Mine has been running since Christmas. An excellent <a href="https://www.youtube.com/watch?v=PWg6TG2bkFU">YouTube video</a> by Wayne Schmidt describes the controller.</p> + +<h4>Code<a name="dd331fb2-a5f9-42c6-a538-5b2cb8c9b486"></a> +</h4> +<p> +<a href="https://blogs.mathworks.com/cleve/files/swinging_sticks.m">https://blogs.mathworks.com/cleve/files/swinging_sticks.m</a> +</p> + +<!-- + function grabCode_3007bf720ec7402cb273ace1e6e2d61e() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='3007bf720ec7402cb273ace1e6e2d61e ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 3007bf720ec7402cb273ace1e6e2d61e'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --> +<p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"> +<br /> +<a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript> +</span></a> +<br /> +<br /> + Published with MATLAB&reg; R2024a<br /> +</p> + +</div> + +<!-- +3007bf720ec7402cb273ace1e6e2d61e ##### SOURCE BEGIN ##### +%% Chaotic Swinging Sticks +% <https://swingingsticks.com +% The Swinging Sticks> is a kinetic sculpture that exhibits chaotic motion. +% The device became very popular after it upstaged Tony Stark in +% <https://www.google.com/search?q=youtube+swinging+sticks+iron+man#fpstate=ive&vld=cid:6a6186e3,vid:sbbjhNLiL3c,st:0 +% Iron Man 2>. +% My daughter Carolyn gave me a desktop version of Swinging Sticks +% for Christmas. I immediately set out to simulate it. +% +% <<sculpture.png>> + + +%% Chaotic Motion +% Chaotic motion appears random but isn't. Once the motion begins, the +% initial conditions together with Newton's law of motion, F = ma, +% determine subsequent behavior. There are no random forces. It may be +% difficult to predict positions, but they are well-determined, +% nonetheless. +% +% A classic example of chaotic motion is the double pendulum. +% One mass at end of a massless string swings about a fixed pivot, and +% a second mass is attached by a massless string to the first. +% My simulator of the classis double pendulum is available in Cleve's Lab, +% <https://blogs.mathworks.com/cleve/2016/10/31/introducing-cleves-laboratory +% swinger>, and a movie is available here +% <https://blogs.mathworks.com/cleve/files/swinger.mp4 pendulum movie>. + +%% Swinging Sticks +% The swinging sticks are similar to the double pendulum. +% The sticks are two rods with uniformly distributed mass, +% different lengths and off-center pivots. +% The best way to view the motion is to download +% <https://blogs.mathworks.com/cleve/files/swinging_sticks.m +% this code> and run it in your own MATLAB. +% Otherwise, here in a short slow-motion animated GIF. +% +% <<sticks_gif.gif>> +% +% And, here is a longer +% <https://blogs.mathworks.com/cleve/files/sticks.mp4 +% Swinging Sticks Video>. +% +% The motion of the shorter of the two rods is chaotic. Here are the +% orbits traced by the ends of the short rod. +% +% <<chaos.png>> + + +%% Sculpture +% Swinging Sticks sculptures are available in various sizes and +% colors. <https://swingingsticks.com The Swinging Sticks>. +% +% Our mathematical model is of a frictionless perpetual motion machine. +% The real sculptures have an ingenious electromagnetic controller in the +% base that is claimed to run for two years on four AA batteries. +% Mine has been running since Christmas. +% An excellent <https://www.youtube.com/watch?v=PWg6TG2bkFU YouTube video> +% by Wayne Schmidt describes the controller. + +%% Code +% <https://blogs.mathworks.com/cleve/files/swinging_sticks.m> +##### SOURCE END ##### 3007bf720ec7402cb273ace1e6e2d61e +--> + + + + + Nick Higham (1961-2024) + + 2024-01-25T16:36:37-07:00 + https://hpc.social/2024/nick-higham-1961-2024- + <div class="content"><!--introduction--><p>Nick Higham passed away last Saturday. Nick was a close friend of mine and a great friend of MATLAB. I will leave it to others to describe his research and teaching, his many honors, and his service to our community, especially SIAM. I have just a few, more personal, comments.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/nick.png" vspace="5" /> </p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#30541246-5968-4618-8d07-532c62fe2e2a">NA Digest</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#10c6af44-05e5-4256-a91f-c92e2d648323">Books</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b0e711ae-b3d7-419b-ae0e-150ac24e7133">MATLAB</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#bc2af9b1-f993-4890-87ca-98922e77688e"><tt>gallery</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#81a97ac0-cabd-445f-9a83-2791ffc04ac4"><tt>expm</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6b361048-1e6f-40a5-8b30-1b8f7361e4b8">Goodbye</a></li></ul></div> +<h4>NA Digest<a name="30541246-5968-4618-8d07-532c62fe2e2a"></a></h4><p>Monday's NA Digest led off with this from Nick's wife Francoise and his brother Des.</p> +<pre>Subject: Nick Higham (1961--2024)</pre><pre>With great sadness we report that Nick Higham, Royal Society Research +Professor and Richardson Professor of Applied Mathematics at the +University of Manchester, passed away on January 20, 2024, at the age +of 62 after an 18 month struggle with a form of blood cancer. An +obituary describing Nick's research and leadership contributions will +appear in SIAM News in due course.</pre><pre>Francoise Tisseur and Des Higham</pre><h4>Books<a name="10c6af44-05e5-4256-a91f-c92e2d648323"></a></h4><p>Nick was an excellent writer, and an excellent writer about writing.</p> +<p>Here are the covers of his six books.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/book_covers.png" vspace="5" /> </p> +<p>SIAM published five of these. Two are surveys of Nick's research on the accuracy of numeric algorithms and the computation of matrix functions. Two more, one of them coauthored with Dennis Sherwood, are guides to mathematical exposition.</p> +<p><i>MATLAB Guide</i>, by Des and Nick Higham, is one of my favorite books about MATLAB. It is a succinct introduction for newcomers and a valuable refresher for old-timers. The third edition, published in 2017, includes chapters on object-oriented computing, parallel computing, the Symbolic Math Toolbox and other recent additions. Be sure to check out the <a href="https://nhigham.com/matlab-guide/"><i>MATLAB Guide</i> web site</a>.</p> +<p>The only non-SIAM book pictured above is <a href="https://nhigham.com/the-princeton-companion-to-applied-mathematics/"><i>The Princeton Companion to Applied Mathematics</i></a>. It is over 1,000 pages long and features nearly 200 sections written by an <a href="https://assets.press.princeton.edu/chapters/s1_10592.pdf">international team of experts</a>. Nick is the editor-in-chief and wrote many of the sections himself.</p> +<h4>MATLAB<a name="b0e711ae-b3d7-419b-ae0e-150ac24e7133"></a></h4><p>Here is a <a href="https://nhigham.com">Word Cloud</a> from Nick's home page. It shows the frequency of the tags for his blog and confirms his interest in MATLAB.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/word_cloud.png" vspace="5" /> </p> +<h4><tt>gallery</tt><a name="bc2af9b1-f993-4890-87ca-98922e77688e"></a></h4><p>Anyone interested in numerical linear algebra should also be interested in the <tt>gallery</tt> function, which is based on Nick's work. Enter</p> +<pre class="language-matlab">&gt;&gt; doc gallery +</pre><p>Scroll down to <tt>matrixname</tt> and investigate over 70 different test matrices.</p> +<p>If you find <tt>gallery</tt> irresistible, take a look at <a href="https://nhigham.com/2021/11/09/anymatrix/"><tt>anymatrix</tt></a>, an extensible matrix collection, by Nick and Mantas Mikaitis.</p> +<h4><tt>expm</tt><a name="81a97ac0-cabd-445f-9a83-2791ffc04ac4"></a></h4><p>This is very personal for me. Thirty or forty years ago, Charlie Van Loan and I were regarded as authorities on computing the matrix exponential, $e^{A}$. The function <tt>expm</tt> has been in MATLAB since its very beginning. Around twenty years ago, we ceded the authority title to Nick and Awad Al-Mohy. <a href="https://eprints.maths.manchester.ac.uk/1300/1/alhi09a.pdf">Their code</a> for matrix exponential is now the basis for <tt>expm</tt>.</p> +<h4>Goodbye<a name="6b361048-1e6f-40a5-8b30-1b8f7361e4b8"></a></h4><p>Our business has lost one of its superstars. I have lost a good friend, way too soon. Goodbye Nick.</p> +<!-- + function grabCode_062397ce6659461698190fb5b2757714() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='062397ce6659461698190fb5b2757714 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 062397ce6659461698190fb5b2757714'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +062397ce6659461698190fb5b2757714 ##### SOURCE BEGIN ##### +%% Nick Higham (1961-2024) +% Nick Higham passed away last Saturday. Nick was a close friend of mine +% and a great friend of MATLAB. I will leave it to others to describe his +% research and teaching, his many honors, and his service to our community, +% especially SIAM. I have just a few, more personal, comments. +% +% <<nick.png>> +% + +%% NA Digest +% +% Monday's NA Digest led off with this from +% Nick's wife Francoise and his brother Des. +% +% Subject: Nick Higham (1961REPLACE_WITH_DASH_DASH2024) +% +% With great sadness we report that Nick Higham, Royal Society Research +% Professor and Richardson Professor of Applied Mathematics at the +% University of Manchester, passed away on January 20, 2024, at the age +% of 62 after an 18 month struggle with a form of blood cancer. An +% obituary describing Nick's research and leadership contributions will +% appear in SIAM News in due course. +% +% Francoise Tisseur and Des Higham +% + +%% Books +% Nick was an excellent writer, and an excellent writer about writing. +% +% Here are the covers of his six books. +% +% <<book_covers.png>> +% +% SIAM published five of these. Two are surveys of Nick's research +% on the accuracy of numeric algorithms and +% the computation of matrix functions. +% Two more, one of them coauthored with Dennis Sherwood, are +% guides to mathematical exposition. +% +% _MATLAB Guide_, by Des and Nick Higham, is one of my +% favorite books about MATLAB. +% It is a succinct introduction for newcomers +% and a valuable refresher for old-timers. +% The third edition, published in 2017, includes chapters on +% object-oriented computing, parallel computing, the Symbolic Math +% Toolbox and other recent additions. Be sure to check out the +% <https://nhigham.com/matlab-guide/ _MATLAB Guide_ web site>. +% +% The only non-SIAM book pictured above is +% <https://nhigham.com/the-princeton-companion-to-applied-mathematics/ +% _The Princeton Companion to Applied Mathematics_>. It is over 1,000 pages long and features +% nearly 200 sections written by an +% <https://assets.press.princeton.edu/chapters/s1_10592.pdf +% international team of experts>. +% Nick is the editor-in-chief and wrote many of the sections himself. + +%% MATLAB +% Here is a <https://nhigham.com Word Cloud> from +% Nick's home page. It shows the frequency of the tags for his blog +% and confirms his interest in MATLAB. +% +% <<word_cloud.png>> +% + +%% |gallery| +% Anyone interested in numerical linear algebra should also be interested +% in the |gallery| function, which is based on Nick's work. Enter +% +% >> doc gallery +% +% Scroll down to |matrixname| and investigate over 70 different test +% matrices. +% +% If you find |gallery| irresistible, take a look at +% <https://nhigham.com/2021/11/09/anymatrix/ |anymatrix|>, +% an extensible matrix collection, by Nick and Mantas Mikaitis. + +%% |expm| +% This is very personal for me. +% Thirty or forty years ago, Charlie Van Loan and I were regarded as +% authorities on computing the matrix exponential, $e^{A}$. +% The function |expm| has been in MATLAB since its very beginning. +% Around twenty years ago, we ceded the authority title to Nick and +% Awad Al-Mohy. +% <https://eprints.maths.manchester.ac.uk/1300/1/alhi09a.pdf +% Their code> for matrix exponential is now the basis for |expm|. + +%% Goodbye +% Our business has lost one of its superstars. +% I have lost a good friend, way too soon. +% Goodbye Nick. + +##### SOURCE END ##### 062397ce6659461698190fb5b2757714 +--> + + + + + Exponential Fitting, Separable Least Squares, and Quahogs + + 2024-01-12T16:35:32-07:00 + https://hpc.social/2024/exponential-fitting-separable-least-squares-and-quahogs + <div class="content"><!--introduction--><p>We have been investigating a recent bug report about <tt>fitnlm</tt>, the Statistics and Machine Learning Toolbox function for robust fitting of nonlinear models.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#e8d5954f-4051-48dd-9888-3729cc8d6313">Quahogs</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#1fd80451-cc63-4160-8fcc-b1a1448c7382">Acidification</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#faab8af3-c8dd-48bf-8621-b7fa14ade2fb">Separable Least Squares</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#8afd06c3-7aca-4df8-b636-b7d660a3b6ca">Centering Data</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b8434e53-14a6-412e-97d9-39485ad02c07">Exponential Fitting</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e6bd554c-66fa-4ebc-b3d4-2cd14229bed0">Results</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#dd10ff5a-44a4-4ad7-9ddb-7cb103a943eb">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7e09ac26-71d6-47be-aa47-13da26bc9755">Thanks</a></li></ul></div> +<h4>Quahogs<a name="e8d5954f-4051-48dd-9888-3729cc8d6313"></a></h4><p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/quahogs.png" vspace="5" /> </p> +<p>The bug report comes from Greg Pelletier, an independent research scientist and biogeochemical modeler in Olympia, Washington. Greg has been studying the vulnerability of sensitive marine organisms to increases in ocean acidification. One of the most important of these organisms is <a href="https://en.wikipedia.org/wiki/Hard_clam">Mercenaria mercenaria</a>, the hard clam.</p> +<p>Especially here in New England, hard clams are known by their traditional Native American name, <i>quahog</i>. They have a well-deserved reputation for making excellent clam chowder.</p> +<h4>Acidification<a name="1fd80451-cc63-4160-8fcc-b1a1448c7382"></a></h4><p>We are all aware of increasing levels of carbon dioxide in the earth's atmosphere. We may not be as aware of the effect this increase has on the health of the earth's oceans. According to <a href="https://www.noaa.gov/education/resource-collections/ocean-coasts/ocean-acidification">NOAA</a>, the ocean absorbs about 30% of the atmospheric carbon dioxide.</p> +<p>A definitive and controversial 2009 paper by Justin Ries and colleagues, then at the Woods Hole Oceanographic Institution, is "Marine calcifiers exhibit mixed responses to CO2-induced ocean acidification", <a href="https://doi.org/10.1130/G30210A.1">https://doi.org/10.1130/G30210A.1</a>. The hard clam example in Greg's bug report comes from figure 1K in the Ries et al. paper.</p> +<p>The independent variable in experiments is the ratio of alkalinity of sea water to the concentration of dissolved inorganic carbon. The dependent variable is the calcification rate, which compares how fast the organism builds its shells to how fast the shells are dissolving.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Ries_et_al.png" vspace="5" /> </p> +<h4>Separable Least Squares<a name="faab8af3-c8dd-48bf-8621-b7fa14ade2fb"></a></h4><p>The model chosen by Ries at al. is</p> +<p>$$ y \approx \beta_1 + \beta_2 e^{\lambda t} $$</p> +<p>where $t$ is the ratio of alkalinity to dissolved carbon and $y$ is the calcification rate. The data have only four distinct values of $t$, with several observations of $y$ at each value.</p> +<p>The parameters $\beta_1$, $\beta_2$ and $\lambda$ are determined by least squares curve fit. This is a <i>separable least squares</i> problem. For any given value of $\lambda$, the parameters $\beta_1$ and $\beta_2$ occur linearly and the least squares solution can be obtained by MATLAB's backslash.</p> +<p>Gene Golub and Victor Pereyra described separable least squares in 1973 and proposed solving it by a <i>variable projection algorithm</i>. Since 1973 a number of people, including Pereyra, Linda Kaufman, Fred Krogh, John Bolstadt and David Gay, have contributed to the development of a series of Fortran programs named <tt>varpro</tt>. In 2011, Dianne O'Leary and Burt Rust created a MATLAB version of <tt>varpro</tt>. Their report, <a href="https://www.cs.umd.edu/~oleary/software/varpro/">https://www.cs.umd.edu/~oleary/software/varpro/</a>, is a good background source, as well as documentation for <tt>varpro.m</tt>.</p> +<p>I have a section on separable least squares, and an example, <tt>expfitdemo</tt>, in NCM, <a href="https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/leastsquares.pdf">Numerical Computing with MATLAB</a>. I have modified <tt>expfitdemo</tt> to work on Greg's quahogs problem.</p> +<h4>Centering Data<a name="8afd06c3-7aca-4df8-b636-b7d660a3b6ca"></a></h4><p>It turns out that the problem Greg encountered can be traced to the fact that the data are not centered. The given values of $t$ are all positive. This causes <tt>fitnlm</tt> to print a warning message and attempt to rectify the situation by changing the degrees of freedom from 22 to 23, but this only makes the situation worse. (We should take another look at the portion of <tt>fitnlm</tt> that adjusts the degrees of freedom.)</p> +<p>It is always a good idea in curve fitting to center the data with something like</p> +<pre> t = t - mean(t)</pre><p>The values of $y$ are already pretty well centered. Rescaling $y$ with</p> +<pre> y = 10000*y</pre><p>makes interpretation of results easier.</p> +<h4>Exponential Fitting<a name="b8434e53-14a6-412e-97d9-39485ad02c07"></a></h4><p>With the data centered and scaled, we have three different ways of tackling Greg's problem. All three methods agree on the results they compute.</p> +<div><ul><li><tt>fitnlm</tt>. Treats all parameters as if they were nonlinear. Computes statistical quantities such as R-squared and RMS Error.</li></ul></div> +<div><ul><li><tt>varpro</tt>. Venerable software history. Only one nonlinear parameter for the quahogs problem. Delivers additional statistical quantities in <tt>Regression</tt> structure.</li></ul></div> +<div><ul><li><tt>quahogsfit</tt>. Textbook separable least squares code. Modification for the quahogs problem of <tt>expfitdemo</tt> from NCM. Only one nonlinear parameter. No statistics.</li></ul></div> +<h4>Results<a name="e6bd554c-66fa-4ebc-b3d4-2cd14229bed0"></a></h4><div><ul><li><tt>fitnlm</tt></li></ul></div> +<pre>Nonlinear regression model: + y ~ param1 + param2*exp(param3*xval)</pre><pre>Estimated Coefficients: + Estimate SE tStat pValue + ________ _______ _______ __________</pre><pre> param1 0.69536 0.1657 4.1964 0.00037344 + param2 -0.26482 0.19909 -1.3302 0.19709 + param3 -22.218 8.1494 -2.7263 0.012327</pre><pre>Number of observations: 25, Error degrees of freedom: 22 +Root Mean Squared Error: 0.307 +R-Squared: 0.828, Adjusted R-Squared 0.813 +F-statistic vs. constant model: 53, p-value = 3.86e-09</pre><div><ul><li><tt>varpro</tt></li></ul></div> +<pre>Linear Parameters: + 0.695367 -0.264837 +Nonlinear Parameters: + -22.217495</pre><pre>Norm of weighted residual = 1.438935 +Norm of data vector = 3.545820 +Expected error of observations = 0.306782 +Coefficient of determination = 0.828145</pre><pre>Regression.t_ratio + 4.1962 + -1.3301 + -2.7264</pre><pre>Regression.std_param + 0.1657 + 0.1991 + 8.1490</pre><div><ul><li><tt>quahogsfit</tt></li></ul></div> +<pre>lambda = + -22.2180 +condX = + 4.3882 +beta = + 0.6954 + -0.2648 +normres = + 1.4389</pre><p><tt>quahogsfit</tt> produces this plot, which can be compared with figure 1K from Ries et al, reproduced above.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/quahogsfit.png" vspace="5" /> </p> +<h4>Software<a name="dd10ff5a-44a4-4ad7-9ddb-7cb103a943eb"></a></h4><p>The codes for this post are available here <a href="https://blogs.mathworks.com/cleve/files/quahogs_driver.m">quahogs_driver.m</a> and here <a href="https://blogs.mathworks.com/cleve/files/varpro.m">varpro.m</a>.</p> +<h4>Thanks<a name="7e09ac26-71d6-47be-aa47-13da26bc9755"></a></h4><p>Thanks to Greg Pelletier for the bug report and to Tom Lane for his statistical expertise.</p> +<!-- + function grabCode_0a292e90c48540ba9ef9da619b32e8e7() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='0a292e90c48540ba9ef9da619b32e8e7 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 0a292e90c48540ba9ef9da619b32e8e7'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2024 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +0a292e90c48540ba9ef9da619b32e8e7 ##### SOURCE BEGIN ##### +%% Exponential Fitting, Separable Least Squares, and Quahogs +% We have been investigating a recent bug report about |fitnlm|, +% the Statistics and Machine Learning Toolbox function +% for robust fitting of nonlinear models. + +%% Quahogs +% <<quahogs.png>> +% +% The bug report comes from Greg Pelletier, an independent research +% scientist and biogeochemical modeler in Olympia, Washington. +% Greg has been studying the +% vulnerability of sensitive marine organisms to increases in ocean +% acidification. One of the most important of these organisms is +% <https://en.wikipedia.org/wiki/Hard_clam Mercenaria mercenaria>, +% the hard clam. +% +% Especially here in New England, hard clams are known +% by their traditional Native American name, _quahog_. +% They have a well-deserved reputation for making excellent +% clam chowder. + +%% Acidification +% We are all aware of increasing levels of carbon dioxide in the earth's +% atmosphere. We may not be as aware of the effect this increase has +% on the health of the earth's oceans. According to +% <https://www.noaa.gov/education/resource-collections/ocean-coasts/ocean-acidification +% NOAA>, the ocean absorbs about 30% of the atmospheric carbon dioxide. +% +% A definitive and controversial 2009 paper +% by Justin Ries and colleagues, +% then at the Woods Hole Oceanographic Institution, is +% "Marine calcifiers exhibit mixed responses to CO2-induced ocean +% acidification", <https://doi.org/10.1130/G30210A.1>. +% The hard clam example in Greg's bug report comes from +% figure 1K in the Ries et al. paper. +% +% The independent variable in experiments is the +% ratio of alkalinity of sea water +% to the concentration of dissolved inorganic carbon. +% The dependent variable is the calcification rate, which compares +% how fast the organism builds its shells +% to how fast the shells are dissolving. +% +% <<Ries_et_al.png>> +% +%% Separable Least Squares +% The model chosen by Ries at al. is +% +% $$ y \approx \beta_1 + \beta_2 e^{\lambda t} $$ +% +% where $t$ is the ratio of alkalinity to dissolved carbon and $y$ is the +% calcification rate. The data have only four distinct values of $t$, with +% several observations of $y$ at each value. +% +% The parameters $\beta_1$, $\beta_2$ and $\lambda$ are determined by +% least squares curve fit. This is a _separable least squares_ problem. +% For any given value of $\lambda$, the parameters $\beta_1$ and $\beta_2$ +% occur linearly and the least squares solution can be obtained by +% MATLAB's backslash. +% +% Gene Golub and Victor Pereyra described separable least squares in 1973 +% and proposed solving it by a _variable projection algorithm_. +% Since 1973 a number of people, including Pereyra, Linda Kaufman, +% Fred Krogh, John Bolstadt and David Gay, have contributed to the +% development of a series of Fortran programs named |varpro|. +% In 2011, Dianne O'Leary and Burt Rust created a MATLAB version of +% |varpro|. Their report, +% <https://www.cs.umd.edu/~oleary/software/varpro></https://www.cs.umd.edu/~oleary/software/varpro>, is a good background +% source, as well as documentation for |varpro.m|. +% +% I have a section on separable least squares, and an example, +% |expfitdemo|, in NCM, +% <https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/leastsquares.pdf +% Numerical Computing with MATLAB>. I have modified |expfitdemo| to +% work on Greg's quahogs problem. + +%% Centering Data +% It turns out that the problem Greg encountered can be traced to the +% fact that the data are not centered. The given values of $t$ are all +% positive. This causes |fitnlm| to print a warning message and attempt +% to rectify the situation by changing the degrees of freedom +% from 22 to 23, but this only makes the situation worse. +% (We should take another look at the portion of |fitnlm| that adjusts +% the degrees of freedom.) +% +% It is always a good idea in curve fitting to center the +% data with something like +% +% t = t - mean(t) +% +% The values of $y$ are already pretty well centered. +% Rescaling $y$ with +% +% y = 10000*y +% +% makes interpretation of results easier. + +%% Exponential Fitting +% With the data centered and scaled, we have three different +% ways of tackling Greg's problem. All three methods +% agree on the results they compute. +% +% * |fitnlm|. Treats all parameters as if they were nonlinear. +% Computes statistical quantities such as R-squared and +% RMS Error. +% +% * |varpro|. Venerable software history. +% Only one nonlinear parameter for the quahogs problem. +% Delivers additional statistical quantities in |Regression| structure. +% +% * |quahogsfit|. Textbook separable least squares code. +% Modification for the quahogs problem of |expfitdemo| from NCM. +% Only one nonlinear parameter. No statistics. +% + +%% Results +% * |fitnlm| +% +% Nonlinear regression model: +% y ~ param1 + param2*exp(param3*xval) +% +% Estimated Coefficients: +% Estimate SE tStat pValue +% ________ _______ _______ __________ +% +% param1 0.69536 0.1657 4.1964 0.00037344 +% param2 -0.26482 0.19909 -1.3302 0.19709 +% param3 -22.218 8.1494 -2.7263 0.012327 +% +% +% Number of observations: 25, Error degrees of freedom: 22 +% Root Mean Squared Error: 0.307 +% R-Squared: 0.828, Adjusted R-Squared 0.813 +% F-statistic vs. constant model: 53, p-value = 3.86e-09 +% +% * |varpro| +% +% Linear Parameters: +% 0.695367 -0.264837 +% Nonlinear Parameters: +% -22.217495 +% +% Norm of weighted residual = 1.438935 +% Norm of data vector = 3.545820 +% Expected error of observations = 0.306782 +% Coefficient of determination = 0.828145 +% +% Regression.t_ratio +% 4.1962 +% -1.3301 +% -2.7264 +% +% Regression.std_param +% 0.1657 +% 0.1991 +% 8.1490 +% +% * |quahogsfit| +% +% lambda = +% -22.2180 +% condX = +% 4.3882 +% beta = +% 0.6954 +% -0.2648 +% normres = +% 1.4389 +% +% |quahogsfit| produces this plot, which can be compared with +% figure 1K from Ries et al, reproduced above. +% +% <<quahogsfit.png>> +% + +%% Software +% The codes for this post are available here +% <https://blogs.mathworks.com/cleve/files/quahogs_driver.m quahogs_driver.m> +% and here +% <https://blogs.mathworks.com/cleve/files/varpro.m varpro.m>. + +%% Thanks +% Thanks to Greg Pelletier for the bug report and +% to Tom Lane for his statistical expertise. + +##### SOURCE END ##### 0a292e90c48540ba9ef9da619b32e8e7 +--> + + + + + Season’s Greetings + + 2023-12-20T14:13:20-07:00 + https://hpc.social/2023/season-s-greetings + <div class="content"><h3>Season's Greeings</h3><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/xmas.gif" vspace="5" /> </p> +<!-- + function grabCode_79511e45062b40d2899d215fa871042a() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='79511e45062b40d2899d215fa871042a ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 79511e45062b40d2899d215fa871042a'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +79511e45062b40d2899d215fa871042a ##### SOURCE BEGIN ##### +%% Season's Greeings +% +% <<xmas.gif>> +% +##### SOURCE END ##### 79511e45062b40d2899d215fa871042a +--> + + + + + Blog Post Number 300, Vibrating Logo + + 2023-12-13T18:23:26-07:00 + https://hpc.social/2023/blog-post-number-300-vibrating-logo + <div class="content"><!--introduction--><p>This is post number 300 of <i>Cleve's Corner</i> blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#ccc2ebb6-1c1e-46a0-b19b-455cc4058635">Vibrating Logo</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#71788969-1610-4111-83ec-1f91f974b786">Code</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#407dbfb8-a326-471c-ac13-3f5c58b66121">vibrating_logo</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ea75a53d-1aaa-4128-b51b-46fd84380580">vibrating_logo_frame</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#355fe3db-750d-4a82-b9d9-7de0df29ee65">first frame</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4329c90d-ee62-412f-aa5d-018a818cca4d">init_fig</a></li></ul></div> +<h4>Vibrating Logo<a name="ccc2ebb6-1c1e-46a0-b19b-455cc4058635"></a></h4><p>For my 300-th post, I want to take another look at our MathWorks logo. Here is a modified version of one of the animations that I entered in the recent <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries">MATLAB Flipbook Mini Hack</a>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/vibrating_logo.gif" vspace="5" /> </p> +<pre> Vibrating Logo</pre><p>The MathWorks company logo is the solution to a partial differential equation that describes how a disturbance travels through matter. I discussed the logo in a five-part blog post in 2014. Here are links to three of those posts.</p> +<p><a href="https://blogs.mathworks.com/cleve/2014/10/13/mathworks-logo-part-one-why-is-it-l-shaped/">Why is it L-shaped?</a>.</p> +<p><a href="https://blogs.mathworks.com/cleve/2014/11/17/mathworks-logo-part-four-method-of-particular-solutions-generates-the-logo/">The method of particular solutions</a>.</p> +<p><a href="https://blogs.mathworks.com/cleve/2014/12/01/mathworks-logo-part-five-evolution-of-the-logo/">How the view has evolved.</a>.</p> +<p>One of my most-liked blog posts is by ten-year old <a href="https://blogs.mathworks.com/cleve/2021/12/23/a-new-view-of-our-logo/">Eden Rajapakse</a>.</p> +<h4>Code<a name="71788969-1610-4111-83ec-1f91f974b786"></a></h4><p>This code is available at <a href="https://blogs.mathworks.com/cleve/files/vibrating_logo.m">vibrating_logo</a>.</p> +<h4>vibrating_logo<a name="407dbfb8-a326-471c-ac13-3f5c58b66121"></a></h4><pre class="codeinput"><span class="keyword">function</span> vibrating_logo +</pre><pre class="codeinput"> <span class="comment">% MathWorks logo, vibrating L-shaped membrane.</span> + <span class="comment">% See Cleve's Corner, Dec. 13, 2023.</span> + <span class="comment">% https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo.</span> + + stop = init_fig; + fps = 6; + f = 0; + <span class="comment">% Loop until stop is toggled.</span> + <span class="keyword">while</span> true + f = f + 1; + <span class="keyword">if</span> stop.Value + <span class="keyword">return</span> + <span class="keyword">end</span> + vibrating_logo_frame(f) + pause(1/fps) + <span class="keyword">end</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/vibes_blog_01.png" vspace="5" /> <h4>vibrating_logo_frame<a name="ea75a53d-1aaa-4128-b51b-46fd84380580"></a></h4><pre class="codeinput"> <span class="keyword">function</span> vibrating_logo_frame(f) + <span class="comment">%</span> + <span class="comment">% One frame of animation.</span> + <span class="keyword">if</span> f == 1 + first_frame + <span class="keyword">end</span> + fud = get(gcf,<span class="string">'UserData'</span>); + [mu,L,s] = deal(fud{:}); + t = (f-1)/fps; + Z = cos(mu(1)*t)*L{1} + sin(mu(2)*t)*L{2} + sin(mu(3)*t)*L{3} + <span class="keyword">...</span> + sin(mu(4)*t)*L{4} + sin(mu(5)*t)*L{5} + sin(mu(6)*t)*L{6}; + s.ZData = Z; + <span class="keyword">end</span> +</pre><h4>first frame<a name="355fe3db-750d-4a82-b9d9-7de0df29ee65"></a></h4><pre class="codeinput"> <span class="keyword">function</span> first_frame + cla + axis <span class="string">off</span> + + <span class="comment">% First six eigenvalues.</span> + mu = sqrt([9.6397238445, 15.19725192, 2*pi^2, <span class="keyword">...</span> + 29.5214811, 31.9126360, 41.4745099]); + + <span class="comment">% First six eigenfunctions.</span> + L{1} = 30*membrane(1,25); + L{2} = 2*membrane(2,25); + L{3} = -2*membrane(3,25); + L{4} = 5*membrane(4,25); + L{5} = -3*membrane(5,25); + L{6} = 4*membrane(6,25); + + <span class="comment">% Surf plot with custom lighting.</span> + axes(<span class="string">'CameraPosition'</span>, [-193.4013 -265.1546 220.4819],<span class="keyword">...</span> + <span class="string">'CameraTarget'</span>,[26 26 10], <span class="keyword">...</span> + <span class="string">'CameraUpVector'</span>,[0 0 1], <span class="keyword">...</span> + <span class="string">'CameraViewAngle'</span>,9.5, <span class="keyword">...</span> + <span class="string">'DataAspectRatio'</span>, [1 1 .9],<span class="keyword">...</span> + <span class="string">'Visible'</span>,<span class="string">'off'</span>, <span class="keyword">...</span> + <span class="string">'XLim'</span>,[1 51], <span class="keyword">...</span> + <span class="string">'YLim'</span>,[1 51], <span class="keyword">...</span> + <span class="string">'ZLim'</span>,[-13 40]); + s = surface(zeros(size(L{1})), <span class="keyword">...</span> + <span class="string">'EdgeColor'</span>,<span class="string">'none'</span>, <span class="keyword">...</span> + <span class="string">'FaceColor'</span>,[0.9 0.2 0.2], <span class="keyword">...</span> + <span class="string">'FaceLighting'</span>,<span class="string">'phong'</span>, <span class="keyword">...</span> + <span class="string">'AmbientStrength'</span>,0.3, <span class="keyword">...</span> + <span class="string">'DiffuseStrength'</span>,0.6, <span class="keyword">...</span> + <span class="string">'Clipping'</span>,<span class="string">'off'</span>,<span class="keyword">...</span> + <span class="string">'BackFaceLighting'</span>,<span class="string">'lit'</span>, <span class="keyword">...</span> + <span class="string">'SpecularStrength'</span>,1.0, <span class="keyword">...</span> + <span class="string">'SpecularColorReflectance'</span>,1, <span class="keyword">...</span> + <span class="string">'SpecularExponent'</span>,7); + light(<span class="string">'Position'</span>,[40 100 20], <span class="keyword">...</span> + <span class="string">'Style'</span>,<span class="string">'local'</span>, <span class="keyword">...</span> + <span class="string">'Color'</span>,[0 0.8 0.8]); + light(<span class="string">'Position'</span>,[.5 -1 .4], <span class="keyword">...</span> + <span class="string">'Color'</span>,[0.8 0.8 0]); + set(gcf,<span class="string">'UserData'</span>,{mu,L,s}) + <span class="keyword">end</span> +</pre><h4>init_fig<a name="4329c90d-ee62-412f-aa5d-018a818cca4d"></a></h4><pre class="codeinput"> <span class="keyword">function</span> stop = init_fig + <span class="comment">% Initialize figure.</span> + fig = gcf; + fig.Color = <span class="string">'k'</span>; + fig.MenuBar = <span class="string">'none'</span>; + fig.ToolBar = <span class="string">'none'</span>; + fig.NumberTitle = <span class="string">'off'</span>; + fig.Clipping = <span class="string">'off'</span>; + stop = uicontrol; + stop.Style = <span class="string">'togglebutton'</span>; + stop.String = <span class="string">'X'</span>; + stop.FontSize = 12; + stop.FontWeight = <span class="string">'bold'</span>; + stop.Units = <span class="string">'normalized'</span>; + stop.Position = [.92 .92 .06 .06]; + cla + shg + <span class="keyword">end</span> +</pre><pre class="codeinput"><span class="keyword">end</span> +</pre><!-- + function grabCode_cfdea481005c456d8c4a25238f900460() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='cfdea481005c456d8c4a25238f900460 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' cfdea481005c456d8c4a25238f900460'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +cfdea481005c456d8c4a25238f900460 ##### SOURCE BEGIN ##### +%% Blog Post Number 300, Vibrating Logo +% This is post number 300 of _Cleve's Corner_ blog. +% The first post was on June 6, 2012, which is 600 weeks ago. +% So, I have averaged one post every two weeks for over a decade. +% The posts were more frequent in the early days and are less frequent +% today. + +%% Vibrating Logo +% For my 300-th post, I want to take another look at our MathWorks logo. +% Here is a modified version of one of the animations that I entered in +% the recent +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries +% MATLAB Flipbook Mini Hack>. +% +% <<vibrating_logo.gif>> +% +% Vibrating Logo +% + +%% +% The MathWorks company logo is the solution to a +% partial differential equation that describes how a disturbance travels +% through matter. I discussed the logo in a five-part blog post in 2014. +% Here are links to three of those posts. +% +% <https://blogs.mathworks.com/cleve/2014/10/13/mathworks-logo-part-one-why-is-it-l-shaped/ +% Why is it L-shaped?>. +% +% <https://blogs.mathworks.com/cleve/2014/11/17/mathworks-logo-part-four-method-of-particular-solutions-generates-the-logo/ +% The method of particular solutions>. +% +% <https://blogs.mathworks.com/cleve/2014/12/01/mathworks-logo-part-five-evolution-of-the-logo/ +% How the view has evolved.>. +% +% One of my most-liked blog posts is by ten-year old +% <https://blogs.mathworks.com/cleve/2021/12/23/a-new-view-of-our-logo/ +% Eden Rajapakse>. + +%% Code +% This code is available at +% <https://blogs.mathworks.com/cleve/files/vibrating_logo.m +% vibrating_logo>. + +%% vibrating_logo + +function vibrating_logo + % MathWorks logo, vibrating L-shaped membrane. + % See Cleve's Corner, Dec. 13, 2023. + % https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo. + + stop = init_fig; + fps = 6; + f = 0; + % Loop until stop is toggled. + while true + f = f + 1; + if stop.Value + return + end + vibrating_logo_frame(f) + pause(1/fps) + end + +%% vibrating_logo_frame + + function vibrating_logo_frame(f) + % + % One frame of animation. + if f == 1 + first_frame + end + fud = get(gcf,'UserData'); + [mu,L,s] = deal(fud{:}); + t = (f-1)/fps; + Z = cos(mu(1)*t)*L{1} + sin(mu(2)*t)*L{2} + sin(mu(3)*t)*L{3} + ... + sin(mu(4)*t)*L{4} + sin(mu(5)*t)*L{5} + sin(mu(6)*t)*L{6}; + s.ZData = Z; + end + +%% first frame + + function first_frame + cla + axis off + + % First six eigenvalues. + mu = sqrt([9.6397238445, 15.19725192, 2*pi^2, ... + 29.5214811, 31.9126360, 41.4745099]); + + % First six eigenfunctions. + L{1} = 30*membrane(1,25); + L{2} = 2*membrane(2,25); + L{3} = -2*membrane(3,25); + L{4} = 5*membrane(4,25); + L{5} = -3*membrane(5,25); + L{6} = 4*membrane(6,25); + + % Surf plot with custom lighting. + axes('CameraPosition', [-193.4013 -265.1546 220.4819],... + 'CameraTarget',[26 26 10], ... + 'CameraUpVector',[0 0 1], ... + 'CameraViewAngle',9.5, ... + 'DataAspectRatio', [1 1 .9],... + 'Visible','off', ... + 'XLim',[1 51], ... + 'YLim',[1 51], ... + 'ZLim',[-13 40]); + s = surface(zeros(size(L{1})), ... + 'EdgeColor','none', ... + 'FaceColor',[0.9 0.2 0.2], ... + 'FaceLighting','phong', ... + 'AmbientStrength',0.3, ... + 'DiffuseStrength',0.6, ... + 'Clipping','off',... + 'BackFaceLighting','lit', ... + 'SpecularStrength',1.0, ... + 'SpecularColorReflectance',1, ... + 'SpecularExponent',7); + light('Position',[40 100 20], ... + 'Style','local', ... + 'Color',[0 0.8 0.8]); + light('Position',[.5 -1 .4], ... + 'Color',[0.8 0.8 0]); + set(gcf,'UserData',{mu,L,s}) + end + +%% init_fig + + function stop = init_fig + % Initialize figure. + fig = gcf; + fig.Color = 'k'; + fig.MenuBar = 'none'; + fig.ToolBar = 'none'; + fig.NumberTitle = 'off'; + fig.Clipping = 'off'; + stop = uicontrol; + stop.Style = 'togglebutton'; + stop.String = 'X'; + stop.FontSize = 12; + stop.FontWeight = 'bold'; + stop.Units = 'normalized'; + stop.Position = [.92 .92 .06 .06]; + cla + shg + end +end +##### SOURCE END ##### cfdea481005c456d8c4a25238f900460 +--> + + + + + Bouncing Bucky Ball at Flipbook Mini Hack + + 2023-11-16T23:01:49-07:00 + https://hpc.social/2023/bouncing-bucky-ball-at-flipbook-mini-hack + <div class="content"><!--introduction--><p>The 2023 <a href="https://www.mathworks.com/matlabcentral/contests/2023-matlab-mini-hack.html">MATLAB Central Flipbook Mini Hack</a> contest runs from November 6 until December 3. Over 200 entries have been submitted in the first two weeks.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#b522fbe2-47f9-4136-a6f2-1892f2cf0495">New Rules</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#bfa6df5c-89fc-46be-b4f7-64f6a1fa7c33">Gallery</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3d0c7d73-a1e6-40a1-94ca-11bc9e0705fd">Personal Favorites</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#56cf252d-30c5-4192-b1a9-ab40e17f29c7">Bouncing Bucky Ball</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#046a72f3-6f55-49b9-8420-0a1cd4c8e5d0">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#8ea0a405-6fd5-4778-966c-4ff090808b5f">Thanks</a></li></ul></div> +<h4>New Rules<a name="b522fbe2-47f9-4136-a6f2-1892f2cf0495"></a></h4><p>This year's mini hack features short animations. The contest software runs the program you submit to make an animated GIF file with exactly 48 frames and an inner-frame delay time of 1/24 second. So, your animation will run for two seconds, then continuously repeat. If you want periodic motion, you need to be back where you started by frame 48.</p> +<p>In previous mini hacks, programs had to be Twitter length -- at most 255 characters long. Now, the new limit is 2,000 characters. Comments and formatting blanks are not counted. Remixes and reuse of other submissions is encouraged.</p> +<p>Participants and other viewers vote on the submissions. There are prizes like Amazon gift cards and T-shirts. MathWorkers may participate, but not win prizes.</p> +<h4>Gallery<a name="bfa6df5c-89fc-46be-b4f7-64f6a1fa7c33"></a></h4><p>Take a look at the <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries">Gallery</a>.</p> +<h4>Personal Favorites<a name="3d0c7d73-a1e6-40a1-94ca-11bc9e0705fd"></a></h4><p>I find the results fascinating. There are so many different creative styles, artistic talents and programming techniques. Here are a few of my personal favorites.</p> +<p><b>Jenny Bosten</b></p> +<p><a href="https://blogs.mathworks.com/pick/2021/10/25/jenny-bostens-art-in-the-matlab-mini-hack">Jenny Bosten</a> is a familiar name on MATLAB Central. She is a Senior Lecturer in Psychology at the University of Sussex, where she is a "visual neuroscientist specialising in colour vision." Her code for <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13760">Time lapse of Lake view to the West</a> shows she is also a wizard of coordinate systems and color maps.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/bosten.gif" vspace="5" /> </p> +<p><b>&#38534;&#20809; &#20013;&#26449;</b></p> +<p>I don't know anything about this person. All I see is this name, &#38534;&#20809; &#20013;&#26449;, and this ingenious code for <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13092">Fireworks</a>.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/fireworks.gif" vspace="5" /> </p> +<p><b>Ned Gulley</b></p> +<p>Ned is the long-time MathWorker who is the architect of MATLAB Central, and who, this time, is also a prolific participant. One of his more mathematical animations is <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13840">Orbiting Roots</a>.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/gulley.gif" vspace="5" /> </p> +<p><b>Eric Ludham</b>'</p> +<p>Eric is head of the MathWorks development team for Graphics and Charting. Contributions like this <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13857">Blooming Rose</a> demonstrate his artistic design talent.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/ludham.gif" vspace="5" /> </p> +<h4>Bouncing Bucky Ball<a name="56cf252d-30c5-4192-b1a9-ab40e17f29c7"></a></h4><p>My own contributions are not nearly as attractive as these.</p> +<p>The 2,000 character limit is a good idea. It forced me to look critically at some old code and rewrite it to be simpler and clearer.</p> +<p>This program for a <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/14102">Bouncing Bucky Ball</a> uses the <tt>hgtransform</tt> object to good effect. I also think it has a nice solution to the problem facing everybody of how to retain state from one frame to the next.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/bouncing_bucky.gif" vspace="5" /> </p> +<h4>Software<a name="046a72f3-6f55-49b9-8420-0a1cd4c8e5d0"></a></h4><p>Here is a link to a slightly more complicated version with one <tt>togglebutton</tt> that provides a random restart capability. <a href="https://blogs.mathworks.com/cleve/files/Bouncing_Bucky.m">Bouncing_Bucky.m</a></p> +<h4>Thanks<a name="8ea0a405-6fd5-4778-966c-4ff090808b5f"></a></h4><p>Chen Lin, David Wey and Vinay Ramesh are running the Mini Hack this year,</p> +<!-- + function grabCode_65f76a589bbd4188bfa9698c4a4437a7() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='65f76a589bbd4188bfa9698c4a4437a7 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 65f76a589bbd4188bfa9698c4a4437a7'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +65f76a589bbd4188bfa9698c4a4437a7 ##### SOURCE BEGIN ##### +%% Bouncing Bucky Ball at Flipbook Mini Hack +% The 2023 +% <https://www.mathworks.com/matlabcentral/contests/2023-matlab-mini-hack.html +% MATLAB Central Flipbook Mini Hack> contest runs +% from November 6 until December 3. Over 200 entries have been submitted +% in the first two weeks. +% + +%% New Rules +% This year's mini hack features short animations. +% The contest software runs the program you submit to make an animated +% GIF file with exactly 48 frames and an inner-frame delay time +% of 1/24 second. So, your animation will run for two seconds, then +% continuously repeat. If you want periodic motion, you need +% to be back where you started by frame 48. +% +% In previous mini hacks, programs had to be Twitter length REPLACE_WITH_DASH_DASH +% at most 255 characters long. +% Now, the new limit is 2,000 characters. Comments and formatting +% blanks are not counted. Remixes and reuse of other submissions is +% encouraged. +% +% Participants and other viewers vote on the submissions. There are +% prizes like Amazon gift cards and T-shirts. MathWorkers may +% participate, but not win prizes. + +%% Gallery +% Take a look at the +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries +% Gallery>. + +%% Personal Favorites +% I find the results fascinating. There are so many different creative +% styles, artistic talents and programming techniques. +% Here are a few of my personal favorites. +% +% *Jenny Bosten* +% +% <https://blogs.mathworks.com/pick/2021/10/25/jenny-bostens-art-in-the-matlab-mini-hack +% Jenny Bosten> is a familiar name on MATLAB Central. +% She is a Senior Lecturer in Psychology at the University of Sussex, +% where she is a "visual neuroscientist specialising in colour vision." +% Her code for +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13760 +% Time lapse of Lake view to the West> +% shows she is also a wizard of coordinate systems and color maps. +% +% <<bosten.gif>> +% +% +% *隆光 中村* +% +% I don't know anything about this person. All I see is this +% name, 隆光 中村, and this ingenious code for +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13092 +% Fireworks>. +% +% <<fireworks.gif>> +% +% +% *Ned Gulley* +% +% Ned is the long-time MathWorker who is the architect of MATLAB Central, +% and who, this time, is also a prolific participant. One of his more +% mathematical animations is +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13840 +% Orbiting Roots>. +% +% <<gulley.gif>> +% +% +% *Eric Ludham*' +% +% Eric is head of the MathWorks development team for Graphics and Charting. +% Contributions like this +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/13857 +% Blooming Rose> demonstrate his artistic design talent. +% +% <<ludham.gif>> +% +% +%% Bouncing Bucky Ball +% My own contributions are not nearly as attractive as these. +% +% The 2,000 character limit is a good idea. It forced me to look +% critically at some old code and rewrite it to be simpler and clearer. +% +% This program for a +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/6/entries/14102 +% Bouncing Bucky Ball> uses the |hgtransform| object to good effect. +% I also think it has a nice solution to the problem facing everybody of +% how to retain state from one frame to the next. +% +% <<bouncing_bucky.gif>> +% + +%% Software +% Here is a link to a slightly more complicated version with one +% |togglebutton| that provides a random restart capability. +% <https://blogs.mathworks.com/cleve/files/Bouncing_Bucky.m +% Bouncing_Bucky.m> + +%% Thanks +% Chen Lin, David Wey and Vinay Ramesh are running the Mini Hack this year, + +##### SOURCE END ##### 65f76a589bbd4188bfa9698c4a4437a7 +--> + + + + + Exploring Matrices Exercises + + 2023-09-25T17:57:28-06:00 + https://hpc.social/2023/exploring-matrices-exercises + <div class="content"><!--introduction--><p>Try your hand at a few exercises involving <a href="https://blogs.mathworks.com/cleve/2023/09/11/exploring-matrices">Exploring Matrices</a>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#39c51606-0f1d-4f63-a836-a5b7b53bd13b">Qube Simplified</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7c52cde6-70d3-4ad5-b1a1-37c5ce6e87cc">Exploring Matrices Exercises</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#72d1baf3-32a5-43fd-9ee9-d78b0756d365">Matrix Multiplication</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#5866120b-8ad5-44c6-91d4-7599fdd930ad">Rotations and Scaling</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9ee4efdc-6cce-4067-b642-b70c3c75d2c6">Computer Graphics</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#08826629-b0f9-4a97-a3e3-655f52742c85">Matrices and Cubes</a></li></ul></div> +<h4>Qube Simplified<a name="39c51606-0f1d-4f63-a836-a5b7b53bd13b"></a></h4><p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Qube_simplified.png" vspace="5" /> </p> +<p>I have simplified the <tt>Qube</tt> app by removing these four buttons.</p> +<div><ul><li><tt>solve</tt>. The &lt;== key now controls the unscrambling operation.</li></ul></div> +<div><ul><li><tt>scramble</tt>. The ==&gt; key now does six random rotations.</li></ul></div> +<div><ul><li><tt>order</tt>. I never found a satisfactory reference for the group theory of Rubik's cube.</li></ul></div> +<div><ul><li><tt>score</tt>. I never found a use for the nuclear norm.</li></ul></div> +<p>Code for <tt>Qube</tt> dated 9/24/2023 is included in the <a href="https://blogs.mathworks.com/cleve/files/Apps_mzip.m">Apps mzip archive</a>.</p> +<h4>Exploring Matrices Exercises<a name="7c52cde6-70d3-4ad5-b1a1-37c5ce6e87cc"></a></h4><p>Here are a few exercises for <a href="https://blogs.mathworks.com/cleve/2023/09/11/exploring-matrices">Exploring Matrices</a>. The answers are available at <a href="https://blogs.mathworks.com/cleve/files/ExMatAnswers.pdf">ExMatAnswers</a>.</p> +<h4>Matrix Multiplication<a name="72d1baf3-32a5-43fd-9ee9-d78b0756d365"></a></h4><p><b>1.</b> Compute by rows, and by columns.</p> +<p>$$ + \left( + \begin{array}{rrr} + 8 &amp; 1 &amp; 6 \\ + 3 &amp; 5 &amp; 7 \\ + 4 &amp; 9 &amp; 2 + \end{array} + \right) + \left( + \begin{array}{r} + 1 \\ + 1 \\ + 1 + \end{array} + \right) +$$</p> +<p><b>2.</b> Solve for $z$ using inner products of rows, and using linear combinations of columns.</p> +<p>$$ + \left( + \begin{array}{rrr} + 1 &amp; 2 &amp; 3 \\ + 4 &amp; 5 &amp; 6 \\ + 7 &amp; 8 &amp; 9 + \end{array} + \right) + \left( + \begin{array}{r} + 1 \\ + z \\ + 1 + \end{array} + \right) + \ = \ + \left( + \begin{array}{r} + 0 \\ + 0 \\ + 0 + \end{array} + \right) +$$</p> +<p><b>3.</b> What do the <tt>m</tt>, <tt>n</tt> and <tt>p</tt> buttons on the <tt>Multiply</tt> app do? What are the other buttons and what do they do?</p> +<p><b>4.</b> If <i>A</i> is n-by-n and <i>x</i> is n-by-1, how many multiplications are required to compute <i>A x</i> ?</p> +<p><b>5.</b> If <i>A</i> is m-by-n and <i>B</i> is n-by-p, how many multiplications are required to compute <i>A B</i> ?</p> +<h4>Rotations and Scaling<a name="5866120b-8ad5-44c6-91d4-7599fdd930ad"></a></h4><p><b>1.</b> What is <i>R</i>(30&ordm;)?</p> +<p>$$ +R(\theta) \ = \ +\left( + \begin{array}{rr} + \cos{\theta} &amp; \sin{\theta} \\ + -\sin{\theta} &amp; \cos{\theta} + \end{array} + \right) +$$</p> +<p><b>2.</b> Explain <a href="https://xkcd.com/184">https://xkcd.com/184</a>.</p> +<p><b>3.</b> What is the value of $\theta$ ?</p> +<p>$$ +R(\theta) \ = \ +\left( + \begin{array}{rr} + 0.8 &amp; 0.6 \\ + -0.6 &amp; 0.8 + \end{array} + \right) +$$</p> +<p><b>4.</b> What is the value of $\theta$ ?</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/theta_exer.png" vspace="5" /> </p> +<p><b>5.</b> Edit a copy of <tt>Rotate.m</tt> and replace the house with a hand. You can use <a href="https://mathworks-my.sharepoint.com/:u:/p/moler/EVREwZQo4ZBLkDggPTky6o4BNIfckvaLQoCDdX4ICjch9A?e=dGA2Y4">my hand</a> or your own hand; see exercise 3.4 in <a href="https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/interp.pdf">Numerical Computing with MATLAB</a> .</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/hand_exer.png" vspace="5" /> </p> +<h4>Computer Graphics<a name="9ee4efdc-6cce-4067-b642-b70c3c75d2c6"></a></h4><p><b>1.</b> Show how homogeneous coordinates and matrix-vector multiplication by <tt>Tx</tt>, <tt>Ty</tt> or <tt>Tz</tt> produce translation.</p> +<p><b>2.</b> What is the range of the rotations used by the pitch, roll, and yaw buttons on the <tt>Grafix</tt> app?</p> +<p><b>3.</b> What color in the beacon on top of the plane? How would you change the beacon's color?</p> +<p><b>4,</b> What is the function of the resolution and offset sliders for the teapot?</p> +<p><b>5,</b> How many times does the bucky ball bounce off the sides of the plot window?</p> +<h4>Matrices and Cubes<a name="08826629-b0f9-4a97-a3e3-655f52742c85"></a></h4><p><b>1.</b> What is the color of central cubelet in the Color Cube?</p> +<p><b>2.</b> What do the "&lt;=" , "&lt;==" , "=&gt;" and "==&gt;" buttons on <tt>Qube</tt> do?</p> +<p><b>3.</b> What is "God's Number" for a 3-by-3-by-3 Rubik's Cube? What are <tt>Q20</tt> and <tt>Q26</tt>? See <a href="https://blogs.mathworks.com/cleve/2022/09/05/rubiks-cube-superflips-and-gods-number">Cleve's Corner 2022/09/05</a>.</p> +<p><b>4.</b> Can you restore the following scrambled cubes with fewer moves than <tt>&lt;==</tt>, the unscramble key? Use the quarter-turn metric and reset the cube with <tt>start</tt> or by clicking on <tt>stack</tt> and <tt>Q0</tt>. You might also want to set <tt>speed</tt> to 30 or 45,</p> +<div><ul><li><tt>LRUDFB</tt></li></ul></div> +<div><ul><li><tt>LRL'R'</tt></li></ul></div> +<div><ul><li><tt>FLLLRB</tt></li></ul></div> +<div><ul><li><tt>Q26</tt></li></ul></div> +<div><ul><li>Reset the random number generator by entering <tt>rng(r)</tt> for some small integer <tt>r</tt> in the command window and then generate six random rotations with the <tt>==&gt;</tt> key.</li></ul></div> +<!-- + function grabCode_661f86ea0d734810b8ca2514e6ba69c9() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='661f86ea0d734810b8ca2514e6ba69c9 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 661f86ea0d734810b8ca2514e6ba69c9'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +661f86ea0d734810b8ca2514e6ba69c9 ##### SOURCE BEGIN ##### +%% Exploring Matrices Exercises +% Try your hand at a few exercises involving +% <https://blogs.mathworks.com/cleve/2023/09/11/exploring-matrices +% Exploring Matrices>. + +%% Qube Simplified +% +% <<Qube_simplified.png>> +% +% I have simplified the |Qube| app by removing these four buttons. +% +% * |solve|. The <== key now controls the unscrambling +% operation. +% +% * |scramble|. The ==> key now does six random rotations. +% +% * |order|. I never found a satisfactory reference for +% the group theory of Rubik's cube. +% +% * |score|. I never found a use for the nuclear norm. +% +% Code for |Qube| dated 9/24/2023 is included in the +% <https://blogs.mathworks.com/cleve/files/Apps_mzip.m +% Apps mzip archive>. + +%% Exploring Matrices Exercises +% +% Here are a few exercises for +% <https://blogs.mathworks.com/cleve/2023/09/11/exploring-matrices +% Exploring Matrices>. +% The answers are available at +% <https://blogs.mathworks.com/cleve/files/ExMatAnswers.pdf +% ExMatAnswers>. + +%% Matrix Multiplication +% +% *1.* +% Compute by rows, and by columns. +% +% $$ +% \left( +% \begin{array}{rrr} +% 8 & 1 & 6 \\ +% 3 & 5 & 7 \\ +% 4 & 9 & 2 +% \end{array} +% \right) +% \left( +% \begin{array}{r} +% 1 \\ +% 1 \\ +% 1 +% \end{array} +% \right) +% $$ +% +% +% *2.* +% Solve for $z$ using inner products of rows, and +% using linear combinations of columns. +% +% $$ +% \left( +% \begin{array}{rrr} +% 1 & 2 & 3 \\ +% 4 & 5 & 6 \\ +% 7 & 8 & 9 +% \end{array} +% \right) +% \left( +% \begin{array}{r} +% 1 \\ +% z \\ +% 1 +% \end{array} +% \right) +% \ = \ +% \left( +% \begin{array}{r} +% 0 \\ +% 0 \\ +% 0 +% \end{array} +% \right) +% $$ +% +% +% *3.* +% What do the |m|, |n| and |p| buttons on the |Multiply| app do? +% What are the other buttons and what do they do? +% +% +% *4.* +% If _A_ is n-by-n and _x_ is n-by-1, +% how many multiplications are required to compute _A x_ ? +% +% *5.* +% If _A_ is m-by-n and _B_ is n-by-p, +% how many multiplications are required to compute _A B_ ? + +%% Rotations and Scaling +% +% *1.* +% What is _R_(30º)? +% +% $$ +% R(\theta) \ = \ +% \left( +% \begin{array}{rr} +% \cos{\theta} & \sin{\theta} \\ +% -\sin{\theta} & \cos{\theta} +% \end{array} +% \right) +% $$ +% +% *2.* +% Explain <https://xkcd.com/184>. +% +% *3.* +% What is the value of $\theta$ ? +% +% $$ +% R(\theta) \ = \ +% \left( +% \begin{array}{rr} +% 0.8 & 0.6 \\ +% -0.6 & 0.8 +% \end{array} +% \right) +% $$ +% +% +% *4.* +% What is the value of $\theta$ ? +% +% <<theta_exer.png>> +% +% +% *5.* +% Edit a copy of |Rotate.m| and replace the house with a hand. You can use +% <https://mathworks-my.sharepoint.com/:u:/p/moler/EVREwZQo4ZBLkDggPTky6o4BNIfckvaLQoCDdX4ICjch9A?e=dGA2Y4 my hand> +% or your own hand; see exercise 3.4 in +% <https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/interp.pdf +% Numerical Computing with MATLAB> . +% +% <<hand_exer.png>> +% + +%% Computer Graphics +% +% *1.* +% Show how homogeneous coordinates and matrix-vector multiplication by +% |Tx|, |Ty| or |Tz| produce translation. +% +% +% *2.* +% What is the range of the rotations used by the pitch, roll, and yaw +% buttons on the |Grafix| app? +% +% *3.* +% What color in the beacon on top of the plane? +% How would you change the beacon's color? +% +% +% *4,* +% What is the function of the resolution and offset sliders for the teapot? +% +% +% *5,* +% How many times does the bucky ball bounce off the sides of the plot +% window? +% + + +%% Matrices and Cubes +% +% *1.* +% What is the color of central cubelet in the Color Cube? +% +% +% *2.* +% What do the "<=" , "<==" , "=>" and "==>" buttons on |Qube| do? +% +% +% *3.* +% What is "God's Number" for a 3-by-3-by-3 Rubik's Cube? +% What are |Q20| and |Q26|? +% See <https://blogs.mathworks.com/cleve/2022/09/05/rubiks-cube-superflips-and-gods-number +% Cleve's Corner 2022/09/05>. +% +% +% *4.* +% Can you restore the following scrambled cubes with fewer moves than |<==|, +% the unscramble key? Use the quarter-turn metric and +% reset the cube with |start| or by clicking on |stack| and |Q0|. +% You might also want to set |speed| to 30 or 45, +% +% * |LRUDFB| +% +% * |LRL'R'| +% +% * |FLLLRB| +% +% * |Q26| +% +% * Reset the random number generator by entering |rng(r)| for some +% small integer |r| in the command window and then generate six +% random rotations with the |==>| key. + + +##### SOURCE END ##### 661f86ea0d734810b8ca2514e6ba69c9 +--> + + + + + Exploring Matrices + + 2023-09-12T03:11:52-06:00 + https://hpc.social/2023/exploring-matrices + <div class="content"><!--introduction--><p>I have spent much of my career working to bring abstract linear algebra and practical matrix computation closer together. This project is my latest effort.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#76e7f706-3666-4329-b846-6b0ab1b75468">Alibi</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6c62b301-b35d-4699-a60a-6dc8bd2f86c3">Exploring Matrices</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#653e3c66-3977-46c8-aef6-8ae60d87baa9">YouTube Videos</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ea1683fd-3523-4939-8c2e-c581324ac557">Matrix Multiplication</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#254c72ed-9b08-4442-b7a5-6d4f512351ef">Rotation and Scaling</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#cef8c368-00e7-4ccb-9f05-f2435e94a403">Computer Graphics</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#eec3c339-e1b1-466c-8361-62f63808b278">Matrices and Cubes</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#873c693b-1541-41b8-b6c6-583b05562cd0">Simulink</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e6b8796b-c1b0-4132-9038-5e5cc92f9ec2">AI and Gorillas</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#96f4d47e-9920-4215-bf7d-2bf2a3286ab9">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#29bbbdbc-5d65-4ac3-a74e-1aafe0388a95">Thanks</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6116cfa9-4ed1-4e87-b2ed-099f26839a77">Dedication</a></li></ul></div> +<h4>Alibi<a name="76e7f706-3666-4329-b846-6b0ab1b75468"></a></h4><p>Over sixty years ago, as a sophomore contemplating a major in mathematics, I took a course entitled Survey of Modern Algebra. We used a now-classic textbook by MacLane and Birkhoff that featured abstract theorems about groups, rings, fields, vector spaces and linear algebra. I remember the colorful terms <i>alias</i> and <i>alibi</i> had something to do with change of basis and change of position, but I have never seen those terms again.</p> +<p>The next year, I took Numerical Analysis. We did some of the homework on a Burroughhs 205 Datatron and I wrote a machine language program to solve simultaneous linear equations. I was hooked.</p> +<p>But at the time I did not realize that the two courses were about the same magnificent object -- the <i>matrix</i>.</p> +<h4>Exploring Matrices<a name="6c62b301-b35d-4699-a60a-6dc8bd2f86c3"></a></h4><p>Exploring Matrices is a multi-media project that shows matrices in action. Short videos, blog posts, interactive MATLAB software and self-study exercises investigate applications of matrices. The material is intended for studebts in an undergraduate course in linear algebra or computational science. However, anyone using matrices should find topics that interest them.</p> +<p>The first release of Exploring Matrices has six modules. All of the modules feature animated MATLAB displays and four of the modules include interactive MATLAB "apps". The modules are:</p> +<div><ul><li>Matrix Multiplication</li><li>Rotation and Scaling</li><li>Computer Graphics</li><li>Matrices and Cubes</li><li>Simulink</li><li>AI and Gorillas %</li></ul></div> +<h4>YouTube Videos<a name="653e3c66-3977-46c8-aef6-8ae60d87baa9"></a></h4><p>An introduction and six videos ranging in length from one to six minutes, are available on YouTube at</p> +<p><a href="https://youtube.com/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ">https://youtube.com/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ</a>.</p> +<p>The first four of these videos feature animations produced by our four MATLAB apps -- <tt>Multiply</tt>, <tt>Rotate</tt>, <tt>Grafix</tt>, and <tt>Qube</tt>. The other two videos describe two applications, simulation of control systems and neural networks for facial recognition (of gorillas).</p> +<h4>Matrix Multiplication<a name="ea1683fd-3523-4939-8c2e-c581324ac557"></a></h4><p>Some viewers may just be learning the mechanics of matrix multiplication. Other viewers will have encountered it years ago. The traditional algorithm for computing the product of two matrices involves inner products between the rows of the first matrix and the columns of the second. A less familiar algorithm, which involves linear combinations of the columns of the first matrix, is often more efficient and informative. The two approaches produce the same final result from intermediate terms in different orders.</p> +<p>Here is one frame from the animation of these two algorithms generated by our <tt>Multiply</tt> app. The highlighted element in the first matrix either moves across the rows or goes down the columns.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Multy.png" vspace="5" /> </p> +<h4>Rotation and Scaling<a name="254c72ed-9b08-4442-b7a5-6d4f512351ef"></a></h4><p>Our first matrices are 2-by-2. We see how the matrix</p> +<p>$$ +R \ = \ +\left( + \begin{array}{rr} + \cos{\theta} &amp; \sin{\theta} \\ + -\sin{\theta} &amp; \cos{\theta} + \end{array} + \right) +$$</p> +<p>rotates points by the angle $\theta$, measured in degrees.</p> +<p>We also see how the matrix</p> +<p>$$ +S \ = \ +\left( + \begin{array}{rr} + \sigma &amp; 0 \\ + 0 &amp; \sigma + \end{array} + \right) +\ \ \ \ \ \ \ \ +$$</p> +<p>makes objects larger and smaller.</p> +<p>The two can be combined with matrix multiplication. For more operations in higher dimensions, matrix multiplication provides a unifying framework.</p> +<p>Here is one frame from the animation of rotation and scaling generated by the <tt>Rotate</tt> app. The first panel displays a 2-by-2 rotation matrix, the second panel displays a 2-by-2 diagonal scaling matrix, and the third panel displays their product.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Rotate.png" vspace="5" /> </p> +<h4>Computer Graphics<a name="cef8c368-00e7-4ccb-9f05-f2435e94a403"></a></h4><p>Operations with the 4-by-4 matrices that are at the heart of modern computer graphics employ a system known as "homogeneous coordinates". The leading 3-by-3 submatrix produces rotation and scaling in three dimensions. The fourth column produces translations.</p> +<p>Here is one frame from an animation of rotation about the x-axis generated by the <tt>Grafix</tt> app. This is often called "pitch". Rotation about the y- and z-axes are "roll" and "yaw",</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Graphics.png" vspace="5" /> </p> +<h4>Matrices and Cubes<a name="eec3c339-e1b1-466c-8361-62f63808b278"></a></h4><p>Rubik's Cube, named for its inventor, Ern&#337; Rubik, a Hungarian professor of architecture, is the greatest mathematical puzzle of all time. Our digital simulation of the puzzle, <tt>Qube</tt>, is powered by rotation matrices.</p> +<p>The model consists of 27 identical copies of a single small <i>cubelet</i> whose sides are colored red, white, blue, yellow, orange and green. Initially, all cubelets have the same orientation. A <i>move</i> is the simultaneous rotation of the nine cubelets in one of the six faces, by 90&deg; or 180&deg;, clockwise or counterclockwise. This leads to $4.3 \times 10^{19}$ possible configurations for a scrambled cube.</p> +<p>The object of the puzzle is to return a scrambled cube to the initial state. Most people are interested in solving the puzzle rapidly, but I am more interested in the number of moves required.</p> +<p><tt>Qube</tt> offers animations of many mathematical properties of Rubik's cubes. Here is a frame from one of them.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Qube_frame.png" vspace="5" /> </p> +<h4>Simulink<a name="873c693b-1541-41b8-b6c6-583b05562cd0"></a></h4><p>MATLAB's companion product, Simulink, is a block diagram programming environment used to design and simulate systems with multidomain models and to automatically generate the code required to operate embedded processors.</p> +<p>Matrices are involved in dozens of different ways by Simulink, but most users rarely see operations at that detailed level. Our Simulink module shows a model of an automobile being driven on a test track and displays the pitch, roll and yaw recorded by the matrix connecting the coordinate system for the automobile to the coordinate system for the track.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Simulink.png" vspace="5" /> </p> +<h4>AI and Gorillas<a name="e6b8796b-c1b0-4132-9038-5e5cc92f9ec2"></a></h4><p>This is a personal story about a project in the early stages of development.</p> +<p>My wife and I first visited gorillas in the Volcano National Park of Rwanda twelve years ago. An American primatologist named Dian Fossey had studied the gorillas between 1966 and her murder by poachers in 1985. Her book <i>Gorillas in the Mist</i> was very popular and was the basis for a critically acclaimed 1988 Hollywood movie starring Sigourney Weaver.</p> +<p>We have become good friends with the people in the <a href="https://www.gorilladoctors.org/">Gorilla Doctors</a> organization. These African and American veterinarians attend to the health of the roughly 1,000 gorillas in the park. Most of the gorillas have African names like "Inkundwa" and "Maisha". We envision a gorilla facial recognition system that is available on cell phones and tablets so that new guides and doctors can learn the names of their patients.</p> +<p>Inception-v3 is a convolutional neural network (CNN) that is widely used for image processing. We have a version of the network pretrained on more than a million images from the ImageNet database. This publicly available system knows nothing about gorillas. We must do additional training using photos of our unique subjects.</p> +<p>This is where matrices are applied. Training a CNN involves determining the values of thousands of weights and coefficients. The digital photos, regarded as vectors, and repeatedly multiplied by circulant matrices where each row is a shifted copy of the other rows. Importantly, a modern CNN also contains some nonlinear layers.</p> +<p>Here is one photo from a small test collection. Indundwa appears to have his own selfie stick.</p> +<p><img alt="" hspace="5" src="https://blogs.mathworks.com/cleve/files/Gorillas.png" vspace="5" /> </p> +<h4>Software<a name="96f4d47e-9920-4215-bf7d-2bf2a3286ab9"></a></h4><p>A self-extracting MATLAB source archive of our four apps is available at</p> +<p><a href="https://blogs.mathworks.com/cleve/files/Apps_mzip.m">https://blogs.mathworks.com/cleve/files/Apps_mzip.m</a></p> +<h4>Thanks<a name="29bbbdbc-5d65-4ac3-a74e-1aafe0388a95"></a></h4><p>Thanks to Jackson Kustell, Josh Bethoney and Heather Gorr from MathWorks and Jan Ramer and Mike Cranfield from Gorilla Doctors.</p> +<h4>Dedication<a name="6116cfa9-4ed1-4e87-b2ed-099f26839a77"></a></h4><p>We dedicate the Gorillas project to the memory of <a href="https://www.marylandzoo.org/news-and-updates/2023/08/mourning-the-loss-of-dr-mike-cranfield">Mike Cranfield, DMV</a>. Mike was Executive Director of the Mountain Gorillas Veterinary Project in Rwanda from 1999 until 2014. Before Rwanda, he held various positions at the Maryland Zoo in Baltimore.</p> +<p>Three months ago, Mike sent us a disc drive containing over 14,000 photographs of gorillas he had taken in Rwanda. We are now sorting and organizing the photos to provide specialized training of the facial recognition neural net.</p> +<p>A month ago, Mike was hospitalized from an apparent attack of West Nile Virus. He passed away on August 27. Ironically, after years of working safely in the mountain jungles of Central Africa, it is likely that he acquired the virus from a mosquito bite at his family's cabin in Canada.</p> +<!-- + function grabCode_77d29507140c40a1a497777d9fd035e6() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='77d29507140c40a1a497777d9fd035e6 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 77d29507140c40a1a497777d9fd035e6'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +77d29507140c40a1a497777d9fd035e6 ##### SOURCE BEGIN ##### +%% Exploring Matrices +% I have spent much of my career working to bring abstract linear +% algebra and practical matrix computation closer together. This project +% is my latest effort. + +%% Alibi +% Over sixty years ago, as a sophomore contemplating a major +% in mathematics, I took a course entitled Survey of Modern Algebra. +% We used a now-classic textbook by MacLane and Birkhoff that featured +% abstract theorems about groups, rings, fields, vector spaces and +% linear algebra. +% I remember the colorful terms _alias_ and _alibi_ had something +% to do with change of basis and change of position, but I have never +% seen those terms again. +% +% The next year, I took Numerical Analysis. We did some of the homework +% on a Burroughhs 205 Datatron and I wrote a machine language program to +% solve simultaneous linear equations. I was hooked. +% +% But at the time I did not realize that the two courses were about the +% same magnificent object REPLACE_WITH_DASH_DASH the _matrix_. +% + +%% Exploring Matrices +% Exploring Matrices is a multi-media project that shows matrices +% in action. Short videos, blog posts, +% interactive MATLAB software and self-study exercises investigate +% applications of matrices. The material is intended for studebts in an +% undergraduate course in linear algebra or computational science. +% However, anyone using matrices should find topics that interest them. +% +% The first release of Exploring Matrices has six modules. +% All of the modules feature animated MATLAB displays and +% four of the modules include interactive MATLAB "apps". +% The modules are: +% +% * Matrix Multiplication +% * Rotation and Scaling +% * Computer Graphics +% * Matrices and Cubes +% * Simulink +% * AI and Gorillas +% % + +%% YouTube Videos +% An introduction and six videos ranging in length from one to +% six minutes, are available on YouTube at +% +% <https://youtube.com/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ>. +% +% The first four of these videos feature animations produced by our four +% MATLAB apps REPLACE_WITH_DASH_DASH |Multiply|, |Rotate|, |Grafix|, and |Qube|. +% The other two videos describe two applications, simulation of control +% systems and neural networks for facial recognition (of gorillas). + +%% Matrix Multiplication +% Some viewers may just be learning the mechanics of matrix multiplication. +% Other viewers will have encountered it years ago. +% The traditional algorithm for computing the product of two +% matrices involves inner products between the rows of the first matrix +% and the columns of the second. A less familiar algorithm, which +% involves linear combinations of the columns of the first matrix, +% is often more efficient and informative. The two approaches produce +% the same final result from intermediate terms in different orders. +% +% Here is one frame from the animation of these two algorithms generated +% by our |Multiply| app. The highlighted element in the first matrix +% either moves across the rows or goes down the columns. +% +% <<Multy.png>> + +%% Rotation and Scaling +% Our first matrices are 2-by-2. We see how the matrix +% +% $$ +% R \ = \ +% \left( +% \begin{array}{rr} +% \cos{\theta} & \sin{\theta} \\ +% -\sin{\theta} & \cos{\theta} +% \end{array} +% \right) +% $$ +% +% rotates points by the angle $\theta$, measured in degrees. +% +% We also see how the matrix +% +% $$ +% S \ = \ +% \left( +% \begin{array}{rr} +% \sigma & 0 \\ +% 0 & \sigma +% \end{array} +% \right) +% \ \ \ \ \ \ \ \ +% $$ +% +% makes objects larger and smaller. +% +% The two can be combined with matrix multiplication. +% For more operations in higher dimensions, matrix multiplication +% provides a unifying framework. +% +% Here is one frame from the animation of rotation and scaling generated +% by the |Rotate| app. The first panel displays a 2-by-2 rotation +% matrix, the second panel displays a 2-by-2 diagonal scaling matrix, +% and the third panel displays their product. +% +% <<Rotate.png>> +% + +%% Computer Graphics +% Operations with the 4-by-4 matrices that are at the heart of modern +% computer graphics employ a system known as "homogeneous coordinates". +% The leading 3-by-3 submatrix produces rotation and scaling in +% three dimensions. The fourth column produces translations. +% +% Here is one frame from an animation of rotation about the x-axis +% generated by the |Grafix| app. +% This is often called "pitch". Rotation about the y- and z-axes +% are "roll" and "yaw", +% +% <<Graphics.png>> +% + +%% Matrices and Cubes +% Rubik's Cube, named for its inventor, Ernő Rubik, a Hungarian professor +% of architecture, is the greatest mathematical puzzle of all time. Our +% digital simulation of the puzzle, |Qube|, is powered by rotation +% matrices. +% +% The model consists of 27 identical copies of a single small _cubelet_ +% whose sides are colored red, white, blue, yellow, orange and green. +% Initially, all cubelets have the same orientation. +% A _move_ is the simultaneous rotation of the nine cubelets in one of +% the six faces, by 90° or 180°, clockwise or counterclockwise. This +% leads to $4.3 \times 10^{19}$ possible configurations for a scrambled +% cube. +% +% The object of the puzzle is to return a scrambled cube to the initial +% state. Most people are interested in solving the puzzle rapidly, +% but I am more interested in the number of moves required. +% +% |Qube| offers animations of many mathematical properties +% of Rubik's cubes. Here is a frame from one of them. +% +% <<Qube_frame.png>> + +%% Simulink +% MATLAB's companion product, Simulink, is a block diagram programming +% environment used to design and simulate systems with multidomain +% models and to automatically generate the code required to operate +% embedded processors. +% +% Matrices are involved in dozens of different ways by Simulink, +% but most users rarely see operations at that detailed level. +% Our Simulink module shows a model of an automobile being driven +% on a test track and displays the pitch, roll and yaw recorded by +% the matrix connecting the coordinate system for the automobile to +% the coordinate system for the track. +% +% <<Simulink.png>> + +%% AI and Gorillas +% This is a personal story about a project in the early stages of +% development. +% +% My wife and I first visited gorillas +% in the Volcano National Park of Rwanda twelve years ago. +% An American primatologist named Dian Fossey had studied the gorillas +% between 1966 and her murder by poachers in 1985. +% Her book _Gorillas in the Mist_ was very popular and was the basis +% for a critically acclaimed 1988 Hollywood movie starring +% Sigourney Weaver. +% +% We have become good friends with the people in the +% <https://www.gorilladoctors.org/ Gorilla Doctors> organization. +% These African and American veterinarians attend to the health of the +% roughly 1,000 gorillas in the park. Most of the gorillas have +% African names like "Inkundwa" and "Maisha". We envision a +% gorilla facial recognition system that is available on +% cell phones and tablets so that new guides and doctors can learn +% the names of their patients. +% +% Inception-v3 is a convolutional neural network (CNN) that is widely +% used for image processing. We have a version of the network +% pretrained on more than a million images from the ImageNet database. +% This publicly available system knows nothing about gorillas. +% We must do additional training using photos of our unique subjects. +% +% This is where matrices are applied. Training a CNN involves determining +% the values of thousands of weights and coefficients. The digital photos, +% regarded as vectors, and repeatedly multiplied by circulant matrices +% where each row is a shifted copy of the other rows. Importantly, +% a modern CNN also contains some nonlinear layers. +% +% Here is one photo from a small test collection. Indundwa appears +% to have his own selfie stick. +% +% <<Gorillas.png>> + +%% Software +% A self-extracting MATLAB source archive of our four apps is available at +% +% <https://blogs.mathworks.com/cleve/files/Apps_mzip.m> +% + +%% Thanks +% Thanks to Jackson Kustell, Josh Bethoney and Heather Gorr from MathWorks +% and Jan Ramer and Mike Cranfield from Gorilla Doctors. + +%% Dedication +% We dedicate the Gorillas project to the memory of +% <https://www.marylandzoo.org/news-and-updates/2023/08/mourning-the-loss-of-dr-mike-cranfield +% Mike Cranfield, DMV>. Mike was Executive Director of the Mountain Gorillas +% Veterinary Project in Rwanda from 1999 until 2014. Before Rwanda, +% he held various positions at the Maryland Zoo in Baltimore. +% +% Three months ago, Mike sent us a disc drive containing over 14,000 +% photographs of gorillas he had taken in Rwanda. We are now +% sorting and organizing the photos to provide specialized training +% of the facial recognition neural net. +% +% A month ago, Mike was hospitalized from an apparent attack of West Nile +% Virus. He passed away on August 27. Ironically, after years of working +% safely in the mountain jungles of Central Africa, it is likely that +% he acquired the virus from a mosquito bite at his family's cabin +% in Canada. +##### SOURCE END ##### 77d29507140c40a1a497777d9fd035e6 +--> + + + + + MiniGallery, Sampler of MATLAB Test Matrices + + 2023-06-28T16:34:09-06:00 + https://hpc.social/2023/minigallery-sampler-of-matlab-test-matrices + <div class="content"><!--introduction--><p>MATLAB has dozens of test matrices. Here are a few.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#2fb5167b-7e82-4227-9f86-2870405cf53c">Mini_Gallery</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#eba25d52-863f-4050-9d5c-28d66c4a102b">Collections</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#66c32842-91ed-4ddf-9f2b-544fc3a88564">Blogs</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a58fbf40-276b-4c6c-8576-97e02358a317">Software</a></li></ul></div> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/TinyGallery.png" vspace="5" /> </p> +<h4>Mini_Gallery<a name="2fb5167b-7e82-4227-9f86-2870405cf53c"></a></h4><div><ul><li>Random. <tt>A = sprand(n,n,0.25)</tt>. Random sparse, density = 0.25.</li><li>Bucky. <tt>A = bucky</tt>. Sparse connectivity graph of the geodesic dome, the soccer ball, and the carbon-60 molecule.</li><li>Wilkinson. <tt>A = wilkinson(n)</tt>. Wn+. Nearly equal double eigenvalues.</li><li>Band. <tt>A = triu(tril(A,2),-2)</tt>. Elements near diagonal.</li><li>Triangular. <tt>A = triu(A)</tt>. Elements on and above diagonal.</li><li>Hessenberg. <tt>A = triu(A,-1)</tt>. Upper triangular plus one subdiagonal. See <tt>schur</tt>.</li><li>Permutation. <tt>A = sparse(randperm(n),1:n,1)</tt>. One +1 in each row and column.</li><li>Companion. <tt>c = charpoly(A); A = [-c(2:end); eye(n-1,n)]</tt>. Traditional companion matrix.</li><li>Fiedler. <tt>c = charpoly(A); A = fiedler(-c(2:end))</tt>. Fiedler companion matrix.</li><li>Hankel. <tt>A = flip(gallery('toeppd',n))</tt>. Constant antidiagonals.</li><li>Toeplitz. <tt>A = gallery('toeppd',n)</tt>. Constant diagonals.</li><li>Magic. <tt>A = magic(n)</tt>. Magic square.</li></ul></div> +<h4>Collections<a name="eba25d52-863f-4050-9d5c-28d66c4a102b"></a></h4><div><ul><li><tt>gallery</tt>. Nick Higham and MathWorks, <a href="https://www.mathworks.com/help/matlab/ref/gallery.html">https://www.mathworks.com/help/matlab/ref/gallery.html</a></li><li>Anymatrix. Nick Higham and Mantas Mikaitis, <a href="https://nhigham.com/2021/11/09/anymatrix">https://nhigham.com/2021/11/09/anymatrix</a>&gt;</li><li>SuiteSparse. Tim Davis, Yifan Hu and Scott Kolodzie, <a href="http://sparse.tamu.edu">http://sparse.tamu.edu</a></li><li>MatrixMarket, NIST, <a href="https://math.nist.gov/MatrixMarket">https://math.nist.gov/MatrixMarket</a>.</li></ul></div> +<h4>Blogs<a name="66c32842-91ed-4ddf-9f2b-544fc3a88564"></a></h4><div><ul><li><a href="https://blogs.mathworks.com/cleve/2012/11/05/magic-squares-part-2-algorithms/">https://blogs.mathworks.com/cleve/2012/11/05/magic-squares-part-2-algorithms/</a></li><li><a href="https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2/">https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2/</a>.</li><li><a href="https://blogs.mathworks.com/cleve/2013/12/23/fiedler-companion-matrix/">https://blogs.mathworks.com/cleve/2013/12/23/fiedler-companion-matrix/</a>.</li><li><a href="https://blogs.mathworks.com/cleve/2021/05/12/bringing-back-the-bucky-ball/">https://blogs.mathworks.com/cleve/2021/05/12/bringing-back-the-bucky-ball/</a>.</li></ul></div> +<h4>Software<a name="a58fbf40-276b-4c6c-8576-97e02358a317"></a></h4><div><ul><li><a href="https://blogs.mathworks.com/cleve/files/Mini_Gallery.m">https://blogs.mathworks.com/cleve/files/Mini_Gallery.m</a></li></ul></div> +<!-- + function grabCode_3ac745ceafba4a469aec48ad4b98c1b4() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='3ac745ceafba4a469aec48ad4b98c1b4 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 3ac745ceafba4a469aec48ad4b98c1b4'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +3ac745ceafba4a469aec48ad4b98c1b4 ##### SOURCE BEGIN ##### +%% MiniGallery, Sampler of MATLAB Test Matrices +% MATLAB has dozens of test matrices. Here are a few. + +%% +% +% <<TinyGallery.png>> +% + +%% MiniGallery +% * Random. |A = sprand(n,n,0.25)|. Random sparse, density = 0.25. +% * Bucky. |A = bucky|. Sparse connectivity graph of the geodesic dome, +% the soccer ball, and the carbon-60 molecule. +% * Wilkinson. |A = wilkinson(n)|. Wn+. Nearly equal double eigenvalues. +% * Band. |A = triu(tril(A,2),-2)|. Elements near diagonal. +% * Triangular. |A = triu(A)|. Elements on and above diagonal. +% * Hessenberg. |A = triu(A,-1)|. Upper triangular plus one subdiagonal. +% See |schur|. +% * Permutation. |A = sparse(randperm(n),1:n,1)|. One +1 in each row and +% column. +% * Companion. |c = charpoly(A); A = [-c(2:end); eye(n-1,n)]|. +% Traditional companion matrix. +% * Fiedler. |c = charpoly(A); A = fiedler(-c(2:end))|. Fiedler companion +% matrix. +% * Hankel. |A = flip(gallery('toeppd',n))|. Constant antidiagonals. +% * Toeplitz. |A = gallery('toeppd',n)|. Constant diagonals. +% * Magic. |A = magic(n)|. Magic square. + +%% Collections +% * |gallery|. Nick Higham and MathWorks, <https://www.mathworks.com/help/matlab/ref/gallery.html> +% * Anymatrix. Nick Higham and Mantas Mikaitis, https://nhigham.com/2021/11/09/anymatrix> +% * SuiteSparse. Tim Davis, Yifan Hu and Scott Kolodzie, <http://sparse.tamu.edu> +% * MatrixMarket, NIST, <https://math.nist.gov/MatrixMarket>. + +%% Blogs +% * <https://blogs.mathworks.com/cleve/2012/11/05/magic-squares-part-2-algorithms></https://blogs.mathworks.com/cleve/2012/11/05/magic-squares-part-2-algorithms> +% * <https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2></https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2>. +% * <https://blogs.mathworks.com/cleve/2013/12/23/fiedler-companion-matrix></https://blogs.mathworks.com/cleve/2013/12/23/fiedler-companion-matrix>. +% * <https://blogs.mathworks.com/cleve/2021/05/12/bringing-back-the-bucky-ball></https://blogs.mathworks.com/cleve/2021/05/12/bringing-back-the-bucky-ball>. + +%% Software +% * <https://blogs.mathworks.com/cleve/files/MiniGallery.m> +##### SOURCE END ##### 3ac745ceafba4a469aec48ad4b98c1b4 +--> + + + + + ARLS, Automatically Regularized Least Squares + + 2023-06-17T00:57:05-06:00 + https://hpc.social/2023/arls-automatically-regularized-least-squares + <div class="content"><!--introduction--><p>(I have a guest blogger today. Ron Jones worked with me in 1985 for his Ph. D. from the University of New Mexico. He retired recently after nearly 40 years at Sandia National Labs in Albuquerque and now has a chance to return to the problem he studied in his thesis. -- CBM)</p> +<p>by Rondall Jones, <a href="mailto:rejones7@msn.com">rejones7@msn.com</a></p> +<p>Our interest is in automatically solving difficult linear systems,</p> +<pre> A*x = b</pre><p>Such systems often arise, for example, in "inverse problems" in which the analyst is trying to reverse the effects of natural smoothing processes such as heat dissipation, optical blurring, or indirect sensing. These problems exhibit "ill-conditioning", which means that the solution results are overly sensitive to insignificant changes to the observations, which are given in the right-hand-side vector, <tt>b</tt> .</p> +<!--/introduction--><p>Here is a graphic showing this behavior using a common test matrix, a 31 x 31 Hilbert matrix, with the blue line being the ideal solution that one would hope a solver could compute. The jagged red line shows the result of a traditional solver on this problem.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/arls_0.bmp" vspace="5" /> </p> +<p>In fact this graph is extremely mild: the magnitude of the oscillations often measure in the millions, not just a little larger than the true solution. Traditionally analysts have approached this issue in the linear algebraic system context by appending equations to <tt>A*x = b</tt> that request each solution value, <tt>x(i)</tt>, to be zero. Then, one weights these conditioning equations using a parameter usually called "lambda". We will call it <tt>p</tt> here. What we have to solve then is this expanded linear system:</p> +<pre> [ A ; p*I] * x = [b; 0]</pre><p>If we decompose <tt>A</tt> into its Singular Value Decomposition</p> +<pre> A = U * S * V'</pre><p>and multiply both sides by the transpose of the augmented LHS, the resulting solution to is</p> +<pre> x = V * inv(S^2 + p^2*I) * S * U' * b</pre><p>instead of the usual</p> +<pre> x = V * inv(S) * U' * b</pre><p>It is convenient in the following discussion to represent this as</p> +<pre> x = V * PCV</pre><p>where</p> +<pre> PCV = inv(S) * U' * b</pre><p>is what we call the <i>Picard Condition Vector</i>. Then <tt>x</tt> is computed in the usual SVD manner with the change that each singular value <tt>S(i)</tt> is replaced by</p> +<pre> S(i) + p^2/S(i)</pre><p>This process is called <i>Tikhonov regularization</i>.</p> +<p>Using Tikhonov regularization successfully requires <i>somehow</i> picking an appropriate value for <tt>p</tt>. Cleve Moler has for many years jokingly used the term "eyeball norm" to describe how to pick <tt>p</tt>. "Try various values of <tt>p</tt> and pick the resulting solution (or its graph) that 'looks good'".</p> +<p>My early work in attempting to determine lambda automatically was based instead on determining when the PCV begins to seriously diverge. Beyond that point one can be fairly sure that noise in <tt>b</tt> is causing <tt>U'*b</tt> to decrease more slowly than <tt>inv(S)</tt> is increasing, so their product, which is the PCV, starts growing unacceptably. Such an algorithm can be made to work and versions of my work have been available in various forms over the years. But determining where the PCV starts growing unacceptably (which I refer to as the <i>usable rank</i>) is based on heuristics, moving averages, and such, as of which require choices of moving average lengths and other such parameters. This is not an optimal situation, so a I began trying to redesign algorithms that do not use any heuristics.</p> +<p>How do we do that algorithmically? Per Christian Hansen gave a clue to this question when he said (my re-phrasing) that "the analyst should not expect a good solution for such a problem unless the PCV is 'declining'". We note that this adage is a context-specific application of a general requirement that when a function is represented by an orthogonal expansion the coefficients of the orthogonal basis functions should eventually decline toward zero. If this behavior does not happen, then typically either the model is incomplete or the data is contaminated. In our case the orthogonal basis is simply the columns of <tt>V</tt>, and <tt>b</tt> is the set of coefficients that would be expected to decline. A good working definition of "declining" has been hard to nail down. The algorithm in <tt>ARLS</tt> has implemented this concept using two specific essential steps:</p> +<div><ul><li>First, we replace the PCV by a second-degree polynomial (e.g., a parabolic) least-squares fit to the PCV. This allows a lot of the typical "wild" variations in the PCV to be smoothed over and thereby tolerated without eliminating the problem's distinctive behavior.</li></ul></div> +<div><ul><li>Second, we don't actually fit the curve to the PCV, but rather to the <b>logarithm</b> of the PCV. Without this change, small values of the PCV are seen by the curve fit process as just near-zero values, with no significant difference in the effect of a value of 0.0001 or a value of 0.0000000001. But in the (base 10) logarithm of the PCV these values nicely spread out from -4 to -10 (for example).</li></ul></div> +<p>So, Phase 1 of ARLS searches a large range of values of p (remember, p is Tikhonov's "lambda") to find a value just barely large enough to make the slope of the parabolic fit entirely negative or zero. This gives us a tight lower bound for the "correct" value of p.</p> +<p>Phase 2 of ARLS is much simpler. Since p is the minimum usable regularization parameter, the solution tends to be less smooth and less close to the ideal solution than optimum. So we simply increase p slightly to let the shape of the graph of x smooth out. Our current implementation increases p until the residual (that is, <tt>norm(A*x-b)</tt>) of the solution increases by a factor of 2. This is, unfortunately, a heuristic. But an appropriate value of it can be determined by &#8220;tuning&#8221; the algorithm on a wide range of test problems.</p> +<p>We call this new algorithm Logarithmic Picard Condition Analysis. (If the problems you work on seem to need a bit more relaxation you can, of course, increase the number 2 a bit. It is 5 lines from the bottom of the file.) In the example shown in the graphic above, ARLS produces the blue line so closely that the ideal solution and ARLS computed solution are indistinguishable.</p> +<p>In addition to ARLS(A,b) itself, we provide two constrained solvers built on ARLS which are called just like ARLS:</p> +<div><ul><li>ARLSNN(A,b), which constrains the solution to be non-negative (like the classic NNLS, buth with regularization.</li></ul></div> +<div><ul><li>ARLSRISE(A,b) which constrains the solution to be non-decreasing. To get a non-increasing, or &#8220;falling&#8221; solution, you can compute -ARLSRISE(A,-b).</li></ul></div> +<p>Try ARLS. It's available from the MATLAB Central File Exchange, #130259, <a href="https://www.mathworks.com/matlabcentral/fileexchange/130259-arls-automatically-regularized-least-squares">at this link</a>.</p> +<!-- + function grabCode_95d95d5b92ad4c4ca262dfdb5ff7efe9() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='95d95d5b92ad4c4ca262dfdb5ff7efe9 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 95d95d5b92ad4c4ca262dfdb5ff7efe9'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +95d95d5b92ad4c4ca262dfdb5ff7efe9 ##### SOURCE BEGIN ##### +%% ARLS, Automatically Regularized Least Squares +% +% (I have a guest blogger today. Ron Jones worked with me in 1985 for +% his Ph. D. from the University of New Mexico. He retired recently +% after nearly 40 years at Sandia National Labs in Albuquerque and now +% has a chance to return to the problem he studied in his thesis. REPLACE_WITH_DASH_DASH CBM) +% +% by Rondall Jones, rejones7@msn.com +% +% Our interest is in automatically solving difficult linear systems, +% +% A*x = b +% +% Such systems often arise, for example, in "inverse problems" in which +% the analyst is trying to reverse the effects of natural smoothing +% processes such as heat dissipation, optical blurring, or indirect sensing. +% These problems exhibit "ill-conditioning", which means that the solution +% results are overly sensitive to insignificant changes to the observations, +% which are given in the right-hand-side vector, |b| . +%% +% Here is a graphic showing this behavior using a common test matrix, a +% 31 x 31 Hilbert matrix, with the blue line being the ideal solution that +% one would hope a solver could compute. The jagged red line shows the +% result of a traditional solver on this problem. +% +% <<arls_0.bmp>> +% +% In fact this graph is extremely mild: the magnitude of the oscillations +% often measure in the millions, not just a little larger than the true +% solution. Traditionally analysts have approached this issue in the linear +% algebraic system context by appending equations to |A*x = b| that request +% each solution value, |x(i)|, to be zero. Then, one weights these +% conditioning equations using a parameter usually called "lambda". We +% will call it |p| here. What we have to solve then is this expanded linear +% system: +% +% [ A ; p*I] * x = [b; 0] +% +% If we decompose |A| into its Singular Value Decomposition +% +% A = U * S * V' +% +% and multiply both sides by the transpose of the augmented LHS, +% the resulting solution to is +% +% x = V * inv(S^2 + p^2*I) * S * U' * b +% +% instead of the usual +% +% x = V * inv(S) * U' * b +% +% It is convenient in the following discussion to represent this as +% +% x = V * PCV +% +% where +% +% PCV = inv(S) * U' * b +% +% is what we call the _Picard Condition Vector_. Then +% |x| is computed in the usual SVD manner with the change that each +% singular value |S(i)| is replaced by +% +% S(i) + p^2/S(i) +% +% This process is called _Tikhonov regularization_. +% +% Using Tikhonov regularization successfully requires _somehow_ picking +% an appropriate value for |p|. Cleve Moler has for +% many years jokingly used the term "eyeball norm" to describe how to pick +% |p|. "Try various values of |p| and pick the resulting solution +% (or its graph) that 'looks good'". + +%% +% My early work in attempting to determine lambda automatically was +% based instead on determining when the PCV begins to seriously diverge. +% Beyond that point one can be fairly sure that noise in |b| is causing +% |U'*b| to decrease more slowly than |inv(S)| is increasing, so their +% product, which is the PCV, starts growing unacceptably. +% Such an algorithm can be made +% to work and versions of my work have been available in various forms +% over the years. But determining where the PCV starts growing unacceptably +% (which I refer to as the _usable rank_) is based on heuristics, moving +% averages, and such, as of which require choices of moving average +% lengths and other such parameters. This is not an optimal situation, so a +% I began trying to redesign algorithms that do not use any heuristics. + +%% +% How do we do that algorithmically? Per Christian Hansen gave a clue to +% this question when he said (my re-phrasing) that "the analyst should not +% expect a good solution for such a problem unless the PCV is 'declining'". +% We note that this adage is a context-specific application of a general +% requirement that when a function is represented by an orthogonal +% expansion the coefficients of the orthogonal basis functions should +% eventually decline toward zero. If this behavior does not happen, then +% typically either the model is incomplete or the data is contaminated. In +% our case the orthogonal basis is simply the columns of |V|, and |b| is +% the set of coefficients that would be expected to decline. A good +% working definition of "declining" has been hard to nail down. The +% algorithm in |ARLS| has implemented this concept using two specific +% essential steps: +% +% * First, we replace the PCV by a second-degree polynomial (e.g., a +% parabolic) least-squares fit to the PCV. This allows a lot of the typical +% "wild" variations in the PCV to be smoothed over and thereby tolerated +% without eliminating the problem's distinctive behavior. +% +% * Second, we don't actually fit the curve to the PCV, but rather to the +% *logarithm* of the PCV. Without this change, small values of the PCV +% are seen by the curve fit process as just near-zero values, with no +% significant difference in the effect of a value of 0.0001 or a value of +% 0.0000000001. But in the (base 10) logarithm of the PCV these values +% nicely spread out from -4 to -10 (for example). +% +% So, Phase 1 of ARLS searches a large range of values of p (remember, p +% is Tikhonov's "lambda") to find a value just barely large enough to make +% the slope of the parabolic fit entirely negative or zero. This gives us a +% tight lower bound for the "correct" value of p. +% +% Phase 2 of ARLS is much simpler. Since p is the minimum usable +% regularization parameter, the solution tends to be less smooth and less +% close to the ideal solution than optimum. So we simply increase p +% slightly to let the shape of the graph of x smooth out. Our current +% implementation increases p until the residual (that is, |norm(A*x-b)|) of +% the solution increases by a factor of 2. This is, unfortunately, a heuristic. +% But an appropriate value of it can be determined by “tuning” the +% algorithm on a wide range of test problems. +% +% We call this new algorithm Logarithmic Picard Condition Analysis. +% (If the problems you work on seem to need a bit more relaxation you +% can, of course, increase the number 2 a bit. It is 5 lines from the +% bottom of the file.) +% In the example shown in the graphic above, ARLS produces the blue line +% so closely that the ideal solution and ARLS computed solution are +% indistinguishable. +% +% In addition to ARLS(A,b) itself, we provide two constrained solvers +% built on ARLS which are called just like ARLS: +% +% * ARLSNN(A,b), which constrains the solution to be non-negative +% (like the classic NNLS, buth with regularization. +% +% * ARLSRISE(A,b) which constrains the solution to be non-decreasing. +% To get a non-increasing, or “falling” solution, you can compute +% -ARLSRISE(A,-b). +% +% Try ARLS. It's available from the MATLAB Central File Exchange, +% #130259, +% <https://www.mathworks.com/matlabcentral/fileexchange/130259-arls-automatically-regularized-least-squares +% at this link>. +##### SOURCE END ##### 95d95d5b92ad4c4ca262dfdb5ff7efe9 +--> + + + + + Happy Birthday, John Gilbert + + 2023-06-07T14:48:32-06:00 + https://hpc.social/2023/happy-birthday-john-gilbert + <div class="content"><!--introduction--><p>I have just returned from a one-day workshop at U. C. Santa Barbara honoring John Gilbert on his 70th birthday and his official retirement after 20 years on the UCSB faculty.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/johnrgilbert.jpg" vspace="5" /> </p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#483e8936-1d16-4486-a661-92c662f34d97">New Mexico</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0be2f0ed-b459-4a36-af7a-57fefb22d647">Xerox PARC</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e413f7b9-c197-454d-b046-d30190db4c17">Friendship</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3b88cae7-503d-4399-99b3-4329200f4ed6">UCSB</a></li></ul></div> +<h4>New Mexico<a name="483e8936-1d16-4486-a661-92c662f34d97"></a></h4><p>I have known John since he was a teenager.</p> +<p>In the late 1960's, John's father, Ed Gilbert, together with fellow mathematicians Don Morrison and Sto Bell, left their jobs at Sandia National Labs in Albuquerque and established the Computer Science Department at the University of New Mexico. Ed was especially interested in undergraduate education and led the department to early adoption of Pascal and Unix in the curriculum.</p> +<p>In 1972, my wife at the time, Nancy Martin, and I were seeking a university where we could both have faculty positions. UNM offered me a job in the Math Department and Nancy one in Computer Science. I stayed at UNM for 13 years, eventually succeeding Morrison as Chairman of Computer Science.</p> +<p>When I first met the Gilbert family in '72, both John and his younger brother Erik were undergrad students at UNM. A year later, both brothers were admitted to grad school in Computer Science at Stanford. After getting their Ph.D.'s in CS at Stanford, Erik went on to cofound a software company that produced a dialect of Lisp and John joined the Computer Science Department at Cornell.</p> +<h4>Xerox PARC<a name="0be2f0ed-b459-4a36-af7a-57fefb22d647"></a></h4><p>After several years at Cornell, John returned to California and the famous Xerox Palo Alto Research Center.</p> +<p>Sometime around Christmas in 1988, Ian Duff, the British authority on sparse matrices, wanted to go skiing in the Sierras. Iain arranged with Gene Golub to give a talk at Stanford. I was living in Menlo Park at the time and went to the talk. So did John Gilbert and Rob Schreiber, from Hewlett Packard Research in Palo Alto.</p> +<p>After the talk, everybody went for coffee at Tresidder, Stanford's student union. During the ensuing discussion, John, Rob and I decided it was time to have sparse matrices in MATLAB. The first new data structure in MATLAB and its description resulted. See the links at <a href="https://epubs.siam.org/doi/10.1137/0613024">SIAM</a> and <a href="https://www.mathworks.com/help/pdf_doc/otherdocs/simax.pdf">MathWorks</a>.</p> +<h4>Friendship<a name="e413f7b9-c197-454d-b046-d30190db4c17"></a></h4><p>Our collaboration on sparse matrices has led to an enduring friendship. Every year, at SCxx, the High Performance Computing conference in November, the three of us and Jack Dongarra get together. Here we are with Sven Hammarling from NAG, at SC17 in Denver.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/sc17.jpg" vspace="5" /> </p> +<h4>UCSB<a name="3b88cae7-503d-4399-99b3-4329200f4ed6"></a></h4><p>After a dozen years at PARC, John returned to academic life at the University of California near Santa Barbara. Last Saturday, Aydin Buluc and Daniel Lokshtanov, two of John's UCSB Ph. D. students, organized the JRG70 workshop. Here is a link to the Web page, including the list of talks presented. <a href="https://sites.google.com/lbl.gov/jrg70/home">link</a>. It was the first time since Tresidder that Iain, John, Rob and I have all been together.</p> +<p>Here is a portrait of the JRG70 participants. As usual, John is being modest; he's in the back row, in a burgundy sweater.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/jrg70.jpg" vspace="5" /> </p> +<!-- + function grabCode_6a6c6e1bce6a40f28847707c01157cbb() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='6a6c6e1bce6a40f28847707c01157cbb ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 6a6c6e1bce6a40f28847707c01157cbb'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +6a6c6e1bce6a40f28847707c01157cbb ##### SOURCE BEGIN ##### +%% Happy Birthday, John Gilbert +% I have just returned from a one-day workshop at U. C. Santa Barbara +% honoring John Gilbert on his 70th birthday and his +% official retirement after 20 years on the UCSB faculty. +% +% <<johnrgilbert.jpg>> +% + +%% New Mexico +% I have known John since he was a teenager. + +%% +% In the late 1960's, John's father, Ed Gilbert, together with fellow +% mathematicians Don Morrison and Sto Bell, left their jobs at +% Sandia National Labs in Albuquerque and established the Computer +% Science Department at the University of New Mexico. Ed was +% especially interested in undergraduate education and led the +% department to early adoption of Pascal and Unix in the curriculum. + +%% +% In 1972, my wife at the time, Nancy Martin, and I were seeking a +% university where we could both have faculty positions. UNM offered +% me a job in the Math Department and Nancy one in Computer Science. +% I stayed at UNM for 13 years, eventually succeeding Morrison as +% Chairman of Computer Science. + +%% +% When I first met the Gilbert family in '72, both John and his younger +% brother Erik were undergrad students at UNM. A year later, both +% brothers were admitted to grad school in Computer Science at Stanford. +% After getting their Ph.D.'s in CS at Stanford, Erik went on to +% cofound a software company that produced a dialect of Lisp and +% John joined the Computer Science Department at Cornell. + +%% Xerox PARC +% After several years at Cornell, John returned to California and +% the famous Xerox Palo Alto Research Center. +% +% Sometime around Christmas in 1988, Ian Duff, the British authority on +% sparse matrices, wanted to go skiing in the Sierras. Iain arranged with +% Gene Golub to give a talk at Stanford. I was living in Menlo Park +% at the time and went to the talk. So did John Gilbert and Rob Schreiber, +% from Hewlett Packard Research in Palo Alto. +% +% After the talk, everybody went for coffee at Tresidder, Stanford's +% student union. During the ensuing discussion, John, Rob and I decided +% it was time to have sparse matrices in MATLAB. The first new data +% structure in MATLAB and its description resulted. See the links at +% <https://epubs.siam.org/doi/10.1137/0613024 +% SIAM> and +% <https://www.mathworks.com/help/pdf_doc/otherdocs/simax.pdf +% MathWorks>. + +%% Friendship +% Our collaboration on sparse matrices has led to an enduring friendship. +% Every year, at SCxx, the High Performance Computing conference in +% November, the three of us and Jack Dongarra get together. Here we are +% with Sven Hammarling from NAG, at SC17 in Denver. +% +% <<SC17.jpg>> +% + +%% UCSB +% After a dozen years at PARC, John returned to academic life at +% the University of California near Santa Barbara. +% Last Saturday, Aydin Buluc and Daniel Lokshtanov, two of John's +% UCSB Ph. D. students, organized the JRG70 workshop. Here is a +% link to the Web page, including the list of talks presented. +% <https://sites.google.com/lbl.gov/jrg70/home link>. +% It was the first time since Tresidder that Iain, John, Rob and I +% have all been together. +% +% Here is a portrait of the JRG70 participants. As usual, John is +% being modest; he's in the back row, in a burgundy sweater. +% +% <<jrg70.jpg>> + + + +##### SOURCE END ##### 6a6c6e1bce6a40f28847707c01157cbb +--> + + + + + Special Notice + + 2023-04-04T15:12:36-06:00 + https://hpc.social/2023/special-notice + <div class="content"><h3>Special Notice</h3><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/notice.png" vspace="5" /> </p> +<p>If you have been following my posts about Wordle, be sure to see the puzzle in today's <i>New York Times</i>, Tuesday, April 4.</p> +<!-- + function grabCode_455754acb45549b2b4f3c459b7fef0d9() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='455754acb45549b2b4f3c459b7fef0d9 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 455754acb45549b2b4f3c459b7fef0d9'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +455754acb45549b2b4f3c459b7fef0d9 ##### SOURCE BEGIN ##### +%% Special Notice +% +% <<notice.png>> +% +% If you have been following my posts about Wordle, be sure to see +% the puzzle in today's _New York Times_, Tuesday, April 4. + +##### SOURCE END ##### 455754acb45549b2b4f3c459b7fef0d9 +--> + + + + + My Chat with Ernie, a Chinese Chat Bot + + 2023-04-01T05:00:26-06:00 + https://hpc.social/2023/my-chat-with-ernie-a-chinese-chat-bot + <div class="content"><!--introduction--><p>I recently had an opportunity to chat with Ernie, the Large Language Model currently under development at the Chinese internet search giant, <a href="https://www.cnbc.com/2023/02/07/baidu-shares-leaps-as-it-reveals-plan-for-chatgpt-style-ernie-bot.html">Baidu</a>. As I expected, Ernie's responses are in Chinese. I don't speak Chinese, so I have asked Google Translate for the response in English.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#8bdaf182-51c2-4843-a2be-98df430c39cc">Embarrassingly Parallel</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7aad9ef7-8d41-4907-be94-fd647ab6a762">Love MATLAB?</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fc2f9078-105c-45bf-9ea6-df8e811b0de2">Cleve's Corner</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6ac55893-0202-442a-8871-ffd685ea191a">Conclusion</a></li></ul></div> +<h4>Embarrassingly Parallel<a name="8bdaf182-51c2-4843-a2be-98df430c39cc"></a></h4><p>One of my questions that Microsoft's ChatGPT answered incorrectly was</p> +<pre> Who coined the term "embarrassingly parallel?"</pre><p>Ernie's response to the same question was</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/response3.jpg" vspace="5" /> </p> +<p>Goggle translate:</p> +<pre> Who coined the embarrassing word parallel?</pre><p>Well that's a <b>very</b> unfortunate misunderstanding. And, it's just repeating the question. That's an old trick; the mother of all chat bots, <a href="https://en.wikipedia.org/wiki/ELIZA">Eliza</a> , used it over sixty years ago.</p> +<h4>Love MATLAB?<a name="7aad9ef7-8d41-4907-be94-fd647ab6a762"></a></h4><p>One of the questions I often ask when I meet someone for the first time is</p> +<pre> Do you use MATLAB?</pre><p>Earnie's reply was</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/response1.jpg" vspace="5" /> </p> +<p>Google translation is</p> +<pre> I think I love you.</pre><p>Well, that's nice, but doesn't really answer my question.</p> +<h4>Cleve's Corner<a name="fc2f9078-105c-45bf-9ea6-df8e811b0de2"></a></h4><p>Can a chat bot assist with writing this blog? I don't expect help with the MATLAB code, or with the graphics, or with any mathematics. How about the prose, if it isn't too technical.</p> +<p>Here is the opening sentence of the <a href="https://blogs.mathworks.com/cleve/2023/02/04/matrices-in-action-grafix-2-0/">post I made a few weeks ago</a>.</p> +<pre> The 4-by-4 matrices in the panels on the following screenshots + are at the heart of computer graphics.</pre><p>I asked Ernie how that would look in Chinese. Ernie responded with</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/response2.jpg" vspace="5" /> </p> +<p>When Google translates that back to English, we get</p> +<pre> The 4&times;4 matrix in the screenshot panel below is at the heart of + computer graphics.</pre><p>Ernie decided to make the sentence singular, which happens to shorten it. But I am afraid that isn't much help for this blog.</p> +<h4>Conclusion<a name="6ac55893-0202-442a-8871-ffd685ea191a"></a></h4><p>I have already described <a href="https://blogs.mathworks.com/cleve/2023/02/21/my-chat-with-chatgpt/">my chat with ChatGPT</a>. This Chinese competitor is certainly not an improvement. For now, I will continue to produce this blog the old fashioned way, without any "help" from AI.</p> +<!-- + function grabCode_1ab0a9dd4230472ebcebbecc859ab36c() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='1ab0a9dd4230472ebcebbecc859ab36c ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 1ab0a9dd4230472ebcebbecc859ab36c'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +1ab0a9dd4230472ebcebbecc859ab36c ##### SOURCE BEGIN ##### +%% My Chat with Ernie, a Chinese Chat Bot +% I recently had an opportunity to chat with Ernie, the Large Language +% Model currently under development at the Chinese internet search giant, +% <https://www.cnbc.com/2023/02/07/baidu-shares-leaps-as-it-reveals-plan-for-chatgpt-style-ernie-bot.html +% Baidu>. As I expected, Ernie's responses are in Chinese. +% I don't speak Chinese, so I have asked Google Translate for the response +% in English. + +%% Embarrassingly Parallel +% One of my questions that Microsoft's ChatGPT answered incorrectly +% was +% +% Who coined the term "embarrassingly parallel?" +% +% Ernie's response to the same question was +% +% <<response3.jpg>> +% +% Goggle translate: +% +% Who coined the embarrassing word parallel? +% +% Well that's a *very* unfortunate misunderstanding. +% And, it's just repeating the question. +% That's an old trick; the mother of all chat bots, +% <https://en.wikipedia.org/wiki/ELIZA +% Eliza> , used it over sixty years ago. + +%% Love MATLAB? +% One of the questions I often ask when I meet someone for the first +% time is +% +% Do you use MATLAB? +% +% Earnie's reply was +% +% <<response1.jpg>> +% +% Google translation is +% +% I think I love you. +% +% Well, that's nice, but doesn't really answer my question. + +%% Cleve's Corner +% Can a chat bot assist with writing this blog? +% I don't expect help with the MATLAB code, or with the graphics, or with +% any mathematics. How about the prose, if it isn't too technical. +% +% Here is the opening sentence of the +% <https://blogs.mathworks.com/cleve/2023/02/04/matrices-in-action-grafix-2-0/ +% post I made a few weeks ago>. +% +% The 4-by-4 matrices in the panels on the following screenshots +% are at the heart of computer graphics. +% +% I asked Ernie how that would look in Chinese. +% Ernie responded with +% +% <<response2.jpg>> +% +% When Google translates that back to English, we get +% +% The 4×4 matrix in the screenshot panel below is at the heart of +% computer graphics. +% +% Ernie decided to make the sentence singular, which happens to +% shorten it. But I am afraid that isn't much help for this blog. + +%% Conclusion +% I have already described +% <https://blogs.mathworks.com/cleve/2023/02/21/my-chat-with-chatgpt/ +% my chat with ChatGPT>. +% This Chinese competitor is certainly not an improvement. +% For now, I will continue to produce this blog the old fashioned way, +% without any "help" from AI. +##### SOURCE END ##### 1ab0a9dd4230472ebcebbecc859ab36c +--> + + + + + Three Wordle Assistants + + 2023-03-28T03:00:55-06:00 + https://hpc.social/2023/three-wordle-assistants + <div class="content"><!--introduction--><p>When I tackle a Wordle puzzle, I like to make all the key decisions myself. My three assistants set up puzzles and suggest words when I ask for help, but I guide the actual solution. My assistants also make it possible for me to play Wordle anywhere, anytime, even when my laptop is in airplane mode. I don't need the <i>New York Times</i> or access to the Web.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#dacb9b49-209b-4bd4-9600-ddcbf92f222e">Three Assistants</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9a0fa3c8-2ea4-4e0d-8679-69e40f59921c">Vocabulary</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fef3bbd2-49bf-47e0-b344-69a2b844ce95">Words</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#313da354-b5c6-4675-929e-3bbe89e7a74a">Wordle</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#bc74a1cc-f3c3-4b86-bd1b-7a19d18b8d36">NYT</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a2a62471-6d35-4253-8c11-b0de6725afd4">Pared Down</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3634c294-6419-4ca0-9339-7a1e50630492">Five Golds</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fb298646-e9d7-4395-ba63-3e8d2607dc82">Thanks</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3daf42e9-4815-4553-9b08-c2945d557011">Software</a></li></ul></div> +<h4>Three Assistants<a name="dacb9b49-209b-4bd4-9600-ddcbf92f222e"></a></h4><p><tt>Wordler</tt>, <tt>Words</tt> and <tt>Wordie</tt> are the three assistants. <tt>Wordler</tt> replaces the <i>Times</i> by generating puzzles and evaluating responses. <tt>Words</tt> provides lists of possible responses. <tt>Wordie</tt> handles the Wordler Window and colors the letters gray, green or gold.</p> +<h4>Vocabulary<a name="9a0fa3c8-2ea4-4e0d-8679-69e40f59921c"></a></h4><p><tt>Words</tt> has a <tt>vocabulary</tt> of 4665 five-letter English words. Any of them are acceptable responses. The vocabulary begins with</p> +<pre> vocab = [ ... + "ABEAM" "ABETS" "ABHOR" "ABIDE" "ABLED" "ABLER" "ABODE" "ABORT" ...</pre><p>And, 584 lines later, ends with</p> +<pre> "ZILCH" "ZINCS" "ZINGS" "ZIPPY" "ZOMBI" "ZONAL" "ZONED" "ZONES" ... + "ZOOMS" ];</pre><p>If you were to print the entire vocabulary with 40 lines per page, you would print over 100 pages of words.</p> +<h4>Words<a name="fef3bbd2-49bf-47e0-b344-69a2b844ce95"></a></h4><p>It took me a long time to write the <tt>Words</tt> assistant, which is called whenever the Words button in the Wordle Window is clicked.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/ratio.gif" vspace="5" /> </p> +<p><tt>Words</tt> is supported by a seventeen-program library of functions named <tt>Wordspq</tt> where <tt>p</tt> and <tt>q</tt> are nonnegative integers with <tt>p+q &lt;= 5</tt>. <tt>Wordspq</tt> finds words with <tt>p</tt> green letters and <tt>q</tt> gold letters. The programs in the <tt>Words</tt> library all have the same structure involving five nested <tt>for</tt> loops.</p> +<p>The last line of <tt>Words</tt> is</p> +<pre> feval(['Words' p q],Gray,Green,GreenLoc,Gold,GoldLoc)</pre><p><tt>Gray</tt>, <tt>Green</tt> and <tt>Gold</tt> are lists of letters with specified colors and with locations <tt>GreenLoc</tt> and <tt>GoldLoc</tt>. Locating the green letters is easy because they must be in specific slots. Locating the gold letters is tricky because each of them can be in any of several different slots.</p> +<p>For example, this situation in the NYT puzzle described below would result in a call to <tt>Words13</tt> with</p> +<pre> Gray = 'AIHEC' + Green = 'T' + GreenLoc = 5 + Gold = 'ROU' + GoldLoc = {[2,3],[3,4],[1,2,4]}</pre><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/grout3.gif" vspace="5" /> </p> +<h4>Wordle<a name="313da354-b5c6-4675-929e-3bbe89e7a74a"></a></h4><p><tt>Wordle</tt> starts a game by choosing a secret random target from the vocabulary, or from a smaller subset about half the size. At the same time, I choose my starting word, which is usually <tt>RATIO</tt>. My assistants respond with the Wordler Window and a simple keyboard.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/keybored.png" vspace="5" /> </p> +<p>The gold <tt>O</tt> tells me the target contains an <tt>O</tt>, that it is not in position 5, and the target does not contain <tt>R</tt>, <tt>A</tt>, <tt>T</tt>, or <tt>I</tt>. I know there are hundreds of such words in the vocabulary. One of them is <tt>DEMOS</tt>, which I enter on the keyboard.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/demos.gif" vspace="5" /> </p> +<p><tt>DEMOS</tt> happens to be a very lucky choice. The target has an <tt>E</tt> in the second slot, an <tt>S</tt> in the last slot, <tt>M</tt> and <tt>O</tt> in the remaining slots, and no <tt>D</tt>. When the answer does not occur to me in a minute or two, I click the <tt>Words</tt> button. The response is</p> +<pre> MEOWS + cnt = 1</pre><p>So, there is only one word to choose, and it earns five greens.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/meows.gif" vspace="5" /> </p> +<h4>NYT<a name="bc74a1cc-f3c3-4b86-bd1b-7a19d18b8d36"></a></h4><p>Let's do the <i>Times</i> puzzle from March 23. I start with my mathematical <tt>RATIO</tt>. I see that the answer contains <tt>R</tt>, <tt>T</tt> and <tt>O</tt> and does not contain <tt>A</tt> or <tt>I</tt>.</p> +<p>I happen to remember that <tt>OTHER</tt> qualifies. It does not hit any new letters, but it places additional restrictions on the ones I already have and eliminates <tt>E</tt> and <tt>H</tt>.</p> +<p><tt>Words</tt> now lists 37 words that I should choose from. I pick <tt>COURT</tt> because it contains <tt>U</tt>, the only remaining vowel.</p> +<p><tt>Words</tt> informs me that there are only two possibilities left, <tt>TROUT</tt> and <tt>GROUT</tt>. I pick the one without a double consonant and it is the winner.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/grout_combo.gif" vspace="5" /> </p> +<h4>Pared Down<a name="a2a62471-6d35-4253-8c11-b0de6725afd4"></a></h4><p>Here is an atypical, but instructive, example. For this puzzle I am pleased to see <tt>Wordler</tt> gives <tt>RATIO</tt> a green <tt>A</tt> in position 2 and a gold <tt>R</tt> somewhere in positions 3 through 5. I remember one of my favorite "technical" terms, <tt>PARSE</tt>.</p> +<p>To use a baseball metaphor, <tt>PARSE</tt> hits a triple and almost gets an in-the-park home run. Now I need to ask <tt>Words</tt> for qualifying responses. There are exactly two, <tt>PARED</tt> and <tt>PARER</tt>. (Both come from the verb "to pare", which means to cut the outer skin off something.)</p> +<p>One of the choices has a double consonant, so I choose the other one. When it doesn't fly, the only choice left earns the five-leaf clover.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/parer_combo.gif" vspace="5" /> </p> +<h4>Five Golds<a name="3634c294-6419-4ca0-9339-7a1e50630492"></a></h4><p>How do I generate five golds? I need the starting guess to be a <i>permutation</i> of the final answer. A few moments thought suggests <tt>TAKES</tt> and <tt>SKATE</tt>. I am sure there are other possibilities. But this one is special because <tt>STEAK</tt> makes it triplets. <tt>TEAKS</tt> would make four permutations but does not meet the "hard mode" restrictions.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/skate_combo.gif" vspace="5" /> </p> +<h4>Thanks<a name="fb298646-e9d7-4395-ba63-3e8d2607dc82"></a></h4><p>Over a year ago, MATLAB programs for solving Wordle puzzles were described by <a href="https://blogs.mathworks.com/loren/2022/01/18/building-a-wordle-solver/">Adam Filion</a> as a guest blogger on Loren's blog and by <a href="https://www.youtube.com/watch?v=bVTcQtEnOlk">Matt Tearle</a> with a YouTube video.</p> +<h4>Software<a name="3daf42e9-4815-4553-9b08-c2945d557011"></a></h4><p>Working on my Wordle obsession has been very interesting. I have developed some useful tools and I see forgotten five-letter words everywhere. You can share the fun by downloading the code at <a href="https://blogs.mathworks.com/cleve/files/Wordler_mzip.m">this link</a> and running it yourself.</p> +<!-- + function grabCode_5b2bc84c600a4474a0eabbc4d9bb6ab8() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='5b2bc84c600a4474a0eabbc4d9bb6ab8 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 5b2bc84c600a4474a0eabbc4d9bb6ab8'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +5b2bc84c600a4474a0eabbc4d9bb6ab8 ##### SOURCE BEGIN ##### +%% Three Wordle Assistants +% When I tackle a Wordle puzzle, I like to make all the key decisions +% myself. My three assistants set up puzzles and suggest words +% when I ask for help, but I guide the actual solution. +% My assistants also make it possible for me to play Wordle anywhere, +% anytime, even when my laptop is in airplane mode. +% I don't need the _New York Times_ or access to the Web. + +%% Three Assistants +% |Wordler|, |Words| and |Wordie| are the three assistants. +% |Wordler| replaces the _Times_ by generating puzzles +% and evaluating responses. +% |Words| provides lists of possible responses. +% |Wordie| handles the Wordler Window and colors the letters gray, +% green or gold. + +%% Vocabulary +% |Words| has a |vocabulary| of 4665 five-letter English words. +% Any of them are acceptable responses. +% The vocabulary begins with +% +% vocab = [ ... +% "ABEAM" "ABETS" "ABHOR" "ABIDE" "ABLED" "ABLER" "ABODE" "ABORT" ... +% +% And, 584 lines later, ends with +% +% "ZILCH" "ZINCS" "ZINGS" "ZIPPY" "ZOMBI" "ZONAL" "ZONED" "ZONES" ... +% "ZOOMS" ]; +% +% If you were to print the entire vocabulary with 40 lines per page, +% you would print over 100 pages of words. + +%% Words +% It took me a long time to write the |Words| assistant, which is +% called whenever the Words button in the Wordle Window is clicked. +% +% <<ratio.gif>> +% +% |Words| is supported by a seventeen-program library of functions +% named |Wordspq| where |p| and |q| are nonnegative integers +% with |p+q <= 5|. +% |Wordspq| finds words with |p| green letters and |q| gold letters. +% The programs in the |Words| library all have the same structure +% involving five nested |for| loops. +% +% The last line of |Words| is +% +% feval(['Words' p q],Gray,Green,GreenLoc,Gold,GoldLoc) +% +% |Gray|, |Green| and |Gold| are lists of letters with specified +% colors and with locations |GreenLoc| and |GoldLoc|. Locating the +% green letters is easy because they must be in specific slots. +% Locating the gold letters is tricky because each of them +% can be in any of several different slots. +% +% For example, this situation in the NYT puzzle described below +% would result in a call to |Words13| with +% +% Gray = 'AIHEC' +% Green = 'T' +% GreenLoc = 5 +% Gold = 'ROU' +% GoldLoc = {[2,3],[3,4],[1,2,4]} +% +% <<grout3.gif>> + +%% Wordle +% |Wordle| starts a game by choosing a secret random target +% from the vocabulary, or from a smaller subset about half the size. +% At the same time, I choose my starting word, which is usually +% |RATIO|. My assistants respond with the Wordler Window +% and a simple keyboard. +% +% <<keybored.png>> +% + +%% +% The gold |O| tells me the target contains an |O|, that it is not +% in position 5, and the target does not contain |R|, |A|, |T|, or |I|. +% I know there are hundreds of such words in the vocabulary. +% One of them is |DEMOS|, which I enter on the keyboard. +% +% <<demos.gif>> +% + +%% +% |DEMOS| happens to be a very lucky choice. The target has an +% |E| in the second slot, an |S| in the last slot, |M| and |O| +% in the remaining slots, and no |D|. +% When the answer does not occur to me in a minute or two, +% I click the |Words| button. The response is +% +% MEOWS +% cnt = 1 +% +% So, there is only one word to choose, and it earns five greens. +% +% <<meows.gif>> +% + +%% NYT +% Let's do the _Times_ puzzle from March 23. +% I start with my mathematical |RATIO|. +% I see that the answer contains |R|, |T| and |O| and does +% not contain |A| or |I|. +% +% I happen to remember that |OTHER| qualifies. It does not hit +% any new letters, but it places additional restrictions on +% the ones I already have and eliminates |E| and |H|. +% +% |Words| now lists 37 words that I should choose from. I pick |COURT| +% because it contains |U|, the only remaining vowel. +% +% |Words| informs me that there are only two possibilities left, +% |TROUT| and |GROUT|. I pick the one without a double consonant +% and it is the winner. +% +% <<grout_combo.gif>> + +%% Pared Down +% Here is an atypical, but instructive, example. For this puzzle +% I am pleased to see |Wordler| gives |RATIO| a green |A| in position 2 +% and a gold |R| somewhere in positions 3 through 5. I remember one of +% my favorite "technical" terms, |PARSE|. +% +% To use a baseball metaphor, |PARSE| hits a triple and almost +% gets an in-the-park home run. Now I need to ask |Words| +% for qualifying responses. There are exactly two, |PARED| and +% |PARER|. (Both come from the verb "to pare", which means to cut +% the outer skin off something.) +% +% One of the choices has a double consonant, so I choose the other +% one. When it doesn't fly, the only choice left earns the +% five-leaf clover. +% +% <<parer_combo.gif>> +% + +%% Five Golds +% How do I generate five golds? I need the starting guess to be +% a _permutation_ of the final answer. A few moments thought +% suggests |TAKES| and |SKATE|. I am sure there are other possibilities. +% But this one is special because |STEAK| makes it triplets. +% |TEAKS| would make four permutations but does not meet +% the "hard mode" restrictions. +% +% <<skate_combo.gif>> +% + +%% Thanks +% Over a year ago, MATLAB programs for solving Wordle puzzles +% were described by +% <https://blogs.mathworks.com/loren/2022/01/18/building-a-wordle-solver/ +% Adam Filion> as a guest blogger on Loren's blog and by +% <https://www.youtube.com/watch?v=bVTcQtEnOlk +% Matt Tearle> with a YouTube video. + +%% Software +% Working on my Wordle obsession has been very interesting. +% I have developed some useful tools and I see forgotten five-letter +% words everywhere. You can share the fun by downloading the code at +% <https://blogs.mathworks.com/cleve/files/Wordler_mzip.m +% this link> and running it yourself. +##### SOURCE END ##### 5b2bc84c600a4474a0eabbc4d9bb6ab8 +--> + + + + + Wordle Sneak Previews + + 2023-03-24T19:18:10-06:00 + https://hpc.social/2023/wordle-sneak-previews + <div class="content"><!--introduction--><!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#55eb7850-c832-4b41-9b94-907594d82fcc">Early Birds</a></li></ul></div> +<h4>Early Birds<a name="55eb7850-c832-4b41-9b94-907594d82fcc"></a></h4><p>There several sites on the Web that reveal the solution to the Wordle puzzle in the <i>New York Times</i> while it is still in play. Some of these sites are in India, where India Standard Time is 9-1/2 hours ahead of Eastern Daylight Time, so India sees the puzzle long before the USA does. These sites surround their puzzle clues with ads and are trying to get more visitors.</p> +<p>For a while, whenever I get a chance, I intend try to update this animation with the latest reveals. I don't have any obvious ads, but I have to admit that my own motivation is similar to the other sites.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/word_gif37.gif" vspace="5" /> </p> +<!-- + function grabCode_432eb9e3bcc34e8da1135593bb49ee5f() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='432eb9e3bcc34e8da1135593bb49ee5f ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 432eb9e3bcc34e8da1135593bb49ee5f'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +432eb9e3bcc34e8da1135593bb49ee5f ##### SOURCE BEGIN ##### +%% Wordle Sneak Previews + +%% Early Birds +% There several sites on the Web that reveal the solution to the +% Wordle puzzle in the _New York Times_ while it is still in play. +% Some of these sites are in India, where India Standard Time is +% 9-1/2 hours ahead of Eastern Daylight Time, so India sees +% the puzzle long before the USA does. +% These sites surround their puzzle clues with ads +% and are trying to get more visitors. +% +% For a while, whenever I get a chance, I intend try to update this +% animation with the latest reveals. I don't have any obvious ads, +% but I have to admit that my own motivation is similar to the other +% sites. +% +% <<word_gif37.gif>> +% +##### SOURCE END ##### 432eb9e3bcc34e8da1135593bb49ee5f +--> + + + + + WordBot and Words, My Wordle Assistants + + 2023-03-11T19:07:02-07:00 + https://hpc.social/2023/wordbot-and-words-my-wordle-assistants + <div class="content"><!--introduction--><p>I am late joining the Wordle craze. Over a year ago, MATLAB programs for solving Wordle puzzles were described by <a href="https://blogs.mathworks.com/loren/2022/01/18/building-a-wordle-solver/">Adam Filion</a> as a guest blogger on Loren's blog and by <a href="https://www.youtube.com/watch?v=bVTcQtEnOlk">Matt Tearle</a> with a YouTube video. But my programs for Wordle Assistants are different. <tt>WordBot</tt> doesn't try to solve any puzzles and <tt>Words</tt> just supplies lists of possible words. I enjoy providing the solution logic myself.</p> +<p>Here are two examples, taken from recent Wordle puzzles in the <a href="https://www.nytimes.com/games/wordle/index.html"><i>New York Times</i></a>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#07e1455b-4718-47a2-93c5-cce24028b05f">Wednesday</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e5f6c4a9-b502-447f-9003-f6a351a4a093">Thursday</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#f246159e-8444-40a5-9280-1750f81c8c5d">Four Days in March</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fa65c920-c034-4600-910d-ad06c3df4153">Software</a></li></ul></div> +<h4>Wednesday<a name="07e1455b-4718-47a2-93c5-cce24028b05f"></a></h4><p><tt>WordBot</tt> has a list of 4676 possible words, but knows nothing about their probabilities, so I don't ask for any assistance with the opening guess.</p> +<p>I like to use mathematical words whenever possible. I usually start with <tt>RATIO</tt>, which has three vowels and two popular consonants. <tt>RATIO</tt> was a good opening move for the puzzle in the <i>Times</i> on Wednesday. It received a green <tt>R</tt> and a gold <tt>A</tt>. I informed <tt>WordBot</tt> of our good fortune using 2, 1 and 0 to indicate green, gold and gray. My faithful assistant responded by reproducing the first graphic in the <i>Times</i>.</p> +<pre class="codeinput"> WordBot <span class="string">ratio</span> <span class="string">21000</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_01.png" vspace="5" /> <p><tt>Words</tt> is my suite of programs that produce lists of acceptable words for various scenarios. In this situation with an <tt>R</tt> as the first letter, an <tt>A</tt> somewhere in the last three letters and <tt>T</tt>, <tt>I</tt> and <tt>O</tt> on the gray list, <tt>Words</tt> finds 25 words, starting with <tt>REACH</tt> and ending with <tt>RUMBA</tt>.</p> +<p>The last of those 25 words got my attention. I decided to try <tt>RUMBA</tt> on my second move. I knew <tt>RUMBA</tt> was unlikely to succeed but would be spectacular if it did. Sure enough, Wordle didn't want to dance.</p> +<pre class="codeinput"> WordBot <span class="string">rumba</span> <span class="string">20001</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_02.png" vspace="5" /> <p>Three more letters gray-listed and <tt>A</tt> limited to two slots reduces the number of possible words from 25 to 18. The first word on the list is still <tt>REACH</tt>.</p> +<pre class="codeinput"> WordBot <span class="string">reach</span> <span class="string">22100</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_03.png" vspace="5" /> <p>There are now 11 possibilities.</p> +<pre class="language-matlab">READS +READY +REALS +REAPS +REARS +REGAL +RELAX +RELAY +RENAL +REPAY +RERAN +</pre><p>I need to relax.</p> +<pre class="codeinput"> WordBot <span class="string">relax</span> <span class="string">22120</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_04.png" vspace="5" /> <p>I don't need another list of possibilities. I can quickly see the previous list has only two words that end in <tt>L</tt>. The choice between "fit for a monarch" and "pertaining to kidney function" is clear. I have solved Wednesday's puzzle in five moves, including the Hail Mary at move two.</p> +<pre class="codeinput"> WordBot <span class="string">regal</span> <span class="string">22222</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_05.png" vspace="5" /> <pre class="codeinput"> close +</pre><h4>Thursday<a name="e5f6c4a9-b502-447f-9003-f6a351a4a093"></a></h4><p>Thursday's puzzle in the <i>Times</i> offered different challenges. As always, I started with <tt>RATIO</tt>. This time I get only one gold letter.</p> +<pre class="codeinput"> WordBot <span class="string">ratio</span> <span class="string">10000</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_06.png" vspace="5" /> <p>I need an <tt>R</tt> somewhere in the last four positions and can't use <tt>A</tt>, <tt>T</tt>, <tt>I</tt> or <tt>O</tt>. <tt>Words</tt> knows 229 qualified candidates. I choose another mathematical word.</p> +<pre class="codeinput"> WordBot <span class="string">perms</span> <span class="string">01100</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_07.png" vspace="5" /> <p>I now must have an <tt>R</tt> and an <tt>E</tt> and can't have any of those seven grays. <tt>Words</tt> offers 72 possibilities. Have I been in an accident?</p> +<pre class="codeinput"> WordBot <span class="string">wreck</span> <span class="string">21200</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_08.png" vspace="5" /> <p>Well, that's much better. Two greens, one gold, and nine grays. There is only one possibility. The solution must be <tt>WHERE</tt>.</p> +<pre class="codeinput"> WordBot <span class="string">where</span> <span class="string">22222</span> +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/WordBot_blog_09.png" vspace="5" /> <pre class="codeinput"> close +</pre><h4>Four Days in March<a name="f246159e-8444-40a5-9280-1750f81c8c5d"></a></h4><p>Wednesday, Thursday, Friday and Saturday.</p> +<p>If your browser isn't showing the animation, <a href="https://blogs.mathworks.com/cleve/files/word_gif.gif">look here</a>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/word_gif.gif" vspace="5" /> </p> +<h4>Software<a name="fa65c920-c034-4600-910d-ad06c3df4153"></a></h4><p><a href="https://blogs.mathworks.com/cleve/files/WordBot_2_mzip.m">This code</a> is immature. Be gentle and let me know how it works for you.</p> +<!-- + function grabCode_a44a8488723741b3acf8277d1f858a07() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='a44a8488723741b3acf8277d1f858a07 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' a44a8488723741b3acf8277d1f858a07'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +a44a8488723741b3acf8277d1f858a07 ##### SOURCE BEGIN ##### +%% WordBot and Words, My Wordle Assistants +% I am late joining the Wordle craze. +% Over a year ago, MATLAB programs for solving Wordle puzzles +% were described by +% <https://blogs.mathworks.com/loren/2022/01/18/building-a-wordle-solver/ +% Adam Filion> as a guest blogger on Loren's blog and by +% <https://www.youtube.com/watch?v=bVTcQtEnOlk +% Matt Tearle> with a YouTube video. +% But my programs for Wordle Assistants are different. +% |WordBot| doesn't try to solve any puzzles and +% |Words| just supplies lists of possible words. +% I enjoy providing the solution logic myself. +% +% Here are two examples, taken from recent Wordle puzzles in the +% <https://www.nytimes.com/games/wordle/index.html +% _New York Times_>. + + +%% Wednesday +% |WordBot| has a list of 4676 possible words, +% but knows nothing about their probabilities, so I don't ask +% for any assistance with the opening guess. +% +% I like to use mathematical words whenever possible. +% I usually start with |RATIO|, which has three vowels and two +% popular consonants. |RATIO| was a good opening move +% for the puzzle in the _Times_ on Wednesday. +% It received a green |R| and a gold |A|. +% I informed |WordBot| of our good fortune using +% 2, 1 and 0 to indicate green, gold and gray. +% My faithful assistant responded by reproducing the first +% graphic in the _Times_. + + WordBot ratio 21000 + + +%% +% |Words| is my suite of programs that produce lists of +% acceptable words for various scenarios. In this situation +% with an |R| as the first letter, an |A| somewhere in the last +% three letters and |T|, |I| and |O| on the gray list, |Words| +% finds 25 words, starting with |REACH| and ending with |RUMBA|. +% +% The last of those 25 words got my attention. I decided to try |RUMBA| +% on my second move. +% I knew |RUMBA| was unlikely to succeed but would be +% spectacular if it did. Sure enough, Wordle didn't want to dance. + + WordBot rumba 20001 + +%% +% Three more letters gray-listed and |A| limited to two slots reduces the +% number of possible words from 25 to 18. +% The first word on the list is still |REACH|. + + WordBot reach 22100 + +%% +% There are now 11 possibilities. +% +% READS +% READY +% REALS +% REAPS +% REARS +% REGAL +% RELAX +% RELAY +% RENAL +% REPAY +% RERAN +% +% I need to relax. +% + WordBot relax 22120 + +%% +% I don't need another list of possibilities. +% I can quickly see the previous list has only two words that +% end in |L|. The choice between "fit for a monarch" and +% "pertaining to kidney function" is clear. +% I have solved Wednesday's puzzle in five moves, including the Hail Mary +% at move two. + + WordBot regal 22222 + +%% + close + +%% Thursday +% Thursday's puzzle in the _Times_ offered different challenges. +% As always, I started with |RATIO|. This time I get only one +% gold letter. + + WordBot ratio 10000 + +%% +% I need an |R| somewhere in the last four positions and can't +% use |A|, |T|, |I| or |O|. |Words| knows 229 qualified candidates. +% I choose another mathematical word. + + WordBot perms 01100 + +%% +% I now must have an |R| and an |E| and can't have any of those seven +% grays. |Words| offers 72 possibilities. Have I been in an accident? + + WordBot wreck 21200 + +%% +% Well, that's much better. Two greens, one gold, and nine grays. +% There is only one possibility. The solution must be |WHERE|. + + WordBot where 22222 + +%% + close + +%% Four Days in March +% Wednesday, Thursday, Friday and Saturday. +% +% If your browser isn't showing the animation, +% <https://blogs.mathworks.com/cleve/files/word_gif.gif +% look here>. +% +% <<word_gif.gif>> +% + +%% Software +% <https://blogs.mathworks.com/cleve/files/WordBot_2_mzip.m +% This code> is immature. Be gentle and let me know how it +% works for you. + +##### SOURCE END ##### a44a8488723741b3acf8277d1f858a07 +--> + + + + + R2-D2, Rotations and Dilations in Two Dimensions + + 2023-03-03T19:50:25-07:00 + https://hpc.social/2023/r2-d2-rotations-and-dilations-in-two-dimensions + <div class="content"><!--introduction--><p><tt>R2_D2</tt> is is the name I've given a new MATLAB program that provides animations of 2-by-2 rotation and dilation matrices. I admit I chose "dilations" so the acronym would be memorable, but otherwise the code has little to do with the famous Star Wars droid.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#44861ff7-11fc-4399-ad23-d58213ec0d26">House</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#23ac6c7d-9deb-4368-af3a-b72341fd82e0">Hand</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a87fd4bd-4298-4c71-a3c2-a9f90fa02fbe">Rotation</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4b0e42eb-235d-4dc6-8a7e-5cfafe76b486">Dilation</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3bd73ac8-4279-4bb6-b08e-9f866181f581">Both</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#384f6c01-d1f5-456f-a0d0-b31ba5b772b2"><tt>R2_D2</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#f6931ffe-5f30-439a-97cb-2e04cab0aeaf">Further Reading</a></li></ul></div> +<h4>House<a name="44861ff7-11fc-4399-ad23-d58213ec0d26"></a></h4><p>This outline of a house is featured in <a href="https://www.mathworks.com/moler/exm/chapters.html"><i>Experiments with MATLAB</i></a>. The data are the 11 blue dots. The coordinates of each dot form a 2-by-1 vector; the 2-by-2 rotation and dilation matrices multiply each of these vectors separately. (The lines between the dots complete the picture and are not involved in any computation.)</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/house.gif" vspace="5" /> </p> +<p>The house also appears in several editions of Gil Strang's textbooks. The cover of the third edition of Strang's <a href="https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0961408898"><i>Introduction to Linear Algebra</i></a> features nine houses on a quilt made by Gil's friend Chris Curtis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/quilt.png" vspace="5" /> </p> +<h4>Hand<a name="23ac6c7d-9deb-4368-af3a-b72341fd82e0"></a></h4><p>This outline of a hand, which I made from measurements of my own hand, is also used in <a href="https://www.mathworks.com/moler/exm/chapters.html"><i>Experiments with MATLAB</i></a>. There are 37 points, so <tt>Hand</tt> is a 2-by-37 matrix.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/hand.gif" vspace="5" /> </p> +<h4>Rotation<a name="a87fd4bd-4298-4c71-a3c2-a9f90fa02fbe"></a></h4><p>Multiplication by this matrix produces a two-dimensional rotation by an angle <tt>theta</tt>.</p> +<p>$$ R = \left( + \begin{array}{rr} + \cos{\theta} &amp; \sin{\theta} \\ + - \sin{\theta} &amp; \cos{\theta} + \end{array} + \right) $$</p> +<p><tt>R</tt> is displayed in the first panel. If the house is not rotating in your browser, try this link: <a href="https://blogs.mathworks.com/cleve/files/house_rotate.gif">https://blogs.mathworks.com/cleve/files/house_rotate.gif</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/house_rotate.gif" vspace="5" /> </p> +<h4>Dilation<a name="4b0e42eb-235d-4dc6-8a7e-5cfafe76b486"></a></h4><p>Dilation is the process of making objects larger or smaller. Multiplication by this diagonal matrix produces a dilation by a factor <tt>sigma</tt>.</p> +<p>$$ S = \left( + \begin{array}{rr} + \sigma &amp; 0 \\ + 0 &amp; \sigma + \end{array} + \right) $$</p> +<p><tt>S</tt> is displayed in the second panel. The animation is also available at: <a href="https://blogs.mathworks.com/cleve/files/hand_dilate.gif">https://blogs.mathworks.com/cleve/files/hand_dilate.gif</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/hand_dilate.gif" vspace="5" /> </p> +<h4>Both<a name="3bd73ac8-4279-4bb6-b08e-9f866181f581"></a></h4><p>Here rotation and dilation are combined. The product of the rotation and dilation matrices drives the action. If you are missing all the action, try: <a href="https://blogs.mathworks.com/cleve/files/hand_both.gif">https://blogs.mathworks.com/cleve/files/hand_both.gif</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/hand_both.gif" vspace="5" /> </p> +<h4><tt>R2_D2</tt><a name="384f6c01-d1f5-456f-a0d0-b31ba5b772b2"></a></h4><p>When you run <tt>R2_D2</tt> on your own computer, you can drive the rotations and dilations yourself. Mousing outside of the object creates rotation and mousing inside produces dilation.</p> +<p>The <tt>R2_D2</tt> program is available from <a href="https://blogs.mathworks.com/cleve/files/R2_D2_4.m">https://blogs.mathworks.com/cleve/files/R2_D2_4.m</a>.</p> +<h4>Further Reading<a name="f6931ffe-5f30-439a-97cb-2e04cab0aeaf"></a></h4><p>If you are not familiar with matrices, or just want a quick refresher, check out the <a href="https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/exm/chapters/matrices.pdf">Matrices</a> chapter of <a href="https://www.mathworks.com/moler/exm/chapters.html"><i>Experiments with MATLAB</i></a>. Exercise 4.14 is particularly handy.</p> +<!-- + function grabCode_0fd9ed7550fd4ba3911f9d86fad47cd5() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='0fd9ed7550fd4ba3911f9d86fad47cd5 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 0fd9ed7550fd4ba3911f9d86fad47cd5'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +0fd9ed7550fd4ba3911f9d86fad47cd5 ##### SOURCE BEGIN ##### +%% R2-D2, Rotations and Dilations in Two Dimensions +% |R2_D2| is is the name I've given a new MATLAB program that provides +% animations of 2-by-2 rotation and dilation matrices. +% I admit I chose "dilations" +% so the acronym would be memorable, but otherwise +% the code has little to do with the famous Star Wars droid. + +%% House +% This outline of a house is featured in +% <https://www.mathworks.com/moler/exm/chapters.html +% _Experiments with MATLAB_>. +% The data are the 11 blue dots. The coordinates of each dot form a 2-by-1 +% vector; the 2-by-2 rotation and dilation matrices multiply each of +% these vectors separately. (The lines between the dots complete the +% picture and are not involved in any computation.) +% +% <<house.gif>> +% +% The house also appears in several editions of Gil Strang's textbooks. +% The cover of the third edition of Strang's +% <https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0961408898 +% _Introduction to Linear Algebra_> features nine houses on a quilt +% made by Gil's friend Chris Curtis. +% +% <<quilt.png>> +% + + +%% Hand +% This outline of a hand, which I made from measurements of my own hand, +% is also used in +% <https://www.mathworks.com/moler/exm/chapters.html +% _Experiments with MATLAB_>. +% There are 37 points, so |Hand| is a 2-by-37 matrix. +% +% <<hand.gif>> +% + +%% Rotation +% Multiplication by this matrix produces a two-dimensional +% rotation by an angle |theta|. +% +% $$ R = \left( +% \begin{array}{rr} +% \cos{\theta} & \sin{\theta} \\ +% - \sin{\theta} & \cos{\theta} +% \end{array} +% \right) $$ +% +% |R| is displayed in the first panel. +% If the house is not rotating in your browser, try this link: +% <https://blogs.mathworks.com/cleve/files/house_rotate.gif> +% +% +% <<house_rotate.gif>> +% + +%% Dilation +% Dilation is the process of making objects larger or smaller. +% Multiplication by this diagonal matrix +% produces a dilation by a factor |sigma|. +% +% $$ S = \left( +% \begin{array}{rr} +% \sigma & 0 \\ +% 0 & \sigma +% \end{array} +% \right) $$ +% +% |S| is displayed in the second panel. +% The animation is also available at: +% <https://blogs.mathworks.com/cleve/files/hand_dilate.gif> +% +% +% <<hand_dilate.gif>> +% + +%% Both +% Here rotation and dilation are combined. +% The product of the rotation and dilation matrices drives the action. +% If you are missing all the action, try: +% <https://blogs.mathworks.com/cleve/files/hand_both.gif> +% +% <<hand_both.gif>> +% + +%% |R2_D2| +% When you run |R2_D2| on your own computer, you can drive the +% rotations and dilations yourself. Mousing outside of the object +% creates rotation and mousing inside produces dilation. +% +% The |R2_D2| program is available from +% <https://blogs.mathworks.com/cleve/files/R2_D2_4.m>. +% +%% Further Reading +% If you are not familiar with matrices, or just want a quick +% refresher, check out the +% <https://www.mathworks.com/content/dam/mathworks/mathworks-dot-com/moler/exm/chapters/matrices.pdf +% Matrices> chapter of +% <https://www.mathworks.com/moler/exm/chapters.html +% _Experiments with MATLAB_>. +% Exercise 4.14 is particularly handy. +##### SOURCE END ##### 0fd9ed7550fd4ba3911f9d86fad47cd5 +--> + + + + + My Chat With ChatGPT + + 2023-02-22T02:06:53-07:00 + https://hpc.social/2023/my-chat-with-chatgpt + <div class="content"><!--introduction--><p>While it is still fresh in my mind, I want to describe the conversation I had with <a href="https://openai.com/blog/chatgpt/">a publicly available version of ChatGPT</a>, the much-discussed large language model, LLM, for conversational artificial intelligence.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#5c070bbf-dca9-48a1-8be7-ac106737302f">Mixed Reception</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6bc024ea-c1ab-40ea-b7de-687748c50bc9">Where Is Sydney?</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#bfe0d37b-cc5a-4998-9d8d-f16c425327f8">Me and AI</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#d44eee64-c400-46cb-ae9e-b18066fe1fb8">Me and ChatGPT</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3fca7af1-1ac0-4481-8135-c47e5a3db750">AI Winters</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ecb671af-be78-4da3-b321-d89f60308ce3">Truth</a></li></ul></div> +<h4>Mixed Reception<a name="5c070bbf-dca9-48a1-8be7-ac106737302f"></a></h4><p>A newer version of ChatGPT than the one I used is available to selected journalists and computer industry observers. Their reaction has been, shall I say, mixed. At first, some of the reports were positive and even ecstatic. Most of these early reports were from people whose primary concern is the stock market, not AI technology. Many of the more recent and more careful reports have been negative and critical.</p> +<h4>Where Is Sydney?<a name="6bc024ea-c1ab-40ea-b7de-687748c50bc9"></a></h4><p>I have given ChatGPT the nickname "Chad". Some early users of one of Chad's competitors asked deliberately provocative questions and encountered a cranky alter-ego named "Sydney". I didn't ask my Chad any unfair questions and didn't encounter any Sydney's.</p> +<h4>Me and AI<a name="bfe0d37b-cc5a-4998-9d8d-f16c425327f8"></a></h4><p>I have been a long-time observer of -- although not a contributor to -- artificial intelligence research.</p> +<div><ul><li>I took AI courses at Stanford from the inventor of the field, John McCarthy.</li></ul></div> +<div><ul><li>Bill McKeeman and I entered McCarthy's chess program in a <i>San Francisco Chronicle's</i> by-mail chess contest. (The computer did not fair well.)</li></ul></div> +<div><ul><li>I used Joe Weizenbaum's computer program Eliza, the very first Chat Bot.</li></ul></div> +<div><ul><li>I was once married to someone with a PhD in AI.</li></ul></div> +<div><ul><li>Symbolic Math, like MathWorks now does in our Toolbox, and which we used to do with Macsyma and Maple, was once considered AI.</li></ul></div> +<div><ul><li>The wild animal trail cameras project that I did a few years ago with Heather Gorr and Jim Sanderson uses modern machine learning and AI.</li></ul></div> +<h4>Me and ChatGPT<a name="d44eee64-c400-46cb-ae9e-b18066fe1fb8"></a></h4><p>I talked to -- I should say chatted with, or actually typed at -- Chad for most of an hour on a recent evening. Think of Stephen Hawking in a Web Browser. Chad's responses were always courteous and conversational. And the majority of Chad's responses were factually correct.</p> +<p>However, a surprising number of Chad's answers were just plain wrong. Some examples:</p> +<div><ul><li>I was neither born in, nor raised in, rural New Mexico.</li></ul></div> +<div><ul><li>I did not get a PhD from the University of Michigan. Neither did my wife, Patsy.</li></ul></div> +<div><ul><li>Patsy is not the mother of my daughter Kam, nor of my sister Betsy.</li></ul></div> +<div><ul><li>Patsy is not an expert in computational fluid dynamics.</li></ul></div> +<div><ul><li>Ken Kennedy did not coin the term "embarrassingly parallel."</li></ul></div> +<div><ul><li>Pam McCorduck never worked for the Santa Fe Institute.</li></ul></div> +<div><ul><li>I cannot find any reference to the guys Chad claimed improved Sympletic Spacewar.</li></ul></div> +<p>All of Chad's incorrect responses could have been fact-checked by simple Google queries.</p> +<h4>AI Winters<a name="3fca7af1-1ac0-4481-8135-c47e5a3db750"></a></h4><p>Everybody wants to combine the conversational style offered by large language models with the reliability and breadth provided by Google. Now THAT sounds like a really good idea.</p> +<p>Artificial intelligence has a history of flush successes interspersed with fallow periods known as AI Winters. I am afraid that continued obsession with Chat Bots might lead to another AI Winter.</p> +<h4>Truth<a name="ecb671af-be78-4da3-b321-d89f60308ce3"></a></h4><p>Steve Eddins revealed the Truth behind ChatGPT with this internal MathWorks Yammer post.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/ChatGPT_truth.jpg" vspace="5" /> </p> +<!-- + function grabCode_49d101acd4414820a4f6fe4b080b1113() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='49d101acd4414820a4f6fe4b080b1113 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 49d101acd4414820a4f6fe4b080b1113'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +49d101acd4414820a4f6fe4b080b1113 ##### SOURCE BEGIN ##### +%% My Chat with ChatGPT +% While it is still fresh in my mind, I want to describe the conversation +% I had with +% <https://openai.com/blog/chatgpt/ +% a publicly available version of ChatGPT>, the much-discussed +% large language model, LLM, for conversational artificial intelligence. + +%% Mixed Reception +% A newer version of ChatGPT than the one I used is +% available to selected journalists and computer industry observers. +% Their reaction has been, shall I say, mixed. +% At first, some of the reports were positive and even ecstatic. +% Most of these early reports were from people whose primary concern +% is the stock market, not AI technology. Many of the more recent and +% more careful reports have been negative and critical. + +%% Where Is Sydney? +% I have given ChatGPT the nickname "Chad". +% Some early users of one of Chad's competitors asked +% deliberately provocative questions and encountered a cranky alter-ego +% named "Sydney". I didn't ask my Chad any unfair questions and +% didn't encounter any Sydney's. + +%% Me and AI +% I have been a long-time observer of REPLACE_WITH_DASH_DASH although not a contributor to REPLACE_WITH_DASH_DASH +% artificial intelligence research. +% +% * I took AI courses at Stanford from the inventor of +% the field, John McCarthy. +% +% * Bill McKeeman and I entered McCarthy's chess program in +% a _San Francisco Chronicle's_ by-mail chess contest. +% (The computer did not fair well.) +% +% * I used Joe Weizenbaum's computer program Eliza, +% the very first Chat Bot. +% +% * I was once married to someone with a PhD in AI. +% +% * Symbolic Math, like MathWorks now does in our Toolbox, and which +% we used to do with Macsyma and Maple, was once considered AI. +% +% * The wild animal trail cameras project that I did a few years ago with +% Heather Gorr and Jim Sanderson uses modern machine learning and AI. + +%% Me and ChatGPT +% I talked to REPLACE_WITH_DASH_DASH I should say chatted with, or actually typed at REPLACE_WITH_DASH_DASH +% Chad for most of an hour on a recent evening. +% Think of Stephen Hawking in a Web Browser. +% Chad's responses were always courteous and conversational. +% And the majority of Chad's responses were factually correct. +% +% However, a surprising number of Chad's answers were just plain wrong. +% Some examples: +% +% * I was neither born in, nor raised in, rural New Mexico. +% +% * I did not get a PhD from the University of Michigan. +% Neither did my wife, Patsy. +% +% * Patsy is not the mother of my daughter Kam, +% nor of my sister Betsy. +% +% * Patsy is not an expert in +% computational fluid dynamics. +% +% * Ken Kennedy did not coin the term "embarrassingly parallel." +% +% * Pam McCorduck never worked for the Santa Fe Institute. +% +% * I cannot find any reference to the guys Chad claimed +% improved Sympletic Spacewar. +% +% All of Chad's incorrect responses could have been fact-checked +% by simple Google queries. + +%% AI Winters +% Everybody wants to combine the conversational style offered by +% large language models with the reliability and breadth provided +% by Google. Now THAT sounds like a really good idea. +% +% Artificial intelligence has a history of flush successes interspersed +% with fallow periods known as AI Winters. I am afraid that +% continued obsession with Chat Bots might lead to another AI Winter. + +%% Truth +% Steve Eddins revealed the Truth behind ChatGPT with this internal +% MathWorks Yammer post. +% +% <<ChatGPT_truth.jpg>> +##### SOURCE END ##### 49d101acd4414820a4f6fe4b080b1113 +--> + + + + + Grafix Users Guide + + 2023-02-10T18:36:06-07:00 + https://hpc.social/2023/grafix-users-guide + <div class="content"><!--introduction--><p>This is a quick look at <tt>Grafix</tt>, our tool for exploring matrices via 3-D computer graphics.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Opening.png" vspace="5" /> </p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#21a702a7-c647-44ae-818a-6f571fa09592">Matrices</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7cfcc1d4-26d2-4b2e-b4cb-a0ca04383ff8">Axis</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6ce3a663-e301-4ddb-bc4d-58ae5e8f3b51">Rx</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#f007d1f0-d76b-4e3e-bea3-49bd18805a1f">Ry</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#200c71a6-5d9f-4c03-8a03-00476f103160">Rz</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#8dd6ed79-ba75-409b-a59d-68244c928c7a">Tx</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a9651b74-3170-4b23-a015-890b537b778a">Ty</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ce30422a-3bb7-4beb-90c6-3dfe5eb88351">Tz</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#20f8cb07-c525-4f1b-a1ae-f9b6320078eb">S</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e8ae8340-3615-4ed7-90e7-b185a33f370a">Switches</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#097b4cbd-7971-430f-aa63-04db38192c6e">Pitch, Roll, Yaw</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e558e05a-1bc3-41ed-a63b-ff056cf04620">Start, Reset, Viz</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9d1fa1cc-0fe6-4d6f-9ca6-a50f0644fc62">Apps/taxi</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0c8793f3-d9d5-45ef-90a8-7ec0c83356ca">Apps/takeoff</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#c20254e9-3887-4d66-9903-db87c5c7bb30">Prop</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#1adf580c-785f-4333-9494-0f5657c1ce53">Info</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#095cf406-3f28-4e05-ab8a-43d29a3310c1">Exercises</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6df5e80a-e9fa-45c4-aff2-03edb1ccb334">Software</a></li></ul></div> +<h4>Matrices<a name="21a702a7-c647-44ae-818a-6f571fa09592"></a></h4><p>The word <i>matrix</i> comes from the Latin word <i>mater</i>, which means <i>mother</i> or <i>origin</i>. Matrices provide the origins of much of modern applied mathematics and computational science.</p> +<p><tt>Grafix</tt> is a study of the matrices that describe rotation, translation and scaling of objects moving in three-dimensional space. These matrices are the building blocks of today's computer graphics and are essential to all popular video games, to all CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films. and to MATLAB's Handle Graphics.</p> +<p>MATLAB is short for Matrix Laboratory. Matrices are also the foundation of MATLAB and of MathWorks.</p> +<p>The <i>homogeneous coordinates</i> system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an objec in the first three components and, for now, a one as the fourth component, e.g. <tt>[x,y,z,1]'</tt>,</p> +<p>The matrices, which we collectively denote by <tt>M</tt>, are always shown in the panel in our displays. Here is an animation of one important example. Do you see the pattern in the evolving elements of this <tt>M</tt>? How are they related to each other? How long before they repeat?</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/mat_gif.gif" vspace="5" /> </p> +<h4>Axis<a name="7cfcc1d4-26d2-4b2e-b4cb-a0ca04383ff8"></a></h4><p>Here is the coordinate system used by <tt>view(3)</tt>, MATLAB's default projection of our three-dimensional physical world onto the two-dimensional computer display. The positive <tt>x</tt>-axis goes up and to the right on the screen, the positive <tt>y</tt>-axis goes up and to the left, and the positive <tt>z</tt>-axis goes straight up.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/axis.png" vspace="5" /> </p> +<h4>Rx<a name="6ce3a663-e301-4ddb-bc4d-58ae5e8f3b51"></a></h4><p>The three knobs at the lower right of the <tt>Grafix</tt> window allow you to vary the angles of <tt>Rx</tt>, <tt>Ry</tt> and <tt>Rz</tt>. Here are snapshots of the resulting motion. The <tt>Rx</tt> knob produces rotation about the <tt>x</tt>-axis, leaving <tt>x</tt> unchanged while rotating <tt>y</tt> and <tt>z</tt>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Rx.png" vspace="5" /> </p> +<h4>Ry<a name="f007d1f0-d76b-4e3e-bea3-49bd18805a1f"></a></h4><p><tt>Ry</tt>, rotation about the <tt>y</tt>-axis, leaves <tt>y</tt> unchanged while rotating <tt>x</tt> and <tt>z</tt>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Ry.png" vspace="5" /> </p> +<h4>Rz<a name="200c71a6-5d9f-4c03-8a03-00476f103160"></a></h4><p>And, <tt>Rz</tt>, rotation about the <tt>z</tt>-axis, leaves <tt>z</tt> unchanged while rotating <tt>x</tt> and <tt>y</tt>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Rz.png" vspace="5" /> </p> +<h4>Tx<a name="8dd6ed79-ba75-409b-a59d-68244c928c7a"></a></h4><p>The three sliders at the lower left of the <tt>Grafix</tt> window control matrices with values in the fourth column. Multiplying a vector by <tt>Tx</tt>, which has a nonzero element in the first row, produces a horizontal movement in the direction of the <tt>x</tt>-axis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Tx.png" vspace="5" /> </p> +<h4>Ty<a name="a9651b74-3170-4b23-a015-890b537b778a"></a></h4><p><tt>Ty</tt>, with a nonzero in the second row, is translation in the direction of the <tt>y</tt>-axis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Ty.png" vspace="5" /> </p> +<h4>Tz<a name="ce30422a-3bb7-4beb-90c6-3dfe5eb88351"></a></h4><p>And, <tt>Tz</tt> is translation in the <tt>z</tt> direction.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Tz.png" vspace="5" /> </p> +<h4>S<a name="20f8cb07-c525-4f1b-a1ae-f9b6320078eb"></a></h4><p>The fourth slider controls <tt>S</tt>, a diagonal matrix with a single scaling factor for all three axes.</p> +<p>The use of matrix multiplication allows translations and scaling to be combined with rotations and other operations in a uniform way. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/S.png" vspace="5" /> </p> +<h4>Switches<a name="e8ae8340-3615-4ed7-90e7-b185a33f370a"></a></h4><p>The switch on the left provides other objects that we will introduce later. The switch on the right provides different <tt>views</tt> of three dimensions. The <tt>yz</tt> plane view is shown here.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/switches.png" vspace="5" /> </p> +<h4>Pitch, Roll, Yaw<a name="097b4cbd-7971-430f-aa63-04db38192c6e"></a></h4><p><i>Pitch</i>, <i>roll</i> and <i>yaw</i> are often used to describe the motion of aircraft and spacecraft. These terms are closely related to the rotations <tt>Rx</tt>, <tt>Ry</tt> and <tt>Rz</tt>. The <tt>Pitch</tt> button animates the <tt>Rx</tt> knob. Here is a snapshot near one extreme of the resulting motion.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/pitch.png" vspace="5" /> </p> +<h4>Start, Reset, Viz<a name="e558e05a-1bc3-41ed-a63b-ff056cf04620"></a></h4><p>The <tt>Start</tt> button restarts <tt>Grafix</tt>. The <tt>Reset</tt> button resets all knobs and sliders.</p> +<p>The <tt>Viz</tt> button turns off the display of buttons, knobs, sliders, and switches. A small button, emphasized here with color, but usually barely visible, turns the display back on.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/viz.png" vspace="5" /> </p> +<h4>Apps/taxi<a name="9d1fa1cc-0fe6-4d6f-9ca6-a50f0644fc62"></a></h4><p><tt>Grafix</tt> is programable, in a primitive sort of way. Apps are <tt>Grafix</tt> programs. <tt>Taxi</tt> is a small app. This is a snapshot.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/taxi.png" vspace="5" /> </p> +<h4>Apps/takeoff<a name="0c8793f3-d9d5-45ef-90a8-7ec0c83356ca"></a></h4><p>When the <tt>takeoff</tt> app first appeared, I thought it was a bug in the code for <tt>Grafix</tt>.</p> +<p>You can see the <tt>takeoff</tt> program by entering <tt>type takeoff</tt> at the MATLAB command prompt. You can also <tt>edit takeoff</tt>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/takeoffapp.png" vspace="5" /> </p> +<h4>Prop<a name="c20254e9-3887-4d66-9903-db87c5c7bb30"></a></h4><p>One of my favorite animations employs the rotations from the Matrices section to drive the propeller alone.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/prop_gif_small.gif" vspace="5" /> </p> +<h4>Info<a name="1adf580c-785f-4333-9494-0f5657c1ce53"></a></h4><p>The <tt>info</tt> button is a link to this User's Guide.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Guide.png" vspace="5" /> </p> +<h4>Exercises<a name="095cf406-3f28-4e05-ab8a-43d29a3310c1"></a></h4><div><ul><li>What color is the beacon on top of the plane?</li></ul></div> +<div><ul><li>Demonstrate how matrix-vector multiplication, <tt>Mv</tt>, of a position vector, <tt>v = [x,y,z,1]'</tt>, by a 4-by-4 matrix <tt>M</tt>, achieves a rotation, translation or scaling.</li></ul></div> +<div><ul><li>Describe the evolution of the matrix values in the Matrices and <tt>prop</tt> animations.</li></ul></div> +<div><ul><li>What angles are involved in the snapshots shown for <tt>Rx</tt>, <tt>Ry</tt> and <tt>Rz</tt>?</li></ul></div> +<div><ul><li>Why is the plane in the <tt>Pitch</tt> animation upside down?</li></ul></div> +<div><ul><li>What angles and what matrices characterize the extremes of the <tt>Pitch</tt> animation?</li></ul></div> +<div><ul><li>Write another app like <tt>taxi</tt> and <tt>takeoff</tt>.</li></ul></div> +<h4>Software<a name="6df5e80a-e9fa-45c4-aff2-03edb1ccb334"></a></h4><p>The MATLAB code for <tt>Grafix</tt> <a href="https://blogs.mathworks.com/cleve/files/Grafix_mzip.m">is available here.</a></p> +<!-- + function grabCode_c11525de7f124cdcb5896c8c3f89d4a8() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='c11525de7f124cdcb5896c8c3f89d4a8 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' c11525de7f124cdcb5896c8c3f89d4a8'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +c11525de7f124cdcb5896c8c3f89d4a8 ##### SOURCE BEGIN ##### +%% Grafix User's Guide +% This is a quick look at +% |Grafix|, our tool for exploring matrices via 3-D computer graphics. +% +% <<Opening.png>> +% + +%% Matrices +% The word _matrix_ comes from the Latin word _mater_, which means +% _mother_ or _origin_. Matrices provide the origins of much of +% modern applied mathematics and computational science. +% +% |Grafix| is a study of the matrices that describe rotation, translation +% and scaling of objects moving in three-dimensional space. +% These matrices are the building blocks of today's computer graphics +% and are essential to all popular video games, +% to all CAD (Computer Added Design) packages, +% to CGI (Computer Graphics Imagery) in films. +% and to MATLAB's Handle Graphics. +% +% MATLAB is short for Matrix Laboratory. +% Matrices are also the foundation of MATLAB and of MathWorks. +% +% The _homogeneous coordinates_ system used in modern computer graphics +% makes it possible to describe rotations, translations +% and many other operations with 4-by-4 matrices. These matrices +% operate on vectors with the position of an objec +% in the first three components and, for now, a one as the +% fourth component, e.g. |[x,y,z,1]'|, +% +% The matrices, which we collectively denote by |M|, are always shown +% in the panel in our displays. Here is an animation of one important +% example. Do you see the pattern in the evolving elements of this |M|? +% How are they related to each other? How long before they repeat? +% +% <<mat_gif.gif>> +% + +%% Axis +% Here is the coordinate system used by |view(3)|, MATLAB's default +% projection of our three-dimensional physical world onto the +% two-dimensional computer display. +% The positive |x|-axis goes up and to the right on the screen, +% the positive |y|-axis goes up and to the left, and the positive +% |z|-axis goes straight up. +% +% <<axis.png>> + +%% Rx +% The three knobs at the lower right of the |Grafix| window allow you +% to vary the angles of |Rx|, |Ry| and |Rz|. Here are snapshots +% of the resulting motion. The |Rx| knob produces rotation about the +% |x|-axis, leaving |x| unchanged while rotating |y| and |z|. +% +% <<Rx.png>> +% + +%% Ry +% |Ry|, rotation about the |y|-axis, leaves |y| unchanged while +% rotating |x| and |z|. +% +% <<Ry.png>> +% + +%% Rz +% And, |Rz|, rotation about the |z|-axis, leaves |z| unchanged while +% rotating |x| and |y|. +% +% <<Rz.png>> +% + +%% Tx +% The three sliders at the lower left of the |Grafix| window +% control matrices with values in the fourth column. +% Multiplying a vector by |Tx|, which has a nonzero element in the first +% row, produces a horizontal movement in the direction of the |x|-axis. +% +% <<Tx.png>> +% + +%% Ty +% |Ty|, with a nonzero in the second row, is translation in the +% direction of the |y|-axis. +% +% <<Ty.png>> +% + +%% Tz +% And, |Tz| is translation in the |z| direction. +% +% <<Tz.png>> +% + +%% S +% The fourth slider controls |S|, a diagonal matrix with +% a single scaling factor for all three axes. +% +% The use of matrix multiplication allows translations and scaling +% to be combined with rotations and other operations in a uniform way. +% The arithmetic units on today's +% Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix +% multiplications at speeds hundreds of times faster than general +% purpose Central Processing Units, CPUs. +% +% <<S.png>> +% + +%% Switches +% The switch on the left provides other objects that we will introduce +% later. The switch on the right provides different |views| +% of three dimensions. The |yz| plane view is shown here. +% +% <<switches.png>> +% + +%% Pitch, Roll, Yaw +% _Pitch_, _roll_ and _yaw_ are often used to describe +% the motion of aircraft and spacecraft. +% These terms are closely related to the rotations |Rx|, |Ry| and |Rz|. +% The |Pitch| button animates the |Rx| knob. Here is a snapshot near +% one extreme of the resulting motion. +% +% <<pitch.png>> +% + +%% Start, Reset, Viz +% The |Start| button restarts |Grafix|. +% The |Reset| button resets all knobs and sliders. +% +% The |Viz| button turns off the display of buttons, knobs, sliders, and +% switches. A small button, emphasized here with color, but usually +% barely visible, turns the display back on. +% +% <<viz.png>> +% + +%% Apps/taxi +% |Grafix| is programable, in a primitive sort of way. Apps are |Grafix| +% programs. |Taxi| is a small app. This is a snapshot. +% +% <<taxi.png>> +% + +%% Apps/takeoff +% When the |takeoff| app first appeared, I thought it was a bug in the +% code for |Grafix|. +% +% You can see the |takeoff| program by entering |type takeoff| +% at the MATLAB command prompt. You can also |edit takeoff|. +% +% <<takeoffapp.png>> +% + +%% Prop +% One of my favorite animations employs the rotations from the Matrices +% section to drive the propeller alone. +% +% <<prop_gif_small.gif>> +% + +%% Info +% The |info| button is a link to this User's Guide. +% +% <<Guide.png>> +% + +%% Exercises +% +% * What color is the beacon on top of the plane? +% +% * Demonstrate how matrix-vector multiplication, |Mv|, of a position +% vector, |v = [x,y,z,1]'|, by a 4-by-4 matrix |M|, achieves a rotation, +% translation or scaling. +% +% * Describe the evolution of the matrix values in the Matrices and +% |prop| animations. +% +% * What angles are involved in the snapshots shown for +% |Rx|, |Ry| and |Rz|? +% +% * Why is the plane in the |Pitch| animation upside down? +% +% * What angles and what matrices characterize the extremes of the |Pitch| +% animation? +% +% * Write another app like |taxi| and |takeoff|. +% + +%% Software +% +% The MATLAB code for |Grafix| +% <https://blogs.mathworks.com/cleve/files/Grafix_mzip.m is available here.> +##### SOURCE END ##### c11525de7f124cdcb5896c8c3f89d4a8 +--> + + + + + Matrices In Action, Grafix 2.0 + + 2023-02-04T13:00:33-07:00 + https://hpc.social/2023/matrices-in-action-grafix-2-0 + <div class="content"><!--introduction--><p>The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films, and to most popular video games.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#4c54a017-4a2d-4bd0-b5de-085c77696298">Grafix 2.0</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#19ccc0f8-ccd0-45a3-a624-c4f466eea2af">Rotations</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4028a6e9-0449-4846-8e6e-c9a2c5ad64b6">Pitch, Roll, and Yaw</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e6dc8b74-fe6e-4fb5-a343-2b8fbfe28558">Translations</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9dbcd88d-756a-475c-bd7e-237261a3cdbe">Horizontal and Vertical</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#54cb3b88-904f-441b-9c61-91dca0a68c0d">Scalings</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#9bfb2311-6f44-4f2b-85aa-f09554da0cc6">Larger and Smaller</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ef53d281-53a4-437e-80f0-93b331367abf">Suggestions</a></li></ul></div> +<h4>Grafix 2.0<a name="4c54a017-4a2d-4bd0-b5de-085c77696298"></a></h4><p>Here is the opening screen from version 2.0 of <tt>Grafix</tt>, my tool for investigating the matrices involved in 3-D computer graphics. The MATLAB code for <tt>Grafix</tt> <a href="https://blogs.mathworks.com/cleve/files/Grafix_mzip.m">is availble here.</a></p> +<p>I am interested in the matrix in the panel, which I call <tt>M</tt>. Many matrices like this one describe the dyamic transformations to be made on a set of target objects in a complex three-dimensional scene. This particular <tt>M</tt> is the product of a scaling and a rotation that results in the size and orientation of the plane shown.</p> +<p>I also want to point out the coordinate axes being used. This is <tt>view(3)</tt>, MATLAB's default 3-D cordinate system. The positive $x$-axis goes up and to the right on the screen, the positive $y$-axis up and to the left, and the positive $z$-axis goes straight up.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/grafix.png" vspace="5" /> </p> +<h4>Rotations<a name="19ccc0f8-ccd0-45a3-a624-c4f466eea2af"></a></h4><p>The <i>homogeneous coordinates</i> system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an object in the first three components and, for now, a one as the fourth component, eg. [ $x$, $y$, $z$, 1 ]',</p> +<p>Rotations are described by products of these matrices, each of which operates on only two of the first three components of the vector. The first matrix, $R_x$, leaves $x$ unchanged while it rotates $y$ and $z$. The second matrix, $R_y$, leaves $y$ unchanged while it rotates $x$ and $z$. And the third matrix, $R_z$, leaves $z$ unchanged while it rotates $x$ and $y$.</p> +<p>$$ R_x(\theta) = \left[ \begin{array}{rrrr} + 1 &amp; 0 &amp; 0 &amp; 0 \\ + 0 &amp; \cos{\theta} &amp; -\sin{\theta} &amp; 0 \\ + 0 &amp; \sin{\theta} &amp; \cos{\theta} &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<p>$$ R_y(\theta) = \left[ \begin{array}{rrrr} + \cos{\theta} &amp; 0 &amp; -\sin{\theta} &amp; 0 \\ + 0 &amp; 1 &amp; 0 &amp; 0 \\ + \sin{\theta} &amp; 0 &amp; \cos{\theta} &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<p>$$ R_z(\theta) = \left[ \begin{array}{rrrr} + \cos{\theta} &amp; -\sin{\theta} &amp; 0 &amp; 0 \\ + \sin{\theta} &amp; \cos{\theta} &amp; 0 &amp; 0 \\ + 0 &amp; 0 &amp; 1 &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<h4>Pitch, Roll, and Yaw<a name="4028a6e9-0449-4846-8e6e-c9a2c5ad64b6"></a></h4><p>The terms <i>pitch</i>, <i>roll</i> and <i>yaw</i> are often used to describe the motion of vehicles like aircraft, marine craft, and spacecraft. Pitch is $R_x$, rotation about the $x$-axis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/pitchgif.gif" vspace="5" /> </p> +<p>Roll is $R_y$, rotation about the $y$-axis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/rollgif.gif" vspace="5" /> </p> +<p>And yaw is $R_z$, rotation about the $z$-axis.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/yawgif.gif" vspace="5" /> </p> +<h4>Translations<a name="e6dc8b74-fe6e-4fb5-a343-2b8fbfe28558"></a></h4><p>Translations are described by matrices with values in the fourth column. Multiplying a vector by one of these matrices produces a translation in the direction of the corresponding axis.</p> +<p>$$ T_x(\delta) = \left[ \begin{array}{rrrr} + 1 &amp; 0 &amp; 0 &amp; \delta \\ + 0 &amp; 1 &amp; 0 &amp; 0 \\ + 0 &amp; 0 &amp; 1 &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<p>$$ T_y(\delta) = \left[ \begin{array}{rrrr} + 1 &amp; 0 &amp; 0 &amp; 0 \\ + 0 &amp; 1 &amp; 0 &amp; \delta \\ + 0 &amp; 0 &amp; 1 &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<p>$$ T_z(\delta) = \left[ \begin{array}{rrrr} + 1 &amp; 0 &amp; 0 &amp; 0 \\ + 0 &amp; 1 &amp; 0 &amp; 0 \\ + 0 &amp; 0 &amp; 1 &amp; \delta \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<p>While it is true that translations could be accomplished simply by adding the increment to the specified coordiate, the use of matrix multiplication allows translations to be combined in a uniform way with rotations and other operations. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.</p> +<h4>Horizontal and Vertical<a name="9dbcd88d-756a-475c-bd7e-237261a3cdbe"></a></h4><p>Inspired by David Singmaster's notation for Rubik's cubes, L, R, B, F, U, and D, we can use the descriptive terms <i>left</i> and <i>right</i> for horizontal motion in the $x$ direction; <i>back</i> and <i>forth</i> for horizontal motion in the $y$ direction; and <i>up</i> and <i>down</i> for vertical motion in the $z$ direction.</p> +<p>$T_x$, left and right.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Txgif.gif" vspace="5" /> </p> +<p>$T_y$, back and forth.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Tygif.gif" vspace="5" /> </p> +<p>$T_z$, up and down.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Tzgif.gif" vspace="5" /> </p> +<h4>Scalings<a name="54cb3b88-904f-441b-9c61-91dca0a68c0d"></a></h4><p>This matrix applies a single scaling factor to all three axes.</p> +<p>$$ S(\sigma) = \left[ \begin{array}{rrrr} + \sigma &amp; 0 &amp; 0 &amp; 0 \\ + 0 &amp; \sigma &amp; 0 &amp; 0 \\ + 0 &amp; 0 &amp; \sigma &amp; 0 \\ + 0 &amp; 0 &amp; 0 &amp; 1 + \end{array} \right] $$</p> +<h4>Larger and Smaller<a name="9bfb2311-6f44-4f2b-85aa-f09554da0cc6"></a></h4><p>$S$</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Sgif.gif" vspace="5" /> </p> +<h4>Suggestions<a name="ef53d281-53a4-437e-80f0-93b331367abf"></a></h4><p>Refresh your browser to syncronize the animations.</p> +<p>Download your own self-archiving copies of</p> +<div><ul><li><a href="https://blogs.mathworks.com/cleve/files/Grafix_mzip.m">Grafix</a></li><li><a href="https://blogs.mathworks.com/cleve/files/Qube_mzip-1.m">Qube</a></li></ul></div> +<!-- + function grabCode_b13c7ab1c73c4ad7909fa2d7cd9764f2() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='b13c7ab1c73c4ad7909fa2d7cd9764f2 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' b13c7ab1c73c4ad7909fa2d7cd9764f2'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +b13c7ab1c73c4ad7909fa2d7cd9764f2 ##### SOURCE BEGIN ##### +%% Matrices In Action, Grafix 2.0 +% The 4-by-4 matrices in the panels on the following screenshots +% are at the heart of computer graphics. +% They describe objects moving in three-dimensional +% space and are essential to MATLAB's Handle Graphics, +% to CAD (Computer Added Design) packages, +% to CGI (Computer Graphics Imagery) in films, +% and to most popular video games. +% + +%% Grafix 2.0 +% Here is the opening screen from version 2.0 of |Grafix|, +% my tool for investigating the matrices involved in 3-D computer graphics. +% The MATLAB code for |Grafix| +% <https://blogs.mathworks.com/cleve/files/Grafix_mzip.m is availble here.> + +%% +% I am interested in the matrix in the panel, which I call |M|. +% Many matrices like this one describe the dyamic transformations to be +% made on a set of target objects in a complex three-dimensional scene. +% This particular |M| is the product of a scaling and a rotation that +% results in the size and orientation of the plane shown. +% +% I also want to point out the coordinate axes being used. +% This is |view(3)|, MATLAB's default 3-D cordinate system. The positive +% $x$-axis goes up and to the right on the screen, the positive $y$-axis +% up and to the left, and the positive $z$-axis goes straight up. +% +% <<grafix.png>> +% + +%% Rotations +% The _homogeneous coordinates_ system used in modern computer graphics +% makes it possible to describe rotations, translations +% and many other operations with 4-by-4 matrices. These matrices +% operate on vectors with the position of an object +% in the first three components and, for now, a one as the +% fourth component, eg. [ $x$, $y$, $z$, 1 ]', +% +% Rotations are described by products of these matrices, +% each of which operates on only two of the first three components of +% the vector. The first matrix, $R_x$, leaves $x$ unchanged while it +% rotates $y$ and $z$. The second matrix, $R_y$, leaves $y$ unchanged +% while it rotates $x$ and $z$. And the third matrix, $R_z$, +% leaves $z$ unchanged while it rotates $x$ and $y$. +% +% $$ R_x(\theta) = \left[ \begin{array}{rrrr} +% 1 & 0 & 0 & 0 \\ +% 0 & \cos{\theta} & -\sin{\theta} & 0 \\ +% 0 & \sin{\theta} & \cos{\theta} & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% +% +% $$ R_y(\theta) = \left[ \begin{array}{rrrr} +% \cos{\theta} & 0 & -\sin{\theta} & 0 \\ +% 0 & 1 & 0 & 0 \\ +% \sin{\theta} & 0 & \cos{\theta} & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% +% +% $$ R_z(\theta) = \left[ \begin{array}{rrrr} +% \cos{\theta} & -\sin{\theta} & 0 & 0 \\ +% \sin{\theta} & \cos{\theta} & 0 & 0 \\ +% 0 & 0 & 1 & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% + +%% Pitch, Roll, and Yaw +% The terms _pitch_, _roll_ and _yaw_ are often used to describe +% the motion of vehicles like aircraft, marine craft, and spacecraft. +% Pitch is $R_x$, rotation about the $x$-axis. +% +% <<pitchgif.gif>> +% + +%% +% Roll is $R_y$, rotation about the $y$-axis. +% +% <<rollgif.gif>> +% + +%% +% And yaw is $R_z$, rotation about the $z$-axis. +% +% <<yawgif.gif>> +% + +%% Translations +% Translations are described by matrices with values in the fourth column. +% Multiplying a vector by one of these matrices produces a translation +% in the direction of the corresponding axis. +% +% $$ T_x(\delta) = \left[ \begin{array}{rrrr} +% 1 & 0 & 0 & \delta \\ +% 0 & 1 & 0 & 0 \\ +% 0 & 0 & 1 & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% +% $$ T_y(\delta) = \left[ \begin{array}{rrrr} +% 1 & 0 & 0 & 0 \\ +% 0 & 1 & 0 & \delta \\ +% 0 & 0 & 1 & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% +% $$ T_z(\delta) = \left[ \begin{array}{rrrr} +% 1 & 0 & 0 & 0 \\ +% 0 & 1 & 0 & 0 \\ +% 0 & 0 & 1 & \delta \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ +% +% While it is true that translations could be accomplished simply by +% adding the increment to the specified coordiate, the use of matrix +% multiplication allows translations to be combined in a uniform way +% with rotations and other operations. The arithmetic units on today's +% Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix +% multiplications at speeds hundreds of times faster than general +% purpose Central Processing Units, CPUs. + +%% Horizontal and Vertical +% Inspired by David Singmaster's notation for Rubik's cubes, +% L, R, B, F, U, and D, +% we can use the descriptive terms _left_ and _right_ for +% horizontal motion in the $x$ direction; _back_ and _forth_ +% for horizontal motion in the $y$ direction; and _up_ and _down_ +% for vertical motion in the $z$ direction. +% +% $T_x$, left and right. +% +% <<Txgif.gif>> +% +% +% $T_y$, back and forth. +% +% <<Tygif.gif>> +% +% $T_z$, up and down. +% +% <<Tzgif.gif>> +% + +%% Scalings +% This matrix applies a single scaling factor to all three axes. +% +% $$ S(\sigma) = \left[ \begin{array}{rrrr} +% \sigma & 0 & 0 & 0 \\ +% 0 & \sigma & 0 & 0 \\ +% 0 & 0 & \sigma & 0 \\ +% 0 & 0 & 0 & 1 +% \end{array} \right] $$ + +%% Larger and Smaller +% +% $S$ +% +% <<Sgif.gif>> +% + +%% Suggestions +% Refresh your browser to syncronize the animations. +% +% Download your own self-archiving copies of +% +% * <https://blogs.mathworks.com/cleve/files/Grafix_mzip.m Grafix> +% * <https://blogs.mathworks.com/cleve/files/Qube_mzip-1.m Qube> +% +##### SOURCE END ##### b13c7ab1c73c4ad7909fa2d7cd9764f2 +--> + + + + + Singular Matrix Pencils and the QZ Algorithm, Update + + 2023-01-10T21:45:12-07:00 + https://hpc.social/2023/singular-matrix-pencils-and-the-qz-algorithm-update + <div class="content"><!--introduction--><p>(The January 5 posting was premature and incomplete.)</p> +<p>This year, 2023, is the 50-th anniversary of the QZ algorithm for the generalized matrix eigenvalue problem,</p> +<pre> Ax = &#955;Bx</pre><p>The algorithm avoids inverting either <tt>A</tt> or <tt>B</tt>. And, importantly, the QZ algorithm can be used to detect and analyze exceptional instances of the problem known as <i>singular pencils</i>. These pencils do not occur in the standard eigenvalue problem where <tt>B</tt> is the identity matrix.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#59d30988-fe9f-4381-bf4b-70b9181f1d24">Singular pencils</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#aa953fcf-a488-43bb-8976-bef668d4b373">3-by-3 example</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ebedf1c8-dc25-443b-9232-8e963a75eed3">Wilkinson example</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#2c8b301b-125b-4389-a5ea-fd8eccc8d4ba">References</a></li></ul></div> +<h4>Singular pencils<a name="59d30988-fe9f-4381-bf4b-70b9181f1d24"></a></h4><p>A matrix pencil is <i>singular</i> if both <tt>A</tt> and <tt>B</tt> are singular and, moreover, <tt>A</tt> - &#955; <tt>B</tt> is singular for all &#955;. Equivalently,</p> +<pre> det(A - &#955;B) = 0 for all &#955;.</pre><p>Singular pencils are more insidious than might appear at first glance. In some sense, the spectrum is the entire complex plane.</p> +<p>There are no singular pencils with the standard eigenvalue problem</p> +<pre> Ax = &#955;x</pre><p>where <tt>B</tt> is the identity matrix and certainly nonsingular.</p> +<p>If <tt>A</tt> and <tt>B</tt> are both real symmetric or complex Hermitian, but neither is positive definite, the pencil may or may not be singular. Symmetric problems occur frequently and there are separate algorithms and perturbation and convergence theories.</p> +<p>The QZ algorithm does not compute the eigenvalues &#955; until the very last step. It stably reduces <tt>A</tt> and <tt>B</tt> to triangular form with diagonals &#945; and &#946;. The eigenvalues are then the ratios</p> +<pre> &#955; = &#945;./&#946;</pre><p>Isolated zeros in &#945; or &#946; yield zero or infinite eigenvalues with no special difficulties. Singular pencils occur if and only if zeros in &#945; and &#946; occur <i>with the same index</i> and (with exact arithmetic) lead to &#955; = 0/0 = NaN.</p> +<p>With a singular pencil, some, perhaps all, of the diagonal values in &#945; and &#946; are highly sensitive to perturbation, and all of the eigenvalues computed from the ratios are suspect. Theoretically the ill-conditioned eigenvalues can be determined from the Kronecker Canonical Form, a generalization of the notorious Jordan Canonical Form. But, like the Jordan Form, the Kronecker Form cannot provide a stable numerical algorithm.</p> +<h4>3-by-3 example<a name="aa953fcf-a488-43bb-8976-bef668d4b373"></a></h4><pre class="codeinput"> A = [9 8 7; 6 5 4; 3 2 1] + + B = [1 3 2; 4 6 5; 7 9 8] +</pre><pre class="codeoutput"> +A = + + 9 8 7 + 6 5 4 + 3 2 1 + + +B = + + 1 3 2 + 4 6 5 + 7 9 8 + +</pre><p>Let's verify that this is a singular pencil. Use the Symbolic Math Toolbox to introduce a free variable.</p> +<pre class="codeinput"> syms <span class="string">lambda</span> + AB = A - lambda*B +</pre><pre class="codeoutput"> +AB = + +[ 9 - lambda, 8 - 3*lambda, 7 - 2*lambda] +[6 - 4*lambda, 5 - 6*lambda, 4 - 5*lambda] +[3 - 7*lambda, 2 - 9*lambda, 1 - 8*lambda] + +</pre><p>Without further computation, we can see that the second row is the average of the first and third rows for all <tt>lambda</tt> and consequently that the determinant must be identically zero.</p> +<p>With exact arithmetic, each of these statements would produce the same eigenvalues. After the introduction of some roundoff error, two of the <tt>lambdas</tt> are indeterminant, but <tt>lambda = -1</tt> is present in all four results. Is <tt>lambda = -1</tt> a stable eigenvalue?</p> +<pre class="codeinput"> lambda_AB = eig(A,B) + lambda_BA = 1./eig(B,A) + lambda_ATBT = eig(A',B') + lambda_BTAT = 1./eig(B',A') +</pre><pre class="codeoutput"> +lambda_AB = + + 1.8984 + -1.0000 + -0.0807 + + +lambda_BA = + + -1.0000 + 0.5837 + -0.9274 + + +lambda_ATBT = + + 0.0829 + Inf + -1.0000 + + +lambda_BTAT = + + -0.9661 + 0 + -1.0000 + +</pre><p>The triangular matrices for <tt>lambda_AB</tt>.</p> +<pre class="codeinput"> [QAZ,QBZ] = qz(A,B); + QAZ + QBZ +</pre><pre class="codeoutput"> +QAZ = + + 1.6131 10.2664 -11.0905 + 0 -4.2969 5.9613 + 0 0 -0.0000 + + +QBZ = + + 0.7898 6.8901 -13.5242 + 0 4.2969 -5.9613 + 0 0 0.0000 + +</pre><p>Careful examination of the diagonals reveals that <tt>alfa(2)/beta(2)</tt> is producing the <tt>-1</tt>, while <tt>alfa(3)/beta(3)</tt> is roundoff over roundoff.</p> +<pre class="codeinput"> format <span class="string">long</span> <span class="string">e</span> + alfa = diag(QAZ) + beta = diag(QBZ) + format <span class="string">short</span> +</pre><pre class="codeoutput"> +alfa = + + 1.613087771308989e+00 + -4.296911800112353e+00 + -1.965207685813115e-15 + + +beta = + + 7.898460671891234e-01 + 4.296911800112357e+00 + 1.359052275299816e-15 + +</pre><h4>Wilkinson example<a name="ebedf1c8-dc25-443b-9232-8e963a75eed3"></a></h4><p>Jim Wilkinson published a survey paper about QZ and Kronecker products in 1979. One of his examples is</p> +<pre class="codeinput"> A = [4 3 2 5; 6 4 2 7; -1 -1 -2 -2; 5 3 2 6] + + B = [2 1 3 4; 3 3 3 5; 0 0 -3 -2; 3 1 3 5] +</pre><pre class="codeoutput"> +A = + + 4 3 2 5 + 6 4 2 7 + -1 -1 -2 -2 + 5 3 2 6 + + +B = + + 2 1 3 4 + 3 3 3 5 + 0 0 -3 -2 + 3 1 3 5 + +</pre><p>Use the Symbolic Math Toolbox to verify that this is a singular pencil.</p> +<pre class="codeinput"> syms <span class="string">lambda</span> + AB = A - lambda*B +</pre><pre class="codeoutput"> +AB = + +[4 - 2*lambda, 3 - lambda, 2 - 3*lambda, 5 - 4*lambda] +[6 - 3*lambda, 4 - 3*lambda, 2 - 3*lambda, 7 - 5*lambda] +[ -1, -1, 3*lambda - 2, 2*lambda - 2] +[5 - 3*lambda, 3 - lambda, 2 - 3*lambda, 6 - 5*lambda] + +</pre><p>The determinant is identically zero for all <tt>lambda</tt>.</p> +<pre class="codeinput"> d = det(AB) +</pre><pre class="codeoutput"> +d = + +0 + +</pre><p>With exact arithmetic, each of these statements would produce the same eigenvalues, but in practice each set is different. None of the eigenvalues is stable.</p> +<pre class="codeinput"> lambda_AB = eig(A,B) + lambda_BA = 1./eig(B,A) + lambda_ATBT = eig(A',B') + lambda_BTAT = 1./eig(B',A') +</pre><pre class="codeoutput"> +lambda_AB = + + 1.2056 + 0.7055 + -1.0000 + -Inf + + +lambda_BA = + + 1.5097 + 0.6408 + 0 + -1.0000 + + +lambda_ATBT = + + -0.2141 + 0.2033i + -0.2141 - 0.2033i + 0.7013 + 0.0000i + 1.4508 + 0.0000i + + +lambda_BTAT = + + 0.3168 + 0.9823 + 1.2325 + 0 + +</pre><p>The triangular matrices for <tt>lambda_AB</tt> are</p> +<pre class="codeinput"> [QAZ,QBZ] = qz(A,B); + QAZ + QBZ +</pre><pre class="codeoutput"> +QAZ = + + 0.7437 4.1769 -12.7279 -5.5000 + 0 0.0000 5.2328 2.1602 + 0 0 0.7857 0.0123 + 0 0 0 -0.2887 + + +QBZ = + + 0.5005 6.6143 -8.4853 -2.5000 + 0 0.0000 3.2668 2.0105 + 0 0 1.1525 -0.7904 + 0 0 0 0.2887 + +</pre><p>Examine the diagonals more carefully. <tt>alfa(2)/beta(2)</tt> is the only roundoff over roundoff, but all four eigenvalues are unstable.</p> +<pre class="codeinput"> format <span class="string">long</span> <span class="string">e</span> + alfa = diag(QAZ) + beta = diag(QBZ) + format <span class="string">short</span> +</pre><pre class="codeoutput"> +alfa = + + 7.437114999643711e-01 + 1.216947725307920e-14 + 7.857314232211017e-01 + -2.886751345948121e-01 + + +beta = + + 5.005405248737872e-01 + 1.021080292327182e-13 + 1.152509249099882e+00 + 2.886751345948153e-01 + +</pre><h4>References<a name="2c8b301b-125b-4389-a5ea-fd8eccc8d4ba"></a></h4><p>C. B. Moler and G. W. Stewart, "An Algorithm for Generalized Matrix Eigenvalue Problems", <i>SIAM J. Numerical Analysis</i>, Vol.10, No.2, April 1973. Also available at <a href="https://blogs.mathworks.com/cleve/files/cbm_gws.pdf">cbm_gws.pdf</a></p> +<p>J. H. Wilkinson, "Kronecker's Canonical Form and the QZ Algorithm", <i>Linear Algebra and its Applications</i>, Vol. 28, 1979. Also available at <a href="https://blogmathworks.com/cleve/files/wilkinson.pdf">wilkinson.pdf</a></p> +<!-- + function grabCode_8891e70a294b4c03bb99ac1e6e01b5a5() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='8891e70a294b4c03bb99ac1e6e01b5a5 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 8891e70a294b4c03bb99ac1e6e01b5a5'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +8891e70a294b4c03bb99ac1e6e01b5a5 ##### SOURCE BEGIN ##### +%% Singular Matrix Pencils and the QZ Algorithm, Update +% (The January 5 posting was premature and incomplete.) +% +% This year, 2023, is the 50-th anniversary of the QZ algorithm +% for the generalized matrix eigenvalue problem, +% +% Ax = λBx +% +% The algorithm avoids inverting either |A| or |B|. +% And, importantly, the QZ algorithm can be used to detect and analyze +% exceptional instances of the problem known as _singular pencils_. +% These pencils do not occur in the standard eigenvalue problem where +% |B| is the identity matrix. + +%% Singular pencils +% A matrix pencil is _singular_ if both |A| and |B| are singular and, +% moreover, |A| - λ |B| is singular for all λ. Equivalently, +% +% det(A - λB) = 0 for all λ. +% +% Singular pencils are more insidious than might appear at first glance. +% In some sense, the spectrum is the entire complex plane. +% +% There are no singular pencils with the standard eigenvalue problem +% +% Ax = λx +% +% where |B| is the identity matrix and certainly nonsingular. +% +% If |A| and |B| are both real symmetric or complex Hermitian, but neither +% is positive definite, the pencil may or may not be singular. +% Symmetric problems occur frequently and there are +% separate algorithms and perturbation and convergence theories. +% +% The QZ algorithm does not compute the eigenvalues λ until the very last +% step. It stably reduces |A| and |B| to triangular form +% with diagonals α and β. The eigenvalues are then the ratios +% +% λ = α./β +% +% Isolated zeros in α or β yield zero or infinite eigenvalues with no +% special difficulties. Singular pencils occur if and only if zeros in +% α and β occur _with the same index_ and (with exact arithmetic) lead to +% λ = 0/0 = NaN. +% +% With a singular pencil, some, perhaps all, of the diagonal values +% in α and β are highly sensitive to perturbation, and all of the +% eigenvalues computed from the ratios are suspect. Theoretically +% the ill-conditioned eigenvalues can be determined from the Kronecker +% Canonical Form, a generalization of the notorious Jordan Canonical +% Form. But, like the Jordan Form, the Kronecker Form cannot provide +% a stable numerical algorithm. + +%% 3-by-3 example + + A = [9 8 7; 6 5 4; 3 2 1] + + B = [1 3 2; 4 6 5; 7 9 8] + +%% +% Let's verify that this is a singular pencil. +% Use the Symbolic Math Toolbox to introduce a free variable. + + syms lambda + AB = A - lambda*B + +%% +% Without further computation, +% we can see that the second row is the average of the first and third +% rows for all |lambda| and consequently that the determinant must be +% identically zero. + +%% +% With exact arithmetic, each of these statements would produce the +% same eigenvalues. After the introduction of some roundoff error, +% two of the |lambdas| are indeterminant, +% but |lambda = -1| is present in all four results. +% Is |lambda = -1| a stable eigenvalue? + + lambda_AB = eig(A,B) + lambda_BA = 1./eig(B,A) + lambda_ATBT = eig(A',B') + lambda_BTAT = 1./eig(B',A') + +%% +% The triangular matrices for |lambda_AB|. + + [QAZ,QBZ] = qz(A,B); + QAZ + QBZ + +%% +% Careful examination of the diagonals reveals that |alfa(2)/beta(2)| +% is producing the |-1|, while |alfa(3)/beta(3)| is roundoff over roundoff. + + format long e + alfa = diag(QAZ) + beta = diag(QBZ) + format short + + +%% Wilkinson example +% Jim Wilkinson published a survey paper about QZ and Kronecker products +% in 1979. One of his examples is + + A = [4 3 2 5; 6 4 2 7; -1 -1 -2 -2; 5 3 2 6] + + B = [2 1 3 4; 3 3 3 5; 0 0 -3 -2; 3 1 3 5] + +%% +% Use the Symbolic Math Toolbox to verify that this is a singular pencil. + + syms lambda + AB = A - lambda*B + +%% +% The determinant is identically zero for all |lambda|. + + d = det(AB) + +%% +% With exact arithmetic, each of these statements would produce the +% same eigenvalues, but in practice each set is different. +% None of the eigenvalues is stable. + + lambda_AB = eig(A,B) + lambda_BA = 1./eig(B,A) + lambda_ATBT = eig(A',B') + lambda_BTAT = 1./eig(B',A') + +%% +% The triangular matrices for |lambda_AB| are + + [QAZ,QBZ] = qz(A,B); + QAZ + QBZ + +%% +% Examine the diagonals more carefully. |alfa(2)/beta(2)| is the only +% roundoff over roundoff, but all four eigenvalues are unstable. + + format long e + alfa = diag(QAZ) + beta = diag(QBZ) + format short + +%% References +% C. B. Moler and G. W. Stewart, +% "An Algorithm for Generalized Matrix Eigenvalue Problems", +% _SIAM J. Numerical Analysis_, Vol.10, No.2, April 1973. +% Also available at +% <https://blogs.mathworks.com/cleve/files/cbm_gws.pdf cbm_gws.pdf> +% +% J. H. Wilkinson, +% "Kronecker's Canonical Form and the QZ Algorithm", +% _Linear Algebra and its Applications_, Vol. 28, 1979. +% Also available at +% <https://blogmathworks.com/cleve/files/wilkinson.pdf wilkinson.pdf> +##### SOURCE END ##### 8891e70a294b4c03bb99ac1e6e01b5a5 +--> + + + + + Singular Matrix Pencils and the QZ Algorithm + + 2023-01-05T16:37:04-07:00 + https://hpc.social/2023/singular-matrix-pencils-and-the-qz-algorithm + <div class="content"><!--introduction--><p>This year, 2023, is the 50-th anniversary of the QZ algorithm for generalized matrix eignenvalue problems,</p> +<pre class="language-matlab">Ax = &#955;Bx +</pre><p>The algorithm computes these eigevalues without inverting either <tt>A</tt> or <tt>B</tt>. And, the QZ-algorithm can help detect and analyze exceptional situaions known as <i>singular pencils</i>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#19d0dd38-a456-4a63-bf2f-18e02689531d">Matrix pencils</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#31c19b00-cfd8-493d-b712-08610ce3c5aa">Example</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0f5d9fb9-0792-4d4c-a9ac-c5fd3e1e7691">Wilkinson example</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#cbe4eaf1-8a19-41e7-badd-1b8e69f74b61">References</a></li></ul></div> +<h4>Matrix pencils<a name="19d0dd38-a456-4a63-bf2f-18e02689531d"></a></h4><p>If <tt>A</tt> and <tt>B</tt> are two square matrices, the <i>linear matrix pencil</i> is the matrix-valued function</p> +<pre> A - &#955;B</pre><p>A pencil is <i>regular</i> if there is at least one value of &#955; for which A - &#955;B if not singular. The pencil is <i>singular</i> if both <tt>A</tt> and <tt>B</tt> are singular and, moreover, A - &#955;B is singular for all &#955;. In other words,</p> +<pre> det(A - &#955;B) = 0 for all &#955;.</pre><p>Singular pencils are more insiduous than migt appear at first glance.</p> +<h4>Example<a name="31c19b00-cfd8-493d-b712-08610ce3c5aa"></a></h4><pre class="codeinput"> A = [9 8 7; 6 5 4; 3 2 1] + + B = [7 9 8; 4 6 5; 1 3 2] +</pre><pre class="codeoutput"> +A = + + 9 8 7 + 6 5 4 + 3 2 1 + + +B = + + 7 9 8 + 4 6 5 + 1 3 2 + +</pre><pre class="codeinput"> syms <span class="string">s</span> + + AB = A - s*B + + d = det(AB) +</pre><pre class="codeoutput"> +AB = + +[9 - 7*s, 8 - 9*s, 7 - 8*s] +[6 - 4*s, 5 - 6*s, 4 - 5*s] +[ 3 - s, 2 - 3*s, 1 - 2*s] + + +d = + +0 + +</pre><pre class="codeinput"> eig1 = eig(A,B) + + eig2 = 1./eig(B,A) + + [QAZ,QBZ,Q,Z,V,W] = qz(A,B); QAZ, QBZ +</pre><pre class="codeoutput"> +eig1 = + + -0.4071 + 1.0000 + 0.2439 + + +eig2 = + + -2.0000 + 1.0000 + 0.3536 + + +QAZ = + + -1.0298 -13.0363 7.7455 + 0 5.6991 -4.6389 + 0 0 0.0000 + + +QBZ = + + 2.4396 -11.4948 9.6394 + 0 5.6991 -4.6389 + 0 0 0.0000 + +</pre><pre class="codeinput"> eig3 = eig(A',B') + + eig4 = 1./eig(B',A') + + [QATZ,QBTZ,Q,Z,V,W] = qz(A',B'); QATZ, QBTZ +</pre><pre class="codeoutput"> +eig3 = + + -0.2169 + Inf + 1.0000 + + +eig4 = + + -0.0738 + 0 + 1.0000 + + +QATZ = + + -0.0000 -15.0218 6.8390 + 0 2.6729 -2.2533 + 0 0 0.5922 + + +QBTZ = + + 0.0000 -15.2578 7.1280 + 0 0 1.0203 + 0 0 0.5922 + +</pre><h4>Wilkinson example<a name="0f5d9fb9-0792-4d4c-a9ac-c5fd3e1e7691"></a></h4><pre class="codeinput"> clear + + A = [4 3 2 5; 6 4 2 7; -1 -1 -2 -2; 5 3 2 6] + + B = [2 1 3 4; 3 3 3 5; 0 0 -3 -2; 3 1 3 5] +</pre><pre class="codeoutput"> +A = + + 4 3 2 5 + 6 4 2 7 + -1 -1 -2 -2 + 5 3 2 6 + + +B = + + 2 1 3 4 + 3 3 3 5 + 0 0 -3 -2 + 3 1 3 5 + +</pre><pre class="codeinput"> syms <span class="string">s</span> + + AB = A - s*B + + d = det(AB) +</pre><pre class="codeoutput"> +AB = + +[4 - 2*s, 3 - s, 2 - 3*s, 5 - 4*s] +[6 - 3*s, 4 - 3*s, 2 - 3*s, 7 - 5*s] +[ -1, -1, 3*s - 2, 2*s - 2] +[5 - 3*s, 3 - s, 2 - 3*s, 6 - 5*s] + + +d = + +0 + +</pre><pre class="codeinput"> eig1 = eig(A,B) + + eig2 = 1./eig(B,A) + + [QAZ,QBZ,Q,Z,V,W] = qz(A,B); QAZ, QBZ +</pre><pre class="codeoutput"> +eig1 = + + 1.2056 + 0.7055 + -1.0000 + -Inf + + +eig2 = + + 1.5097 + 0.6408 + 0 + -1.0000 + + +QAZ = + + 0.7437 4.1769 -12.7279 -5.5000 + 0 0.0000 5.2328 2.1602 + 0 0 0.7857 0.0123 + 0 0 0 -0.2887 + + +QBZ = + + 0.5005 6.6143 -8.4853 -2.5000 + 0 0.0000 3.2668 2.0105 + 0 0 1.1525 -0.7904 + 0 0 0 0.2887 + +</pre><pre class="codeinput"> eig3 = eig(A',B') + + eig4 = 1./eig(B',A') + + [QATZ,QBTZ,Q,Z,V,W] = qz(A',B'); QATZ, QBTZ +</pre><pre class="codeoutput"> +eig3 = + + -0.2141 + 0.2033i + -0.2141 - 0.2033i + 0.7013 + 0.0000i + 1.4508 + 0.0000i + + +eig4 = + + 0.3168 + 0.9823 + 1.2325 + 0 + + +QATZ = + + 0.1281 - 0.2434i 0.2665 + 0.0169i 0.2663 + 1.4905i 0.3721 + 3.5350i + 0.0000 + 0.0000i 0.0587 + 0.1116i 5.2603 - 1.6197i 12.7878 - 4.0110i + 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 4.1745 + 0.0000i + 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.7572 + 0.0000i + + +QBTZ = + + 0.9052 + 0.0000i 0.6130 - 0.6141i -0.2443 + 0.8738i 1.2233 + 2.5485i + 0.0000 + 0.0000i 0.4150 + 0.0000i 3.5658 - 1.2114i 8.0696 - 2.2671i + 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 6.6127 + 0.0000i + 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.5220 + 0.0000i + +</pre><h4>References<a name="cbe4eaf1-8a19-41e7-badd-1b8e69f74b61"></a></h4><p>C. B. Moler and G. W. Stewart, "An Algorithm for Generalized Matrix Eigenvalue Problems", SIAM J.NUMER.ANAL. Vol.10, No.2, April 1973. Also available at <a href="https://blogs.mathworks.com/cleve/files/cbm_gws.pdf">cbm_gws.pdf</a></p> +<p>J. H. Wilkinson, Kronecker's Canonical Form and the QZ Algorithm", LINEAR ALGEBRA AND ITS APPPLICATIONS, Vol. 28, 1979. Also available at Also available at <a href="https://blogs.mathworks.com/cleve/files/wilkinson.pdf">wilkinson.pdf</a></p> +<!-- + function grabCode_a9bf4a4405b542598f6dba1c3d53fdbd() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='a9bf4a4405b542598f6dba1c3d53fdbd ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' a9bf4a4405b542598f6dba1c3d53fdbd'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2023 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2023a<br /></p> +</div> +<!-- +a9bf4a4405b542598f6dba1c3d53fdbd ##### SOURCE BEGIN ##### +%% Singular Matrix Pencils and the QZ Algorithm +% This year, 2023, is the 50-th anniversary of the QZ algorithm +% for generalized matrix eignenvalue problems, +% +% Ax = λBx +% +% The algorithm computes these eigevalues without inverting +% either |A| or |B|. And, the QZ-algorithm can help detect and analyze +% exceptional situaions known as _singular pencils_. + +%% Matrix pencils +% If |A| and |B| are two square matrices, the _linear matrix pencil_ +% is the matrix-valued function +% +% A - λB +% +% A pencil is _regular_ if there is at least one value of λ for which +% A - λB if not singular. The pencil is +% _singular_ if both |A| and |B| are singular and, moreover, A - λB is +% singular for all λ. In other words, +% +% det(A - λB) = 0 for all λ. + +%% +% Singular pencils are more insiduous than migt appear at first glance. +%% Example + + A = [9 8 7; 6 5 4; 3 2 1] + + B = [7 9 8; 4 6 5; 1 3 2] + +%% + + syms s + + AB = A - s*B + + d = det(AB) + +%% + + eig1 = eig(A,B) + + eig2 = 1./eig(B,A) + + [QAZ,QBZ,Q,Z,V,W] = qz(A,B); QAZ, QBZ + + +%% + + eig3 = eig(A',B') + + eig4 = 1./eig(B',A') + + [QATZ,QBTZ,Q,Z,V,W] = qz(A',B'); QATZ, QBTZ + +%% Wilkinson example + + clear + + A = [4 3 2 5; 6 4 2 7; -1 -1 -2 -2; 5 3 2 6] + + B = [2 1 3 4; 3 3 3 5; 0 0 -3 -2; 3 1 3 5] + + +%% + + syms s + + AB = A - s*B + + d = det(AB) + +%% + + eig1 = eig(A,B) + + eig2 = 1./eig(B,A) + + [QAZ,QBZ,Q,Z,V,W] = qz(A,B); QAZ, QBZ + +%% + + eig3 = eig(A',B') + + eig4 = 1./eig(B',A') + + [QATZ,QBTZ,Q,Z,V,W] = qz(A',B'); QATZ, QBTZ + +%% References +% C. B. Moler and G. W. Stewart, +% "An Algorithm for Generalized Matrix Eigenvalue Problems", +% SIAM J.NUMER.ANAL. Vol.10, No.2, April 1973. Also available at +% <https://blogs.mathworks.com/cleve/files/cbm_gws.pdf cbm_gws.pdf> +% +% J. H. Wilkinson, +% Kronecker's Canonical Form and the QZ Algorithm", +% LINEAR ALGEBRA AND ITS APPPLICATIONS, Vol. 28, 1979. Also available at Also available at +% <https://blogs.mathworks.com/cleve/files/wilkinson.pdf wilkinson.pdf> + +##### SOURCE END ##### a9bf4a4405b542598f6dba1c3d53fdbd +--> + + + + + Color Cube Meets Rubik’s Cube + + 2022-12-10T02:41:01-07:00 + https://hpc.social/2022/color-cube-meets-rubik-s-cube + <div class="content"><!--introduction--><p>I have made a half dozen blog posts about <a href="https://blogs.mathworks.com/cleve/2022/09/05/rubiks-cube-superflips-and-gods-number/">Rubik's Cube</a> so far this year. And, during the MATLAB Central Mini Hack in October, I resurrected an old code about the <a href="https://blogs.mathworks.com/cleve/2022/10/21/an-interactive-version-of-colorcubes/">Color Cube</a>. Now, a combination of the two, Rubik/Color Qube, creates an elegant tool for investigating <i>Matrices in Action</i>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#c4ab2cc4-7c62-45b6-b8d6-b58e96dd8c07">Opening</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3426fb76-f361-4a32-b165-f771bba3fb03">Rubik and Color</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#28b692dc-0d85-4c30-905e-300857741d5c">Color Qube</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#f9469ecf-8b7e-41d3-8f47-ac23128f5f7d">Rotations</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#eb4d3e17-82e6-4b1e-b966-c75328d89269">n-by-n-by-n</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#715fe67d-21d9-46c4-a0b5-b2864db8776f">2-by-2-by-2</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b23519d3-2aa0-46a3-9160-90f256981b7e">Software</a></li></ul></div> +<h4>Opening<a name="c4ab2cc4-7c62-45b6-b8d6-b58e96dd8c07"></a></h4><p>Here is the opening screen shot of Rubik/Color Qube, one of the most elaborate MATLAB programs that I have ever written.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/screen_shot1.png" vspace="5" /> </p> +<h4>Rubik and Color<a name="3426fb76-f361-4a32-b165-f771bba3fb03"></a></h4><p>There are two modes, <tt>rubik</tt> and <tt>color</tt>. In <tt>rubik</tt> mode, the large cube is formed from 27 identical copies of a single small <i>cubelet</i>. The six cubelet faces have six different colors. Red, white and blue are visible initially. Orange, yellow and green become visible as the faces are rotated.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/rubik.gif" vspace="5" /> </p> +<p>In <tt>color</tt> mode, the large cube is formed from 27 <i>cubelets</i>, each with a different solid color. Three of the corner cubelets are the primary colors in the RGB color model -- red, green and blue. Three more corners are the complementary cyan, magenta and yellow. White and black complete the list of corners.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/color.gif" vspace="5" /> </p> +<h4>Color Qube<a name="28b692dc-0d85-4c30-905e-300857741d5c"></a></h4><p>All of the familiar Rubik's moves are available in <tt>color</tt> mode. Here is a screen shot after a few rotations.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/screen_shot2.png" vspace="5" /> </p> +<h4>Rotations<a name="f9469ecf-8b7e-41d3-8f47-ac23128f5f7d"></a></h4><p>Rotation matrices defined by this <tt>Rk</tt> function are the basic mathematical tool employed by <tt>Qube</tt>. The animation provides a detailed look at the action produced by the F key, counter-clockwise rotation of the Front face. This is the y-axis, case 2 in <tt>Rk</tt>. The detail is provided by taking <tt>d = 0:3:90</tt>, so there are 30 steps of 3 degrees.</p> +<pre class="language-matlab"><span class="keyword">function</span> R = Rk(axis,d) + <span class="comment">% Rk(axis,d), Rotation by d degrees about the x-, y-, or z-axis.</span> + c = cosd(d); + s = sind(d); + <span class="keyword">switch</span> axis + <span class="keyword">case</span> 1, R = [ 1 0 0 + 0 c s + 0 -s c ]; + <span class="keyword">case</span> 2, R = [ c 0 s + 0 1 0 + -s 0 c ]; + <span class="keyword">case</span> 3, R = [ c s 0 + -s c 0 + 0 0 1 ]; + <span class="keyword">end</span> + fmat = findobj(<span class="string">'tag'</span>,<span class="string">'fmat'</span>); + <span class="keyword">if</span> ~isempty(fmat) + fmat.String = mat3(R); + <span class="keyword">end</span> +<span class="keyword">end</span> +</pre><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/dpm3.gif" vspace="5" /> </p> +<h4>n-by-n-by-n<a name="eb4d3e17-82e6-4b1e-b966-c75328d89269"></a></h4><p><tt>Qube</tt> generalizes the classic 3-by-3-by-3 Rubik's Cube to n-by-n-by-n cubes for any n.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/n_by_n.gif" vspace="5" /> </p> +<h4>2-by-2-by-2<a name="715fe67d-21d9-46c4-a0b5-b2864db8776f"></a></h4><p>The 2-by-2-by-2 cubes are good starting points for investigation of mathematical properties.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/2_by_2.png" vspace="5" /> </p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/2_by_2_color.png" vspace="5" /> </p> +<h4>Software<a name="b23519d3-2aa0-46a3-9160-90f256981b7e"></a></h4><p><tt>Qube</tt> is available as a self-extracting MATLAB archive at this link, <a href="https://blogs.mathworks.com/cleve/files/Qube_mzip.m">Qube_mzip.m</a>.</p> +<!-- + function grabCode_ce9c453c88254608ad0e691ca4711df7() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='ce9c453c88254608ad0e691ca4711df7 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' ce9c453c88254608ad0e691ca4711df7'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022b<br /></p> +</div> +<!-- +ce9c453c88254608ad0e691ca4711df7 ##### SOURCE BEGIN ##### +%% Color Cube Meets Rubik's Cube +% I have made a half dozen blog posts about +% <https://blogs.mathworks.com/cleve/2022/09/05/rubiks-cube-superflips-and-gods-number/ +% Rubik's Cube> so far this year. And, during the MATLAB Central Mini +% Hack in October, I resurrected an old code about the +% <https://blogs.mathworks.com/cleve/2022/10/21/an-interactive-version-of-colorcubes/ +% Color Cube>. Now, a combination of the two, Rubik/Color Qube, +% creates an elegant +% tool for investigating _Matrices in Action_. + +%% Opening +% Here is the opening screen shot of Rubik/Color Qube, one of the most +% elaborate MATLAB programs that I have ever written. +% +% <<screen_shot1.png>> +% + +%% Rubik and Color +% There are two modes, |rubik| and |color|. +% In |rubik| mode, the large cube is formed from 27 identical copies +% of a single small _cubelet_. The six cubelet faces have six different +% colors. Red, white and blue are visible initially. Orange, yellow +% and green become visible as the faces are rotated. +% +% <<rubik.gif>> +% +% In |color| mode, the large cube is formed from 27 _cubelets_, +% each with a different solid color. Three of the corner cubelets are the +% primary colors in the RGB color model REPLACE_WITH_DASH_DASH red, green and blue. Three +% more corners are the complementary cyan, magenta and yellow. +% White and black complete the list of corners. +% +% <<color.gif>> +% + +%% Color Qube +% All of the familiar Rubik's moves are available in |color| mode. +% Here is a screen shot after a few rotations. +% +% <<screen_shot2.png>> +% + +%% Rotations +% Rotation matrices defined by this |Rk| function are the basic +% mathematical tool employed by |Qube|. The animation provides a detailed +% look at the action produced by the F key, counter-clockwise rotation of +% the Front face. This is the y-axis, case 2 in |Rk|. The detail is +% provided by taking |d = 0:3:90|, so there are 30 steps of 3 degrees. +% +% function R = Rk(axis,d) +% % Rk(axis,d), Rotation by d degrees about the x-, y-, or z-axis. +% c = cosd(d); +% s = sind(d); +% switch axis +% case 1, R = [ 1 0 0 +% 0 c s +% 0 -s c ]; +% case 2, R = [ c 0 s +% 0 1 0 +% -s 0 c ]; +% case 3, R = [ c s 0 +% -s c 0 +% 0 0 1 ]; +% end +% fmat = findobj('tag','fmat'); +% if ~isempty(fmat) +% fmat.String = mat3(R); +% end +% end +% +% +% <<dpm3.gif>> +% + +%% n-by-n-by-n +% |Qube| generalizes the classic 3-by-3-by-3 Rubik's Cube +% to n-by-n-by-n cubes for any n. +% +% <<n_by_n.gif>> +% + +%% 2-by-2-by-2 +% The 2-by-2-by-2 cubes are good starting points for investigation +% of mathematical properties. +% +% <<2_by_2.png>> +% +% <<2_by_2_color.png>> +% + +%% Software +% |Qube| is available as a self-extracting MATLAB archive at this link, +% <https://blogs.mathworks.com/cleve/files/Qube_mzip.m Qube_mzip.m>. +##### SOURCE END ##### ce9c453c88254608ad0e691ca4711df7 +--> + + + + + Christian Reinsch, Roland Bulirsch, and the SVD + + 2022-10-23T23:41:27-06:00 + https://hpc.social/2022/christian-reinsch-roland-bulirsch-and-the-svd + <div class="content"><!--introduction--><p>Christian Reinsch and Roland Bulirsch both passed away recently, Reinsch on October 8 and Bulirsch on September 21. Reinsch was 88 years old and Bulirsch was 89. Both of them were retired professors of numerical analysis at the Technical University of Munich. Both of them were friends of mine. But in almost all other ways, they were very different people.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#0ac36cdd-70e0-4088-9e69-ed2d4f0ca1b2">Wilkinson and Reinsch</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#639c5ab8-be39-47d9-ad03-85ef8bfdb2d4">Wilkinson versus Reinsch</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0f4a7aaa-052c-4af3-91d2-afa776ca9db7">Reinsch Personal Life</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#52c11caf-6fe1-4b50-9418-ced2ab57b498">SVD</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b7a10e23-f5b3-4749-a571-a11b1c543e58">Stoer and Bulirsch</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#7d54ff86-6fef-4065-9b83-20dc7c627151">Bulirsch Personal Life</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4d6e1726-75b6-4959-89de-d60322a4a857">Munich Visit</a></li></ul></div> +<h4>Wilkinson and Reinsch<a name="0ac36cdd-70e0-4088-9e69-ed2d4f0ca1b2"></a></h4><p>The <i>Handbook for Automatic Computation, Volume II, Linear Algebra</i>, is a research monograph published in 1971 by Springer-Verlag. This <i>Handbook</i> was edited by J. H. Wilkinson and Christian Reinsch and includes dozens of Algol procedures by 19 different authors for solving systems of simultaneous equations and computing matrix eigenvalues and singular values.</p> +<p>Wilkinson and colleagues at the National Physical Laboratory in Teddington, England wrote around half of the Algol procedures in the <i>Handbook</i>. Reinsch authored several procedures himself and reviewed and tested most, if not all, of the entire <i>Handbook</i>.</p> +<p>Translations into Fortran of many of the Algol codes produced the EISPACK subroutine library that led to the first MATLAB. I think it is fair to say that without the work of Jim Wilkinson and Christian Reinsch on the <i>Handbook</i> there might never have been a MATLAB.</p> +<h4>Wilkinson versus Reinsch<a name="639c5ab8-be39-47d9-ad03-85ef8bfdb2d4"></a></h4><p>I would have loved to listen in to discussions between Jim and Christian during the development of the <i>Handbook</i>. Here were two very talented, proud individuals working together at the detailed level required of scientific computer programing. It must have been exciting.</p> +<p>One small example: what subscripts do you use for the <tt>n-1</tt> off-diagonal elements of the symmetric, tridiagonal matrix of order <tt>n</tt> produced in one procedure and passed to another? Is it <tt>e(1:n-1)</tt> or <tt>e(2:n)</tt>? (A "modern" <tt>e(0:n-2)</tt> is not a possibility.) The first statement of the Algol procedures for the QR algorithms is</p> +<pre> for i := 2 step 1 until n do e[i-1] := e[i];</pre><p>Was there some kind of disconnect between Teddington and Munich?</p> +<h4>Reinsch Personal Life<a name="0f4a7aaa-052c-4af3-91d2-afa776ca9db7"></a></h4><p>Christian Reinsch was born in Chemnitz, Germany, in 1934. He spent most of his career at the Technical University Munich, where he was a close associate of <a href="https://blogs.mathworks.com/cleve/2015/06/01/friedrich-bauer">Fritz Bauer</a>.</p> +<p>Christian was an intensely private person. He never married and lived alone. He visited Argonne Laboratory in the 1970s, when we were working on EISPACK, and he attended a few Gatlinburg/Householder meetings. Other than that, he rarely travelled far from Munich.</p> +<p>This photo, taken by his colleague Christoph Zenger, is the only photo of Reinsch that I have ever seen. And, as far as I know, it will be the first photo of him available on the Internet.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Reinsch_1.jpg" vspace="5" /> </p> +<p>Photo credit: Christoph Zenger</p> +<h4>SVD<a name="52c11caf-6fe1-4b50-9418-ced2ab57b498"></a></h4><p>Gene Golub is known as <a href="https://www.mathworks.com/company/newsletters/articles/professor-svd.html">Professor SVD</a> because he did more than anyone else to develop the algorithms for computing the decomposition and for popularizing its applications. A 1965 paper by Golub and Velvel Kahan provides the first practical method for computing the SVD. The Golub/Kahan approach is based on the eigenvalues of the <i>2n-by-2n</i> block matrix <tt>[0 A; A' 0]</tt> .</p> +<p>Peter Businger was a grad student at Stanford in the 1960's who worked with Golub on several projects. A 1967 Stanford technical report by Golub and Businger includes an Algol procedure, written by Businger, for computing the SVD that is based on bidiagonalizing <tt>A</tt> itself. Both Golub/Kahan and Golub/Businger suggest Sturm sequences and Givens rotations for ultimately computing the singular values.</p> +<p>At the same time, Christian Reinsch independently developed his own method for computing the SVD. His review work on the <i>Handbook</i> gave Reinsch access to the implicit tridiagonal QR techniques for matrix eigenvalues that Francis and Wilkinson were investigating. So, Reinsch adapted implicit QR with Wilkinson shifts to the singular value situation.</p> +<p>Both Gene Golub and Christian Reinsch offered SVD contributions for the <i>Handbook</i> . It turns out that, with exact arithmetic and the same shifts, Golub/Businger and Reinsch would produce the same results. But Golub and Businger never used Wilkinson shifts and Golub did not join the QR club until later. Fortunately, Fritz Bauer, editor in chief of the <i>Handbook</i>, brokered a joint authorship arrangement and the Golub-Reinsch algorithm for computing the SVD resulted.</p> +<p>Walter Gander has investigated the history of SVD algorithms. The slides for the talk he presented at a workshop in Lanzhou University are available <a href="https://people.inf.ethz.ch/gander/talks/Vortrag2022.pdf">at this link</a>.</p> +<h4>Stoer and Bulirsch<a name="b7a10e23-f5b3-4749-a571-a11b1c543e58"></a></h4><p><i>Einfuhrung in die Numerische Mathematik</i>, <i>Introduction to Numerical Analysis</i>, is a classic textbook by Josef Stoer and Roland Bulirsch. The original German editions were published by Springer-Verlag in 1972 and 1976. The English translations were published in 1980 and 1993. A complete PDF of the second English edition is available <a href="https://zhilin.math.ncsu.edu/TEACHING/MA580/Stoer_Bulirsch.pdf">at this link</a>.</p> +<p>I think of Stoer &amp; Bulirsch as one of the best theoretical textbooks in numerical analysis. It is comparable to Isaacson &amp; Keller. There are theorems and proofs. There are algorithms, but no software. There are a few, but not many, numerical examples. There are many excellent exercises.</p> +<h4>Bulirsch Personal Life<a name="7d54ff86-6fef-4065-9b83-20dc7c627151"></a></h4><p>Roland Bulirsch was born in Liberec, in the former Czechoslovkia, in 1932. After visiting U. C. San Diego in the 1960's, he spent most of his career at the Technical University Munich. In contrast to Reinsch, Bulirsch was a very gregarious, public person. He adored his grand children and they adored him. The three-part <a href="https://bulirsch.eu/anlagen/Bulirsch_80_Jahre_1.pdf">photo collection</a> assembled for his 80th birthday has hundreds of snapshots and portraits.</p> +<p>Roland was an avid body-builder. He had the broadest shoulders that I have ever seen -- and they were twice as broad as his waist. He had huge hands and huge biceps. One of my favorite stories about Roland explains the photo on his desk that was signed,</p> +<pre> "Thanks for everything -- Arnie"</pre><p>It turns out that Roland and a body-builder from Austria named Arnold Swartzenegger trained together in Munich in the 1960's. Roland and some friends from the gym took up a collection to help the ambitious young Arnie emigrate to America.</p> +<p>Here are a few photos from Roland's albums.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Roland_1.png" vspace="5" /> </p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Arnie_1.png" vspace="5" /> </p> +<h4>Munich Visit<a name="4d6e1726-75b6-4959-89de-d60322a4a857"></a></h4><p>My last visit to T. U. Munich was in 2015. I gave my stump speech, <a href="https://www.youtube.com/watch?v=ekcLT8QgB60">The Evolution of MATLAB</a>, in a big, new lecture hall named after Friedrich Bauer. Christian Reinsch was in the audience (skip to time stamp 13:59 <a href="https://www.youtube.com/watch?v=ekcLT8QgB60f">in the video</a>). He was over 70 years old at the time and had just finished his daily 50-kilometer bicycle ride.</p> +<p>After the talk, a few of us found our way to one of the famous Munich <i>Biergarten</i>. Christian came along but did not stay for dinner. He was not a beer drinker.</p> +<p>Roland Bulirsch was able to join us for dinner, however, and we managed to polish off a few of those one-liter German beer steins before closing down the place.</p> +<!-- + function grabCode_f2dde2cc84e245d09b99f58b9781b0eb() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='f2dde2cc84e245d09b99f58b9781b0eb ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' f2dde2cc84e245d09b99f58b9781b0eb'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +f2dde2cc84e245d09b99f58b9781b0eb ##### SOURCE BEGIN ##### +%% Christian Reinsch, Roland Bulirsch, and the SVD +% Christian Reinsch and Roland Bulirsch both passed away recently, +% Reinsch on October 8 and Bulirsch on September 21. +% Reinsch was 88 years old and Bulirsch was 89. +% Both of them were retired professors of numerical analysis at the +% Technical University of Munich. +% Both of them were friends of mine. +% But in almost all other ways, they were very different people. + +%% Wilkinson and Reinsch +% The _Handbook for Automatic Computation, Volume II, Linear Algebra_, is a +% research monograph published in 1971 by Springer-Verlag. This _Handbook_ +% was edited by J. H. Wilkinson and Christian Reinsch and includes dozens +% of Algol procedures by 19 different authors for solving systems of +% simultaneous equations and computing matrix eigenvalues and singular +% values. + +%% +% Wilkinson and colleagues at the National Physical Laboratory in +% Teddington, England wrote around half of the Algol procedures in the +% _Handbook_. Reinsch authored several procedures himself +% and reviewed and tested most, if not all, of the entire _Handbook_. +% +% Translations into Fortran of many of the Algol codes produced the +% EISPACK subroutine library that led to the first MATLAB. +% I think it is fair to say that without the work of Jim Wilkinson and +% Christian Reinsch on the _Handbook_ there might never have been a MATLAB. + +%% Wilkinson versus Reinsch +% I would have loved to listen in to discussions between Jim and Christian +% during the development of the _Handbook_. Here were two very talented, +% proud individuals working together at the detailed level required of +% scientific computer programing. It must have been exciting. +% +% One small example: what subscripts do you use for the |n-1| off-diagonal +% elements of the symmetric, tridiagonal matrix of order |n| produced in +% one procedure and passed to another? +% Is it |e(1:n-1)| or |e(2:n)|? (A "modern" |e(0:n-2)| is +% not a possibility.) The first statement of the Algol procedures +% for the QR algorithms is +% +% for i := 2 step 1 until n do e[i-1] := e[i]; +% +% Was there some kind of disconnect between Teddington and Munich? + +%% Reinsch Personal Life +% Christian Reinsch was born in Chemnitz, Germany, in 1934. +% He spent most of his career at the Technical University Munich, where +% he was a close associate of +% <https://blogs.mathworks.com/cleve/2015/06/01/friedrich-bauer +% Fritz Bauer>. +% +% Christian was an intensely private person. He never married and lived +% alone. He visited Argonne Laboratory in the 1970s, when we were working +% on EISPACK, and he attended a few Gatlinburg/Householder meetings. +% Other than that, he rarely travelled far from Munich. +% +% This photo, taken by his colleague Christoph Zenger, +% is the only photo of Reinsch that I have ever seen. And, as far as I +% know, it will be the first photo of him available on the Internet. +% +% <<Reinsch_1.jpg>> +% +% Photo credit: Christoph Zenger +% + +%% SVD +% Gene Golub is known as +% <https://www.mathworks.com/company/newsletters/articles/professor-svd.html +% Professor SVD> because he did more than anyone +% else to develop the algorithms for computing the decomposition and +% for popularizing its applications. A 1965 paper by Golub and +% Velvel Kahan provides the first practical method for computing the +% SVD. The Golub/Kahan approach is based on the eigenvalues of the +% _2n-by-2n_ block matrix |[0 A; A' 0]| . +% +% Peter Businger was a grad student at Stanford in the 1960's who +% worked with Golub on several projects. A 1967 Stanford technical +% report by Golub and Businger includes an Algol procedure, written by +% Businger, for computing the SVD that is based on bidiagonalizing |A| +% itself. Both Golub/Kahan and Golub/Businger suggest Sturm sequences +% and Givens rotations for ultimately computing the singular values. +% +% At the same time, Christian Reinsch independently developed his own +% method for computing the SVD. His review work on the _Handbook_ +% gave Reinsch access to the implicit tridiagonal QR techniques for +% matrix eigenvalues that Francis and Wilkinson were investigating. So, +% Reinsch adapted implicit QR with Wilkinson shifts to the singular value +% situation. +% +% Both Gene Golub and Christian Reinsch offered SVD +% contributions for the _Handbook_ . It turns out that, with exact +% arithmetic and the same shifts, Golub/Businger and Reinsch would +% produce the same results. But Golub and Businger never used +% Wilkinson shifts and Golub did not join the QR club until later. +% Fortunately, Fritz Bauer, editor in chief of the _Handbook_, brokered +% a joint authorship arrangement and the Golub-Reinsch algorithm +% for computing the SVD resulted. +% +% Walter Gander has investigated the history of SVD algorithms. +% The slides for the talk he presented at a workshop in +% Lanzhou University are available +% <https://people.inf.ethz.ch/gander/talks/Vortrag2022.pdf +% at this link>. + +%% Stoer and Bulirsch +% _Einfuhrung in die Numerische Mathematik_, _Introduction to Numerical +% Analysis_, is a classic textbook by Josef Stoer and Roland Bulirsch. +% The original German editions were published by Springer-Verlag in 1972 +% and 1976. The English translations were published in 1980 and 1993. +% A complete PDF of the second English edition is available +% <https://zhilin.math.ncsu.edu/TEACHING/MA580/Stoer_Bulirsch.pdf +% at this link>. +% +% I think of Stoer & Bulirsch as one of the best theoretical +% textbooks in numerical analysis. It is comparable to Isaacson & Keller. +% There are theorems and proofs. There are algorithms, but no +% software. There are a few, but not many, numerical examples. +% There are many excellent exercises. + +%% Bulirsch Personal Life +% Roland Bulirsch was born in Liberec, in the former Czechoslovkia, +% in 1932. After visiting U. C. San Diego in the 1960's, +% he spent most of his career at the Technical University Munich. +% In contrast to Reinsch, Bulirsch was a very gregarious, public person. +% He adored his grand children and they adored him. The three-part +% <https://bulirsch.eu/anlagen/Bulirsch_80_Jahre_1.pdf photo collection> +% assembled for his 80th birthday has hundreds of snapshots and portraits. +% +% Roland was an avid body-builder. He had the broadest shoulders that +% I have ever seen REPLACE_WITH_DASH_DASH and they were twice as broad as his waist. +% He had huge hands and huge biceps. One of my favorite stories about +% Roland explains the photo on his desk that was signed, +% +% "Thanks for everything REPLACE_WITH_DASH_DASH Arnie" +% +% It turns out that Roland and a body-builder from Austria +% named Arnold Swartzenegger trained together in Munich in the 1960's. +% Roland and some friends from the gym took up a collection to help +% the ambitious young Arnie emigrate to America. + +%% +% Here are a few photos from Roland's albums. +% +% <<Roland_1.png>> +% +% <<Arnie_1.png>> +% + +%% Munich Visit +% My last visit to T. U. Munich was in 2015. +% I gave my stump speech, +% <https://www.youtube.com/watch?v=ekcLT8QgB60 The Evolution of MATLAB>, +% in a big, new lecture hall named after Friedrich Bauer. Christian +% Reinsch was in the audience (skip to time stamp 13:59 +% <https://www.youtube.com/watch?v=ekcLT8QgB60f in the video>). +% He was over 70 years old at the time and had just finished his daily +% 50-kilometer bicycle ride. +% +% After the talk, a few of us found our way to one of the famous Munich +% _Biergarten_. Christian came along but did not stay for dinner. +% He was not a beer drinker. +% +% Roland Bulirsch was able to join us for dinner, however, and we managed +% to polish off a few of those one-liter German beer steins before +% closing down the place. +##### SOURCE END ##### f2dde2cc84e245d09b99f58b9781b0eb +--> + + + + + An Interactive Version of colorcubes + + 2022-10-21T20:58:02-06:00 + https://hpc.social/2022/an-interactive-version-of-colorcubes + <div class="content"><!--introduction--><p>A 231-character static version of <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11543">colorcubes</a> in the current <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries">MiniHack</a> generated quite a bit of interest. So I am posting the full version, where you can change number of cubes and the view point, <a href="https://blogs.mathworks.com/cleve/files/colorcubes.m">at this link</a>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#2842fcd2-e0df-4ec2-bc84-82fad5a13e51">Animation</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#530668b0-ea28-4376-a885-fa4d1a9c2037">Quiz</a></li></ul></div> +<h4>Animation<a name="2842fcd2-e0df-4ec2-bc84-82fad5a13e51"></a></h4><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/color_cubes.gif" vspace="5" /> </p> +<h4>Quiz<a name="530668b0-ea28-4376-a885-fa4d1a9c2037"></a></h4><p>What is the color of the cubelet, or cubelets, in the center?</p> +<!-- + function grabCode_0796b1601674403b8501c6cc237cbce2() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='0796b1601674403b8501c6cc237cbce2 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 0796b1601674403b8501c6cc237cbce2'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +0796b1601674403b8501c6cc237cbce2 ##### SOURCE BEGIN ##### +%% An Interactive Version of colorcubes +% A 231-character static version of +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11543 +% colorcubes> in the current +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries +% MiniHack> generated quite a bit of interest. +% So I am posting the full version, where you can change number of cubes +% and the view point, +% <https://blogs.mathworks.com/cleve/files/colorcubes.m +% at this link>. + +%% Animation +% +% <<color_cubes.gif>> +% + +%% Quiz +% What is the color of the cubelet, or cubelets, in the center? +##### SOURCE END ##### 0796b1601674403b8501c6cc237cbce2 +--> + + + + + modfun, A Short Program Produces Impressive Graphics + + 2022-10-17T23:17:12-06:00 + https://hpc.social/2022/modfun-a-short-program-produces-impressive-graphics + <div class="content"><!--introduction--><p>This nifty graphics gem started with a contribution by Paul Villain to the MATLAB 2022 Mini Hack, currently taking place on <a href="https://www.mathworks.com/matlabcentral/contests.html">MATLAB Central</a>.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#56a0ec8a-8f48-4d49-951d-ede8fd35a5a3"><tt>modfun</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a4a42958-572e-4506-9fd6-fd5704698093">code</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#580b1824-d2ab-4ea9-883a-1aa69d0c8bb1">Animation</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#24d1d844-3760-4a2d-bd68-8671d9ff55b6">Gallery</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b5cd86af-e8cd-4db6-9341-fa63d035cc3d">Quiz</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#336d3ee4-5965-44e5-bc73-926eb724f3f4">Software</a></li></ul></div> +<h4><tt>modfun</tt><a name="56a0ec8a-8f48-4d49-951d-ede8fd35a5a3"></a></h4><p>Villain's contribution is <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/9880">102 mod 500</a> . My rewrite is <a href="https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11093"><tt>modfun</tt></a>. Villain's <tt>102</tt> and <tt>500</tt> become the parameters <tt>m</tt> and <tt>n</tt>.</p> +<pre> modfun(m,n) connects n points, z(j), equally spaced + around the complex unit circle, by n+1 straight lines. + The j-th line connects z(j+1) to z(mod(j*m,n)+1).</pre><h4>code<a name="a4a42958-572e-4506-9fd6-fd5704698093"></a></h4><p>The basic code uses complex arithmetic and is only eight lines long. When the graphics is done with <tt>line</tt> instead of <tt>plot</tt>, it is not necessary to use <tt>hold on</tt>.</p> +<pre> function modfun(m,n) + init_fig + z = exp(2i*pi*(0:n)/n); + for j = 0:n + zj = [z(j+1),z(mod(j*m,n)+1)]; + line(real(zj),imag(zj)) + end + end</pre><p>The initialization makes <tt>line</tt> possible.</p> +<pre> function init_fig + axis([-1 1 -1 1]) + axis square + axis off + end</pre><h4>Animation<a name="580b1824-d2ab-4ea9-883a-1aa69d0c8bb1"></a></h4><p>This animation of <tt>modfun(105,200)</tt> has one frame for every five lines.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/modfun105.gif" vspace="5" /> </p> +<h4>Gallery<a name="24d1d844-3760-4a2d-bd68-8671d9ff55b6"></a></h4><p>A sample.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/modfuns1.png" vspace="5" /> </p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/modfuns2.png" vspace="5" /> </p> +<h4>Quiz<a name="b5cd86af-e8cd-4db6-9341-fa63d035cc3d"></a></h4><p>Match these calls to <tt>modfun</tt> to the plots in the Gallery.</p> +<pre> modfun(88,179) + modfun(89,220) + modfun(99,200) + modfun(101,200) + modfun(111,200) + modfun(113,188) + modfun(126,188) + modfun(126,200)</pre><h4>Software<a name="336d3ee4-5965-44e5-bc73-926eb724f3f4"></a></h4><p>An interactive <tt>modfun</tt>.</p> +<p><a href="https://blogs.mathworks.com/cleve/files/modfun.m">modfun.m</a>.</p> +<!-- + function grabCode_ce8d1e93d27746db8cedca87febedacd() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='ce8d1e93d27746db8cedca87febedacd ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' ce8d1e93d27746db8cedca87febedacd'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +ce8d1e93d27746db8cedca87febedacd ##### SOURCE BEGIN ##### +%% |modfun|, A Short Program Produces Impressive Graphics +% This nifty graphics gem started with a contribution by Paul Villain +% to the MATLAB 2022 Mini Hack, currently taking place on +% <https://www.mathworks.com/matlabcentral/contests.html MATLAB Central>. + +%% |modfun| +% Villain's contribution is +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/9880 +% 102 mod 500> . My rewrite is +% <https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11093 +% |modfun|>. +% Villain's |102| and |500| become the parameters |m| and |n|. +% +% modfun(m,n) connects n points, z(j), equally spaced +% around the complex unit circle, by n+1 straight lines. +% The j-th line connects z(j+1) to z(mod(j*m,n)+1). +% +%% code +% The basic code uses complex arithmetic and is only eight lines long. +% When the graphics is done with |line| instead of |plot|, +% it is not necessary to use |hold on|. +% +% function modfun(m,n) +% init_fig +% z = exp(2i*pi*(0:n)/n); +% for j = 0:n +% zj = [z(j+1),z(mod(j*m,n)+1)]; +% line(real(zj),imag(zj)) +% end +% end +% +% The initialization makes |line| possible. +% +% function init_fig +% axis([-1 1 -1 1]) +% axis square +% axis off +% end + +%% Animation +% This animation of |modfun(105,200)| has one frame for every five lines. +% +% <<modfun105.gif>> +% + +%% Gallery +% A sample. +% +% <<modfuns1.png>> +% +% <<modfuns2.png>> + +%% Quiz +% Match these calls to |modfun| to the plots in the Gallery. +% +% modfun(88,179) +% modfun(89,220) +% modfun(99,200) +% modfun(101,200) +% modfun(111,200) +% modfun(113,188) +% modfun(126,188) +% modfun(126,200) + +%% Software +% An interactive |modfun|. +% +% <https://blogs.mathworks.com/cleve/files/modfun.m modfun.m>. +##### SOURCE END ##### ce8d1e93d27746db8cedca87febedacd +--> + + + + + Trio, A Wooden Puzzle from the Czech Republic + + 2022-09-25T17:00:41-06:00 + https://hpc.social/2022/trio-a-wooden-puzzle-from-the-czech-republic + <div class="content"><!--introduction--><p>"Clever Toys" is a puzzle company in the Czech Republic. <a href="http://www.clevertoys.cz/index_eng.php?page=eng">Their Web site</a> describes five different hand-made, wooden puzzles that are related mathematically to the Rubik's Cube.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#52520048-f34a-4981-840a-9007a0387f6b">Puzzle</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#2dfd1830-7360-4517-9796-4632c066c884">Model</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#99075c53-97fe-4397-a096-3baedc01f129">Scramble</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a45994ba-ec9b-49ab-b897-d0f79de81dcd">Animation</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ff195cfa-9e7f-4693-9c9e-5109eebc19c4">Unscramble</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#87972e4e-c85c-4982-8459-add195223548">Solutions</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#2e58ba8b-073a-402d-8259-2f095e0e72d2">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0c756fc0-bf5b-4ccc-8d56-8eab84048dee">Thanks</a></li></ul></div> +<h4>Puzzle<a name="52520048-f34a-4981-840a-9007a0387f6b"></a></h4><p>Here is the photo of the puzzle "Trio".</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/trio_puzzle.png" vspace="5" /> </p> +<p>Here is an English translation of their description.</p> +<p> +<p style="margin-left: 3ex;"> +The task of this 2D puzzle is to assemble all the ovals according +to their color into a basic assembly. By moving the balls in the +grooves and turning the center wheel, you can gradually get each +ball where you need it. +</p> + +</p> +<p>I am not sure that Clever Toys is still in business. They have not responded to my emails and I have not been able to purchase an actual Trio puzzle. Of course, that is all the motivation I need to make a MATLAB model.</p> +<h4>Model<a name="2dfd1830-7360-4517-9796-4632c066c884"></a></h4><p>Here is the initial configuration. There are three fixed outer, partial, discs and one inner, full, disc. Each of the outer discs has a channel containing 10 marbles. When the inner disc is positioned properly, the marbles in a channel can be rotated. Rotating the inner disc itself moves some, but not all, of the marbles, thereby scrambling the colors.</p> +<p>Like Rubik's Cube, the objective of the puzzle is to return to this initial "solved" state.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/trio_initial.gif" vspace="5" /> </p> +<p>Mathematically, both Rubik's Cube and Trio are ultimately based upon rotation matrices. Rubik's Cube is a 3-D puzzle whose state is specified by the position and orientation of 27 cubelets; this gives Rubik's Cube about <tt>4.3*10^19</tt> possible positions. At each step, there are six faces and 12 possible rotations.</p> +<p>Trio is a 2-D puzzle whose state is specified by the colors of the marbles. There are 10 marbles of each of three colors; this implies that Trio has <tt>30!/(10!)^3 = 5.6*10^12</tt> possible positions. At each step, there are eight possible rotations, four discs, clockwise or counter-clockwise.</p> +<h4>Scramble<a name="99075c53-97fe-4397-a096-3baedc01f129"></a></h4><p>A "scramble" is an integer vector with elements between -4 and +4 that specify moves or rotations. Move 0 initializes the model. Move <tt>d</tt> with <tt>d</tt> equal to 1, 2, or 3 rotates all the marbles in the <tt>d</tt>-th channel counter-clockwise for one-tenth of a full rotation. Move <tt>d</tt> with <tt>d</tt> equal to -1, -2, or -3 is the corresponding clockwise rotation. Moves -4 and 4 turn the central disc clockwise or counter-clockwise for one-third of a full rotation. This rotates some, but not all, of the marbles and mixes the colors.</p> +<p>Here is a scramble of length 29 that provides our example.</p> +<p>D = [ 4 1 3 1 1 -2 3 1 4 4 2 4 4 -3 -3 -2 -3 -3 2 1 4 -1 3 -4 2]</p> +<p>And here is the scrambled result.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/trio_scrambled.gif" vspace="5" /> </p> +<h4>Animation<a name="a45994ba-ec9b-49ab-b897-d0f79de81dcd"></a></h4><p>This animated gif shows the scrambling process one move at a time. The animation does not repeat automatically, so to start it over again, refresh your browser. If it still doesn't move, find another browser.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/trio_scramble.gif" vspace="5" /> </p> +<h4>Unscramble<a name="ff195cfa-9e7f-4693-9c9e-5109eebc19c4"></a></h4><p>Reverse the scramble by running it backwards, changing the sign of each move. This will return the scrambled position to the initial position. I call this "unscramble"; it solves the scrambled position by a "follow the breadcrumbs" algorithm.</p> +<p>Both animations take a long time to run -- about 80 seconds with my browser.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/trio_unscramble.gif" vspace="5" /> </p> +<h4>Solutions<a name="87972e4e-c85c-4982-8459-add195223548"></a></h4><p>I don't have any idea about how to actually solve a given position without using knowledge of how it was generated, and I don't have any idea about how to quantify the difficulty of finding a solution. This is in sharp contrast to Rubik's Cube where there are measures of difficulty and algorithms for finding optimum solutions.</p> +<h4>Software<a name="2e58ba8b-073a-402d-8259-2f095e0e72d2"></a></h4><p>The program available at <a href="https://blogs.mathworks.com/cleve/files/trioo.m">this link</a> is interactive. Click or alt-click in any one of the four discs to make a move in that disc.</p> +<h4>Thanks<a name="0c756fc0-bf5b-4ccc-8d56-8eab84048dee"></a></h4><p>Thanks to Steve Eddins and Tom Lane for help with this post.</p> +<!-- + function grabCode_233d0111a3a04a7896bd6aac6263df7c() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='233d0111a3a04a7896bd6aac6263df7c ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 233d0111a3a04a7896bd6aac6263df7c'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022b<br /></p> +</div> +<!-- +233d0111a3a04a7896bd6aac6263df7c ##### SOURCE BEGIN ##### +%% Trio, A Wooden Puzzle from the Czech Republic +% "Clever Toys" is a puzzle company in the Czech Republic. +% <http://www.clevertoys.cz/index_eng.php?page=eng +% Their Web site> describes five different hand-made, wooden puzzles +% that are related mathematically to the Rubik's Cube. +%% Puzzle +% Here is the photo of the puzzle "Trio". +% +% <<trio_puzzle.png>> +% + +%% +% Here is an English translation of their description. +% +% <html> +% <p style="margin-left:3ex;"> +% The task of this 2D puzzle is to assemble all the ovals according +% to their color into a basic assembly. By moving the balls in the +% grooves and turning the center wheel, you can gradually get each +% ball where you need it. +% </p> + +% </html> +% +% I am not sure that Clever Toys is still in business. +% They have not responded to my emails and I have not been able +% to purchase an actual Trio puzzle. Of course, that is all the +% motivation I need to make a MATLAB model. + +%% Model +% Here is the initial configuration. There are three fixed outer, partial, +% discs and one inner, full, disc. Each of the outer discs has a channel +% containing 10 marbles. When the inner disc is positioned properly, +% the marbles in a channel can be rotated. Rotating the inner disc +% itself moves some, but not all, of the marbles, thereby scrambling +% the colors. +% +% Like Rubik's Cube, the objective of the puzzle is to return to this +% initial "solved" state. +% +% <<trio_initial.gif>> +% + +%% +% Mathematically, both Rubik's Cube and Trio are ultimately based upon +% rotation matrices. Rubik's Cube is a 3-D puzzle whose state is +% specified by the position and orientation of 27 cubelets; +% this gives Rubik's Cube about |4.3*10^19| possible positions. +% At each step, there are six faces and 12 possible rotations. +% +% Trio is a 2-D puzzle whose state is specified by the colors of the +% marbles. There are 10 marbles of each of three colors; +% this implies that Trio has |30!/(10!)^3 = 5.6*10^12| possible +% positions. At each step, there are eight possible rotations, +% four discs, clockwise or counter-clockwise. + +%% Scramble +% A "scramble" is an integer vector with elements between -4 and +4 that +% specify moves or rotations. Move 0 initializes the model. Move |d| with +% |d| equal to 1, 2, or 3 rotates all the marbles in the |d|-th channel +% counter-clockwise for one-tenth of a full rotation. Move |d| with +% |d| equal to -1, -2, or -3 is the corresponding clockwise rotation. +% Moves -4 and 4 turn the central disc clockwise or counter-clockwise +% for one-third of a full rotation. This rotates some, but not all, of +% the marbles and mixes the colors. + +%% +% Here is a scramble of length 29 that provides our example. +% +% D = [ 4 1 3 1 1 -2 3 1 4 4 2 4 4 -3 -3 -2 -3 -3 2 1 4 -1 3 -4 2] +% +% And here is the scrambled result. +% +% <<trio_scrambled.gif>> + +%% Animation +% This animated gif shows the scrambling process one move at a time. +% The animation does not repeat automatically, so to start it over again, +% refresh your browser. +% If it still doesn't move, find another browser. +% +% <<trio_scramble.gif>> +% + +%% Unscramble +% Reverse the scramble by running it backwards, changing the sign of +% each move. This will return the scrambled position to the initial +% position. I call this "unscramble"; it solves the scrambled position +% by a "follow the breadcrumbs" algorithm. +% +% Both animations take a long time to run REPLACE_WITH_DASH_DASH about 80 seconds +% with my browser. +% +% <<trio_unscramble.gif>> +% + +%% Solutions +% I don't have any idea about how to actually solve a given position +% without using knowledge of how it was generated, and I don't have +% any idea about how to quantify the difficulty of finding a solution. +% This is in sharp contrast to Rubik's Cube where there are measures +% of difficulty and algorithms for finding optimum solutions. + +%% Software +% The program available at +% <https://blogs.mathworks.com/cleve/files/trioo.m this link> +% is interactive. Click or alt-click in any one of the four discs +% to make a move in that disc. + +%% Thanks +% Thanks to Steve Eddins and Tom Lane for help with this post. +##### SOURCE END ##### 233d0111a3a04a7896bd6aac6263df7c +--> + + + + + Rubik’s Cube Superflips and God’s Number + + 2022-09-06T02:00:24-06:00 + https://hpc.social/2022/rubik-s-cube-superflips-and-god-s-number + <div class="content"><!--introduction--><div><ul><li>How hard is it to solve a Rubik's Cube?</li><li>When can you say that your Rubik's Cube is completely scrambled?</li><li>Why might the answer depend on where you went to school?</li><li>What interesting mathematical questions are involved?</li></ul></div> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#3c346c42-143c-4ddf-aa1d-d75e75c29b38">Metrics</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#a32fd551-4332-475a-a222-185f9d2ae2d0">God's number</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#eece078d-6a7b-423f-9218-5476dc32fcc1">Superflip</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#e237f0a5-b64d-4df1-a432-d475f0d68ae5">Q20</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#707dbec1-844c-46fe-9ea1-722ae2c4685c">Q26</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#88069ce9-4903-4668-a121-0ba2741eabaa">Compare</a></li></ul></div> +<h4>Metrics<a name="3c346c42-143c-4ddf-aa1d-d75e75c29b38"></a></h4><p>The difficulty of solving any configuration of a Rubik's Cube is the smallest number of moves required to return to the intial configuration where each face is showing a single color.</p> +<p>But what, exactly, is a move? The so-called <i>quarter-turn metric</i> says a move is turning any face by 90 degrees. The <i>half-turn metric</i> says turning any face by either 90 or 180 degrees is a single move. For example, using Singmaster notation and the quarter-turn metric, the sequence "L L", which turns the left face twice in the same direction, is two moves. But in the half-move metric, the sequence becomes "L2" and counts as a single move.</p> +<p>Tomas Rokicki, who describes himself as <a href="https://tomas.rokicki.com">a programmer from Palo Alto</a>, provides some history at <a href="https://cube20.org/qtm">cube20.org</a>.</p> +<p> +<p style="margin-left: 3ex;"> +In the early days of cube mathematics, two camps emerged on how to + measure the difficulty of a position. West coast and Stanford + mathematicians, free thinkers all, tended to prefer the half-turn + metric, where any twist of any face, whether 90 degrees, 180 degrees, + or 270 degrees counted as a single move. The east coast crowd, + including MIT, tended to prefer the rigor of the quarter-turn metric, + where a half-turn counted as two moves, since of course it could be + accomplished by two consecutive quarter turns. +</p> + +</p> +<p>When I began development of a Rubik's Cube simulator, <tt>Qube</tt>, I was unaware of this history and, even though I am a devout West-coaster, I just counted quarter-turns. Now a toggle switch in <tt>Qube</tt> allows use of either metric.</p> +<h4>God's number<a name="a32fd551-4332-475a-a222-185f9d2ae2d0"></a></h4><p>Let <tt>Q</tt> denote a cube position,</p> +<p>| <tt>Q</tt> | = minimum number of moves to solve <tt>Q</tt>,</p> +<p><tt><b>Q</b></tt> = the set of all possible <tt>Q</tt>'s, and</p> +<p><tt>G(<b>Q</b>)</tt> = maximum over <tt>Q</tt> in <b>Q</b> of | <tt>Q</tt> |.</p> +<p><tt>G(<b>Q</b>)</tt> is known as "God's number". <b>Q</b> contains over <tt>4.3*10^19</tt> positions, so computing <tt>G(<b>Q</b>)</tt> is a formidable optimization problem. The definition of God's number does not require the optimal solution itself, only the number of moves.</p> +<h4>Superflip<a name="eece078d-6a7b-423f-9218-5476dc32fcc1"></a></h4><p>The <i>superflip</i> of Rubik's cube is a configuration where the 8 corners, the 6 face centers, and the cube center show the initial colors, but the 12 edge cubelets have the colors reversed. In 1995, Michael Reid proved that solution of the superflip requires 20 half-turn metric moves. In 2010, Tomas Rokicki and colleagues, using hundreds of computers at Google, carried out a massive computation to prove that no other configuration took more than 20 moves, <a href="https://cube20.org/qtm">cube20.org</a>. This established that God's number for the half-turn metric is</p> +<p><tt>G(<b>Q</b>)</tt> = 20</p> +<h4>Q20<a name="e237f0a5-b64d-4df1-a432-d475f0d68ae5"></a></h4><p>I use <tt>Q20</tt> to denote the superflip. Our first animation generates the superflip with 20 moves. A few rotations at the beginning and at the end are shown in more detail so that we can see the rotation matrices involved. A higher resolution video clip is available at this link: <a href="https://blogs.mathworks.com/cleve/files/Q20.mp4">Q20.mp4</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Q20.gif" vspace="5" /> </p> +<p>The second animation shows a solution of <tt>Q20</tt> in 20 moves obtained by reversing and complementing the generating moves. Reid's proof shows that any other solution requires at least 20 moves. The high resolution clip is: <a href="https://blogs.mathworks.com/cleve/files/Q20solve.mp4">Q20solve.mp4</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Q20solve.gif" vspace="5" /> </p> +<p>There are several other configurations that require 20 moves. Any configuration with <tt>G(Q) = 20</tt> can be regarded as completely shuffled in the half-turn metric.</p> +<h4>Q26<a name="707dbec1-844c-46fe-9ea1-722ae2c4685c"></a></h4><p>For the quarter-turn metric, if you combine superflip and a configuration known as <i>fourspot</i> you have <tt>Q26</tt> . Only 8 corners and two face enters are correct. The edges, four face centers, and the cube center are all reversed. When 180 degree turns are counted as two 90 degree turns, this configuration is generated by 26 moves and solved by reversing and complementing the 26 moves. The high resolution clip is: <a href="https://blogs.mathworks.com/cleve/files/Q26.mp4">Q26.mp4</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Q26.gif" vspace="5" /> </p> +<p>In 2014, a massive computation at the Ohio Supercomputer Center by Rokicki and Morley Davidson proved that only <tt>Q26</tt> (and its two rotations) required 26 quarter-turn moves All other configurations need fewer. <a href="https://cube20.org/qtm">cube20.org</a>. So, this established that God's number for the half-turn metric is</p> +<p><tt>G(<b>Q</b>)</tt> = 26</p> +<p>The high resolution clip is: <a href="https://blogs.mathworks.com/cleve/files/Q26solve.mp4">Q26solve.mp4</a></p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Q26solve.gif" vspace="5" /> </p> +<h4>Compare<a name="88069ce9-4903-4668-a121-0ba2741eabaa"></a></h4><p>Let's compare <tt>Q20</tt> and <tt>Q26</tt> by alternating between the two.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/flipper03.gif" vspace="5" /> </p> +<p>The type 3 corner pieces are the same in <tt>Q20</tt> and <tt>Q26</tt>, and are in the correct initial position.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/flipper33.gif" vspace="5" /> </p> +<p>The type 2 edge pieces are also the same in <tt>Q20</tt> and <tt>Q26</tt>, but are reversed from their initial position.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/flipper22.gif" vspace="5" /> </p> +<p>All the action is with cubelets of type 0 and type 1. In a real, physical Rubik's Cube, this is one solid piece that holds the Cube together.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/flipper01.gif" vspace="5" /> </p> +<!-- + function grabCode_552a77033bf74984addf11ae10f9bb2e() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='552a77033bf74984addf11ae10f9bb2e ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 552a77033bf74984addf11ae10f9bb2e'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022b<br /></p> +</div> +<!-- +552a77033bf74984addf11ae10f9bb2e ##### SOURCE BEGIN ##### +%% Rubik's Cube Superflips and God's Number +% * How hard is it to solve a Rubik's Cube? +% * When can you say that your Rubik's Cube is completely scrambled? +% * Why might the answer depend on where you went to school? +% * What interesting mathematical questions are involved? + +%% Metrics +% The difficulty of solving any configuration of a Rubik's Cube +% is the smallest number of moves required to return to the intial +% configuration where each face is showing a single color. +% +% But what, exactly, is a move? The so-called _quarter-turn metric_ says +% a move is turning any face by 90 degrees. The _half-turn metric_ says +% turning any face by either 90 or 180 degrees is a single move. For +% example, using Singmaster notation and the quarter-turn metric, the +% sequence "L L", which turns the left face twice in the same direction, +% is two moves. But in the half-move metric, the sequence becomes "L2" +% and counts as a single move. +% +% Tomas Rokicki, who describes himself as +% <https://tomas.rokicki.com a programmer from Palo Alto>, provides +% some history at <https://cube20.org/qtm cube20.org>. +% +% <html> +% <p style="margin-left:3ex;"> +% In the early days of cube mathematics, two camps emerged on how to +% measure the difficulty of a position. West coast and Stanford +% mathematicians, free thinkers all, tended to prefer the half-turn +% metric, where any twist of any face, whether 90 degrees, 180 degrees, +% or 270 degrees counted as a single move. The east coast crowd, +% including MIT, tended to prefer the rigor of the quarter-turn metric, +% where a half-turn counted as two moves, since of course it could be +% accomplished by two consecutive quarter turns. +% </p> + +% </html> +% +% When I began development of a Rubik's Cube simulator, |Qube|, +% I was unaware of this history and, even though I am a devout +% West-coaster, I just counted quarter-turns. Now a toggle switch in +% |Qube| allows use of either metric. + +%% God's number +% Let |Q| denote a cube position, +% +% | |Q| | = minimum number of moves to solve |Q|, +% +% |*Q*| = the set of all possible |Q|'s, and +% +% |G(*Q*)| = maximum over |Q| in *Q* of | |Q| |. +% +% |G(*Q*)| is known as "God's number". +% *Q* contains over |4.3*10^19| positions, so computing |G(*Q*)| is a +% formidable optimization problem. The definition of God's number does +% not require the optimal solution itself, only the number of moves. + +%% Superflip +% The _superflip_ of Rubik's cube is a configuration where the 8 corners, +% the 6 face centers, and the cube center show +% the initial colors, but the 12 edge cubelets have the colors reversed. +% In 1995, Michael Reid proved that solution of the superflip requires +% 20 half-turn metric moves. In 2010, Tomas Rokicki and colleagues, +% using hundreds of computers at Google, carried out a massive computation +% to prove that no other configuration took more than 20 moves, +% <https://cube20.org/qtm cube20.org>. +% This established that God's number for the half-turn metric is +% +% |G(*Q*)| = 20 +% + +%% Q20 +% I use |Q20| to denote the superflip. +% Our first animation generates the superflip with 20 moves. +% A few rotations at the beginning and at the end are shown in more +% detail so that we can see the rotation matrices involved. +% A higher resolution video clip is available at this link: +% <https://blogs.mathworks.com/cleve/files/Q20.mp4 Q20.mp4> +% +% <<Q20.gif>> +% + +%% +% The second animation shows a solution of |Q20| in 20 moves obtained +% by reversing and complementing the generating moves. +% Reid's proof shows that any other solution requires at least 20 moves. +% The high resolution clip is: +% <https://blogs.mathworks.com/cleve/files/Q20solve.mp4 Q20solve.mp4> +% +% <<Q20solve.gif>> +% +% There are several other configurations that require 20 moves. +% Any configuration with |G(Q) = 20| can be regarded as completely +% shuffled in the half-turn metric. + +%% Q26 +% For the quarter-turn metric, +% if you combine superflip and a configuration known as _fourspot_ +% you have |Q26| . +% Only 8 corners and two face enters are correct. +% The edges, four face centers, and the cube center are all reversed. +% When 180 degree turns are counted as two 90 degree turns, +% this configuration is generated by 26 moves and solved by reversing +% and complementing the 26 moves. +% The high resolution clip is: +% <https://blogs.mathworks.com/cleve/files/Q26.mp4 Q26.mp4> +% +% <<Q26.gif>> +% +% In 2014, a massive computation at the Ohio Supercomputer Center +% by Rokicki and Morley Davidson proved that only |Q26| (and its two +% rotations) required 26 quarter-turn moves All other configurations +% need fewer. +% <https://cube20.org/qtm cube20.org>. +% So, this established that God's number for the half-turn metric is +% +% |G(*Q*)| = 26 +% +% The high resolution clip is: +% <https://blogs.mathworks.com/cleve/files/Q26solve.mp4 Q26solve.mp4> +% +% <<Q26solve.gif>> +% + +%% Compare +% Let's compare |Q20| and |Q26| by alternating between the two. +% +% <<flipper03.gif>> +% + +%% +% The type 3 corner pieces are the same in |Q20| and |Q26|, +% and are in the correct initial position. +% +% <<flipper33.gif>> +% + +%% +% The type 2 edge pieces are also the same in |Q20| and |Q26|, +% but are reversed from their initial position. +% +% <<flipper22.gif>> +% + +%% +% All the action is with cubelets of type 0 and type 1. +% In a real, physical Rubik's Cube, this is one solid piece that holds +% the Cube together. +% +% <<flipper01.gif>> +% +% +##### SOURCE END ##### 552a77033bf74984addf11ae10f9bb2e +--> + + + + + Polygons, Polyshapes and Puzzles + + 2022-08-21T15:42:36-06:00 + https://hpc.social/2022/polygons-polyshapes-and-puzzles + <div class="content"><!--introduction--><p>Until recently, I knew nothing about the <tt>polyshape</tt> object in MATLAB. Now I can use polyshape to simulate an extraordinary puzzle.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#b44ef23f-8ee4-4710-970e-758273aef673">Puzzles</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#af839423-9061-445a-abcc-33e483845857">Not a T</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fbfbf351-698a-410b-9cba-7272f394fe65">A slice of cheese</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#55c27f57-400d-4f4c-8849-298407ab936f">My first solution</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#87aa86ac-b133-4c46-abed-79b9b9669023">Is this solution correct?</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#07004175-0ad2-4431-9504-3d9d8c33a86c">Spoiler alert !</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#bbdd0ff0-9265-4089-9325-4929faa2d325">My second solution</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#30e29a25-e0f0-449b-b09c-4ff8ee26a6b8">A round peg in a square hole</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#19fcdc7d-f204-47d7-9e55-221680530003">Theta</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#4933cc60-9813-49dd-8f8c-d822d7b9b2d2">Polyshapes</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#1dcd1993-0fec-49da-87a9-4b75d997227f">The solution</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ed22add4-a328-41ed-9696-c5cebc945091">Software</a></li></ul></div> +<h4>Puzzles<a name="b44ef23f-8ee4-4710-970e-758273aef673"></a></h4><p>The Web site <a href="https://www.artofplay.com">Art of Play</a>, from some folks in San Diego, has well over two-hundred puzzles. Recently, one of their most popular puzzles, <a href="https://www.artofplay.com/collections/packing-puzzles/products/mighty-cheese-travel-puzzle">Mighty Cheese</a>, caught my attention. The idea is to move the slices of plastic cheese around within the frame in order to create a hole large enough to hold the little plastic mouse. However, when I last checked, Mighty Cheese was sold out. Not wanting to be dissuaded by the unavailability of the puzzle itself, and not knowing the solution, I set out to build a simulator.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/July_22_2022_small.png" vspace="5" /> </p> +<h4>Not a T<a name="af839423-9061-445a-abcc-33e483845857"></a></h4><p>I expected Mighty Cheese to be something like the <a href="https://www.mathworks.com/company/newsletters/articles/introducing-cleves-laboratory.html">T-puzzle</a> that I enjoyed several years ago. But, unlike the T, the geometry of cheese cannot be modelled by simple rectangular patches. I needed help. Steve Eddins answered my plea and told me about MATLAB's "polyshapes". That led to this blog post.</p> +<h4>A slice of cheese<a name="fbfbf351-698a-410b-9cba-7272f394fe65"></a></h4><p>A "selfie" of a cheese slice provides an example of a <tt>polyshape</tt>. It has curved boundaries and a hole. The MATLAB documentation for <a href="https://www.mathworks.com/help/matlab/ref/polyshape.html"><tt>polyshape</tt></a> says this a <i>polygon</i>. In my mathematical world, <i>polygons</i> can't have curved boundaries or holes. But, I guess that I am being pedantic.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/polyshape.png" vspace="5" /> </p> +<p>I began with this photo of the Mighty Cheese puzzle.</p> +<pre class="language-matlab">puzzle = imread(<span class="string">'Cheese_puzzle.png'</span>); +</pre><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/puzzle.gif" vspace="5" /> </p> +<p>Two lines of code and the <tt>L*a*b</tt> color model find the regions in <tt>photo</tt> that look like cheese.</p> +<pre class="language-matlab">[L,a,b] = imsplit(rgb2lab(puzzle)); +mask = a &gt; 30; +spy(mask) +</pre><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/mask.gif" vspace="5" /> </p> +<p>Steve provided a function that turns <tt>mask</tt> into a <tt>polyshape</tt> object.</p> +<pre class="language-matlab">slice = my_polyshapes(mask); +</pre><p>An overloaded <tt>plot</tt> function then generates the selfie from <tt>slice</tt>.</p> +<pre class="language-matlab">sliceplot = plot(slice, <span class="keyword">...</span> + <span class="string">'facecolor'</span>,cheese_yellow, <span class="keyword">...</span> + <span class="string">'facealpha'</span>,1); +</pre><h4>My first solution<a name="55c27f57-400d-4f4c-8849-298407ab936f"></a></h4><p>I didn't use AI or simulated annealing or any other modern technique to search for a solution. I just poked around while I was learning about polyshapes and programming my simulator. It was just me and a <i>real</i> mouse. No, not a <i>real real</i> mouse. You know the kind I mean.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Cheese.gif" vspace="5" /> </p> +<h4>Is this solution correct?<a name="87aa86ac-b133-4c46-abed-79b9b9669023"></a></h4><p>I almost made a blog post claiming this is the solution the designers of Mighty Cheese must have had in mind. But I wasn't sure. My solution made use of the white space around the outside edges of the slices. How wide are those gaps? I didn't yet have a real physical puzzle to measure tolerances.</p> +<h4>Spoiler alert !<a name="07004175-0ad2-4431-9504-3d9d8c33a86c"></a></h4><p>I am sure glad now that I didn't post that "solution". It wasn't correct, and it wasn't pretty.</p> +<p>This puzzle is not as easy as it looks. In fact, the solution is very hard to find and is very elegant. If you want to try to solve it yourself, stop reading this post, bookmark this spot, and come back later.</p> +<h4>My second solution<a name="bbdd0ff0-9265-4089-9325-4929faa2d325"></a></h4><p>As I should have known, this puzzle is no secret to the Internet It is available for about $10 at many places and YouTube offers several solutions. But I'm glad that I didn't see any of them until a few weeks ago.</p> +<p>When I made more careful measurements on "Cheese_puzzle.png" and had a more accurate model to simulate, it became clear that my precious first solution just wouldn't fit.</p> +<h4>A round peg in a square hole<a name="30e29a25-e0f0-449b-b09c-4ff8ee26a6b8"></a></h4><p>Nobody said that the mouse had to fit neatly into a circular hole with just the right diameter. Once you realize that you might be looking for a noncircular hole, you are on the way to finding the solution.</p> +<h4>Theta<a name="19fcdc7d-f204-47d7-9e55-221680530003"></a></h4><p>The key to the puzzle's geometry is the purple axes in this picture. They cross at right angles at a point in the center hole at the tip of the protruding slice. The angle between the purple axes and the orange vertical/horizontal axes can be measured accurately on the photo and everything else follows. The angle is</p> +<pre class="language-matlab">theta = atand((y(b)-y(a))/(b-a)) = 11.62 degrees +</pre><p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mighty_Cheese_theta.gif" vspace="5" /> </p> +<h4>Polyshapes<a name="4933cc60-9813-49dd-8f8c-d822d7b9b2d2"></a></h4><p>The mask that I was using for my first solution got me started with polyshapes, but I eventually abandoned it. It is easy to make a polyshape directly from a list of points around the boundary, like this.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Mighty_Cheese_S3_dots.gif" vspace="5" /> </p> +<h4>The solution<a name="1dcd1993-0fec-49da-87a9-4b75d997227f"></a></h4><p>The three holes in the original cheese slices do not appear to serve any purpose. So, I have moved them and given them an important role in this simulation. Combine the two triangular slices in the upper left into a single slice. Rotate each of the resulting four slices by an angle of 180-theta = 168.38 degrees about its center. The four right-angled corners from the central hole go to the corners of the puzzle while the outer corners form a central square just large enough to hold the mouse.</p> +<p>That is really elegant.</p> +<p>Where did this puzzle originate? What mathematics was involved in its design?</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/MCsolution.gif" vspace="5" /> </p> +<h4>Software<a name="ed22add4-a328-41ed-9696-c5cebc945091"></a></h4><p>My code is here: <a href="https://blogs.mathworks.com/cleve/files/Mighty_Polyshape.m">Mighty_Polyshape.m</a>.</p> +<!-- + function grabCode_2f68df87f4004e7ea2832e4310206744() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='2f68df87f4004e7ea2832e4310206744 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 2f68df87f4004e7ea2832e4310206744'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +2f68df87f4004e7ea2832e4310206744 ##### SOURCE BEGIN ##### +%% Polygons, Polyshapes and Puzzles +% Until recently, I knew nothing about the |polyshape| object in MATLAB. +% Now I can use polyshape to simulate an extraordinary puzzle. + +%% Puzzles +% The Web site <https://www.artofplay.com Art of Play>, from some folks in +% San Diego, has well over two-hundred puzzles. Recently, one of +% their most popular puzzles, +% <https://www.artofplay.com/collections/packing-puzzles/products/mighty-cheese-travel-puzzle +% Mighty Cheese>, caught my attention. +% The idea is to move the slices of plastic cheese around within the +% frame in order to create a hole large enough to hold the little +% plastic mouse. However, when I last checked, Mighty Cheese was +% sold out. +% Not wanting to be dissuaded by the unavailability of the puzzle itself, +% and not knowing the solution, I set out to build a simulator. +% +% <<July_22_2022_small.png>> +% + +%% Not a T +% I expected Mighty Cheese to be something like the +% <https://www.mathworks.com/company/newsletters/articles/introducing-cleves-laboratory.html +% T-puzzle> that I enjoyed several years ago. +% But, unlike the T, the geometry of cheese cannot be modelled by simple +% rectangular patches. I needed help. Steve Eddins answered my plea and +% told me about MATLAB's "polyshapes". That led to this blog post. + +%% A slice of cheese +% A "selfie" of a cheese slice provides an example of a |polyshape|. +% It has curved boundaries and a hole. The MATLAB documentation for +% <https://www.mathworks.com/help/matlab/ref/polyshape.html +% |polyshape|> says this a _polygon_. +% In my mathematical world, _polygons_ can't have curved boundaries +% or holes. But, I guess that I am being pedantic. +% +% <<polyshape.png>> + +%% +% I began with this photo of the Mighty Cheese puzzle. +% +% puzzle = imread('Cheese_puzzle.png'); +% +% <<puzzle.gif>> +% +% Two lines of code and the |L*a*b| color model find the regions +% in |photo| that look like cheese. +% +% [L,a,b] = imsplit(rgb2lab(puzzle)); +% mask = a > 30; +% spy(mask) +% +% <<mask.gif>> +% +% Steve provided a function that turns |mask| into a |polyshape| +% object. +% +% slice = my_polyshapes(mask); +% +% An overloaded |plot| function then generates the selfie from |slice|. +% +% sliceplot = plot(slice, ... +% 'facecolor',cheese_yellow, ... +% 'facealpha',1); + +%% My first solution +% I didn't use AI or simulated annealing or any other modern technique +% to search for a solution. I just poked around while I was learning +% about polyshapes and programming my simulator. It was just me and +% a _real_ mouse. No, not a _real real_ mouse. You know the kind I mean. +% +% <<Cheese.gif>> + +%% Is this solution correct? +% I almost made a blog post claiming this is the solution the designers of +% Mighty Cheese must have had in mind. But I wasn't sure. +% My solution made use of the white space around the outside edges of the +% slices. How wide are those gaps? I didn't yet have a real physical +% puzzle to measure tolerances. + +%% Spoiler alert ! +% I am sure glad now that I didn't post that "solution". +% It wasn't correct, and it wasn't pretty. +% +% This puzzle is not as easy as it looks. +% In fact, the solution is very hard to find and is very elegant. +% If you want to try to solve it yourself, stop reading this post, +% bookmark this spot, and come back later. + +%% My second solution +% As I should have known, this puzzle is no secret to the Internet +% It is available for about $10 at many places and +% YouTube offers several solutions. But I'm glad that I didn't see any +% of them until a few weeks ago. +% +% When I made more careful measurements on "Cheese_puzzle.png" +% and had a more accurate model to simulate, +% it became clear that my precious first solution just wouldn't fit. + +%% A round peg in a square hole +% Nobody said that the mouse had to fit neatly into a circular hole +% with just the right diameter. Once you realize that you might be +% looking for a noncircular hole, you are on the way to finding the +% solution. + +%% Theta +% The key to the puzzle's geometry is the purple axes in this picture. +% They cross at right angles at a point in the center hole at the tip +% of the protruding slice. The angle between the purple axes and the +% orange vertical/horizontal axes can be measured accurately on the +% photo and everything else follows. The angle is +% +% theta = atand((y(b)-y(a))/(b-a)) = 11.62 degrees +% +% <<Mighty_Cheese_theta.gif>> + +%% Polyshapes +% The mask that I was using for my first solution got me started with +% polyshapes, but I eventually abandoned it. It is easy to make a +% polyshape directly from a list of points around the boundary, like this. +% +% <<Mighty_Cheese_S3_dots.gif>> + +%% The solution +% The three holes in the original cheese slices do not appear +% to serve any purpose. So, I have moved them and given them an +% important role in this simulation. +% Combine the two triangular slices in the upper left into a single slice. +% Rotate each of the resulting four slices by an +% angle of 180-theta = 168.38 degrees about its center. The four +% right-angled corners from the central hole go to the corners of the +% puzzle while the outer corners form a central square just large enough +% to hold the mouse. +% +% That is really elegant. +% +% Where did this puzzle originate? What mathematics was involved in +% its design? +% +% <<MCsolution.gif>> + +%% Software +% My code is here: +% <https://blogs.mathworks.com/cleve/files/Mighty_Polyshape.m +% Mighty_Polyshape.m>. +##### SOURCE END ##### 2f68df87f4004e7ea2832e4310206744 +--> + + + + + An Interesting, and Perhaps New, Matrix + + 2022-07-21T04:38:23-06:00 + https://hpc.social/2022/an-interesting-and-perhaps-new-matrix + <div class="content"><!--introduction--><p>I do not recall having seen this matrix before, but I will not be surprised to learn that somebody else already knows all about it, especially if that person's name is Nick.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#17afe407-67a2-462b-a10b-df348fccb837"><tt>Q</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#044996c2-78b8-4a23-a809-6ed8ab3e3607"><tt>D</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#eca1bb02-1ba1-4bbf-9ed0-39c244e018eb">O.E.I.S.</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#b7778074-8d3f-46ad-858b-13f27d2f99bd"><tt>R</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#1e78f08f-c39d-4810-93bb-b0428456710c">Condition</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#c60c371e-4378-4499-8242-376b1b37da8c">Extra Credit</a></li></ul></div> +<h4><tt>Q</tt><a name="17afe407-67a2-462b-a10b-df348fccb837"></a></h4><p>I've been investigating the matrices generated by this elegant one-liner.</p> +<pre class="codeinput"> Q = @(n) (-n:n).^2 + (-n:n)'.^2; +</pre><p>The <tt>Q</tt> is for "quadratic".</p> +<p>The middle column contains the squares of the integers from <tt>-n</tt> to <tt>n</tt>. So does the middle row. The apostrophe summons singleton expansion. The resulting matrix has order <tt>2*n+1</tt>. Here is <tt>Q(5)</tt>.</p> +<pre class="codeinput"> Q5 = Q(5) +</pre><pre class="codeoutput"> +Q5 = + + 50 41 34 29 26 25 26 29 34 41 50 + 41 32 25 20 17 16 17 20 25 32 41 + 34 25 18 13 10 9 10 13 18 25 34 + 29 20 13 8 5 4 5 8 13 20 29 + 26 17 10 5 2 1 2 5 10 17 26 + 25 16 9 4 1 0 1 4 9 16 25 + 26 17 10 5 2 1 2 5 10 17 26 + 29 20 13 8 5 4 5 8 13 20 29 + 34 25 18 13 10 9 10 13 18 25 34 + 41 32 25 20 17 16 17 20 25 32 41 + 50 41 34 29 26 25 26 29 34 41 50 + +</pre><p>I like the contour plot.</p> +<pre class="codeinput"> contourf(Q(100)) + axis <span class="string">square</span> + colorbar + title(<span class="string">'Q(100)'</span>) +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/disc_blog_01.png" vspace="5" /> <h4><tt>D</tt><a name="044996c2-78b8-4a23-a809-6ed8ab3e3607"></a></h4><p>For another blog post under development, I need a logical mask that carves a circular region out of graphic. This disc does the job.</p> +<pre class="codeinput"> D = @(n) Q(n) &lt;= n^2; +</pre><p>Here is my carver.</p> +<pre class="codeinput"> spy(D(100)) + title(<span class="string">'D(100)'</span>) +</pre><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/disc_blog_02.png" vspace="5" /> <p>Did you notice the digits in the count of nonzeros in <tt>D(100)</tt>? It happens whenever <tt>n</tt> is a power of 10.</p> +<pre class="codeinput"> fprintf(<span class="string">'%15s %12s\n'</span>,<span class="string">'n'</span>,<span class="string">'nnz(D(n))'</span>) + <span class="keyword">for</span> n = 10.^(0:4) + fprintf(<span class="string">'%15d %12d\n'</span>,n, nnz(D(n))) + <span class="keyword">end</span> +</pre><pre class="codeoutput"> n nnz(D(n)) + 1 5 + 10 317 + 100 31417 + 1000 3141549 + 10000 314159053 +</pre><h4>O.E.I.S.<a name="eca1bb02-1ba1-4bbf-9ed0-39c244e018eb"></a></h4><p>A classic problem, described in the <a href="https://oeis.org/A000328">Online Encyclopedia of Integer Sequences</a>, asks how many points with integer coordinates lie within a disc of increasing radius. Our nonzero count provides the answer.</p> +<pre class="codeinput"> fprintf(<span class="string">'%15s %8s\n'</span>,<span class="string">'n'</span>,<span class="string">'a(n)'</span>) + <span class="keyword">for</span> n = [1:15 99:101 499:501 999:1001] + <span class="keyword">if</span> mod(n,100) == 99 + fprintf(<span class="string">'%15s %8s\n'</span>,<span class="string">'-'</span>,<span class="string">'-'</span>) + <span class="keyword">end</span> + a(n) = nnz(D(n)); + fprintf(<span class="string">'%15d %8d\n'</span>,n,a(n)) + <span class="keyword">end</span> +</pre><pre class="codeoutput"> n a(n) + 1 5 + 2 13 + 3 29 + 4 49 + 5 81 + 6 113 + 7 149 + 8 197 + 9 253 + 10 317 + 11 377 + 12 441 + 13 529 + 14 613 + 15 709 + - - + 99 30757 + 100 31417 + 101 32017 + - - + 499 782197 + 500 785349 + 501 788509 + - - + 999 3135157 + 1000 3141549 + 1001 3147833 +</pre><h4><tt>R</tt><a name="b7778074-8d3f-46ad-858b-13f27d2f99bd"></a></h4><p>Taking the reciprocals of the matrix entries, and reducing the range of the anonymous index, produces a matrix that behaves a bit like the Hilbert matrix, <tt>hilb(n)</tt>.</p> +<pre class="codeinput"> R = @(n) 1./((1:n).^2 + (1:n)'.^2); +</pre><p>Here are the 5-by-5's.</p> +<pre class="codeinput"> format <span class="string">rat</span> + R5 = R(5) + H5 = hilb(5) +</pre><pre class="codeoutput"> +R5 = + + 1/2 1/5 1/10 1/17 1/26 + 1/5 1/8 1/13 1/20 1/29 + 1/10 1/13 1/18 1/25 1/34 + 1/17 1/20 1/25 1/32 1/41 + 1/26 1/29 1/34 1/41 1/50 + + +H5 = + + 1 1/2 1/3 1/4 1/5 + 1/2 1/3 1/4 1/5 1/6 + 1/3 1/4 1/5 1/6 1/7 + 1/4 1/5 1/6 1/7 1/8 + 1/5 1/6 1/7 1/8 1/9 + +</pre><h4>Condition<a name="1e78f08f-c39d-4810-93bb-b0428456710c"></a></h4><p>Going away from the diagonal, the elements of <tt>R(n)</tt> decay more rapidly than those of <tt>hilb(n)</tt>, so <tt>R(n)</tt> is better conditioned than <tt>hilb(n)</tt>.</p> +<pre class="codeinput"> format <span class="string">short</span> <span class="string">e</span> + fprintf(<span class="string">'%15s %12s %12s\n'</span>,<span class="string">'n'</span>,<span class="string">'cond R'</span>,<span class="string">'cond H'</span>) + <span class="keyword">for</span> n = 1:12 + fprintf(<span class="string">'%15d %12.2e %12.2e\n'</span>,n,cond(R(n)),cond(hilb(n))) + <span class="keyword">end</span> +</pre><pre class="codeoutput"> n cond R cond H + 1 1.00e+00 1.00e+00 + 2 1.53e+01 1.93e+01 + 3 2.04e+02 5.24e+02 + 4 2.59e+03 1.55e+04 + 5 3.21e+04 4.77e+05 + 6 3.89e+05 1.50e+07 + 7 4.67e+06 4.75e+08 + 8 5.54e+07 1.53e+10 + 9 6.53e+08 4.93e+11 + 10 7.65e+09 1.60e+13 + 11 8.92e+10 5.22e+14 + 12 1.04e+12 1.62e+16 +</pre><h4>Extra Credit<a name="c60c371e-4378-4499-8242-376b1b37da8c"></a></h4><p>What is the rank of <tt>Q(n)</tt>? Why? See <a href="https://epubs.siam.org/doi/epdf/10.1137/20M1358694">a paper in SIAM Review</a> by Strang and Moler.</p> +<p>Why is the table of values for <tt>nnz(D(10^k))</tt> so short? How might you extend this table?</p> +<p>Investigate <tt>R(n)</tt>. Is it positive definite? What are its eigenvalues? What is its inverse? What is the sign pattern of the elements of its inverse? For what values of <tt>n</tt> can you compute the inverse reliably using floating point arithmetic? How does all this compare with <tt>hilb(n)</tt> and <tt>invhilb(n)</tt> ?</p> +<p>Comments in the Comments, or in email to me, are welcome.</p> +<!-- + function grabCode_4c513405f3644e5fbcae1bf70683cb1d() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='4c513405f3644e5fbcae1bf70683cb1d ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' 4c513405f3644e5fbcae1bf70683cb1d'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +4c513405f3644e5fbcae1bf70683cb1d ##### SOURCE BEGIN ##### +%% An Interesting, and Perhaps New, Matrix +% I do not recall having seen this matrix before, but +% I will not be surprised to learn that somebody else already knows +% all about it, especially if that person's name is Nick. + +%% |Q| +% +% I've been investigating the matrices generated by this elegant one-liner. + + Q = @(n) (-n:n).^2 + (-n:n)'.^2; + +%% +% The |Q| is for "quadratic". +% +% The middle column contains the squares of the integers from |-n| to |n|. +% So does the middle row. The apostrophe summons singleton expansion. +% The resulting matrix has order |2*n+1|. +% Here is |Q(5)|. + + Q5 = Q(5) + +%% +% I like the contour plot. + + contourf(Q(100)) + axis square + colorbar + title('Q(100)') + +%% |D| +% For another blog post under development, I need a logical mask that +% carves a circular region out of graphic. This disc does the job. + + D = @(n) Q(n) <= n^2; + +%% +% Here is my carver. + + spy(D(100)) + title('D(100)') + +%% +% Did you notice the digits in the count of +% nonzeros in |D(100)|? +% It happens whenever |n| is a power of 10. + + fprintf('%15s %12s\n','n','nnz(D(n))') + for n = 10.^(0:4) + fprintf('%15d %12d\n',n, nnz(D(n))) + end + +%% O.E.I.S. +% A classic problem, described in the <https://oeis.org/A000328 +% Online Encyclopedia of Integer Sequences>, asks how many points with +% integer coordinates lie within a disc of increasing radius. +% Our nonzero count provides the answer. + + fprintf('%15s %8s\n','n','a(n)') + for n = [1:15 99:101 499:501 999:1001] + if mod(n,100) == 99 + fprintf('%15s %8s\n','-','-') + end + a(n) = nnz(D(n)); + fprintf('%15d %8d\n',n,a(n)) + end + +%% |R| +% Taking the reciprocals of the matrix entries, and reducing the range of +% the anonymous index, produces a matrix that behaves a bit like +% the Hilbert matrix, |hilb(n)|. + + R = @(n) 1./((1:n).^2 + (1:n)'.^2); + +%% +% Here are the 5-by-5's. + + format rat + R5 = R(5) + H5 = hilb(5) + +%% Condition +% Going away from the diagonal, +% the elements of |R(n)| decay more rapidly than those of |hilb(n)|, +% so |R(n)| is better conditioned than |hilb(n)|. + + format short e + fprintf('%15s %12s %12s\n','n','cond R','cond H') + for n = 1:12 + fprintf('%15d %12.2e %12.2e\n',n,cond(R(n)),cond(hilb(n))) + end + +%% Extra Credit +% What is the rank of |Q(n)|? Why? See +% <https://epubs.siam.org/doi/epdf/10.1137/20M1358694 +% a paper in SIAM Review> by Strang and Moler. +% +% Why is the table of values for |nnz(D(10^k))| so short? +% How might you extend this table? +% +% Investigate |R(n)|. Is it positive definite? What are its +% eigenvalues? What is its inverse? What is the sign pattern of +% the elements of its inverse? For what values of |n| can you +% compute the inverse reliably using floating point arithmetic? +% How does all this compare with |hilb(n)| and |invhilb(n)| ? +% +% Comments in the Comments, or in email to me, are welcome. + +##### SOURCE END ##### 4c513405f3644e5fbcae1bf70683cb1d +--> + + + + + The Soma Cube, Again + + 2022-06-10T09:07:52-06:00 + https://hpc.social/2022/the-soma-cube-again + <div class="content"><!--introduction--><p>The Soma Cube brings back memories.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#d24e61ac-9d35-47eb-bca6-357702418141">Piet Hein</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#1d20680b-94e4-464d-84a6-7481a2c30e00">Bill McKeeman</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3432acb9-d2ca-49a7-ac3a-b8327c5e7f9a">The original <tt>soma</tt> demo</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#412ef701-867b-45f9-9d16-b38a8bd051b1">A new <tt>Soma</tt> demo</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#0c997775-0706-4f98-855c-23e311f68cb0">Software</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#3b67595f-6619-4959-8d78-0417f13c73a3">Update</a></li></ul></div> +<h4>Piet Hein<a name="d24e61ac-9d35-47eb-bca6-357702418141"></a></h4><p>Piet Hein (1905-1996) was an extraordinary Danish inventor, mathematician, poet and philosopher. He invented the <a href="https://en.wikipedia.org/wiki/Soma_cube">Soma Cube puzzle</a> in 1933. I wrote a blog post about Hein and some of his creations several years ago, <a href="https://blogs.mathworks.com/cleve/2016/03/28/piet-hein-super-ellipses-and-soma-cubes">Soma Cube 2016</a>.</p> +<p>The Soma Cube puzzle has seven pieces. One of them is a V-shaped piece made from three cubelets. The other six pieces are L, T, Z, R, S, and Y with four cubelets each. That's a total of 27 cubelets, just enough to make a 3-by-3-by-3 cube. Sound familiar?</p> +<h4>Bill McKeeman<a name="1d20680b-94e4-464d-84a6-7481a2c30e00"></a></h4><p>Bill McKeeman and I were buddies in grad school. He was a professor at U. C. Santa Cruz for a while, and then at the ill-fated Wang Institute of Graduate Studies in Tyngsborough, Mass. He worked for DEC in New Hampshire for a long time, taught compilers at Dartmouth, and even consulted for the MathWorks. As an exercise to learn MATLAB, he wrote the modern version of our <tt>why</tt> command.</p> +<h4>The original <tt>soma</tt> demo<a name="3432acb9-d2ca-49a7-ac3a-b8327c5e7f9a"></a></h4><p>Bill and I became obsessed with the Soma cube after Martin Gardiner described the puzzle in his <i>Scientific American</i> column. You may not have noticed it before, but one of Bill's programs, <tt>soma</tt>, is in the MATLAB <tt>demos</tt> directory. Bill generated all of the 240 distinctly different puzzle solutions and stored them in a 240-by-27 matrix, <tt>demos/somasols</tt>. His program lets you page through the solutions.</p> +<h4>A new <tt>Soma</tt> demo<a name="412ef701-867b-45f9-9d16-b38a8bd051b1"></a></h4><p>My new <tt>Soma</tt> code uses technology from <tt>Qube</tt>, the digital Rubik's Cube simulator, to plot the 240 solutions. Here are the seven Soma pieces, surrounding an animation stepping through every tenth solution.</p> +<p>Do you recognize the colors?</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/Soma24.gif" vspace="5" /> </p> +<h4>Software<a name="0c997775-0706-4f98-855c-23e311f68cb0"></a></h4><p><tt>Soma</tt> is available from <a href="https://blogs.mathworks.com/cleve/files/Soma.m">this link</a>. You already have <tt>somasols</tt>, but another copy is available from <a href="https://blogs.mathworks.com/cleve/files/somasols.m">this link</a>.</p> +<h4>Update<a name="3b67595f-6619-4959-8d78-0417f13c73a3"></a></h4><p>I have combined my new display code and McKeeman's old program that finds all the solutions. The self-extracting archive is available at <a href="https://blogs.mathworks.com/cleve/files/Soma_osf.m">&lt;https://blogs.mathworks.com/cleve/files/Soma_osf.m</a>&gt;</p> +<!-- + function grabCode_ba03413b3d6846149e5b9f9e92eb3300() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='ba03413b3d6846149e5b9f9e92eb3300 ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' ba03413b3d6846149e5b9f9e92eb3300'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022b<br /></p> +</div> +<!-- +ba03413b3d6846149e5b9f9e92eb3300 ##### SOURCE BEGIN ##### +%% The Soma Cube, Again +% The Soma Cube brings back memories. + +%% Piet Hein +% Piet Hein (1905-1996) was an extraordinary Danish inventor, +% mathematician, poet and philosopher. He invented the +% <https://en.wikipedia.org/wiki/Soma_cube +% Soma Cube puzzle> in 1933. +% I wrote a blog post about Hein and some of his creations several years ago, +% <https://blogs.mathworks.com/cleve/2016/03/28/piet-hein-super-ellipses-and-soma-cubes +% Soma Cube 2016>. +%% +% The Soma Cube puzzle has seven pieces. One of them is a V-shaped piece +% made from three cubelets. The other six pieces are L, T, Z, R, S, and Y +% with four cubelets each. That's a total of 27 cubelets, just enough +% to make a 3-by-3-by-3 cube. Sound familiar? + +%% Bill McKeeman +% Bill McKeeman and I were buddies in grad school. He was a professor at +% U. C. Santa Cruz for a while, and then at the ill-fated Wang Institute +% of Graduate Studies in Tyngsborough, Mass. He worked for +% DEC in New Hampshire for a long time, taught compilers at Dartmouth, +% and even consulted for the MathWorks. As an exercise to learn MATLAB, +% he wrote the modern version of our |why| command. + +%% The original |soma| demo +% Bill and I became obsessed with the Soma cube after Martin Gardiner +% described the puzzle in his _Scientific American_ column. +% You may not have noticed it before, but one of Bill's programs, +% |soma|, is in the MATLAB |demos| directory. +% Bill generated all of the 240 distinctly different puzzle solutions +% and stored them in a 240-by-27 matrix, |demos/somasols|. +% His program lets you page through the solutions. + +%% A new |Soma| demo +% My new |Soma| code uses technology from |Qube|, +% the digital Rubik's Cube simulator, to plot the 240 solutions. +% Here are the seven Soma pieces, surrounding an animation stepping +% through every tenth solution. +% +% Do you recognize the colors? +% +% <<Soma24.gif>> +% + +%% Software +% |Soma| is available from +% <https://blogs.mathworks.com/cleve/files/Soma.m +% this link>. +% You already have |somasols|, but another copy is available from +% <https://blogs.mathworks.com/cleve/files/somasols.m +% this link>. + +%% Update +% I have combined my new display code and McKeeman's old program that +% finds all the solutions. The self-extracting archive is available at +% <https://blogs.mathworks.com/cleve/files/Soma_osf.m +% https://blogs.mathworks.com/cleve/files/Soma_osf.m> + +##### SOURCE END ##### ba03413b3d6846149e5b9f9e92eb3300 +--> + + + + + Rotation Matrices + + 2022-05-18T23:50:24-06:00 + https://hpc.social/2022/rotation-matrices + <div class="content"><!--introduction--><p>The matrices in the following animations are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to Computer Added Design packages, to Computer Graphics Imagery in films, and to most popular video games. Many modern computers contain GPUs, <i>Graphic Processing Units</i>, which are optimized to compute the product of these matrices.</p> +<!--/introduction--><h3>Contents</h3><div><ul><li><a href="https://feeds.feedburner.com/mathworks/moler#3a6da3e1-6503-4ec5-aab8-a13b4a419218">Rotations</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#c80c5877-8380-4b82-a0b8-3fb8fd146dcf"><tt>theta</tt></a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#2f2feaa8-2ff1-436c-ba43-62fbf44a95f4">Compass</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#75ba0607-fc08-40cf-b038-e2e9ddf4d2ba">Roll, Pitch, Yaw</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#819e8a6b-9508-4efb-a12a-1b7d57015db2">Propeller</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#ca750655-1342-4eda-bf54-d721058acc24">Cubelet</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#48892ff7-e295-4784-9282-e149dbd41697">Scramble</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#6f09e9ca-8a4e-4df4-a894-3ce2a082d8dc">Unscramble</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#19f99287-c2df-4589-a762-4410ffa64eb9">Exercises</a></li><li><a href="https://feeds.feedburner.com/mathworks/moler#fa106610-d1c0-4b93-9ea4-c3ee6136fb40">Software</a></li></ul></div> +<h4>Rotations<a name="3a6da3e1-6503-4ec5-aab8-a13b4a419218"></a></h4><p>The <i>homogeneous coordinates</i> system used in today's computer graphics software and hardware makes it possible to describe rotations, translations and many other operations with 3-by-3 and 4-by-4 matrices. These matrices operate on vectors with the position of an object, <i>x</i>, <i>y</i> and <i>z</i> , in the first three components.</p> +<p>Rotations about the coordinate axes are described by three matrices. Rotations about the <i>x</i> -axis are produced by $R_x$, which rotates <i>y</i> and <i>z</i>, while leaving <i>x</i> unchanged.</p> +<p>$$ R_x(\theta) = \left( \begin{array}{rrr} + 1 &amp; 0 &amp; 0 \\ + 0 &amp; \cos{\theta} &amp; -\sin{\theta} \\ + 0 &amp; \sin{\theta} &amp; \cos{\theta} + \end{array} \right) $$</p> +<p>Rotations about the <i>y</i> -axis are generated by</p> +<p>$$ R_y(\theta) = \left( \begin{array}{rrr} + \cos{\theta} &amp; 0 &amp; -\sin{\theta} \\ + 0 &amp; 1 &amp; 0 \\ + \sin{\theta} &amp; 0 &amp; \cos{\theta} + \end{array} \right) $$</p> +<p>And, rotations about <i>z</i> are provided by</p> +<p>$$ R_z(\theta) = \left( \begin{array}{rrr} + \cos{\theta} &amp; -\sin{\theta} &amp; 0 \\ + \sin{\theta} &amp; \cos{\theta} &amp; 0 \\ + 0 &amp; 0 &amp; 1 \\ + \end{array} \right) $$</p> +<h4><tt>theta</tt><a name="c80c5877-8380-4b82-a0b8-3fb8fd146dcf"></a></h4><p>Rotation angles are specified in degrees. Our MATLAB programs use the degree-based trig functions <tt>cosd</tt> and <tt>sind</tt>. Here are graphs of $\cos\theta$ and $-\sin\theta$ , evaluated with the angle $\theta$ going from <tt>0</tt> to <tt>360</tt> degrees in <tt>10</tt>-degree steps.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/cos_sin.gif" vspace="5" /> </p> +<h4>Compass<a name="2f2feaa8-2ff1-436c-ba43-62fbf44a95f4"></a></h4><p>Here is another look at the same data, <tt>cosd(theta)</tt> and <tt>-sind(theta)</tt> for <tt>theta = 0:10:360</tt>. The columns of the rotation matrix are the coordinates of the rotating dots. The blue dot starts at (0,1) and the orange dot starts at (1,0).</p> +<p>If you drop the zeros from the values of <tt>theta</tt>, you are left with the integers from 1 to 36. This is the numbering in the international standard describing the compass direction of runways at airports. The initial position of our blue dot corresponds to runway 36 and the orange dot starts as runway 9.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/compass.gif" vspace="5" /> </p> +<h4>Roll, Pitch, Yaw<a name="75ba0607-fc08-40cf-b038-e2e9ddf4d2ba"></a></h4><p><b>Note: Refresh your browser to synchronize these animations.</b></p> +<p>For aircraft and space vehicles, rotation around the <tt>x</tt>-axis from nose to tail is known as <i>roll</i>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/roll.gif" vspace="5" /> </p> +<p>Rotation about the <tt>y</tt>-axis parallel to the wings is <i>pitch</i>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/pitch.gif" vspace="5" /> </p> +<p>And, rotation about the vertical <tt>z</tt>-axis is <i>yaw</i>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/yaw.gif" vspace="5" /> </p> +<h4>Propeller<a name="819e8a6b-9508-4efb-a12a-1b7d57015db2"></a></h4><p>Our model of the Piper PA-24 Comanche has 97 <i>patches</i>. One of them is the propeller. This animation of a rotating propeller is very similar to our earlier animation of the compass.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/propeller.gif" vspace="5" /> </p> +<h4>Cubelet<a name="ca750655-1342-4eda-bf54-d721058acc24"></a></h4><p><tt>Qube</tt>, our digital Rubik's Cube simulator, uses 27 copies of a single <i>cubelet</i>. This animation of a rotating cubelet shows a quarter turn clockwise about <tt>x</tt>, followed by a quarter turn clockwise about <tt>y</tt> and then a quarter turn counterclockwise about <tt>z</tt>. If these three rotations are repeated four times, the cubelet returns to its initial orientation. In the process, we see the traditional Rubik's colors of all six faces -- white, green and orange opposite yellow, blue and red.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/cubelet.gif" vspace="5" /> </p> +<h4>Scramble<a name="48892ff7-e295-4784-9282-e149dbd41697"></a></h4><p><b>Note: Refresh your browser to synchronize these animations.</b></p> +<p>Rubick's Cube is all about rotations. Rotating the cubelets in any face of the puzzle, while leaving the rest of the puzzle fixed, is called a "move". Like any cube, Rubik's cube has six faces. Each move rotates one of the six faces in either a clockwise or counterclockwise direction. So, after <tt>n</tt> moves, the puzzle is in one of <tt>12^n</tt> possible states. The challenge is to return the cube to its original orientation.</p> +<p>Here are six random rotations produced by <tt>scramble(6)</tt>. Because <tt>12^6</tt> is <tt>2,985,984</tt>, this is just one of almost three million six-move scrambles.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/scramble.gif" vspace="5" /> </p> +<h4>Unscramble<a name="6f09e9ca-8a4e-4df4-a894-3ce2a082d8dc"></a></h4><p>One possible way to restore any starting condition is to retrace the moves that produced it. This is the "follow the breadcrumbs" algorithm. So, I call this <tt>unscramble</tt>, rather than <tt>solve</tt>.</p> +<p><img alt="" hspace="5" src="http://blogs.mathworks.com/cleve/files/unscramble.gif" vspace="5" /> </p> +<h4>Exercises<a name="19f99287-c2df-4589-a762-4410ffa64eb9"></a></h4><div><ul><li>1: Which rotation matrices and what values of <tt>theta</tt> are used in the animations?</li></ul></div> +<div><ul><li>2 (not easy): When is <tt>unscamble</tt> a solution with the minimum number of moves?</li></ul></div> +<h4>Software<a name="fa106610-d1c0-4b93-9ea4-c3ee6136fb40"></a></h4><p>The source code for <tt>Qube</tt> is available from this link: <a href="https://blogs.mathworks.com/cleve/files/Qube_May18_osf.m">Qube_May18_osf.m</a>. The <tt>osf</tt>, <i>one single file</i>, format is a self-extracting archive that expands into a directory of individual functions.</p> +<!-- + function grabCode_fac94086e84b4ca1b5df2dbc8d19f63c() { + // Remember the title so we can use it in the new page + title = document.title; + + // Break up these strings so that their presence + // in the Javascript doesn't mess up the search for + // the MATLAB code. + t1='fac94086e84b4ca1b5df2dbc8d19f63c ' + '##### ' + 'SOURCE BEGIN' + ' #####'; + t2='##### ' + 'SOURCE END' + ' #####' + ' fac94086e84b4ca1b5df2dbc8d19f63c'; + + b=document.getElementsByTagName('body')[0]; + i1=b.innerHTML.indexOf(t1)+t1.length; + i2=b.innerHTML.indexOf(t2); + + code_string = b.innerHTML.substring(i1, i2); + code_string = code_string.replace(/REPLACE_WITH_DASH_DASH/g,'--'); + + // Use /x3C/g instead of the less-than character to avoid errors + // in the XML parser. + // Use '\x26#60;' instead of '<' so that the XML parser + // doesn't go ahead and substitute the less-than character. + code_string = code_string.replace(/\x3C/g, '\x26#60;'); + + copyright = 'Copyright 2022 The MathWorks, Inc.'; + + w = window.open(); + d = w.document; + d.write('<pre>\n'); + d.write(code_string); + + // Add copyright line at the bottom if specified. + if (copyright.length > 0) { + d.writeln(''); + d.writeln('%%'); + if (copyright.length > 0) { + d.writeln('% _' + copyright + '_'); + } + } + + d.write('</pre>\n'); + + d.title = title + ' (MATLAB code)'; + d.close(); + } + --><p style="text-align: right; font-size: xx-small; font-weight: lighter; font-style: italic; color: gray;"><br /><a href=""><span style="font-size: x-small; font-style: italic;">Get + the MATLAB code <noscript>(requires JavaScript)</noscript></span></a><br /><br /> + Published with MATLAB&reg; R2022a<br /></p> +</div> +<!-- +fac94086e84b4ca1b5df2dbc8d19f63c ##### SOURCE BEGIN ##### +%% Rotation Matrices +% The matrices in the following animations +% are at the heart of computer graphics. +% They describe objects moving in three-dimensional +% space and are essential to MATLAB's Handle Graphics, +% to Computer Added Design packages, +% to Computer Graphics Imagery in films, +% and to most popular video games. +% Many modern computers +% contain GPUs, _Graphic Processing Units_, which are +% optimized to compute the product of these matrices. + +%% Rotations +% The _homogeneous coordinates_ system used in today's +% computer graphics software and hardware +% makes it possible to describe rotations, translations +% and many other operations with 3-by-3 and 4-by-4 matrices. +% These matrices operate on vectors with the position of an object, +% _x_, _y_ and _z_ , in the first three components. +% +% Rotations about the coordinate axes are described by three matrices. +% Rotations about the _x_ -axis are produced by $R_x$, which +% rotates _y_ and _z_, while leaving _x_ unchanged. +% +% $$ R_x(\theta) = \left( \begin{array}{rrr} +% 1 & 0 & 0 \\ +% 0 & \cos{\theta} & -\sin{\theta} \\ +% 0 & \sin{\theta} & \cos{\theta} +% \end{array} \right) $$ +% +% Rotations about the _y_ -axis are generated by +% +% $$ R_y(\theta) = \left( \begin{array}{rrr} +% \cos{\theta} & 0 & -\sin{\theta} \\ +% 0 & 1 & 0 \\ +% \sin{\theta} & 0 & \cos{\theta} +% \end{array} \right) $$ +% +% And, rotations about _z_ are provided by +% +% $$ R_z(\theta) = \left( \begin{array}{rrr} +% \cos{\theta} & -\sin{\theta} & 0 \\ +% \sin{\theta} & \cos{\theta} & 0 \\ +% 0 & 0 & 1 \\ +% \end{array} \right) $$ +% + +%% |theta| +% Rotation angles are specified in degrees. Our MATLAB programs +% use the degree-based trig functions |cosd| and |sind|. +% Here are graphs of $\cos\theta$ and $-\sin\theta$ , evaluated with +% the angle $\theta$ going from |0| to |360| degrees +% in |10|-degree steps. +% +% <<cos_sin.gif>> +% + +%% Compass +% Here is another look at the same data, |cosd(theta)| and +% |-sind(theta)| for |theta = 0:10:360|. +% The columns of the rotation matrix are the coordinates of +% the rotating dots. The blue dot starts at (0,1) and the +% orange dot starts at (1,0). +% +% If you drop the zeros from the values of |theta|, you are +% left with the integers from 1 to 36. This is the numbering in the +% international standard describing the compass direction of runways +% at airports. The initial position of our blue dot corresponds to +% runway 36 and the orange dot starts as runway 9. +% +% <<compass.gif>> +% + +%% Roll, Pitch, Yaw +% *Note: Refresh your browser to synchronize these animations.* +% +% For aircraft and space vehicles, rotation around +% the |x|-axis from nose to tail is known as _roll_. +% +% <<roll.gif>> +% +% Rotation about the |y|-axis parallel to the wings is _pitch_. +% +% <<pitch.gif>> +% +% And, rotation about the vertical |z|-axis is _yaw_. +% +% <<yaw.gif>> +% + +%% Propeller +% Our model of the Piper PA-24 Comanche has 97 _patches_. +% One of them is the propeller. +% This animation of a rotating propeller is very similar to our +% earlier animation of the compass. +% +% <<propeller.gif>> +% + +%% Cubelet +% |Qube|, our digital Rubik's Cube simulator, uses 27 copies +% of a single _cubelet_. This animation of a rotating cubelet +% shows a quarter turn clockwise about |x|, followed by a quarter +% turn clockwise about |y| and then a quarter turn counterclockwise +% about |z|. If these three rotations are repeated four times, +% the cubelet returns to its initial orientation. +% In the process, we see the traditional Rubik's colors of all +% six faces REPLACE_WITH_DASH_DASH white, green and orange opposite yellow, blue and red. +% +% <<cubelet.gif>> + +%% Scramble +% *Note: Refresh your browser to synchronize these animations.* +% +% Rubick's Cube is all about rotations. Rotating the cubelets in any +% face of the puzzle, while leaving the rest of the puzzle fixed, +% is called a "move". Like any cube, Rubik's cube has six faces. +% Each move rotates one of the six faces in either a clockwise or +% counterclockwise direction. So, after |n| moves, the puzzle is in one +% of |12^n| possible states. The challenge is to return the cube +% to its original orientation. +% +% Here are six random rotations produced by |scramble(6)|. +% Because |12^6| is |2,985,984|, +% this is just one of almost three million six-move scrambles. +% +% <<scramble.gif>> +% + +%% Unscramble +% One possible way to restore any starting condition is to retrace the +% moves that produced it. This is the "follow the breadcrumbs" algorithm. +% So, I call this |unscramble|, rather than |solve|. +% +% <<unscramble.gif>> +% + +%% Exercises +% * 1: Which rotation matrices and what values of |theta| are used +% in the animations? +% +% * 2 (not easy): When is |unscamble| a solution with the +% minimum number of moves? + +%% Software +% The source code for |Qube| is available from this link: +% <https://blogs.mathworks.com/cleve/files/Qube_May18_osf.m +% Qube_May18_osf.m>. +% The |osf|, _one single file_, format is a self-extracting archive +% that expands into a directory of individual functions. + + +##### SOURCE END ##### fac94086e84b4ca1b5df2dbc8d19f63c +--> + + + + + diff --git a/feed.json b/feed.json new file mode 100644 index 0000000..1b7d795 --- /dev/null +++ b/feed.json @@ -0,0 +1,704 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "hpc.social - Aggregated Commercial Blog", + "home_page_url": "https://hpc.social/commercial-blog/", + "feed_url": "https://hpc.social/commercial-blog/feed.json", + "description": "Vendor and commercial posts in the hpc.social community", + "icon": "https://hpc.social/commercial-blog/assets/images/apple-touch-icon.png", + "favicon": "https://hpc.social/commercial-blog/assets/images/favicon.png", + "expired": false, + + "author": { + "name": "hpc.social", + "url": null, + "avatar": null + }, + +"items": [ + + { + "id": "https://hpc.social/commercial-blog/2024/code-for-sonic-and-ten-sonic-movies/", + "title": "Code for Sonic and Ten Sonic Movies", + "summary": null, + "content_text": "Two previous blog posts, Dec. 12, 2024 and Nov. 16, 2024, introduced \"Sonic\", my new tool for incorporating sound in videos. Today's blog post includes a link to the MATLAB source code for Sonic, as well as links to new versions of ten examples.ContentsCodeSonicTen MoviesCodeThe MATLAB code for Sonic and all the examples is available in this 11 MB zip file.Sonic.zipSonicThere are two ways to generate the musical sounds. The three movies Warm-Up, TanSin and Blackjack use recordings of C-major scales played on three different pianos. All the other movies rely on resampling a single note from a trumpet, xylophone or piano.The function sonic_examples(kases,n) is a driver for sonic. The first parameter, kases, is an integer vector of desired examples, 0 though 9. The second parameter, n, is the number of desired samples.n = 25 is very fastn = 100 is reasonablen = 200 is the defaultn = 300 is overkillTen MoviesHere are links to new versions of the animated videos, and the final frames.0. Warm-Upsonic_examples_0.mp4 1. Lissajoussonic_examples_1.mp4 2. Mertenssonic_examples_2.mp4 3. TanSinsonic_examples_3.mp4 4. Van der Polsonic_examples_4.mp4 5. VdP Derivativesonic_examples_5.mp4 6. Blackjacksonic_examples_6.mp4 7. Vibrating L-shaped Membranesonic_examples_7.mp4 8. Recamán Sequencesonic_examples_8.mp4 9. Swinging Stickssonic_examples_9.mp4 Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024b", + "content_html": "

Two previous blog posts, Dec. 12, 2024 and Nov. 16, 2024, introduced \"Sonic\", my new tool for incorporating sound in videos. Today's blog post includes a link to the MATLAB source code for Sonic, as well as links to new versions of ten examples.

Contents

Code

The MATLAB code for Sonic and all the examples is available in this 11 MB zip file.

Sonic.zip

Sonic

There are two ways to generate the musical sounds. The three movies Warm-Up, TanSin and Blackjack use recordings of C-major scales played on three different pianos. All the other movies rely on resampling a single note from a trumpet, xylophone or piano.

The function sonic_examples(kases,n) is a driver for sonic. The first parameter, kases, is an integer vector of desired examples, 0 though 9. The second parameter, n, is the number of desired samples.

  • n = 25 is very fast
  • n = 100 is reasonable
  • n = 200 is the default
  • n = 300 is overkill

Ten Movies

Here are links to new versions of the animated videos, and the final frames.

0. Warm-Up

sonic_examples_0.mp4

\"\"

1. Lissajous

sonic_examples_1.mp4

\"\"

2. Mertens

sonic_examples_2.mp4

\"\"

3. TanSin

sonic_examples_3.mp4

\"\"

4. Van der Pol

sonic_examples_4.mp4

\"\"

5. VdP Derivative

sonic_examples_5.mp4

\"\"

6. Blackjack

sonic_examples_6.mp4

\"\"

7. Vibrating L-shaped Membrane

sonic_examples_7.mp4

\"\"

8. Recamán Sequence

sonic_examples_8.mp4

\"\"

9. Swinging Sticks

sonic_examples_9.mp4

\"\"


Get the MATLAB code

Published with MATLAB® R2024b

", + "url": "https://hpc.social/commercial-blog/2024/code-for-sonic-and-ten-sonic-movies/", + + + + + + "date_published": "2024-12-18T15:13:08-07:00", + "date_modified": "2024-12-18T15:13:08-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/sonic-adds-sound-to-logo-recam%C3%A1n-chaos/", + "title": "Sonic Adds Sound to Logo, Recamán, Chaos", + "summary": null, + "content_text": "I introduced Sonic in my blog post last month. Today I will use Sonic to add sound to the graphics from three old posts, the vibrating L-shaped membrane, the Recamán sequence and the chaotic behavior of the Swinging Sticks.ContentsVibrating L-shaped MembraneRecamánSwinging SticksTriple featureVibrating L-shaped MembraneFor almost fifty years, I have wanted to hear the MathWorks logo. I have written about the L-shaped membrane many times, link #1, link #2, link #3.Click on this link and listen to the audio in a Sonic movie of the vibrating membrane. The sound is generated by resampling one tone from a xylophone.And here is one frame from the movie. RecamánThe inventor of the Recamán sequence is a Columbian mathematician, Bernardo Recamán Santos. The sequence is A005132 in the OEIS, the On-Line Encyclopedia of Integer Sequences. Here is my blog post.Click on this link and the listen to the audio in a Sonic movie of the Recamán sequence. The sound is generated by resampling the middle-C key of a piano.Here is one frame from the movie. Swinging SticksThe Swinging Sticks is a kinetic sculpture that exhibits chaotic behavior. I have added sound to my blog post about the sticks.Here is the link to a Sonic movie of the Swinging Sticks. The audio is also generated by resampling one tone from a xylophone.And, here is one frame from the movie. Triple featureClick on this link to see -- and hear-- all three movies.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

I introduced Sonic in my blog post last month. Today I will use Sonic to add sound to the graphics from three old posts, the vibrating L-shaped membrane, the Recamán sequence and the chaotic behavior of the Swinging Sticks.

Contents

Vibrating L-shaped Membrane

For almost fifty years, I have wanted to hear the MathWorks logo. I have written about the L-shaped membrane many times, link #1, link #2, link #3.

Click on this link and listen to the audio in a Sonic movie of the vibrating membrane. The sound is generated by resampling one tone from a xylophone.

And here is one frame from the movie.

\"\"

Recamán

The inventor of the Recamán sequence is a Columbian mathematician, Bernardo Recamán Santos. The sequence is A005132 in the OEIS, the On-Line Encyclopedia of Integer Sequences. Here is my blog post.

Click on this link and the listen to the audio in a Sonic movie of the Recamán sequence. The sound is generated by resampling the middle-C key of a piano.

Here is one frame from the movie.

\"\"

Swinging Sticks

The Swinging Sticks is a kinetic sculpture that exhibits chaotic behavior. I have added sound to my blog post about the sticks.

Here is the link to a Sonic movie of the Swinging Sticks. The audio is also generated by resampling one tone from a xylophone.

And, here is one frame from the movie.

\"\"

Triple feature

Click on this link to see -- and hear-- all three movies.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/sonic-adds-sound-to-logo-recam%C3%A1n-chaos/", + + + + + + "date_published": "2024-12-08T11:51:55-07:00", + "date_modified": "2024-12-08T11:51:55-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/lights-camera-action-and-sound/", + "title": "Lights, Camera, Action — and Sound", + "summary": null, + "content_text": "I am very excited to incorporate sound in animations. This blog post has five examples with links to videos enclosed in '+ + + +'.ContentsMertensLissajoustansinVan der PolBlackjackMertensI began making animations with sound while investigating the Mertens Conjecture. The OEIS page offers an opportunity to listen to the Mertens sequence, but I wanted more control.The resample function is the Signal Processing Toolbox resamples a signal at a fraction, p/q, times the original sample rate. The sound in this Mertens example is generated from a recording of piano playing middle C that is resampled to simulate the other notes.Here is a link to a 40-second video of M(n) and sqrt(n) for n = 200. (Homework: How long would the video last if n = 10^8? Post your answers in the comments.)+ + + + + + + + + + + + + + + + + + + + + + + + + + +https://blogs.mathworks.com/cleve/files/mertens.mp4+ + + + + + + + + + + + + + + + + + + + + + + + + + +Here is a static graphic, the last frame of the video. LissajousYou may well have seen Lissajous curves before, but have you ever listened to them? They were first studied extensively by Jules Lissajous, a nineteenth-century French physicist. There are many Lissajous curves similar to the following, where the trajectory in the x-y plane is described by two functions of a parameter t.n = 200;t = 3*pi*(-1:2/n:1);x = 5*cos(t)+3*cos(5/3*t);y = 5*sin(t)-sin(5/3*t);This 40-second video employs sound produced by resampling a note from a xylophone.+ + + + + + + + + + + + + + + + + + + + + + + + + + +https://blogs.mathworks.com/cleve/files/lissajous.mp4+ + + + + + + + + + + + + + + + + + + + + + + + + + +Here is the last frame. tansinI have used variations of this function many times.F = @(x) tan(sin(x))+sin(tan(x));When x approaches an integer multiple of pi, both sin(x) and tan(x) approach zero, so F(x) also approaches zero. But when x approaches an odd multiple of pi/2, tan(x) becomes infinite, so both sin(tan(x)) and F(x) oscillate infinitely often.Here is a link to a 45-second video of F(x) for n = 200 evenly spaced values of x between -2pi and 2pi. If we increase n, we would see more of the oscillations at the singularities. The sound comes from resampling a single note played by a trumpet.+ + + + + + + + + + + + + + + + + + + + + + + + + + +https://blogs.mathworks.com/cleve/files/tansin.mp4+ + + + + + + + + + + + + + + + + + + + + + + + + + + Van der PolQuoting Wikipedia. In the study of dynamical systems, the van der Pol oscillator (named for Dutch physicist Balthasar van der Pol) is a non-conservative, oscillating system with non-linear damping.In this video, we see -- and hear -- the numerical solution, computed by ode45, of the Van der Pol equation at n points between t = 0 and t = 20. The damping parameter is mu = 2.The sound comes from a recording of a student practicing a piano. In this case we have scales spanning four octaves, so no resampling is required.+ + + + + + + + + + + + + + + + + + + + + + + + + + +https://blogs.mathworks.com/cleve/files/vanderpol.mp4+ + + + + + + + + + + + + + + + + + + + + + + + + + + BlackjackThe card game Blackjack is another example that I use frequently; see \"Simulating Blackjack\" and MATLAB file exchange. The video shows a simulation of a few hundred hands, starting each hand with a $10 bet. The sound comes from a piano playing a C-major scale. Again, resampling is not necessary.The emerging histograms in the video, and the static outcome in the final frame, show the percentages observed for each of ten possible outcomes. The histograms can be compared with those in the \"Simulating Blackjack\" article that describes the use of the Parallel Computing Toolbox to play 10,000 hands with these results.bjpercent \" Push, player and dealer have equal totals not exceeding 21 \" \" Win, player's total is greater than dealer's and does not exceed 21 \" \" Lose, dealer's total is greater than player's and does not exceed 21 \" \" Blackjack, player has 21 with two cards, dealer does not \" \" \" \" $-40 0.03 Split and double, lose both \" \" $-30 0.17 Split and double, lose one \" \" $-20 4.71 Split or double, lose \" \" $-10 42.94 Lose \" \" $ 0 9.06 Push \" \" $+10 32.13 Win \" \" $+15 4.44 Blackjack \" \" $+20 6.19 Split or double, win \" \" $+30 0.28 Split and double, win one \" \" $+40 0.06 Split and double, win both \"(Homework. This simulation happens to have three hands with the very rare swings of more than $20. Find the hand numbers where such rare events occur. Post your answers in the comments. Hint: watch the emerging histograms.)+ + + + + + + + + + + + + + + + + + + + + + + + + + + +https://blogs.mathworks.com/cleve/files/blackjack.mp4+ + + + + + + + + + + + + + + + + + + + + + + + + + + + Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024b", + "content_html": "

I am very excited to incorporate sound in animations. This blog post has five examples with links to videos enclosed in '+ + + +'.

Contents

Mertens

I began making animations with sound while investigating the Mertens Conjecture. The OEIS page offers an opportunity to listen to the Mertens sequence, but I wanted more control.

The resample function is the Signal Processing Toolbox resamples a signal at a fraction, p/q, times the original sample rate. The sound in this Mertens example is generated from a recording of piano playing middle C that is resampled to simulate the other notes.

Here is a link to a 40-second video of M(n) and sqrt(n) for n = 200. (Homework: How long would the video last if n = 10^8? Post your answers in the comments.)

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

https://blogs.mathworks.com/cleve/files/mertens.mp4

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Here is a static graphic, the last frame of the video.

\"\"

Lissajous

You may well have seen Lissajous curves before, but have you ever listened to them? They were first studied extensively by Jules Lissajous, a nineteenth-century French physicist. There are many Lissajous curves similar to the following, where the trajectory in the x-y plane is described by two functions of a parameter t.

n = 200;t = 3*pi*(-1:2/n:1);x = 5*cos(t)+3*cos(5/3*t);y = 5*sin(t)-sin(5/3*t);

This 40-second video employs sound produced by resampling a note from a xylophone.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

https://blogs.mathworks.com/cleve/files/lissajous.mp4

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

Here is the last frame.

\"\"

tansin

I have used variations of this function many times.

F = @(x) tan(sin(x))+sin(tan(x));

When x approaches an integer multiple of pi, both sin(x) and tan(x) approach zero, so F(x) also approaches zero. But when x approaches an odd multiple of pi/2, tan(x) becomes infinite, so both sin(tan(x)) and F(x) oscillate infinitely often.

Here is a link to a 45-second video of F(x) for n = 200 evenly spaced values of x between -2pi and 2pi. If we increase n, we would see more of the oscillations at the singularities. The sound comes from resampling a single note played by a trumpet.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

https://blogs.mathworks.com/cleve/files/tansin.mp4

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

\"\"

Van der Pol

Quoting Wikipedia.

  In the study of dynamical systems, the van der Pol oscillator  (named for Dutch physicist Balthasar van der Pol) is a  non-conservative, oscillating system with non-linear damping.

In this video, we see -- and hear -- the numerical solution, computed by ode45, of the Van der Pol equation at n points between t = 0 and t = 20. The damping parameter is mu = 2.

The sound comes from a recording of a student practicing a piano. In this case we have scales spanning four octaves, so no resampling is required.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

https://blogs.mathworks.com/cleve/files/vanderpol.mp4

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

\"\"

Blackjack

The card game Blackjack is another example that I use frequently; see \"Simulating Blackjack\" and MATLAB file exchange. The video shows a simulation of a few hundred hands, starting each hand with a $10 bet. The sound comes from a piano playing a C-major scale. Again, resampling is not necessary.

The emerging histograms in the video, and the static outcome in the final frame, show the percentages observed for each of ten possible outcomes. The histograms can be compared with those in the \"Simulating Blackjack\" article that describes the use of the Parallel Computing Toolbox to play 10,000 hands with these results.

bjpercent
    \"   Push, player and dealer have equal totals not exceeding 21             \"    \"   Win, player's total is greater than dealer's and does not exceed 21    \"    \"   Lose, dealer's total is greater than player's and does not exceed 21   \"    \"   Blackjack, player has 21 with two cards, dealer does not               \"    \"                                                                          \"    \"   $-40     0.03     Split and double, lose both                          \"    \"   $-30     0.17     Split and double, lose one                           \"    \"   $-20     4.71     Split or double, lose                                \"    \"   $-10    42.94     Lose                                                 \"    \"   $  0     9.06     Push                                                 \"    \"   $+10    32.13     Win                                                  \"    \"   $+15     4.44     Blackjack                                            \"    \"   $+20     6.19     Split or double, win                                 \"    \"   $+30     0.28     Split and double, win one                            \"    \"   $+40     0.06     Split and double, win both                           \"

(Homework. This simulation happens to have three hands with the very rare swings of more than $20. Find the hand numbers where such rare events occur. Post your answers in the comments. Hint: watch the emerging histograms.)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

https://blogs.mathworks.com/cleve/files/blackjack.mp4

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

\"\"

\"\"


Get the MATLAB code

Published with MATLAB® R2024b

", + "url": "https://hpc.social/commercial-blog/2024/lights-camera-action-and-sound/", + + + + + + "date_published": "2024-11-16T06:03:58-07:00", + "date_modified": "2024-11-16T06:03:58-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/m%C3%B6bius-mertens-and-redheffer/", + "title": "Möbius, Mertens and Redheffer", + "summary": null, + "content_text": "Recently, I have made a series of blog posts about Redheffer matrices and the Mertens conjecture. After each of the posts, readers and colleagues offered suggestions to speed up the calculations. Here is a summary of what I have learned.ContentsMöbius FunctionMertens FunctionRedheffer MatricesOEISTen MillionMertens ConjectureConjecture is FalseMatricesSparsityComputing Mertens#1#2#3#4#5PerformanceMöbius Function The function named after the mid-nineteenth century German mathematician August Möbius is fundamental to the study of prime numbers. The Möbius function maps the positive integers onto -1,0 and +1. mu(n) = 0 if n has a repeated prime factor, = (-1)^(number prime factors) if the factors of n are not repeatedHere is my code for the Möbius function. It relies on factor(n) which uses a sieve to find the prime factors of n. function mu = mobius(n) % mu = mobius(n) returns mu(1:n). mu = -eye(1,n); for k = 2:n f = factor(k); d = diff([1 f]); if any(d == 0) mu(k) = 0; else mu(k) = (-1)^length(f); end end endHere is a graph of mu(n) for n = 1:40. For example, mu(29:31) are all -1 because 29 and 31 are both prime and 30 has an odd number of prime factors, 2, 3 and 5. mu = moebius(40); plot(1:40,mu,'.-','linewidth',1.5,'markersize',16) axis([-242-1.51.5]) title('Möbius function') Mertens Function The Mertens function is named after the late-nineteenth century Polish mathematician Franz Mertens. The function, which we denote by M(n), is simply the partial sums of the Möbius function. The MATLAB code is very short. function M = mertens(n) % M = mertens(n) returns Mertens(1:n). mu = moebius(n); M = cumsum([1 mu(2:n)]); endHere is a graph of M(n) for n = 1:40. M = mertens(40); plot(1:40,M,'.-','linewidth',1.5,'markersize',16) axis([-242-4.51.5]) title('Mertens function') Redheffer Matrices The twentieth-century American mathematician Ray Redheffer, who was a professor at UCLA for 55 years, had a wide range of interests. He was the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.The n-by-n Redheffer's matrix R(n) is a matrix of zeros and ones. For j > 1, the element R(k,j) equals one if j is a divisor of k. And importantly, for j = 1, the first column R(:,1) is all ones. function R = redheffer(n) k = 1:n; j = k'; R = (mod(k,j) == 0); R(:,1) = 1; endNick Higham put Redheffer's matrix in the MATLAB Gallery several years ago. Here is a spy plot of the 200-by-200. R = gallery('redheff',200); spy(R) title('Redheffer') OEISIn the Online Encyclopedia of Integer Sequences, the Mertens function is OEIS/A002321. One of the many cool features of the OEIS is \"listen\", which generates music driven by the sequences. Take a look -- and a listen -- to my 63 second movie about A002321.https://blogs.mathworks.com/cleve/files/mertens_plot.mp4Ten MillionHere are plots of M(1:n) with n ranging from 100 to 10 million. Each plot after the first also shows the range of the previous plot. I will discuss the red lines in the next section load mertens M tiledlayout(2,3) for n = 10.^(2:7) nexttile mertens_plot(M(1:n)) end Mertens ConjectureThe red lines above are plots of ±sqrt(n). They clearly bound M(n) for n up to 10 million. The Mertens Conjecture is that this holds for all n. |M(n)| < sqrt(n) for all n > 0The conjecture appears in a 1885 letter from Thomas Stieltjes to Charles Hermite and in a 1897 paper by Mertens.Wikipedia says It is a striking example of a mathematical conjecture proven false despite a large amount of computational evidence in its favor.Conjecture is FalseIn 1985, 100 years after the Stieltjes letter, Andrew Odlyzko and Herman te Riele proved that the conjecture is false. Their proof is indirect. They prove the existence of infinitely many n for which |M(n)|/sqrt(n) > 1.06But they do not know the value of any particular n. They informally estimate that such an n would be greater than 10^30 and probably much larger.MatricesLet's get back to the world of matrices. It is not obvious, but is true, that the determinants of Redheffer matrices are equal to the Mertens function. det(R(n)) = M(n)So, if I could have proved that |det(R(n))| < sqrt(n) for all n > 0I would have had a proof of the Riemann Hypothesis.It might appear that I am out of the clutches of number theory and safely back to matrix computation. But that illusion does not last for long.SparsityThe 0(n^3) memory required by the Redheffer matrix from the gallery runs out of steam quickly. We need to take advantage of sparsity. This function generates the sparse representation of a Redheffer matrix directly. function R = spredheffer(n) j = (1:n)'; k = ones(n,1); m = n; for i = 2:n t = [1 i:i:n]; p = length(t); j(m+(1:p)) = t; k(m+(1:p)) = i; m = m+p; end R = sparse(k,j,1,n,n); endComputing MertensHere are five methods for computing the Mertens function.#1The first simply takes the determinant of the Redheffer matrix in the gallery. M = det(gallery('redheff',n))#2The sparse Gaussian elimination function lu with one input and four sparse outputs is designed for solving sparse linear systems. Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to reduce fill-in while maintaining numerical stability. The determinant of the input matrix is the product of the four determinants of the output matrices. Two them are triangular and two are permutations, so it is easy, and quick, to compute their determinants. R = spredheffer(n); [L,U,P,Q] = lu(R) M = det(L)*det(U)*det(P)*det(Q);#3Pat Quillen realized that by interchanging the first and last columns, there would be little fill-in. We need only one determinant. R = spredheffer(n); R(:,[1 n]) = R(:,[n 1]); M = -det(R);#4A thoughtful reader of the blog submitted a suggestion based on the Schur complement. Suppose E is a block matrix, E = [A B C D]Schur's formula for the determinant of E is det(E) = det(D)*det(A - B*(D\\C))Apply this to R(n) with A the (1,1) entry, which is 1, and D the lower (n-1)-by-(n-1) submatrix, which is upper triangular with ones on the diagonal and determinant equal 1. This leads to method #4 which uses backslash with a sparse, unit, upper triangular matrix. There is a Redheffer matrix, but no determinant. S = spredheffer(n); e = ones(n-1,1); M = 1 - e'*(S(2:n,2:n)\\e);#5Once we have generated R(n) and computed M(n), how do we get R(n+1) and M(n+1)? After several iterations of this approach, I found myself without any matrices and only the original definitions of Möbius and Mertens. mu = mobius(n); M = cumsum([1 mu(2:n)]);PerformanceLet's summarize the five methods. The first four generate a single, isolated value of M(n). Method #5 generates M(n) for all n from 1 to any specified maximum. matrix function dets M #1 full gallery 1 1 #2 sparse lu 4 1 #3 sparse swap 1 1 #4 sparse \\ 0 1 #5 none factor 0 manyTime in seconds to compute M(n) on my Lenovo T14 laptop running Windows. n 2e4 2e5 2e6 2e7 #1 28.652 - - - #2 0.344 21.77 - - #3 0.086 1.29 16.4 #4 0.055 0.65 6.7 70.1 #5 0.075 0.80 10.7 204.5Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

Recently, I have made a series of blog posts about Redheffer matrices and the Mertens conjecture. After each of the posts, readers and colleagues offered suggestions to speed up the calculations. Here is a summary of what I have learned.

Contents

Möbius Function

\"\"

The function named after the mid-nineteenth century German mathematician August Möbius is fundamental to the study of prime numbers. The Möbius function maps the positive integers onto -1,0 and +1.

  mu(n) = 0 if n has a repeated prime factor,        = (-1)^(number prime factors) if the factors of n are not repeated

Here is my code for the Möbius function. It relies on factor(n) which uses a sieve to find the prime factors of n.

  function mu = mobius(n)     % mu = mobius(n) returns mu(1:n).     mu = -eye(1,n);     for k = 2:n         f = factor(k);         d = diff([1 f]);         if any(d == 0)             mu(k) = 0;         else             mu(k) = (-1)^length(f);         end     end  end

Here is a graph of mu(n) for n = 1:40. For example, mu(29:31) are all -1 because 29 and 31 are both prime and 30 has an odd number of prime factors, 2, 3 and 5.

    mu = moebius(40);    plot(1:40,mu,'.-','linewidth',1.5,'markersize',16)    axis([-242-1.51.5])    title('Möbius function')
\"\"

Mertens Function

\"\"

The Mertens function is named after the late-nineteenth century Polish mathematician Franz Mertens. The function, which we denote by M(n), is simply the partial sums of the Möbius function. The MATLAB code is very short.

  function M = mertens(n)     % M = mertens(n) returns Mertens(1:n).     mu = moebius(n);     M = cumsum([1 mu(2:n)]);  end

Here is a graph of M(n) for n = 1:40.

    M = mertens(40);    plot(1:40,M,'.-','linewidth',1.5,'markersize',16)    axis([-242-4.51.5])    title('Mertens function')
\"\"

Redheffer Matrices

\"\"

The twentieth-century American mathematician Ray Redheffer, who was a professor at UCLA for 55 years, had a wide range of interests. He was the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.

The n-by-n Redheffer's matrix R(n) is a matrix of zeros and ones. For j > 1, the element R(k,j) equals one if j is a divisor of k. And importantly, for j = 1, the first column R(:,1) is all ones.

  function R = redheffer(n)     k = 1:n;     j = k';     R = (mod(k,j) == 0);     R(:,1) = 1;  end

Nick Higham put Redheffer's matrix in the MATLAB Gallery several years ago. Here is a spy plot of the 200-by-200.

    R = gallery('redheff',200);    spy(R)    title('Redheffer')
\"\"

OEIS

In the Online Encyclopedia of Integer Sequences, the Mertens function is OEIS/A002321. One of the many cool features of the OEIS is \"listen\", which generates music driven by the sequences. Take a look -- and a listen -- to my 63 second movie about A002321.

https://blogs.mathworks.com/cleve/files/mertens_plot.mp4

Ten Million

Here are plots of M(1:n) with n ranging from 100 to 10 million. Each plot after the first also shows the range of the previous plot. I will discuss the red lines in the next section

    load mertens M    tiledlayout(2,3)    for n = 10.^(2:7)        nexttile        mertens_plot(M(1:n))    end
\"\"

Mertens Conjecture

The red lines above are plots of ±sqrt(n). They clearly bound M(n) for n up to 10 million. The Mertens Conjecture is that this holds for all n.

  |M(n)| < sqrt(n) for all n > 0

The conjecture appears in a 1885 letter from Thomas Stieltjes to Charles Hermite and in a 1897 paper by Mertens.

Wikipedia says

  It is a striking example of a mathematical conjecture proven false  despite a large amount of computational evidence in its favor.

Conjecture is False

In 1985, 100 years after the Stieltjes letter, Andrew Odlyzko and Herman te Riele proved that the conjecture is false. Their proof is indirect. They prove the existence of infinitely many n for which

  |M(n)|/sqrt(n) > 1.06

But they do not know the value of any particular n. They informally estimate that such an n would be greater than 10^30 and probably much larger.

Matrices

Let's get back to the world of matrices. It is not obvious, but is true, that the determinants of Redheffer matrices are equal to the Mertens function.

  det(R(n)) = M(n)

So, if I could have proved that

  |det(R(n))| < sqrt(n) for all n > 0

I would have had a proof of the Riemann Hypothesis.

It might appear that I am out of the clutches of number theory and safely back to matrix computation. But that illusion does not last for long.

Sparsity

The 0(n^3) memory required by the Redheffer matrix from the gallery runs out of steam quickly. We need to take advantage of sparsity. This function generates the sparse representation of a Redheffer matrix directly.

  function R = spredheffer(n)      j = (1:n)';      k = ones(n,1);      m = n;      for i = 2:n          t = [1 i:i:n];          p = length(t);          j(m+(1:p)) = t;          k(m+(1:p)) = i;          m = m+p;      end      R = sparse(k,j,1,n,n);  end

Computing Mertens

Here are five methods for computing the Mertens function.

#1

The first simply takes the determinant of the Redheffer matrix in the gallery.

  M = det(gallery('redheff',n))

#2

The sparse Gaussian elimination function lu with one input and four sparse outputs is designed for solving sparse linear systems. Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to reduce fill-in while maintaining numerical stability. The determinant of the input matrix is the product of the four determinants of the output matrices. Two them are triangular and two are permutations, so it is easy, and quick, to compute their determinants.

  R = spredheffer(n);  [L,U,P,Q] = lu(R)  M = det(L)*det(U)*det(P)*det(Q);

#3

Pat Quillen realized that by interchanging the first and last columns, there would be little fill-in. We need only one determinant.

  R = spredheffer(n);  R(:,[1 n]) = R(:,[n 1]);  M = -det(R);

#4

A thoughtful reader of the blog submitted a suggestion based on the Schur complement. Suppose E is a block matrix,

  E = [A B       C D]

Schur's formula for the determinant of E is

  det(E) = det(D)*det(A - B*(D\\C))

Apply this to R(n) with A the (1,1) entry, which is 1, and D the lower (n-1)-by-(n-1) submatrix, which is upper triangular with ones on the diagonal and determinant equal 1. This leads to method #4 which uses backslash with a sparse, unit, upper triangular matrix. There is a Redheffer matrix, but no determinant.

  S = spredheffer(n);  e = ones(n-1,1);  M = 1 - e'*(S(2:n,2:n)\\e);

#5

Once we have generated R(n) and computed M(n), how do we get R(n+1) and M(n+1)? After several iterations of this approach, I found myself without any matrices and only the original definitions of Möbius and Mertens.

  mu = mobius(n);  M = cumsum([1 mu(2:n)]);

Performance

Let's summarize the five methods. The first four generate a single, isolated value of M(n). Method #5 generates M(n) for all n from 1 to any specified maximum.

        matrix     function    dets    M
  #1    full       gallery       1     1  #2    sparse     lu            4     1  #3    sparse     swap          1     1  #4    sparse     \\             0     1  #5    none       factor        0    many

Time in seconds to compute M(n) on my Lenovo T14 laptop running Windows.

    n    2e4      2e5      2e6     2e7
  #1    28.652     -        -       -  #2     0.344   21.77      -       -  #3     0.086    1.29    16.4  #4     0.055    0.65     6.7    70.1  #5     0.075    0.80    10.7   204.5


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/m%C3%B6bius-mertens-and-redheffer/", + + + + + + "date_published": "2024-10-23T00:53:53-06:00", + "date_modified": "2024-10-23T00:53:53-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/experience-with-chatbots-generating-matlab/", + "title": "Experience With Chatbots Generating MATLAB", + "summary": null, + "content_text": "A friend is investigating the use of generative AI in his classes. I asked two different popular chatbots to write MATLAB programs for a mathematically nontrivial problem. Both chatbots understood my query and both wrote plausible MATLAB programs, but one of the programs was not correct. My recommendation for coursework: carefully read and test programs produced by generative AI and repair any incorrect ones.ContentsRedheffer, Mertens and AhaltProgram number oneProgram number twoProgram number threeHappy EndingRedheffer, Mertens and AhaltFrequent readers of this blog know about my recent obsession with Redheffer matrices and the Mertens conjecture. So, when my friend Stan Ahalt visited from North Carolina State a few days ago, and wanted to discuss the use of generative AI in the new Data Science curriculum, I suggested asking chatbots to write MATLAB programs that check the Mertens conjecture.We logged onto the web sites for two different AI companies. Our query was the same at both sites.Please write a MATLAB program to test the Mertens conjecture.I was pleasantly surprised when both systems knew about MATLAB and understood the query. One of the systems replied:Certainly! I'll create a MATLAB program to test the Mertensconjecture. First, let me briefly explain what the Mertensconjecture is, and then I'll provide the code.The Mertens conjecture states that the Mertens function M(n)is bounded by √n for all positive integers n. Mathematically,it can be expressed as:|M(n)| ≤ √n for all n > 1Where M(n) is the Mertens function, defined as the sum ofthe Möbius function μ(k) for all positive integers k up to n:M(n) = Σ μ(k) for k = 1 to nHere's a MATLAB program to test this conjecture.Program number oneThe program from one of the web sites begins:function M = test_Mertens(n) % Function to test the Mertens conjecture for a given n % Returns true if the conjecture holds for all values up to n, false otherwiseThis is followed by code to sum the Möbius function and verify that abs(M) < sqrt(n). The crucial mobius is a straight-forward implementation of the definition. The code relies on MATLAB intrinsics, factor and unique.function mu = mobius(k) % Function to calculate the Möbius function of k % Factorize k p = factor(k); % Check for square factors if length(p) ~= length(unique(p)) mu = 0; else mu = (-1)^length(p); endendI was very pleased. The entire program is only 40 lines long, eminently readable, and correct.Program number twoThe program from the other web site is more sophisticated. It knows enough about MATLAB to use its cumulative summation.M = cumsum(mu);Here is the crucial mobius function. At first glance, it looks OK. Is it?function mu = mobius(n) % Calculate Möbius function values up to n mu = ones(1, n); for i = 2:sqrt(n) if mu(i) == 1 for j = i^2:i:n if mod(j, i^2) == 0 mu(j) = 0; else mu(j) = -mu(j); end end end endendAs you have guessed, program number two is not correct. Even its own plot reveals that something is amiss.Program number threeLet's return to the second Web site and make a more specific query.Please write a MATLAB program that uses Redheffermatrices to test the Mertens conjecture.The resulting program generates a Redheffer matrix withR = zeros(n,n);for i = 1:n for j = 1:n if mod(i, j) == 0 R(i, j) = 1; end endendIt computes the determinant to obtain the Mertens value, M(n). It is able to confirm the conjecture for all the n in the given range.What's wrong now? Look at the plot. The computed M(n) is always equal to one. Why? Happy EndingProgram number three can be repaired by adding one line to the code that generates R. What is that line? Respond in the comments.Look at the good side. Instead of just using AI to do homework, we can challenge students to check the results carefully and repair any incorrect programs.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

A friend is investigating the use of generative AI in his classes. I asked two different popular chatbots to write MATLAB programs for a mathematically nontrivial problem. Both chatbots understood my query and both wrote plausible MATLAB programs, but one of the programs was not correct. My recommendation for coursework: carefully read and test programs produced by generative AI and repair any incorrect ones.

Contents

Redheffer, Mertens and Ahalt

Frequent readers of this blog know about my recent obsession with Redheffer matrices and the Mertens conjecture. So, when my friend Stan Ahalt visited from North Carolina State a few days ago, and wanted to discuss the use of generative AI in the new Data Science curriculum, I suggested asking chatbots to write MATLAB programs that check the Mertens conjecture.

We logged onto the web sites for two different AI companies. Our query was the same at both sites.

Please write a MATLAB program to test the Mertens conjecture.

I was pleasantly surprised when both systems knew about MATLAB and understood the query. One of the systems replied:

Certainly! I'll create a MATLAB program to test the Mertensconjecture. First, let me briefly explain what the Mertensconjecture is, and then I'll provide the code.The Mertens conjecture states that the Mertens function M(n)is bounded by √n for all positive integers n. Mathematically,it can be expressed as:
|M(n)| ≤ √n for all n > 1
Where M(n) is the Mertens function, defined as the sum ofthe Möbius function μ(k) for all positive integers k up to n:
M(n) = Σ μ(k) for k = 1 to n
Here's a MATLAB program to test this conjecture.

Program number one

The program from one of the web sites begins:

function M = test_Mertens(n)   % Function to test the Mertens conjecture for a given n   % Returns true if the conjecture holds for all values up to n, false otherwise

This is followed by code to sum the Möbius function and verify that abs(M) < sqrt(n). The crucial mobius is a straight-forward implementation of the definition. The code relies on MATLAB intrinsics, factor and unique.

function mu = mobius(k)   % Function to calculate the Möbius function of k   % Factorize k   p = factor(k);   % Check for square factors   if length(p) ~= length(unique(p))      mu = 0;   else      mu = (-1)^length(p);   endend

I was very pleased. The entire program is only 40 lines long, eminently readable, and correct.

Program number two

The program from the other web site is more sophisticated. It knows enough about MATLAB to use its cumulative summation.

M = cumsum(mu);

Here is the crucial mobius function. At first glance, it looks OK. Is it?

function mu = mobius(n)   % Calculate Möbius function values up to n   mu = ones(1, n);   for i = 2:sqrt(n)      if mu(i) == 1         for j = i^2:i:n            if mod(j, i^2) == 0               mu(j) = 0;            else               mu(j) = -mu(j);            end         end      end   endend

As you have guessed, program number two is not correct. Even its own plot reveals that something is amiss.

Program number three

Let's return to the second Web site and make a more specific query.

Please write a MATLAB program that uses Redheffermatrices to test the Mertens conjecture.

The resulting program generates a Redheffer matrix with

R = zeros(n,n);for i = 1:n   for j = 1:n      if mod(i, j) == 0         R(i, j) = 1;      end   endend

It computes the determinant to obtain the Mertens value, M(n). It is able to confirm the conjecture for all the n in the given range.

What's wrong now? Look at the plot. The computed M(n) is always equal to one. Why?

\"\"

Happy Ending

Program number three can be repaired by adding one line to the code that generates R. What is that line? Respond in the comments.

Look at the good side. Instead of just using AI to do homework, we can challenge students to check the results carefully and repair any incorrect programs.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/experience-with-chatbots-generating-matlab/", + + + + + + "date_published": "2024-10-07T14:31:38-06:00", + "date_modified": "2024-10-07T14:31:38-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/redheffer-and-mertens-accelerated/", + "title": "Redheffer and Mertens, Accelerated", + "summary": null, + "content_text": "Shortly after I published the second post about the Mertens conjecture, a reader's comment suggested a new approach to computing Redheffer determinants and the Mertens function. It is now possible to compute a half-million values of the Mertens function in about five hours.ContentsBlock matricesredmertInside redmertmertens_plotPostscriptBlock matricesThe comment references the Wikipedia article on block matrices. You could also consider the matrix as a 2x2 block matrix and use the formula for the determinant of a block matrix [1]. A = redheffer(n); M = full(A(1,1) - A(1, 2:end) * (A(2:end,2:end) \\ A(2:end, 1))); Since the (n-1)x(n-1) block is upper triangular, the solve becomes a back-substitution.redmertMy new program is named redmert, an abbreviation of Redheffer-Mertens. It uses the fact that redheffer(n) is obtained from redheffer(n-1) by appending the last column.Let R(n) denote the upper or right-triangular part of redheffer(n). R(n) = triu(redheffer(n))R(n) is sparse, upper triangular and has ones on the diagonal. The indices of the nonzeros in the last column of R(n) are the factors of n. For example, here is R(8).R8 = full(triu(redheffer(8)))R8 = 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1The idea behind redmert is to compute a sequence of Redheffer matrices, R, and associated values of the Mertens function, M. [M,R] = redmert(p,R)The input is a scalar integer p, the desired sequence length, and a sparse matrix R, the upper triangle of a Redheffer matrix of some order, n. The output is an integer vector of values M(n+1:n+p) and the upper triangle of the Redheffer matrix of order n+p. This output R can then be used as the input R in another call to redmert.The sequence is started with an empty R.For example,[M,R] = redmert(8,[]);The output is mertens(n), n = 1:8, and R8 from the example above.MR8 = full(R)M = 1 0 -1 -1 -2 -1 -2 -2R8 = 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1Inside redmertThe entire code for redmert is twelve lines long. It manipulates sparse matrices and uses sparse backslash to solve a triangular system. Nothing else is required.Lines 7 and 8 generate the last column of R and lines 9 and 10 implement the new idea about block matrices.dbtype redmert1 function [M,R] = redmert(p,Rin)2 M = zeros(p,1);3 R = sparse(triu(Rin));4 n = size(R,1);5 for q = 1:p6 n = n+1;7 k = (mod(n,1:n) == 0);8 R(k,n) = 1;9 e = ones(n-1,1);10 M(q) = R(1,1) - e'*(R(2:n,2:n)\\e);11 end12 endmertens_plotIt takes about five hours for redmert to compute half a million values on my laptop. n = 0.5e6; p = 0.5e4; R = sparse([]); M = []; for k = p:p:n disp(k) [Mout,R] = redmert(p,R); M = [M; Mout]; mertens_plot(M) endmertens_plot PostscriptI started this project by being surprised to find myself computing determinants. Now I am back to my long-time position disparaging determinants. They have been replaced by a good friend, backslash.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

Shortly after I published the second post about the Mertens conjecture, a reader's comment suggested a new approach to computing Redheffer determinants and the Mertens function. It is now possible to compute a half-million values of the Mertens function in about five hours.

Contents

Block matrices

The comment references the Wikipedia article on block matrices.

  You could also consider the matrix as a 2x2 block matrix and  use the formula for the determinant of a block matrix [1].      A = redheffer(n);      M = full(A(1,1) - A(1, 2:end) * (A(2:end,2:end) \\ A(2:end, 1)));  Since the (n-1)x(n-1) block is upper triangular, the solve becomes  a back-substitution.

redmert

My new program is named redmert, an abbreviation of Redheffer-Mertens. It uses the fact that redheffer(n) is obtained from redheffer(n-1) by appending the last column.

Let R(n) denote the upper or right-triangular part of redheffer(n).

  R(n) = triu(redheffer(n))

R(n) is sparse, upper triangular and has ones on the diagonal. The indices of the nonzeros in the last column of R(n) are the factors of n. For example, here is R(8).

R8 = full(triu(redheffer(8)))
R8 =     1     1     1     1     1     1     1     1     0     1     0     1     0     1     0     1     0     0     1     0     0     1     0     0     0     0     0     1     0     0     0     1     0     0     0     0     1     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0     1

The idea behind redmert is to compute a sequence of Redheffer matrices, R, and associated values of the Mertens function, M.

  [M,R] = redmert(p,R)

The input is a scalar integer p, the desired sequence length, and a sparse matrix R, the upper triangle of a Redheffer matrix of some order, n. The output is an integer vector of values M(n+1:n+p) and the upper triangle of the Redheffer matrix of order n+p. This output R can then be used as the input R in another call to redmert.

The sequence is started with an empty R.

For example,

[M,R] = redmert(8,[]);

The output is mertens(n), n = 1:8, and R8 from the example above.

MR8 = full(R)
M =     1     0    -1    -1    -2    -1    -2    -2R8 =     1     1     1     1     1     1     1     1     0     1     0     1     0     1     0     1     0     0     1     0     0     1     0     0     0     0     0     1     0     0     0     1     0     0     0     0     1     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0     1

Inside redmert

The entire code for redmert is twelve lines long. It manipulates sparse matrices and uses sparse backslash to solve a triangular system. Nothing else is required.

Lines 7 and 8 generate the last column of R and lines 9 and 10 implement the new idea about block matrices.

dbtype redmert
1     function [M,R] = redmert(p,Rin)2         M = zeros(p,1);3         R = sparse(triu(Rin));4         n = size(R,1);5         for q = 1:p6             n = n+1;7             k = (mod(n,1:n) == 0);8             R(k,n) = 1;9             e = ones(n-1,1);10            M(q) = R(1,1) - e'*(R(2:n,2:n)\\e);11        end12    end

mertens_plot

It takes about five hours for redmert to compute half a million values on my laptop.

   n = 0.5e6;   p = 0.5e4;   R = sparse([]);   M = [];   for k = p:p:n       disp(k)       [Mout,R] = redmert(p,R);       M = [M; Mout];       mertens_plot(M)   end
mertens_plot
\"\"

Postscript

I started this project by being surprised to find myself computing determinants. Now I am back to my long-time position disparaging determinants. They have been replaced by a good friend, backslash.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/redheffer-and-mertens-accelerated/", + + + + + + "date_published": "2024-09-30T14:28:40-06:00", + "date_modified": "2024-09-30T14:28:40-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/redheffer-and-mertens-continued/", + "title": "Redheffer and Mertens, Continued", + "summary": null, + "content_text": "Shortly after I posted Redheffer, Mertens and One-Million Dollars a few days ago, Mathworks' Pat Quillen made an important observation about computing the Mertens function.ContentsmertensMertens functionMertens computationMertens conjecturemertensThe elements in the first column of the Redheffer matrix, A = redheffer(n), are all equal to one. That dense column does not make MATLAB happy about computing det(A) . However, the last column of A has only a few nonzero elements and so Pat suggested interchanging the first and last columns before computing the determinant. This makes a world of difference. (Thanks, Pat.)typemertensfunction M = mertens(n) if n > 1 A = redheffer(n); A(:,[1 n]) = A(:,[n 1]); M = -round(det(A)); else M = 1; endendThe time required to compute det(A) varies with the sparsity of the last column, but it is only a little more than the time to compute redheffer(n) in the first place.mertens2_time Mertens functionPat's change makes it possible to take n up to a quarter of a million, and beyond. Here is a new plot of the Mertens function M(n) and the sqrt(n) bounds of the Mertens conjecture.mertens_plot There are a quarter of a million points in the data for this plot. Fortunately, the .PNG file used for the blog only needs to sample the data.Mertens computationThe job that I ran on my laptop to compute one-quarter of a million values of M(n) is still running. It currently is past 0.35 million and takes less than two seconds for each value. I may keep the job running over the weekend, just to see how far it gets.The task is embarrassingly parallel. If I had a pool with a million processors, I could have each processor compute one value. I would then just have to collect the results, but that doesn't involve any arithmetic.Mertens conjectureYou can see from the plot why late 19th- and early 20th-century mathematicians believed that the Mertens conjecture, |M(n)| < sqrt(n) for all n,might be true. It is hard to imagine that the plot of M(n) ever escapes sqrt(n).We now know that M(n) eventually does escape, but only barely and only briefly. We also know that all the computation we can do with determinants of Redheffer's matrix will never prove or disprove the conjecture or win that million-dollar prize.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

Shortly after I posted Redheffer, Mertens and One-Million Dollars a few days ago, Mathworks' Pat Quillen made an important observation about computing the Mertens function.

Contents

mertens

The elements in the first column of the Redheffer matrix, A = redheffer(n), are all equal to one. That dense column does not make MATLAB happy about computing det(A) . However, the last column of A has only a few nonzero elements and so Pat suggested interchanging the first and last columns before computing the determinant. This makes a world of difference. (Thanks, Pat.)

typemertens
function M = mertens(n)    if n > 1        A = redheffer(n);        A(:,[1 n]) = A(:,[n 1]);        M = -round(det(A));    else        M = 1;    endend

The time required to compute det(A) varies with the sparsity of the last column, but it is only a little more than the time to compute redheffer(n) in the first place.

mertens2_time
\"\"

Mertens function

Pat's change makes it possible to take n up to a quarter of a million, and beyond. Here is a new plot of the Mertens function M(n) and the sqrt(n) bounds of the Mertens conjecture.

mertens_plot
\"\"

There are a quarter of a million points in the data for this plot. Fortunately, the .PNG file used for the blog only needs to sample the data.

Mertens computation

The job that I ran on my laptop to compute one-quarter of a million values of M(n) is still running. It currently is past 0.35 million and takes less than two seconds for each value. I may keep the job running over the weekend, just to see how far it gets.

The task is embarrassingly parallel. If I had a pool with a million processors, I could have each processor compute one value. I would then just have to collect the results, but that doesn't involve any arithmetic.

Mertens conjecture

You can see from the plot why late 19th- and early 20th-century mathematicians believed that the Mertens conjecture,

   |M(n)| < sqrt(n) for all n,

might be true. It is hard to imagine that the plot of M(n) ever escapes sqrt(n).

We now know that M(n) eventually does escape, but only barely and only briefly. We also know that all the computation we can do with determinants of Redheffer's matrix will never prove or disprove the conjecture or win that million-dollar prize.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/redheffer-and-mertens-continued/", + + + + + + "date_published": "2024-09-27T12:28:39-06:00", + "date_modified": "2024-09-27T12:28:39-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/redheffer-mertens-and-one-million-dollars/", + "title": "Redheffer, Mertens and One-Million Dollars", + "summary": null, + "content_text": "I didn't know anything about these topics until a couple of weeks ago. Now I can't stop thinking about them.Redheffer's matrix has been in the MATLAB Gallery for a long time, but I have ignored it .Redheffer's matrix can be used to compute Mertens function and investigate the Mertens conjecture.A proof of the Mertens conjecture would also provide a proof of the Riemann hypothesis.For nearly a century, all the available computational evidence indicated that the Mertens conjecture was likely to be true.The Riemann hypothesis is the most important unsolved problem in mathematics and wins a Clay prize worth one-million dollars.MATLAB's sparse matrix functions turn out to be useful in an investigation of Redheffer's matrix and the Mertens conjecture.However, it has been known since 1985 that the Mertens conjecture is false.ContentsRedheffer's MatrixMöbius FunctionMertens FunctionMertens ConjectureMertens Meets RedhefferRedheffer SparsityredhefferSparse LUmertensMertens Conjecture Is FalsePostscriptsReferencesRedheffer's MatrixRaymond Redheffer (1921-2005) was an American mathematician, a professor at UCLA for 55 years, the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.Redheffer's matrix is a matrix of zeros and ones. A(k,j) equals one if j is a divisor of k. In addition, the first column is all ones. function A = redheffer(n) k = 1:n; j = k'; A = (mod(k,j) == 0); A(:,1) = 1; endOr A = gallery('redheff',n)Here is the 10-by-10. A = redheffer(10); disp(full(A)) 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1And here is a spy plot of the 200-by-200. A = redheffer(200); spy(A) title('redheffer(200)') Möbius FunctionThe Möbius function was introduced in 1832 by German mathematician August Möbius and is ubiquitous in the study of prime numbers. For positive integers n, μ(n) is0 if n has a squared prime factor,+1 if n is square-free and has an even number of prime factors,-1 if n is square-free and has an odd number of prime factors.Mertens FunctionFranz Mertens (1840-1927) was a Polish mathematician who spent most of his career in Austria at the University of Vienna. Here is a link to a biography of Mertens at the University of St. Andrews MacTutor project.The Mertens function is sum of values of the Möbius function. For a positive integer n, the Mertens function is M(n) = sum(μ(1:n))So M(n) is the difference between the number of square-free integers with an even number of prime factors and those with an odd number.This graphic shows M(n) for n = 1:100000. mertens_plot_2 Mertens ConjectureThe Mertens function M(n) fluctuates wildly and grows slowly with increasing n. The graphic shows that M(n) is easily bounded by of sqrt(n) and -sqrt(n), at least for n less than 100k. The Mertens conjecture is that this continues for larger n. -sqrt(n) < M(n) < sqrt(n) for all nThe conjecture was included in a letter from Stieltjes to Hermite in 1895 and in a paper by Mertens in 1897. The result is important since a proof of the Mertens conjecture would imply the truth of the Riemann hypothesis.Mertens Meets RedhefferI became interested in all this when I learned that the determinant of the MATLAB Gallery matrix which I have ignored for years is related to the Riemann hypothesis and the million-dollar prize. M(n) = det(gallery('redheff',n))I know very little about the distribution of prime numbers and computing values of the Möbius function. On the other hand, I know a lot about numerical linear algebra and computing determinants.In general, I am dead set against computing determinants. They are often used to check for singularity or to somehow compute eigenvalues. But here the determinant is an integer counter of modest size.Redheffer SparsityComputing M(n) directly with det(redheffer(n)) requires O(n^2) space and O(n^3) time and is not practical for large n.However, A = redheffer(n) is modestly sparse. Here is the fraction of nonzeros. s = nnz(A)/n^2 disp(sparsity) n s _____ ________ 10000 0.001037 20000 0.000553 30000 0.000382 40000 0.000294 50000 0.000239 60000 0.000203 70000 0.000176 80000 0.000156 90000 0.000139 1e+05 0.000127Taking advantage of this sparsity and the MATLAB tools for sparse matrix computation provide linear space complexity and perhaps O(n^2) time complexity.redhefferHere is MATLAB code to generate a sparse redheffer(n) without creating any full intermediate matrices.type redheffer function A = redheffer(n) j(1:n) = (1:n)'; k(1:n) = 1; m = n; for i = 2:n t = [1 i:i:n]'; p = length(t); j(m+(1:p)) = t; k(m+(1:p)) = i; m = m+p; end A = sparse(k,j,1,n,n); endAs expected, we see that the execution time for redheffer(n) is a linear function of n. (The space required also grows linearly.) redheffer_time Sparse LUThe MATLAB Gaussian elimination function lu with one sparse input and four sparse outputs is designed for solving sparse linear systems. [L,U,P,Q] = lu(A)Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to find permutations P and Q so that L is lower triangular, U is upper triangular and P*A*Q = L*UConsequently, the determinant of A is the product of four easily computed determinants. det(A) = det(L)*det(U)*det(P)*det(Q)The pivoting strategy aims to reduce fill-in while maintaining numerical stability.For example, here are L and U for the Redheffer matrix in the spy plot near the top of this blog post. close A = redheffer(200); [L,U,P,Q] = lu(A); spy(L|U) title('L|U') And here are the four determinants. dets = [det(L),det(U),det(P),det(Q)]; disp(dets) 1 -8 -1 -1Finally, M(200) is M_200 = det(L)*det(U)*det(P)*det(Q) M_200 = -8mertensMertens function can be computed with four lines of code. type mertens function M = mertens(n) der = @(x) full(round(prod(diag(x)))); A = redheffer(n); [L,U,P,Q] = lu(A); M = der(L)*der(U)*det(P)*det(Q); endExecution time for mertens is dominated by the time in sparse lu. The time required to compute the four determinants is an order of magnitude smaller than the other two.Experimentally, we see that the time complexity of sparse lu is O(n^2), but we have no proof. mertens_time Mertens Conjecture Is FalseThe Mertens conjecture stood for nearly 100 years before it was proved false in 1985 by Andrew Odlyzko and Herman te Riele. The authors present indirect proofs that lim sup (n -> inf) M(n)/sqrt(n) > 1.06 lim inf (n -> inf) M(n)/sqrt(n) < -1.009Odlyzko and te Riele do not actually produce any value of n for which M(n) > sqrt(x). They suspect that any Mertens conjecture counterexample requires n > $10^{30}$, which is far beyond any computation possible today.Odlyzko and te Riele also describe several complete tabulations of M(n) for n as large as $7.8 \\cdot 10^{9}$ . These computations do not use Redheffer determinants.PostscriptsTo tell the truth, I did not really expect to find any Mertens or Riemann counterexamples. I did, however, enjoy computing determinants for the first time and discovering an unexpected use for sparse LU.Thanks a lot to Tim Davis for his help with this post.ReferencesA. M. Odlyzko and H. J. J. te Riele, \"Disproof of the Mertens conjecture\", Journal für die reine und angewandte Mathematik, Vol. 357 (1985), Pages138-160. https://eudml.org/doc/152712.Timothy A. Davis, \"A Column Pre-Ordering Strategy for the Unsymmetric-Pattern Multifrontal Method\", ACM Transactions on Mathematical Software, Vol. 30, No. 2, June 2004, Pages 165–195. https://dl.acm.org/doi/abs/10.1145/992200.992205.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

I didn't know anything about these topics until a couple of weeks ago. Now I can't stop thinking about them.

  • Redheffer's matrix has been in the MATLAB Gallery for a long time, but I have ignored it .
  • Redheffer's matrix can be used to compute Mertens function and investigate the Mertens conjecture.
  • A proof of the Mertens conjecture would also provide a proof of the Riemann hypothesis.
  • For nearly a century, all the available computational evidence indicated that the Mertens conjecture was likely to be true.
  • The Riemann hypothesis is the most important unsolved problem in mathematics and wins a Clay prize worth one-million dollars.
  • MATLAB's sparse matrix functions turn out to be useful in an investigation of Redheffer's matrix and the Mertens conjecture.
  • However, it has been known since 1985 that the Mertens conjecture is false.

Contents

Redheffer's Matrix

Raymond Redheffer (1921-2005) was an American mathematician, a professor at UCLA for 55 years, the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.

Redheffer's matrix is a matrix of zeros and ones. A(k,j) equals one if j is a divisor of k. In addition, the first column is all ones.

  function A = redheffer(n)      k = 1:n;      j = k';      A = (mod(k,j) == 0);      A(:,1) = 1;  end

Or

  A = gallery('redheff',n)

Here is the 10-by-10.

    A = redheffer(10);    disp(full(A))
     1     1     1     1     1     1     1     1     1     1     1     1     0     1     0     1     0     1     0     1     1     0     1     0     0     1     0     0     1     0     1     0     0     1     0     0     0     1     0     0     1     0     0     0     1     0     0     0     0     1     1     0     0     0     0     1     0     0     0     0     1     0     0     0     0     0     1     0     0     0     1     0     0     0     0     0     0     1     0     0     1     0     0     0     0     0     0     0     1     0     1     0     0     0     0     0     0     0     0     1

And here is a spy plot of the 200-by-200.

    A = redheffer(200);    spy(A)    title('redheffer(200)')
\"\"

Möbius Function

The Möbius function was introduced in 1832 by German mathematician August Möbius and is ubiquitous in the study of prime numbers. For positive integers n, μ(n) is

  • 0 if n has a squared prime factor,
  • +1 if n is square-free and has an even number of prime factors,
  • -1 if n is square-free and has an odd number of prime factors.

Mertens Function

Franz Mertens (1840-1927) was a Polish mathematician who spent most of his career in Austria at the University of Vienna. Here is a link to a biography of Mertens at the University of St. Andrews MacTutor project.

The Mertens function is sum of values of the Möbius function. For a positive integer n, the Mertens function is

   M(n) = sum(μ(1:n))

So M(n) is the difference between the number of square-free integers with an even number of prime factors and those with an odd number.

This graphic shows M(n) for n = 1:100000.

    mertens_plot_2
\"\"

Mertens Conjecture

The Mertens function M(n) fluctuates wildly and grows slowly with increasing n. The graphic shows that M(n) is easily bounded by of sqrt(n) and -sqrt(n), at least for n less than 100k. The Mertens conjecture is that this continues for larger n.

  -sqrt(n) < M(n) < sqrt(n) for all n

The conjecture was included in a letter from Stieltjes to Hermite in 1895 and in a paper by Mertens in 1897. The result is important since a proof of the Mertens conjecture would imply the truth of the Riemann hypothesis.

Mertens Meets Redheffer

I became interested in all this when I learned that the determinant of the MATLAB Gallery matrix which I have ignored for years is related to the Riemann hypothesis and the million-dollar prize.

  M(n) = det(gallery('redheff',n))

I know very little about the distribution of prime numbers and computing values of the Möbius function. On the other hand, I know a lot about numerical linear algebra and computing determinants.

In general, I am dead set against computing determinants. They are often used to check for singularity or to somehow compute eigenvalues. But here the determinant is an integer counter of modest size.

Redheffer Sparsity

Computing M(n) directly with det(redheffer(n)) requires O(n^2) space and O(n^3) time and is not practical for large n.

However, A = redheffer(n) is modestly sparse. Here is the fraction of nonzeros.

  s = nnz(A)/n^2
    disp(sparsity)
       n         s        _____    ________    10000    0.001037    20000    0.000553    30000    0.000382    40000    0.000294    50000    0.000239    60000    0.000203    70000    0.000176    80000    0.000156    90000    0.000139    1e+05    0.000127

Taking advantage of this sparsity and the MATLAB tools for sparse matrix computation provide linear space complexity and perhaps O(n^2) time complexity.

redheffer

Here is MATLAB code to generate a sparse redheffer(n) without creating any full intermediate matrices.

type    redheffer
    function A = redheffer(n)        j(1:n) = (1:n)';        k(1:n) = 1;        m = n;        for i = 2:n            t = [1 i:i:n]';            p = length(t);            j(m+(1:p)) = t;            k(m+(1:p)) = i;            m = m+p;        end        A = sparse(k,j,1,n,n);    end

As expected, we see that the execution time for redheffer(n) is a linear function of n. (The space required also grows linearly.)

    redheffer_time
\"\"

Sparse LU

The MATLAB Gaussian elimination function lu with one sparse input and four sparse outputs is designed for solving sparse linear systems.

  [L,U,P,Q] = lu(A)

Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to find permutations P and Q so that L is lower triangular, U is upper triangular and

  P*A*Q = L*U

Consequently, the determinant of A is the product of four easily computed determinants.

  det(A) = det(L)*det(U)*det(P)*det(Q)

The pivoting strategy aims to reduce fill-in while maintaining numerical stability.

For example, here are L and U for the Redheffer matrix in the spy plot near the top of this blog post.

    close    A = redheffer(200);    [L,U,P,Q] = lu(A);    spy(L|U)    title('L|U')
\"\"

And here are the four determinants.

    dets = [det(L),det(U),det(P),det(Q)];    disp(dets)
    1    -8    -1    -1

Finally, M(200) is

    M_200 = det(L)*det(U)*det(P)*det(Q)
    M_200 =        -8

mertens

Mertens function can be computed with four lines of code.

    type    mertens
    function M = mertens(n)        der = @(x) full(round(prod(diag(x))));        A = redheffer(n);        [L,U,P,Q] = lu(A);        M = der(L)*der(U)*det(P)*det(Q);    end

Execution time for mertens is dominated by the time in sparse lu. The time required to compute the four determinants is an order of magnitude smaller than the other two.

Experimentally, we see that the time complexity of sparse lu is O(n^2), but we have no proof.

    mertens_time
\"\"

Mertens Conjecture Is False

The Mertens conjecture stood for nearly 100 years before it was proved false in 1985 by Andrew Odlyzko and Herman te Riele. The authors present indirect proofs that

  lim sup (n -> inf) M(n)/sqrt(n) > 1.06
  lim inf (n -> inf) M(n)/sqrt(n) < -1.009

Odlyzko and te Riele do not actually produce any value of n for which M(n) > sqrt(x). They suspect that any Mertens conjecture counterexample requires n > $10^{30}$, which is far beyond any computation possible today.

Odlyzko and te Riele also describe several complete tabulations of M(n) for n as large as $7.8 \\cdot 10^{9}$ . These computations do not use Redheffer determinants.

Postscripts

To tell the truth, I did not really expect to find any Mertens or Riemann counterexamples. I did, however, enjoy computing determinants for the first time and discovering an unexpected use for sparse LU.

Thanks a lot to Tim Davis for his help with this post.

References

A. M. Odlyzko and H. J. J. te Riele, \"Disproof of the Mertens conjecture\", Journal für die reine und angewandte Mathematik, Vol. 357 (1985), Pages138-160. https://eudml.org/doc/152712.

Timothy A. Davis, \"A Column Pre-Ordering Strategy for the Unsymmetric-Pattern Multifrontal Method\", ACM Transactions on Mathematical Software, Vol. 30, No. 2, June 2004, Pages 165–195. https://dl.acm.org/doi/abs/10.1145/992200.992205.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/redheffer-mertens-and-one-million-dollars/", + + + + + + "date_published": "2024-09-23T17:12:35-06:00", + "date_modified": "2024-09-23T17:12:35-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/na-digest-and-na-net/", + "title": "NA_Digest and NA_Net", + "summary": null, + "content_text": "The NA-Digest is an electronic newsletter for the numerical analysis and scientific software community. The NA-Digest is one of world's first examples of social networking. The Digest is one of the forces that makes our community a living, viable community.The Digest is part of NA-Net, which also includes Netlib, a collection of mathematical software, papers, and databases.For its first forty years, the NA-Digest has had only four editors. Now, we are adding two more. As we do that, I would like to take a personal look back at the history of the NA-Digest.ContentsGene and MarkJack and EricTammy and DannyDavid and AlexArchiveMembersImportant PostingsThanksReferencesGene and MarkLike many other developments in the numerical analysis world, the Digest began with Gene Golub. In the early 1980's, Golub was chair of Stanford's Computer Science Department. Email was a new thing and Gene maintained a list of email addresses for his many friends around the world. Email addresses came in many different formats; today's system of domain names was not yet in wide spread use.In 1984, Mark Kent, one of Gene's grad students, with help from Ray Tuminaro, Mark Crispin and Dan Kolkowitz, wrote software that used Gene's list in an email forwarding service. Mail sent tona.name@su-scorewould be forwarded to the person with that last name. And email sent tona@su-scorewould be forwarded to everyone on the list.Gene and Mark Kent began to gather contributions together and send the collection out periodically. By February 1987, this had evolved into a moderated weekly newsletter. Gene dubbed these email services the NA-Net.Nick Trefethen has this memory. Early in the days of email, domain names were all over the place. I think there was a period when Gene was using xxx.na for the names of numerical analysts. Then somebody decided addresses should end with the country, giving us .uk and .fr and .ch and all that. For a period, we found that a lot of our numerical analysis emails were being directed to Namibia!In 1987, Gene asked me to moderate NA-Digest temporarily while he went on a sabbatical. That temporary position ultimately lasted 18 years, until 2005.Jack and EricJack Dongarra began his career at Argonne National Laboratory. Jack's colleague, Eric Grosse, began his career at Bell Labs. In 1984, Jack and Eric created Netlib, a software repository and distribution service, and merged it with NA-Net. In 1989, Jack and the NA-Net system moved from Argonne to Oak Ridge National Lab and the University of Tennessee.Keith Moore, at the University of Tennessee, rewrote the NA-Net software and maintained the servers for many years.Gerald Ragghianti, the Technical Services Leader at Tennessee's Innovative Computer Lab, currently maintains the NA-Net software and servers.Tammy and DannyIn 2005, I asked Tammy Kolda, who was then at Sandia Labs in Livermore, to be the NA-Digest editor. Tammy's Wikipedia page reveals that her given name is \"Tamara\", but everybody calls her \"Tammy\". She left Sandia is 2021 and now has her own consulting company, MathSci.ai.In 2010, Tammy recommended that Danny Dunlavy, from Sandia Labs in Albuquerque, take over as editor. He has been the editor for 14 years. Danny's day job at Sandia's Center for Computing Research involves a wide range of fields including computer architecture, cognitive modeling and discrete mathematics. David and Alex Starting next week, NA-Digest and NA-Net will move lock, stock, and barrel to Cornell University. The new editors are David Bindell and Alex Townsend. Cornell's IT organization will be taking over the logistics.David, Alex and Anil Damle are also the hosts for Householder XXII, June 8-13, 2025.ArchiveEvery issue of NA-Digest since February 1987 is available at https://www.netlib.org/na-digest-html.MembersWhen I succeeded Gene as editor in 1987, there were about 800 names on the NA-Net mailing list. Today, in 2024, there are a little over 10,000. Discontinuities in the size of the list result when unused and illegitimate names are removed. Important PostingsI have made three personally important announcements in the Digest over the years.October 29, 1989In 1989 I was working at Ardent Computer, a startup in Silicon Valley. I announced in NA-Digest that MathWorks was looking for a numerical analyst. (Note the MathWorks telephone number near the end of this announcement.) From: Cleve Moler <na.moler@na-net.stanford.edu> Date: Sun Oct 29 10:39:38 PST 1989 Subject: Positions at The MathWorks The MathWorks is the company which develops and markets MATLAB. The company currently employs about 30 people and expects to add three or four more soon. The company headquarters is in East Natick, Massachusetts, which is about a half hour drive west of Boston. The background and interests expected for the various positions available range from numerical linear algebra and matrix computation to systems programming and graphics. Educational level and experience expected range from inexperienced beginner willing to learn to seasoned Ph.D. with a personal library of M-files. For more information, send email to na.moler@na-net.stanford.edu or phone me at 408-732-0400. Or, contact the MathWorks' president, John Little, with email to jnl@mathworks.com, phone 508-653-1415, or write to: The MathWorks 21 Eliot Street South Natick, MA 01760November 26, 1989Shortly after that announcement, Ardent imploded and I said that I was taking the job myself. From: Cleve Moler <moler@mathworks.com> Date: Sun Nov 26 09:16:32 PST 1989 Subject: Change of Address for Moler A couple of weeks ago, I made an announcement here that The MathWorks, the MATLAB company, was looking to fill several positions, including one for a numerical analyst. Now, I've decided to take that slot myself. I'm one of the founders of MathWorks, and have always been a consultant to the company, but now I'll be a full time employee. For a while at least, I'll be working out of my home in California, even though MathWorks headquarters is in Massachusetts. (There are already a couple of other MathWorks developers in the Bay Area.) . . . My electronic address is \"moler@mathworks.com\". If your mailer can't find the route via uunet to mathworks.com, you can still use \"na.moler@na-net.stanford.edu\".November 16, 2007In November 2007 I was attending the Super Computing conference in Reno. I had rented a car and intended to drive to the Bay Area after the conference. But my wife called me and said, \"Hey Cleve, have you heard that Gene is in the hospital?\" I left SC immediately and drove to Palo Alto. Two days later we sent out a special issue of the Digest: From: Cleve Moler <Cleve.Moler@mathworks.com> Date: Fri, 16 Nov 2007 17:55:42 -0500 Subject: Gene Golub, 1932 - 2007 Gene Golub, founder of the NA Digest, passed away today, Friday, November 16, at the Stanford University Hospital. He was 75 years old. Gene returned home to Stanford recently from a trip to Hong Kong. He was planning to leave again Tuesday on another trip, this one to Zurich where the ETH was to honor him with a special degree. Instead, Sunday night he went to the emergency room because he was \"feeling lousy\". On Tuesday, he was found to have AML, acute myelogenous leukemia, a form of cancer that affects the white blood cells. This is a potentially curable disease and he was expecting to begin chemotherapy today. But serious complications developed suddenly over night. I was able to see Gene for an hour last night and he was in reasonably good spirits. Mike Saunders was trying to get Gene's laptop to use dial-up over the hospital's phone system because Gene said he was a couple of days behind on his email. I was planning to get a wireless card for his machine today. None of us had any idea how suddenly the situation would worsen. The Stanford ICME students have created a memorial blog at http://genehgolub.blogspot.com . Our community has lost its foremost member. He was a valued colleague and friend. Goodbye, Gene. -- Cleve MolerThanksGene Golub and Mark Kent for creating NA-Digest and NA-Net.Tammy Kolda and Danny Dunlavy for editing the Digest for two decades.Jack Dongarra, Eric Grosse, Keith Moore and Geri Ragghianti for creating Netlib and for hosting the system for four decades.David Bindel and Alex Townsend for joining this team.ReferencesJack Dongarra, Gene Golub, Eric Grosse, Cleve Moler and Keith Moore. \"Netlib and NA-Net: Building a Scientific Computing Community\", IEEE Annals of the History of Computing, (Volume: 30, Issue: 2, April-June 2008). A PDF is available here.Mark Kent, The Numerical Analysis Net (NA-NET), Technical Report 85, ETH Zurich, Institut fuer Informatik, 1988.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

The NA-Digest is an electronic newsletter for the numerical analysis and scientific software community. The NA-Digest is one of world's first examples of social networking. The Digest is one of the forces that makes our community a living, viable community.

The Digest is part of NA-Net, which also includes Netlib, a collection of mathematical software, papers, and databases.

For its first forty years, the NA-Digest has had only four editors. Now, we are adding two more. As we do that, I would like to take a personal look back at the history of the NA-Digest.

Contents

Gene and Mark

Like many other developments in the numerical analysis world, the Digest began with Gene Golub. In the early 1980's, Golub was chair of Stanford's Computer Science Department. Email was a new thing and Gene maintained a list of email addresses for his many friends around the world. Email addresses came in many different formats; today's system of domain names was not yet in wide spread use.

In 1984, Mark Kent, one of Gene's grad students, with help from Ray Tuminaro, Mark Crispin and Dan Kolkowitz, wrote software that used Gene's list in an email forwarding service. Mail sent to

na.name@su-score

would be forwarded to the person with that last name. And email sent to

na@su-score

would be forwarded to everyone on the list.

Gene and Mark Kent began to gather contributions together and send the collection out periodically. By February 1987, this had evolved into a moderated weekly newsletter. Gene dubbed these email services the NA-Net.

Nick Trefethen has this memory.

  Early in the days of email, domain names were all over the place.  I think there was a period when Gene was using xxx.na for the  names of numerical analysts.  Then somebody decided addresses should  end with the country, giving us .uk and .fr and .ch and all  that.  For a period, we found that a lot of our numerical  analysis emails were being directed to Namibia!

In 1987, Gene asked me to moderate NA-Digest temporarily while he went on a sabbatical. That temporary position ultimately lasted 18 years, until 2005.

Jack and Eric

Jack Dongarra began his career at Argonne National Laboratory. Jack's colleague, Eric Grosse, began his career at Bell Labs. In 1984, Jack and Eric created Netlib, a software repository and distribution service, and merged it with NA-Net. In 1989, Jack and the NA-Net system moved from Argonne to Oak Ridge National Lab and the University of Tennessee.

Keith Moore, at the University of Tennessee, rewrote the NA-Net software and maintained the servers for many years.

Gerald Ragghianti, the Technical Services Leader at Tennessee's Innovative Computer Lab, currently maintains the NA-Net software and servers.

Tammy and Danny

In 2005, I asked Tammy Kolda, who was then at Sandia Labs in Livermore, to be the NA-Digest editor. Tammy's Wikipedia page reveals that her given name is \"Tamara\", but everybody calls her \"Tammy\". She left Sandia is 2021 and now has her own consulting company, MathSci.ai.

In 2010, Tammy recommended that Danny Dunlavy, from Sandia Labs in Albuquerque, take over as editor. He has been the editor for 14 years. Danny's day job at Sandia's Center for Computing Research involves a wide range of fields including computer architecture, cognitive modeling and discrete mathematics.

\"\"

David and Alex

\"\"

Starting next week, NA-Digest and NA-Net will move lock, stock, and barrel to Cornell University. The new editors are David Bindell and Alex Townsend. Cornell's IT organization will be taking over the logistics.

David, Alex and Anil Damle are also the hosts for Householder XXII, June 8-13, 2025.

Archive

Every issue of NA-Digest since February 1987 is available at https://www.netlib.org/na-digest-html.

Members

When I succeeded Gene as editor in 1987, there were about 800 names on the NA-Net mailing list. Today, in 2024, there are a little over 10,000. Discontinuities in the size of the list result when unused and illegitimate names are removed.

\"\"

Important Postings

I have made three personally important announcements in the Digest over the years.

October 29, 1989

In 1989 I was working at Ardent Computer, a startup in Silicon Valley. I announced in NA-Digest that MathWorks was looking for a numerical analyst. (Note the MathWorks telephone number near the end of this announcement.)

  From: Cleve Moler <na.moler@na-net.stanford.edu>  Date: Sun Oct 29 10:39:38 PST 1989  Subject: Positions at The MathWorks
  The MathWorks is the company which develops and markets MATLAB.  The company currently employs about 30 people and expects to  add three or four more soon. The company headquarters is in  East Natick, Massachusetts, which is about a half hour drive  west of Boston.
  The background and interests expected for the various positions  available range from numerical linear algebra and matrix computation  to systems programming and graphics. Educational level and  experience expected range from inexperienced beginner willing  to learn to seasoned Ph.D. with a personal library of M-files.
  For more information, send email to na.moler@na-net.stanford.edu  or phone me at 408-732-0400. Or, contact the MathWorks' president,  John Little, with email to jnl@mathworks.com, phone 508-653-1415,  or write to:
  The MathWorks  21 Eliot Street  South Natick, MA 01760

November 26, 1989

Shortly after that announcement, Ardent imploded and I said that I was taking the job myself.

  From: Cleve Moler <moler@mathworks.com>  Date: Sun Nov 26 09:16:32 PST 1989  Subject: Change of Address for Moler
  A couple of weeks ago, I made an announcement here that  The MathWorks, the MATLAB company, was looking to fill several  positions, including one for a numerical analyst. Now, I've  decided to take that slot myself. I'm one of the founders of  MathWorks, and have always been a consultant to the company, but  now I'll be a full time employee. For a while at least, I'll  be working out of my home in California, even though MathWorks  headquarters is in Massachusetts. (There are already a couple  of other MathWorks developers in the Bay Area.)  . . .  My electronic address is \"moler@mathworks.com\". If your mailer  can't find the route via uunet to mathworks.com, you can still  use \"na.moler@na-net.stanford.edu\".

November 16, 2007

In November 2007 I was attending the Super Computing conference in Reno. I had rented a car and intended to drive to the Bay Area after the conference. But my wife called me and said, \"Hey Cleve, have you heard that Gene is in the hospital?\" I left SC immediately and drove to Palo Alto. Two days later we sent out a special issue of the Digest:

  From: Cleve Moler <Cleve.Moler@mathworks.com>  Date: Fri, 16 Nov 2007 17:55:42 -0500  Subject: Gene Golub, 1932 - 2007
  Gene Golub, founder of the NA Digest, passed away today, Friday, November 16,  at the Stanford University Hospital. He was 75 years old.
  Gene returned home to Stanford recently from a trip to Hong Kong. He was  planning to leave again Tuesday on another trip, this one to Zurich where the  ETH was to honor him with a special degree. Instead, Sunday night he went to  the emergency room because he was \"feeling lousy\". On Tuesday, he was found  to have AML, acute myelogenous leukemia, a form of cancer that affects the  white blood cells. This is a potentially curable disease and he was expecting  to begin chemotherapy today. But serious complications developed suddenly  over night.
  I was able to see Gene for an hour last night and he was in reasonably good  spirits. Mike Saunders was trying to get Gene's laptop to use dial-up over  the hospital's phone system because Gene said he was a couple of days behind  on his email. I was planning to get a wireless card for his machine today.  None of us had any idea how suddenly the situation would worsen.
  The Stanford ICME students have created a memorial blog at  http://genehgolub.blogspot.com .
  Our community has lost its foremost member. He was a valued colleague and  friend. Goodbye, Gene.
  -- Cleve Moler

Thanks

  • Gene Golub and Mark Kent for creating NA-Digest and NA-Net.
  • Tammy Kolda and Danny Dunlavy for editing the Digest for two decades.
  • Jack Dongarra, Eric Grosse, Keith Moore and Geri Ragghianti for creating Netlib and for hosting the system for four decades.
  • David Bindel and Alex Townsend for joining this team.

References

Jack Dongarra, Gene Golub, Eric Grosse, Cleve Moler and Keith Moore. \"Netlib and NA-Net: Building a Scientific Computing Community\", IEEE Annals of the History of Computing, (Volume: 30, Issue: 2, April-June 2008). A PDF is available here.

Mark Kent, The Numerical Analysis Net (NA-NET), Technical Report 85, ETH Zurich, Institut fuer Informatik, 1988.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/na-digest-and-na-net/", + + + + + + "date_published": "2024-08-31T21:44:36-06:00", + "date_modified": "2024-08-31T21:44:36-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/a-treacherous-svd/", + "title": "A Treacherous SVD", + "summary": null, + "content_text": "A few days ago, a bug report from our office in Cambridge caught my attention. Computing the singular values and singular vectors of a particular matrix would sometimes cause MATLAB to crash.ContentsTwo ComputersMath LibrariesG3366394RankZero rowsFuzzFlipNow what?Two ComputersI use two different two computers regularly. The machine in my home office is a Lenovo ThinkPad® model T14, loaded with two external monitors, several external disc drives, a sound bar and a dedicated internet connection. My traveling machine is a Lenovo ThinkPad X1 Nano with no external hardware.The report of a crash in the SVD became even more interesting when I found that it happens on my office computer, but not on the portable. A quick check revealed that the CPUs on the two machines come from different manufacturers. The office computer uses an AMD® Ryzen Pro 5 while the traveling machine uses an Intel® Core i7.Math LibrariesThe crash occurs several software layers deep in CGESVD, the LAPACK driver for single precision complex SVD. Various chip manufacturers provide math libraries that have been optimized for their CPUs. However, by default, MATLAB uses the reportedly faster Intel Math Kernel Library, MKL. It is possible to switch to other math libraries.We have experts at MathWorks who know far more about the details of these libraries than I do. They will soon sort this all out. In the meantime, here is what I have learned about the offending matrix.G3366394We refer to the matrix in the crash report by its case number in our bug tracking system. The matrix is of modest size but is otherwise unusual for several reasons. It is rectangular with fewer rows than columns, it is in single precision, and it is complex. clear load g3366394 X whos Name Size Bytes Class Attributes X 219x384 672768 single complexThe following code calling SVD with three outputs will crash MATLAB on my T14, but not on my X1. trysvd = false if trysvd [U,S,V] = svd(X); R = U*S*V' - X; relres = norm(R)/norm(X) end trysvd = logical 0RankComputing the singular values without the vectors can be done on either machine. The following code uses double precision and then plots the singular values on a logarithmic scale with a line at single precision roundoff level. S = svd(X); semilogy(S,'.-') ep = eps('single'); line([0 230],[ep ep]) axis([0 230 1e-15 10]) legend({'singular values','eps(''single'')'}) We see that the matrix is far from full rank. About half of its singular values are negligible. This is confirmed by xrank = rank(X) xrank = 110Zero rowsThe cause of the low rank is easy to find. This surf plot reveals that almost half of the rows are flat zero. Let's remove the zero rows. c = sum(abs(X),2)==0; nnzc = nnz(c) X(c>0,:) = []; nnzc = 109 The remaining matrix is full rank and it is safe to compute its singular vectors. [U,S,V] = svd(X); R = U*S*V' - X; resnorm = norm(R) resnorm = 2.8191e-06FuzzRemoving the zero rows was the first work-around that I tried. There are many others. You can replace the zeros with any nonzero \"fuzz\". fuzz = 1.e-20; [U,S,V] = svd(X + fuzz*randn(size(X))); resnorm = norm(U*S*V'-X) resnorm = 2.8222e-06FlipYou can reorder the matrix so that the zero rows are not at the beginning. [U,S,V] = svd(flipud(X)); U = flipud(U); resnorm = norm(U*S*V'-X) resnorm = 2.3809e-06Now what?How to avoid the crash is not the most important question. What causes the crash with the original matrix? We will find out and get it fixed.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

A few days ago, a bug report from our office in Cambridge caught my attention. Computing the singular values and singular vectors of a particular matrix would sometimes cause MATLAB to crash.

Contents

Two Computers

I use two different two computers regularly. The machine in my home office is a Lenovo ThinkPad® model T14, loaded with two external monitors, several external disc drives, a sound bar and a dedicated internet connection. My traveling machine is a Lenovo ThinkPad X1 Nano with no external hardware.

The report of a crash in the SVD became even more interesting when I found that it happens on my office computer, but not on the portable. A quick check revealed that the CPUs on the two machines come from different manufacturers. The office computer uses an AMD® Ryzen Pro 5 while the traveling machine uses an Intel® Core i7.

Math Libraries

The crash occurs several software layers deep in CGESVD, the LAPACK driver for single precision complex SVD. Various chip manufacturers provide math libraries that have been optimized for their CPUs. However, by default, MATLAB uses the reportedly faster Intel Math Kernel Library, MKL. It is possible to switch to other math libraries.

We have experts at MathWorks who know far more about the details of these libraries than I do. They will soon sort this all out. In the meantime, here is what I have learned about the offending matrix.

G3366394

We refer to the matrix in the crash report by its case number in our bug tracking system. The matrix is of modest size but is otherwise unusual for several reasons. It is rectangular with fewer rows than columns, it is in single precision, and it is complex.

  clear  load g3366394 X  whos
  Name        Size              Bytes  Class     Attributes  X         219x384            672768  single    complex

The following code calling SVD with three outputs will crash MATLAB on my T14, but not on my X1.

  trysvd = false  if trysvd      [U,S,V] = svd(X);      R = U*S*V' - X;      relres = norm(R)/norm(X)  end
  trysvd =    logical      0

Rank

Computing the singular values without the vectors can be done on either machine. The following code uses double precision and then plots the singular values on a logarithmic scale with a line at single precision roundoff level.

  S = svd(X);  semilogy(S,'.-')  ep = eps('single');  line([0 230],[ep ep])  axis([0 230 1e-15 10])  legend({'singular values','eps(''single'')'})

\"\"

We see that the matrix is far from full rank. About half of its singular values are negligible. This is confirmed by

   xrank = rank(X)
   xrank =      110

Zero rows

The cause of the low rank is easy to find. This surf plot reveals that almost half of the rows are flat zero.

\"\"

Let's remove the zero rows.

  c = sum(abs(X),2)==0;  nnzc = nnz(c)  X(c>0,:) = [];
  nnzc =     109

\"\"

The remaining matrix is full rank and it is safe to compute its singular vectors.

  [U,S,V] = svd(X);  R = U*S*V' - X;  resnorm = norm(R)
  resnorm =     2.8191e-06

Fuzz

Removing the zero rows was the first work-around that I tried. There are many others. You can replace the zeros with any nonzero \"fuzz\".

  fuzz = 1.e-20;  [U,S,V] = svd(X + fuzz*randn(size(X)));
  resnorm = norm(U*S*V'-X)
  resnorm =     2.8222e-06

Flip

You can reorder the matrix so that the zero rows are not at the beginning.

  [U,S,V] = svd(flipud(X));  U = flipud(U);
  resnorm = norm(U*S*V'-X)
  resnorm =     2.3809e-06

Now what?

How to avoid the crash is not the most important question. What causes the crash with the original matrix? We will find out and get it fixed.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/a-treacherous-svd/", + + + + + + "date_published": "2024-07-15T15:39:04-06:00", + "date_modified": "2024-07-15T15:39:04-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/supersum-in-defense-of-floating-point-arithmetic/", + "title": "SuperSum, In Defense of Floating Point Arithmetic", + "summary": null, + "content_text": "Floating point arithmetic doesn't get the respect it deserves. Many people consider it mysterious, fuzzy, unpredictable. These misgivings often occur in discussion of vector sums. Our provocatively named SuperSum is intended to calm these fears.ContentsLedgersChecksumsOrderSpeedThree SumsToy ExampleSecond TestConclusionLedgersA ledger is a list of transactions in an account. Auditing the ledger involves comparing the total of the items with the change in the account balance.If v is a vector of transaction amounts, then we need to computesum(v)If this sum is equal to the change in the balance, then it is reasonable to assume that the ledger is correct. If not, the ledger must be examined line-by-line.ChecksumsHave you ever used a checksum for a file transfer? One checksum is computed before the file is sent. After the file has been sent over a questionable channel, a second checksum is computed on the receiving end. If the two checksums agree, the transmission was probably okay. If not, the file must be sent again.OrderFloating point addition is not associative. This means(a + b) + cis not necessarily the same asa+(b+c).So the order of doing a computation is important.Computers are deterministic devices. If the same computation is done in the same order more than once, the results must be the same. If you get different sums from different runs on a fixed computer, then it must be because the order has been changed.SpeedIn recent years, we have made the built-in function sum(x) faster by parallelizing it. The input vector is broken into several pieces, the sum of each piece is computed separately and simultaneously, then the partial sums are combined to give the final result. If the number and size of the pieces varies from run to run, the order varies and consequently the computed sums may vary.Three SumsHere are three replacements for nansum(x), the version of sum(x) that skips over NaNs and infs.simplesumAvoid the effect of blocking in the built-in sum(x).function s = simplesum(x) % simplesum. s = simplesum(x), for vector(x). % Force sequential order for sum(x). % Skips NaNs and infs. s = 0; for k = 1:length(x) if isfinite(x(k)) s = s + x(k); end endendKahanSumThis is the Kahan summation algorithm. The sum is accumulated in two words, the more significant s and the correction c. If you were able to form s + c exactly, it would be more accurate than s alone.function s = KahanSum(x) % KahanSum. s = KahanSum(x), for vector(x). % More accurate, but slower, than sum(x). % Skips NaNs and infs. % https://en.wikipedia.org/wiki/Kahan_summation_algorithm. s = 0; % sum c = 0; % correction for k = 1:length(x) if isfinite(x(k)) y = x(k) - c; t = s + y; c = (t - s) - y; s = t; end endendSuperSumI gave it a pretentious name to grab attention. Use extended precision, with enough digits to hold any MATLAB double.function s = SuperSum(x) % SuperSum. s = SuperSum(x), for vector(x). % Symbolic Math Toolbox extended precision. % Skips NaNs and infs. % % 632 decimal digits holds every IEEE-754 double. % 632 = ceil(log10(realmax) - log10(eps*realmin)); % din = digits(632); % Remember current setting s = double(sum(sym(x(isfinite(x)),'D'))); digits(din) % RestoreendToy ExampleA test case here at MathWorks, known by a French-Canadian name that translates to \"toy example\", has a vector e2 of length 4243 and values that range from -3.3e7 to 6.8e9.When running tests involving floating point numbers it is a good idea to set the output format to hex so we can see every last bit.format hexload jeuTest e2x = e2;[nansum(x) simplesum(x) KahanSum(x) SuperSum(x)]ans = 423785e8206150e2 423785e8206150e0 423785e8206150e1 423785e8206150e1For jeuTest, Kahan summation gets the same result as SuperSum, while nansum and simplesum differ in the last bit or two.Second TestThe vector length is only three, but the third term completely cancels the first, and the second term rises from obscurity. In this situation, KahanSum is no more accurate than sum.format hexx = [1 1e-14 -1]'[nansum(x) simplesum(x) KahanSum(x) SuperSum(x)]x = 3ff0000000000000 3d06849b86a12b9b bff0000000000000ans = 3d06800000000000 3d06800000000000 3d06800000000000 3d06849b86a12b9bConclusionI will leave careful timing for another day. Let's just say that in situations like jeuTest, KahanSum is probably all you need. It is usually more accurate than sum, and not much slower.However, for complete reliability, use SuperSum. There is no substitute for the right answer.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

Floating point arithmetic doesn't get the respect it deserves. Many people consider it mysterious, fuzzy, unpredictable. These misgivings often occur in discussion of vector sums. Our provocatively named SuperSum is intended to calm these fears.

Contents

Ledgers

A ledger is a list of transactions in an account. Auditing the ledger involves comparing the total of the items with the change in the account balance.

If v is a vector of transaction amounts, then we need to compute

sum(v)

If this sum is equal to the change in the balance, then it is reasonable to assume that the ledger is correct. If not, the ledger must be examined line-by-line.

Checksums

Have you ever used a checksum for a file transfer? One checksum is computed before the file is sent. After the file has been sent over a questionable channel, a second checksum is computed on the receiving end. If the two checksums agree, the transmission was probably okay. If not, the file must be sent again.

Order

Floating point addition is not associative. This means

(a + b) + c

is not necessarily the same as

a+(b+c).

So the order of doing a computation is important.

Computers are deterministic devices. If the same computation is done in the same order more than once, the results must be the same. If you get different sums from different runs on a fixed computer, then it must be because the order has been changed.

Speed

In recent years, we have made the built-in function sum(x) faster by parallelizing it. The input vector is broken into several pieces, the sum of each piece is computed separately and simultaneously, then the partial sums are combined to give the final result. If the number and size of the pieces varies from run to run, the order varies and consequently the computed sums may vary.

Three Sums

Here are three replacements for nansum(x), the version of sum(x) that skips over NaNs and infs.

simplesum

Avoid the effect of blocking in the built-in sum(x).

function s = simplesum(x)     % simplesum.  s = simplesum(x), for vector(x).     % Force sequential order for sum(x).     % Skips NaNs and infs.
     s = 0;     for k = 1:length(x)         if isfinite(x(k))             s = s + x(k);         end     endend

KahanSum

This is the Kahan summation algorithm. The sum is accumulated in two words, the more significant s and the correction c. If you were able to form s + c exactly, it would be more accurate than s alone.

function s = KahanSum(x)     % KahanSum.  s = KahanSum(x), for vector(x).     % More accurate, but slower, than sum(x).     % Skips NaNs and infs.     % https://en.wikipedia.org/wiki/Kahan_summation_algorithm.
     s = 0;  % sum     c = 0;  % correction     for k = 1:length(x)         if isfinite(x(k))             y = x(k) - c;             t = s + y;             c = (t - s) - y;             s = t;         end     endend

SuperSum

I gave it a pretentious name to grab attention. Use extended precision, with enough digits to hold any MATLAB double.

function s = SuperSum(x)     % SuperSum.  s = SuperSum(x), for vector(x).     % Symbolic Math Toolbox extended precision.     % Skips NaNs and infs.     %     % 632 decimal digits holds every IEEE-754 double.     % 632 = ceil(log10(realmax) - log10(eps*realmin));     %     din = digits(632);  % Remember current setting     s = double(sum(sym(x(isfinite(x)),'D')));     digits(din)         % Restoreend

Toy Example

A test case here at MathWorks, known by a French-Canadian name that translates to \"toy example\", has a vector e2 of length 4243 and values that range from -3.3e7 to 6.8e9.

When running tests involving floating point numbers it is a good idea to set the output format to hex so we can see every last bit.

format hexload jeuTest e2x = e2;
[nansum(x) simplesum(x) KahanSum(x) SuperSum(x)]
ans =   423785e8206150e2   423785e8206150e0   423785e8206150e1   423785e8206150e1

For jeuTest, Kahan summation gets the same result as SuperSum, while nansum and simplesum differ in the last bit or two.

Second Test

The vector length is only three, but the third term completely cancels the first, and the second term rises from obscurity. In this situation, KahanSum is no more accurate than sum.

format hexx = [1 1e-14 -1]'
[nansum(x) simplesum(x) KahanSum(x) SuperSum(x)]
x =   3ff0000000000000   3d06849b86a12b9b   bff0000000000000
ans =   3d06800000000000   3d06800000000000   3d06800000000000   3d06849b86a12b9b

Conclusion

I will leave careful timing for another day. Let's just say that in situations like jeuTest, KahanSum is probably all you need. It is usually more accurate than sum, and not much slower.

However, for complete reliability, use SuperSum. There is no substitute for the right answer.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/supersum-in-defense-of-floating-point-arithmetic/", + + + + + + "date_published": "2024-06-27T17:54:38-06:00", + "date_modified": "2024-06-27T17:54:38-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/ibm-hexadecimal-floating-point/", + "title": "IBM Hexadecimal Floating Point", + "summary": null, + "content_text": "Our technical support group recently received a request for a tool that would convert IBM System/360 hexadecimal floating point numbers to the IEEE-754 format. I am probably the only one left at MathWorks that actually used IBM mainframe computers. I thought we had seen the last of hexadecimal arithmetic years ago. But, it turns out that the hexadecimal floating point format is alive and well.ContentsIBM System/360FormatsDataHex_ieeeieee2ibmibm2ieeeExamplesComparisonSoftwareIBM System/360The System/360 is a family of mainframe computers that IBM introduced in 1965 and that dominated the computer industry until PCs came along twenty years later. They range in size from desk-sized to systems that fill a large room.Here is a photo of a mid-sized model. System/360, Model 60. Photo from Ken Shirrif's blog, IBM 360/System Summary.The System/360 architecture is byte-oriented, so it can handle business data processing as well as scientific and engineering computation. This leads to base-16, rather than base-2 or base-10, floating point arithmetic.* Binary f*2^e 1/2<=f<1* Decimal f*10^e 1/10<=f<1* Hexadecimal f*16^e 1/16<=f<1FormatsFloating point formats played an important role in technical computing in the early days. This table from FMM lists formats that were in use in the 1970s, before IEEE-754 was introduced in 1985. DataThe System/360 hexadecimal format is used in many industries for the preservation of data files.CREWES. Teaching exploration seismology. Comprehensive MATLAB toolbox for use with the textbook \"Numerical Methods of Exploration Seismology with algorithms in Matlab\" by Gary F. Margrave, a geoscience professor at the University of Calgary.Library of Congress. Government.NASA. Astronautics.SAS. Statistics and business analytics. SAS wrapers for C.Enthought. Python wrappers for C.Hex_ieee Hex_ieee. I have two twenty-line MATLAB functions, ieee2ibm and ibm2ieee, that convert IEEE-754 floating point to and from IBM hexadecimal format.Three statements in the middle of ieee2ibm are the key to the entire operation. The first statement is [~,e] = log2(x)With two output arguments, log2 returns the mantissa and exponent of an IEEE-754 floating point number. The mantissa is not needed here.The second key statement e = ceil(e/4)makes e divisible by 4. This turns e into the appropriate hexadecimal exponent so that the third statement f = x.*16.^(-e)can produce the hexadecimal mantissa.ieee2ibmfunction z = ieee2ibm(x) Convert IEEE-754 to IBM System 360 hexadecimal. z = ieee2ibm(x) Input x, real column vector. Output z, length(x)-by-16 char. Example: ieee2ibm(-118.625) = 'C276A00000000000'. s = sign(x); % -1, 0, or 1 x = abs(x); x(x < 16^(-65)) = 0; % Underflow x(x >= 16^63) = (1-eps/2)*16^63; % Overflow [~,e] = log2(x); % base 2 exponent e = ceil(e/4) % base 16 exponent f = x.*16.^(-e); % base 16 mantissa E = uint64((e+64)*2^56); % Assemb1e output F = uint64(f*2^56); S = uint64((1-s)*2^62); % 1 or 0 z = dec2hex(S + E + F); % z = 'ZZFFFFFFFFFFFFFF'endibm2ieeefunction x = ibm2ieee(z) Convert IBM System 360 hexadecimal to IEEE-754. x = ibm2ieee(z) Input z, n-by-16 char. Output x, n-by-1 double. Example: ibm2ieee('C276A00000000000') = -118.625. E = hex2dec(z(:,1:2)); % Disassemble input F1 = hex2dec(z(:,3:8)); % < 16^6 F2 = hex2dec(z(:,9:end)); % < 16^8 s = sign(128-E); % -1 or 1 e = E-(s>0)*64-(s<0)*192; % base 16 exponent f = F1/16^6 + F2/16^14; % base 16 mantissa x = s.*f.*16.^e;endExamplesUnderflow. Anything < 16^(-65) is too small and is flushed to zero. There are no denormals.Overflow. Anything >= 16^63 is too large. There is no inf or NaN.* 1.0 4110000000000000* 0.1 401999999999999A* -pi C13243F6A8885A30* 5.3976e-79 0010000000000000* 7.2370e+75 7FFFFFFFFFFFFFF8ComparisonS/360 hexadecimal has 7 exponent bits, while IEEE-754 has 11. Consequently, hexadecimal has a much smaller range, 5.4e-79 to 7.2e+75 versus 2.2e-308 to 1.8e+308.The base-16 normalization implies that hexadecimal effectively has between 53 and 56 mantissa bits. Counting the hidden bit, IEEE-754 also has 53. So, the accuracy of the two is pretty much the same.SoftwareMy functions ieee2ibm and ieee2ibm described above, modified to handle both single and double, plus hex_test, which does what its name implies, are available at Hex_ieee.Homework: What happens?ok = 0;for k = 1:10 x = single(k/10); ok(k) = hex_test(x);endokGet the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

Our technical support group recently received a request for a tool that would convert IBM System/360 hexadecimal floating point numbers to the IEEE-754 format. I am probably the only one left at MathWorks that actually used IBM mainframe computers. I thought we had seen the last of hexadecimal arithmetic years ago. But, it turns out that the hexadecimal floating point format is alive and well.

Contents

IBM System/360

The System/360 is a family of mainframe computers that IBM introduced in 1965 and that dominated the computer industry until PCs came along twenty years later. They range in size from desk-sized to systems that fill a large room.

Here is a photo of a mid-sized model.

\"\"

System/360, Model 60. Photo from Ken Shirrif's blog, IBM 360/System Summary.

The System/360 architecture is byte-oriented, so it can handle business data processing as well as scientific and engineering computation. This leads to base-16, rather than base-2 or base-10, floating point arithmetic.

* Binary      f*2^e    1/2<=f<1* Decimal     f*10^e   1/10<=f<1* Hexadecimal f*16^e   1/16<=f<1

Formats

Floating point formats played an important role in technical computing in the early days. This table from FMM lists formats that were in use in the 1970s, before IEEE-754 was introduced in 1985.

\"\"

Data

The System/360 hexadecimal format is used in many industries for the preservation of data files.

CREWES. Teaching exploration seismology. Comprehensive MATLAB toolbox for use with the textbook \"Numerical Methods of Exploration Seismology with algorithms in Matlab\" by Gary F. Margrave, a geoscience professor at the University of Calgary.

Library of Congress. Government.

NASA. Astronautics.

SAS. Statistics and business analytics. SAS wrapers for C.

Enthought. Python wrappers for C.

Hex_ieee

Hex_ieee. I have two twenty-line MATLAB functions, ieee2ibm and ibm2ieee, that convert IEEE-754 floating point to and from IBM hexadecimal format.

Three statements in the middle of ieee2ibm are the key to the entire operation. The first statement is

    [~,e] = log2(x)

With two output arguments, log2 returns the mantissa and exponent of an IEEE-754 floating point number. The mantissa is not needed here.

The second key statement

    e = ceil(e/4)

makes e divisible by 4. This turns e into the appropriate hexadecimal exponent so that the third statement

    f = x.*16.^(-e)

can produce the hexadecimal mantissa.

ieee2ibm

function z = ieee2ibm(x)   Convert IEEE-754 to IBM System 360 hexadecimal.   z = ieee2ibm(x)      Input x, real column vector.      Output z, length(x)-by-16 char.   Example: ieee2ibm(-118.625) = 'C276A00000000000'.
      s = sign(x);                      % -1, 0, or 1      x = abs(x);      x(x < 16^(-65)) = 0;              % Underflow      x(x >= 16^63) = (1-eps/2)*16^63;  % Overflow
      [~,e] = log2(x);                  % base 2 exponent      e = ceil(e/4)                     % base 16 exponent      f = x.*16.^(-e);                  % base 16 mantissa
      E = uint64((e+64)*2^56);          % Assemb1e output      F = uint64(f*2^56);      S = uint64((1-s)*2^62);           % 1 or 0      z = dec2hex(S + E + F);           % z = 'ZZFFFFFFFFFFFFFF'end

ibm2ieee

function x = ibm2ieee(z)   Convert IBM System 360 hexadecimal to IEEE-754.   x = ibm2ieee(z)      Input z, n-by-16 char.      Output x, n-by-1 double.   Example: ibm2ieee('C276A00000000000') = -118.625.
      E = hex2dec(z(:,1:2));           % Disassemble input      F1 = hex2dec(z(:,3:8));          % < 16^6      F2 = hex2dec(z(:,9:end));        % < 16^8      s = sign(128-E);                 % -1 or 1
      e = E-(s>0)*64-(s<0)*192;        % base 16 exponent      f = F1/16^6 + F2/16^14;          % base 16 mantissa      x = s.*f.*16.^e;end

Examples

Underflow. Anything < 16^(-65) is too small and is flushed to zero. There are no denormals.

Overflow. Anything >= 16^63 is too large. There is no inf or NaN.

* 1.0           4110000000000000* 0.1           401999999999999A* -pi           C13243F6A8885A30* 5.3976e-79    0010000000000000* 7.2370e+75    7FFFFFFFFFFFFFF8

Comparison

S/360 hexadecimal has 7 exponent bits, while IEEE-754 has 11. Consequently, hexadecimal has a much smaller range, 5.4e-79 to 7.2e+75 versus 2.2e-308 to 1.8e+308.

The base-16 normalization implies that hexadecimal effectively has between 53 and 56 mantissa bits. Counting the hidden bit, IEEE-754 also has 53. So, the accuracy of the two is pretty much the same.

Software

My functions ieee2ibm and ieee2ibm described above, modified to handle both single and double, plus hex_test, which does what its name implies, are available at Hex_ieee.

Homework: What happens?

ok = 0;for k = 1:10     x = single(k/10);     ok(k) = hex_test(x);endok


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/ibm-hexadecimal-floating-point/", + + + + + + "date_published": "2024-05-25T15:51:21-06:00", + "date_modified": "2024-05-25T15:51:21-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/a-sixty-year-old-program-for-predicting-the-future/", + "title": "A Sixty-Year Old Program for Predicting the Future", + "summary": null, + "content_text": "The graphics in my post about R^2 were produced by an updated version of a sixty-year old program involving the U.S. census. Originally, the program was based on census data from 1900 to 1960 and sought to predict the population in 1970. The software back then was written in Fortran, the predominate technical programming language a half century ago. I have updated the MATLAB version of the program so that it now uses census data from 1900 to 2020.Contentscensusapp2024Risky BusinessSplinesExponentialsPredictionsConclusionBlogsFMMSoftwarecensusapp2024The latest version of the census application is now available at censusapp2024. Here are the data and the opening screenshot.[t,p]=UScensus;fprintf('%12d%12.3f\\n',[t,p]') 1900 75.995 1910 91.972 1920 105.711 1930 123.203 1940 131.669 1950 150.697 1960 179.323 1970 203.212 1980 226.505 1990 249.633 2000 281.422 2010 308.746 2020 331.449 Risky BusinessToday, MATLAB makes it easier to vary parameters and visualize results, but the underlying mathematical principles are unchanged:Using polynomials to predict the future by extrapolating data is a risky business.One new observation is added to the data every 10 years, when the United States does the decennial census. Originally there were only 7 observations; today there are 13. The program now allows you to fit the data exactly by interpolation with a polynomial of degree 12 or fit it approximately by polynomials of degree less than 12.Here are the least-squares fits with linear, cubic, and degree seven polynomials and the interpolating polynomial. As the polynomial degree increases, so does R^2, until R^2 reaches one with the exact fit.Do any of these fits look like they could be used to predict future population growth? SplinesIn addition to polynomials, you can choose interpolation by three different piecewise Hermite cubics.spline Continuous second derivate, \"not-a-knot\" end condition.pchip Continuous first derivative, strictly shape-preserving.makima Continuous first derivative, relaxed shape-preserving.Since these fits interpolate the data, all their R^2 values are one. But before 1900 and after 2020 these functions are cubic polynomials that are not designed for extrapolation. ExponentialsIt is also possible to do nonlinear least squares fits by an exponential, a logistic sigmoid, and an exponential of an exponetial known as the Gompertz model.exponential exp(b*t+c)logistic a./(1+exp(-b*(t-c)))gompertz a*exp(-b*exp(-c*t))An article by Kathleen and Even Tjørve, from the Inland Norway University of Applied Sciences in Elverum, Norway, in the journal PLOS ONE has this to say about Gompertz. \"The Gompertz model has been in use as a growth model even longer than its better known relative, the logistic model. The model, referred to at the time as the Gompertz theoretical law of mortality, was first suggested and first applied by Mr. Benjamin Gompertz in 1825. He fitted it to the relationship between increasing death rate and age, what he referred to as 'the average exhaustions of a man’s power to avoid death” or the 'portion of his remaining power to oppose destruction.' \" PredictionsWhich fits are suitable for predicting future population size?Despite their large R^2 values, polynomials of any degree are not suitable because outside of the time interval they behave like polynomials and do not provide realistic predictions.Splines were never intended for extrapolation.That leaves the exponentials. The simple exponential model grows exponentially and is not suitable. The Gompertz fit does approach a finite asymptotic limit, but the value is an astronimical a = 2101, corresponding to 2.1 $\\times 10^9$ inhabitants. Hopefully, that is out of the question.The logistic fit has an asymptotic limit of a = 655.7. We recently passed the value of t where p(t) reaches a/2, namely c = 2018. So, the logistic model predicts that the long-term size of the U.S. population will be about twice its current value. Is that realistic? Probably not. ConclusionThe British statistician George Box once said, \"all models are wrong, some are useful.\" This is true of the models of the U. S. Census that I have discussed over the past sixty years.Here is censusapp2024 after all its buttons have been pushed. The extrapolation date is set to 2040. White noise has been added to the data. The model is a fourth-degree polynomial with an R^2 = 0.99. The R^2 value and the error estimates produced by errs account for errors in the data, but not in the model.This particular model does a lousy job of predicting even twenty years in the future. Some of the other models are better, many are worse. Hopefully, their study is worthwhile. BlogsI have made blog posts about the census before, in 2020 and in 2017.FMMPredicting population growth is featured in Computer Methods for Mathematical Computations, by George Forsythe, Mike Malcolm and myself, published by Prentice-Hall in 1977. That textbook is now available from an interesting smorgasbord of sources, including Google Scholar, Amazon, dizhasneatstuff, Abe Books, Internet Archive, PDAS, WorldCat (Chinese).Softwarecensusapp2024 is available at censusapp2024.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

The graphics in my post about R^2 were produced by an updated version of a sixty-year old program involving the U.S. census. Originally, the program was based on census data from 1900 to 1960 and sought to predict the population in 1970. The software back then was written in Fortran, the predominate technical programming language a half century ago. I have updated the MATLAB version of the program so that it now uses census data from 1900 to 2020.

Contents

censusapp2024

The latest version of the census application is now available at censusapp2024. Here are the data and the opening screenshot.

[t,p]=UScensus;fprintf('%12d%12.3f\\n',[t,p]')
        1900      75.995        1910      91.972        1920     105.711        1930     123.203        1940     131.669        1950     150.697        1960     179.323        1970     203.212        1980     226.505        1990     249.633        2000     281.422        2010     308.746        2020     331.449

\"\"

Risky Business

Today, MATLAB makes it easier to vary parameters and visualize results, but the underlying mathematical principles are unchanged:

  • Using polynomials to predict the future by extrapolating data is a risky business.

One new observation is added to the data every 10 years, when the United States does the decennial census. Originally there were only 7 observations; today there are 13. The program now allows you to fit the data exactly by interpolation with a polynomial of degree 12 or fit it approximately by polynomials of degree less than 12.

Here are the least-squares fits with linear, cubic, and degree seven polynomials and the interpolating polynomial. As the polynomial degree increases, so does R^2, until R^2 reaches one with the exact fit.

Do any of these fits look like they could be used to predict future population growth?

\"\"

Splines

In addition to polynomials, you can choose interpolation by three different piecewise Hermite cubics.

  • spline Continuous second derivate, \"not-a-knot\" end condition.
  • pchip Continuous first derivative, strictly shape-preserving.
  • makima Continuous first derivative, relaxed shape-preserving.

Since these fits interpolate the data, all their R^2 values are one. But before 1900 and after 2020 these functions are cubic polynomials that are not designed for extrapolation.

\"\"

Exponentials

It is also possible to do nonlinear least squares fits by an exponential, a logistic sigmoid, and an exponential of an exponetial known as the Gompertz model.

  • exponential exp(b*t+c)
  • logistic a./(1+exp(-b*(t-c)))
  • gompertz a*exp(-b*exp(-c*t))

An article by Kathleen and Even Tjørve, from the Inland Norway University of Applied Sciences in Elverum, Norway, in the journal PLOS ONE has this to say about Gompertz. \"The Gompertz model has been in use as a growth model even longer than its better known relative, the logistic model. The model, referred to at the time as the Gompertz theoretical law of mortality, was first suggested and first applied by Mr. Benjamin Gompertz in 1825. He fitted it to the relationship between increasing death rate and age, what he referred to as 'the average exhaustions of a man’s power to avoid death” or the 'portion of his remaining power to oppose destruction.' \"

\"\"

Predictions

Which fits are suitable for predicting future population size?

Despite their large R^2 values, polynomials of any degree are not suitable because outside of the time interval they behave like polynomials and do not provide realistic predictions.

Splines were never intended for extrapolation.

That leaves the exponentials. The simple exponential model grows exponentially and is not suitable. The Gompertz fit does approach a finite asymptotic limit, but the value is an astronimical a = 2101, corresponding to 2.1 $\\times 10^9$ inhabitants. Hopefully, that is out of the question.

The logistic fit has an asymptotic limit of a = 655.7. We recently passed the value of t where p(t) reaches a/2, namely c = 2018. So, the logistic model predicts that the long-term size of the U.S. population will be about twice its current value. Is that realistic? Probably not.

\"\"

Conclusion

The British statistician George Box once said, \"all models are wrong, some are useful.\" This is true of the models of the U. S. Census that I have discussed over the past sixty years.

Here is censusapp2024 after all its buttons have been pushed. The extrapolation date is set to 2040. White noise has been added to the data. The model is a fourth-degree polynomial with an R^2 = 0.99. The R^2 value and the error estimates produced by errs account for errors in the data, but not in the model.

This particular model does a lousy job of predicting even twenty years in the future. Some of the other models are better, many are worse. Hopefully, their study is worthwhile.

\"\"

Blogs

I have made blog posts about the census before, in 2020 and in 2017.

FMM

Predicting population growth is featured in Computer Methods for Mathematical Computations, by George Forsythe, Mike Malcolm and myself, published by Prentice-Hall in 1977. That textbook is now available from an interesting smorgasbord of sources, including Google Scholar, Amazon, dizhasneatstuff, Abe Books, Internet Archive, PDAS, WorldCat (Chinese).

Software

censusapp2024 is available at censusapp2024.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/a-sixty-year-old-program-for-predicting-the-future/", + + + + + + "date_published": "2024-05-19T16:55:03-06:00", + "date_modified": "2024-05-19T16:55:03-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/r-squared-is-bigger-better/", + "title": "R-squared. Is Bigger Better?", + "summary": null, + "content_text": "The coefficient of determination, R-squared or R^2, is a popular statistic that describes how well a regression model fits data. It measures the proportion of variation in data that is predicted by a model. However, that is all that R^2 measures. It is not appropriate for any other use. For example, it does not support extrapolation beyond the domain of the data. It does not suggest that one model is preferable to another.I recently watched high school students participate in the final round of a national mathematical modeling competition. The teams' presentations were excellent; they were well-prepared, mathematically sophisticated, and informative. Unfortunately, many of the presentations abused R^2. It was used to compare different fits, to justify extrapolation, and to recommend public policy.This was not the first time that I have seen abuses of R^2. As educators and authors of mathematical software, we must do more to expose its limitations. There are dozens of pages and videos on the web describing R^2, but few of them warn about possible misuse.R^2 is easily computed. If y is a vector of observations, f is a fit to the data and ybar = mean(y), then R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2If the data are centered, then ybar = 0 and R^2 is between zero and one.One of my favorite examples is the United States Census. Here is the population, in millions, every ten years since 1900. t p ____ _______ 1900 75.995 1910 91.972 1920 105.711 1930 123.203 1940 131.669 1950 150.697 1960 179.323 1970 203.212 1980 226.505 1990 249.633 2000 281.422 2010 308.746 2020 331.449There are 13 observations. So, we can do a least-squares fit by a polynomial of any degree less than 12 and can interpolate by a polynomial of degree 12. Here are four such fits and the corresponding R^2 values. As the degree increases, so does R^2. Interpolation fits the data exactly and earns a perfect core.Which fit would you choose to predict the population in 2030, or even to estimate the population between census years?R2_census Thanks to Peter Perkins and Tom Lane for help with this post.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

The coefficient of determination, R-squared or R^2, is a popular statistic that describes how well a regression model fits data. It measures the proportion of variation in data that is predicted by a model. However, that is all that R^2 measures. It is not appropriate for any other use. For example, it does not support extrapolation beyond the domain of the data. It does not suggest that one model is preferable to another.

I recently watched high school students participate in the final round of a national mathematical modeling competition. The teams' presentations were excellent; they were well-prepared, mathematically sophisticated, and informative. Unfortunately, many of the presentations abused R^2. It was used to compare different fits, to justify extrapolation, and to recommend public policy.

This was not the first time that I have seen abuses of R^2. As educators and authors of mathematical software, we must do more to expose its limitations. There are dozens of pages and videos on the web describing R^2, but few of them warn about possible misuse.

R^2 is easily computed. If y is a vector of observations, f is a fit to the data and ybar = mean(y), then

   R^2 = 1 - norm(y-f)^2/norm(y-ybar)^2

If the data are centered, then ybar = 0 and R^2 is between zero and one.

One of my favorite examples is the United States Census. Here is the population, in millions, every ten years since 1900.

   t         p  ____    _______  1900     75.995  1910     91.972  1920    105.711  1930    123.203  1940    131.669  1950    150.697  1960    179.323  1970    203.212  1980    226.505  1990    249.633  2000    281.422  2010    308.746  2020    331.449

There are 13 observations. So, we can do a least-squares fit by a polynomial of any degree less than 12 and can interpolate by a polynomial of degree 12. Here are four such fits and the corresponding R^2 values. As the degree increases, so does R^2. Interpolation fits the data exactly and earns a perfect core.

Which fit would you choose to predict the population in 2030, or even to estimate the population between census years?

R2_census
\"\"

Thanks to Peter Perkins and Tom Lane for help with this post.


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/r-squared-is-bigger-better/", + + + + + + "date_published": "2024-05-04T14:33:38-06:00", + "date_modified": "2024-05-04T14:33:38-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/closest-pair-of-points-problem/", + "title": "Closest Pair of Points Problem", + "summary": null, + "content_text": "The Closest Pair of Points problem is a standard topic in an algorithms course today, but when I taught such a course fifty years ago, the algorithm was not yet known.ContentsCalifornia DreamingClosest Pair of PointsPairsDivConCenterComplexityTimingSoftwareReferencesCalifornia DreamingImagine you are driving a car on the Harbor Freeway in southern California with typical Los Angeles traffic conditions. Among the many things you might want to know is which pair of vehicles is nearest each other.This is an instance of the Closest Pair of Points problem:Given the location of n points in the plane, which pair of points is closest to each other? Closest Pair of PointsIt is convenient to represent the points by a vector of complex values. The distance between points z(k) and z(j) is then d = abs(z(k) - z(j))Here are a few points in the unit square. The closest pair is highlighted. PairsThe first algorithm you might think of computes the distances between all possible pairs of points and finds the minimum. This is a brute force approach that requires only a few lines of code.function d = Pairs(z) % Pairs. % d = Pairs(z) is the minimum distance between any two elements % of the complex vector z. n = length(z); d = Inf; for k = 1:n for j = k+1:n if abs(z(k) - z(j)) < d d = abs(z(k) - z(j)); end end endendDivConDivCon stands for Divide and Conquer. In outline, the steps are:Divide the set of points into two halves.Recursively, find the closest pair in each half.Consider the case when the closest pair has one point in each half.Terminate the recursion with sets of two or three points.function d = DivCon(z,sorted) % DivCon. % d = DivCon(z) is the minimum distance between any two elements % of the complex vector z. % % d = DivCon(z,true) is a recursive call with ascending real(z). n = length(z); if n <= 3 d = Pairs(z); else if nargin < 2 || ~sorted [~,p] = sort(real(z)); z = z(p); end m = floor(n/2); % Left half dl = DivCon(z(1:m),true) % Right half dr = DivCon(z(m+1:end),true); % Choose d = min(dl,dr); % Center strip ds = Center(z,d); d = min(ds,d); endendCenterThe delicate case involves the strip of points near the center dividing line. The width of the strip is the closest distance found in the recursion. Any closer pair with one point in each half must be in this strip.function d = Center(z,d) % Center(z,d) is used by DivCon to examine the % strip of half-width d about the center point. n = length(z) m = floor(n/2); xh = real(z(m)); [~,p] = sort(imag(z)); z = z(p); s = []; for i = 1:n if abs(real(z(i)) - xh) < d s = [s; z(i)]; end end ns = length(s); for k = 1:ns for j = k+1:ns if (imag(s(j)) - imag(s(k))) < d && abs(s(k) - s(j)) < d d = abs(s(k) - s(j)); end end endendComplexityLet n be the number of points. An asymptotic execution-time complexity analysis involves n approaching infinity.It is not hard to see that the complexity of the brute force algorithm implemented in Pairs is O(n^2).There are dozens of pages on the web devoted to showing that the complexity of the divide and conquer algorithm implemented in DivCon and Center is O(n*log(n)). The best page that I have seen is the YouTube video by Ling Qi. The key to the analysis is showing that the inner loop in Center is executed at most 7 times for any n.TimingWe measured the execution time of Pairs(z) and DivCon(z) for n from 1,000 to 40,000 and computed the ratios of the two times. The complexity analysis predicts that this ratio is asymptotically O(n/log(n))Here are the timing results and a least square fit by n/log(n). SoftwareA self-extracting MATLAB archive is available at https://blogs.mathworks.com/cleve/files/TestDivCon_mzip.mReferencesLing Qi, IDeer7, Closest Pair of Points (Divide and Conquer) Explained. https://www.youtube.com/watch?v=6u_hWxbOc7E.Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford. Introduction to Algorithms (4th ed.). MIT Press and McGraw-Hill. ISBN 0-262-04630-X. 1312 pp.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

The Closest Pair of Points problem is a standard topic in an algorithms course today, but when I taught such a course fifty years ago, the algorithm was not yet known.

Contents

California Dreaming

Imagine you are driving a car on the Harbor Freeway in southern California with typical Los Angeles traffic conditions. Among the many things you might want to know is which pair of vehicles is nearest each other.

This is an instance of the Closest Pair of Points problem:

  • Given the location of n points in the plane, which pair of points is closest to each other?

\"\"

Closest Pair of Points

It is convenient to represent the points by a vector of complex values. The distance between points z(k) and z(j) is then

  d = abs(z(k) - z(j))

Here are a few points in the unit square. The closest pair is highlighted.

\"\"

Pairs

The first algorithm you might think of computes the distances between all possible pairs of points and finds the minimum. This is a brute force approach that requires only a few lines of code.

function d = Pairs(z)    % Pairs.    % d = Pairs(z) is the minimum distance between any two elements    % of the complex vector z.
    n = length(z);    d = Inf;    for k = 1:n        for j = k+1:n            if abs(z(k) - z(j)) < d                d = abs(z(k) - z(j));            end        end    endend

DivCon

DivCon stands for Divide and Conquer. In outline, the steps are:

  • Divide the set of points into two halves.
  • Recursively, find the closest pair in each half.
  • Consider the case when the closest pair has one point in each half.
  • Terminate the recursion with sets of two or three points.
function d = DivCon(z,sorted)    % DivCon.    % d = DivCon(z) is the minimum distance between any two elements    % of the complex vector z.    %    % d = DivCon(z,true) is a recursive call with ascending real(z).
    n = length(z);    if n <= 3       d = Pairs(z);    else       if nargin < 2 || ~sorted           [~,p] = sort(real(z));           z = z(p);       end       m = floor(n/2);
       % Left half       dl = DivCon(z(1:m),true)
       % Right half       dr = DivCon(z(m+1:end),true);
       % Choose       d = min(dl,dr);
       % Center strip       ds = Center(z,d);       d = min(ds,d);    endend

Center

The delicate case involves the strip of points near the center dividing line. The width of the strip is the closest distance found in the recursion. Any closer pair with one point in each half must be in this strip.

function d = Center(z,d)    % Center(z,d) is used by DivCon to examine the    % strip of half-width d about the center point.
    n = length(z)    m = floor(n/2);    xh = real(z(m));    [~,p] = sort(imag(z));    z = z(p);    s = [];    for i = 1:n        if abs(real(z(i)) - xh) <  d            s = [s; z(i)];        end    end
    ns = length(s);    for k = 1:ns        for j = k+1:ns            if (imag(s(j)) - imag(s(k))) < d && abs(s(k) - s(j)) < d                d = abs(s(k) - s(j));            end        end    endend

Complexity

Let n be the number of points. An asymptotic execution-time complexity analysis involves n approaching infinity.

It is not hard to see that the complexity of the brute force algorithm implemented in Pairs is O(n^2).

There are dozens of pages on the web devoted to showing that the complexity of the divide and conquer algorithm implemented in DivCon and Center is O(n*log(n)). The best page that I have seen is the YouTube video by Ling Qi. The key to the analysis is showing that the inner loop in Center is executed at most 7 times for any n.

Timing

We measured the execution time of Pairs(z) and DivCon(z) for n from 1,000 to 40,000 and computed the ratios of the two times. The complexity analysis predicts that this ratio is asymptotically

  O(n/log(n))

Here are the timing results and a least square fit by n/log(n).

\"\"

Software

A self-extracting MATLAB archive is available at https://blogs.mathworks.com/cleve/files/TestDivCon_mzip.m

References

Ling Qi, IDeer7, Closest Pair of Points (Divide and Conquer) Explained. https://www.youtube.com/watch?v=6u_hWxbOc7E.

Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford. Introduction to Algorithms (4th ed.). MIT Press and McGraw-Hill. ISBN 0-262-04630-X. 1312 pp.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2024/closest-pair-of-points-problem/", + + + + + + "date_published": "2024-03-28T20:00:00-06:00", + "date_modified": "2024-03-28T20:00:00-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/twenty-years-of-parallel-matlab/", + "title": "Twenty Years of Parallel MATLAB", + "summary": null, + "content_text": "I have just returned from the MathWorks company meeting celebrating our 40th Anniversary. In one of the presentations, Jos Martin described how Parallel MATLAB was introduced almost twenty years ago. Here are a few slides from Jos's talk.ContentsWhy There Wasn't Any Parallel MATLABTwenty-seven Parallel MATLABsDistributed Computing ToolboxSupercomputing ConferenceBill GatesNow There is a Parallel MATLABWhy There Wasn't Any Parallel MATLABIn MATLAB News and Notes for spring 1995, I wrote a one-page Cleve's Corner titled \"Why there isn't any parallel MATLAB.\" There were three reasons.Memory model. MATLAB would generate a matrix on a host machine, split it into roughly equally sized submatrices, and distribute each submatrix to a node. But it took far longer to distribute the data then it did to do the computation. Any matrix that would fit into memory on the host was too small to make effective use of the parallel computer itself.Granularity. The amount of work involved in a single matrix computation is too little to be effectively parallelized.Business situation. There are too few potential customers at this time (1995) to undertake fundamental changes in MATLAB's architecture.This one-page note turned out to be one of my most widely cited publications.. .Twenty-seven Parallel MATLABsA 2001 survey by Ron Choy at MIT found 27 different projects that were developing some way to run MATLAB in parallel. All of them involved a MATLAB-based host program calling a fixed library of parallel functions, written in some other language, on the workers. None of the systems were capable of running arbitrary MATLAB programs in parallel. None of them were MathWorks products.Distributed Computing ToolboxMathWorks introduced the MATLAB Distributed Computing Toolbox in November 2004. We improvised this demo setup at our first Supercomputing Conference, SC2004 in Pittsburg, .Supercomputing ConferenceA year later, SC2005 was in Seattle and our booth featured four worker machines on a wire shelving unit purchased at a local Home Depot. .Bill GatesSince Seattle was his home town, Bill Gates gave the keynote talk at SC2005. He announced that Microsoft was going into High Performance Computing and used the MathWorks Distributed Computing Toolbox in his demonstration. .Now There is a Parallel MATLABSo, a little more than ten years after the first Cleve's Corner about parallel computing, a second Cleve's Corner in News and Notes was able to reverse the situation.. Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

I have just returned from the MathWorks company meeting celebrating our 40th Anniversary. In one of the presentations, Jos Martin described how Parallel MATLAB was introduced almost twenty years ago. Here are a few slides from Jos's talk.

Contents

Why There Wasn't Any Parallel MATLAB

In MATLAB News and Notes for spring 1995, I wrote a one-page Cleve's Corner titled \"Why there isn't any parallel MATLAB.\" There were three reasons.

  • Memory model. MATLAB would generate a matrix on a host machine, split it into roughly equally sized submatrices, and distribute each submatrix to a node. But it took far longer to distribute the data then it did to do the computation. Any matrix that would fit into memory on the host was too small to make effective use of the parallel computer itself.
  • Granularity. The amount of work involved in a single matrix computation is too little to be effectively parallelized.
  • Business situation. There are too few potential customers at this time (1995) to undertake fundamental changes in MATLAB's architecture.

This one-page note turned out to be one of my most widely cited publications.

.

\"\"

.

Twenty-seven Parallel MATLABs

A 2001 survey by Ron Choy at MIT found 27 different projects that were developing some way to run MATLAB in parallel. All of them involved a MATLAB-based host program calling a fixed library of parallel functions, written in some other language, on the workers. None of the systems were capable of running arbitrary MATLAB programs in parallel. None of them were MathWorks products.

Distributed Computing Toolbox

MathWorks introduced the MATLAB Distributed Computing Toolbox in November 2004. We improvised this demo setup at our first Supercomputing Conference, SC2004 in Pittsburg,

\"\"

.

Supercomputing Conference

A year later, SC2005 was in Seattle and our booth featured four worker machines on a wire shelving unit purchased at a local Home Depot.

\"\"

.

Bill Gates

Since Seattle was his home town, Bill Gates gave the keynote talk at SC2005. He announced that Microsoft was going into High Performance Computing and used the MathWorks Distributed Computing Toolbox in his demonstration.

\"\"

.

Now There is a Parallel MATLAB

So, a little more than ten years after the first Cleve's Corner about parallel computing, a second Cleve's Corner in News and Notes was able to reverse the situation.

.

\"\"


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2024/twenty-years-of-parallel-matlab/", + + + + + + "date_published": "2024-03-15T18:05:58-06:00", + "date_modified": "2024-03-15T18:05:58-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/chaotic-swinging-sticks/", + "title": "Chaotic Swinging Sticks", + "summary": null, + "content_text": "The Swinging Sticks is a kinetic sculpture that exhibits chaotic motion. The device became very popular after it upstaged Tony Stark in Iron Man 2. My daughter Carolyn gave me a desktop version of Swinging Sticks for Christmas. I immediately set out to simulate it. ContentsChaotic MotionSwinging SticksSculptureCodeChaotic MotionChaotic motion appears random but isn't. Once the motion begins, the initial conditions together with Newton's law of motion, F = ma, determine subsequent behavior. There are no random forces. It may be difficult to predict positions, but they are well-determined, nonetheless.A classic example of chaotic motion is the double pendulum. One mass at end of a massless string swings about a fixed pivot, and a second mass is attached by a massless string to the first. My simulator of the classis double pendulum is available in Cleve's Lab, swinger, and a movie is available here pendulum movie.Swinging SticksThe swinging sticks are similar to the double pendulum. The sticks are two rods with uniformly distributed mass, different lengths and off-center pivots. The best way to view the motion is to download this code and run it in your own MATLAB. Otherwise, here in a short slow-motion animated GIF. And, here is a longer Swinging Sticks Video.The motion of the shorter of the two rods is chaotic. Here are the orbits traced by the ends of the short rod. SculptureSwinging Sticks sculptures are available in various sizes and colors. The Swinging Sticks.Our mathematical model is of a frictionless perpetual motion machine. The real sculptures have an ingenious electromagnetic controller in the base that is claimed to run for two years on four AA batteries. Mine has been running since Christmas. An excellent YouTube video by Wayne Schmidt describes the controller.Codehttps://blogs.mathworks.com/cleve/files/swinging_sticks.mGet the MATLAB code (requires JavaScript) Published with MATLAB® R2024a", + "content_html": "

The Swinging Sticks is a kinetic sculpture that exhibits chaotic motion. The device became very popular after it upstaged Tony Stark in Iron Man 2. My daughter Carolyn gave me a desktop version of Swinging Sticks for Christmas. I immediately set out to simulate it.

\"\"

Contents

Chaotic Motion

Chaotic motion appears random but isn't. Once the motion begins, the initial conditions together with Newton's law of motion, F = ma, determine subsequent behavior. There are no random forces. It may be difficult to predict positions, but they are well-determined, nonetheless.

A classic example of chaotic motion is the double pendulum. One mass at end of a massless string swings about a fixed pivot, and a second mass is attached by a massless string to the first. My simulator of the classis double pendulum is available in Cleve's Lab, swinger, and a movie is available here pendulum movie.

Swinging Sticks

The swinging sticks are similar to the double pendulum. The sticks are two rods with uniformly distributed mass, different lengths and off-center pivots. The best way to view the motion is to download this code and run it in your own MATLAB. Otherwise, here in a short slow-motion animated GIF.

\"\"

And, here is a longer Swinging Sticks Video.

The motion of the shorter of the two rods is chaotic. Here are the orbits traced by the ends of the short rod.

\"\"

Sculpture

Swinging Sticks sculptures are available in various sizes and colors. The Swinging Sticks.

Our mathematical model is of a frictionless perpetual motion machine. The real sculptures have an ingenious electromagnetic controller in the base that is claimed to run for two years on four AA batteries. Mine has been running since Christmas. An excellent YouTube video by Wayne Schmidt describes the controller.

Code

https://blogs.mathworks.com/cleve/files/swinging_sticks.m


Get the MATLAB code

Published with MATLAB® R2024a

", + "url": "https://hpc.social/commercial-blog/2024/chaotic-swinging-sticks/", + + + + + + "date_published": "2024-02-20T16:24:41-07:00", + "date_modified": "2024-02-20T16:24:41-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/nick-higham-1961-2024/", + "title": "Nick Higham (1961-2024)", + "summary": null, + "content_text": "Nick Higham passed away last Saturday. Nick was a close friend of mine and a great friend of MATLAB. I will leave it to others to describe his research and teaching, his many honors, and his service to our community, especially SIAM. I have just a few, more personal, comments. ContentsNA DigestBooksMATLABgalleryexpmGoodbyeNA DigestMonday's NA Digest led off with this from Nick's wife Francoise and his brother Des.Subject: Nick Higham (1961--2024)With great sadness we report that Nick Higham, Royal Society ResearchProfessor and Richardson Professor of Applied Mathematics at theUniversity of Manchester, passed away on January 20, 2024, at the ageof 62 after an 18 month struggle with a form of blood cancer. Anobituary describing Nick's research and leadership contributions willappear in SIAM News in due course.Francoise Tisseur and Des HighamBooksNick was an excellent writer, and an excellent writer about writing.Here are the covers of his six books. SIAM published five of these. Two are surveys of Nick's research on the accuracy of numeric algorithms and the computation of matrix functions. Two more, one of them coauthored with Dennis Sherwood, are guides to mathematical exposition.MATLAB Guide, by Des and Nick Higham, is one of my favorite books about MATLAB. It is a succinct introduction for newcomers and a valuable refresher for old-timers. The third edition, published in 2017, includes chapters on object-oriented computing, parallel computing, the Symbolic Math Toolbox and other recent additions. Be sure to check out the MATLAB Guide web site.The only non-SIAM book pictured above is The Princeton Companion to Applied Mathematics. It is over 1,000 pages long and features nearly 200 sections written by an international team of experts. Nick is the editor-in-chief and wrote many of the sections himself.MATLABHere is a Word Cloud from Nick's home page. It shows the frequency of the tags for his blog and confirms his interest in MATLAB. galleryAnyone interested in numerical linear algebra should also be interested in the gallery function, which is based on Nick's work. Enter>> doc galleryScroll down to matrixname and investigate over 70 different test matrices.If you find gallery irresistible, take a look at anymatrix, an extensible matrix collection, by Nick and Mantas Mikaitis.expmThis is very personal for me. Thirty or forty years ago, Charlie Van Loan and I were regarded as authorities on computing the matrix exponential, $e^{A}$. The function expm has been in MATLAB since its very beginning. Around twenty years ago, we ceded the authority title to Nick and Awad Al-Mohy. Their code for matrix exponential is now the basis for expm.GoodbyeOur business has lost one of its superstars. I have lost a good friend, way too soon. Goodbye Nick.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

Nick Higham passed away last Saturday. Nick was a close friend of mine and a great friend of MATLAB. I will leave it to others to describe his research and teaching, his many honors, and his service to our community, especially SIAM. I have just a few, more personal, comments.

\"\"

Contents

NA Digest

Monday's NA Digest led off with this from Nick's wife Francoise and his brother Des.

Subject: Nick Higham (1961--2024)
With great sadness we report that Nick Higham, Royal Society ResearchProfessor and Richardson Professor of Applied Mathematics at theUniversity of Manchester, passed away on January 20, 2024, at the ageof 62 after an 18 month struggle with a form of blood cancer. Anobituary describing Nick's research and leadership contributions willappear in SIAM News in due course.
Francoise Tisseur and Des Higham

Books

Nick was an excellent writer, and an excellent writer about writing.

Here are the covers of his six books.

\"\"

SIAM published five of these. Two are surveys of Nick's research on the accuracy of numeric algorithms and the computation of matrix functions. Two more, one of them coauthored with Dennis Sherwood, are guides to mathematical exposition.

MATLAB Guide, by Des and Nick Higham, is one of my favorite books about MATLAB. It is a succinct introduction for newcomers and a valuable refresher for old-timers. The third edition, published in 2017, includes chapters on object-oriented computing, parallel computing, the Symbolic Math Toolbox and other recent additions. Be sure to check out the MATLAB Guide web site.

The only non-SIAM book pictured above is The Princeton Companion to Applied Mathematics. It is over 1,000 pages long and features nearly 200 sections written by an international team of experts. Nick is the editor-in-chief and wrote many of the sections himself.

MATLAB

Here is a Word Cloud from Nick's home page. It shows the frequency of the tags for his blog and confirms his interest in MATLAB.

\"\"

gallery

Anyone interested in numerical linear algebra should also be interested in the gallery function, which is based on Nick's work. Enter

>> doc gallery

Scroll down to matrixname and investigate over 70 different test matrices.

If you find gallery irresistible, take a look at anymatrix, an extensible matrix collection, by Nick and Mantas Mikaitis.

expm

This is very personal for me. Thirty or forty years ago, Charlie Van Loan and I were regarded as authorities on computing the matrix exponential, $e^{A}$. The function expm has been in MATLAB since its very beginning. Around twenty years ago, we ceded the authority title to Nick and Awad Al-Mohy. Their code for matrix exponential is now the basis for expm.

Goodbye

Our business has lost one of its superstars. I have lost a good friend, way too soon. Goodbye Nick.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2024/nick-higham-1961-2024/", + + + + + + "date_published": "2024-01-25T16:36:37-07:00", + "date_modified": "2024-01-25T16:36:37-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2024/exponential-fitting-separable-least-squares-and-quahogs/", + "title": "Exponential Fitting, Separable Least Squares, and Quahogs", + "summary": null, + "content_text": "We have been investigating a recent bug report about fitnlm, the Statistics and Machine Learning Toolbox function for robust fitting of nonlinear models.ContentsQuahogsAcidificationSeparable Least SquaresCentering DataExponential FittingResultsSoftwareThanksQuahogs The bug report comes from Greg Pelletier, an independent research scientist and biogeochemical modeler in Olympia, Washington. Greg has been studying the vulnerability of sensitive marine organisms to increases in ocean acidification. One of the most important of these organisms is Mercenaria mercenaria, the hard clam.Especially here in New England, hard clams are known by their traditional Native American name, quahog. They have a well-deserved reputation for making excellent clam chowder.AcidificationWe are all aware of increasing levels of carbon dioxide in the earth's atmosphere. We may not be as aware of the effect this increase has on the health of the earth's oceans. According to NOAA, the ocean absorbs about 30% of the atmospheric carbon dioxide.A definitive and controversial 2009 paper by Justin Ries and colleagues, then at the Woods Hole Oceanographic Institution, is \"Marine calcifiers exhibit mixed responses to CO2-induced ocean acidification\", https://doi.org/10.1130/G30210A.1. The hard clam example in Greg's bug report comes from figure 1K in the Ries et al. paper.The independent variable in experiments is the ratio of alkalinity of sea water to the concentration of dissolved inorganic carbon. The dependent variable is the calcification rate, which compares how fast the organism builds its shells to how fast the shells are dissolving. Separable Least SquaresThe model chosen by Ries at al. is$$ y \\approx \\beta_1 + \\beta_2 e^{\\lambda t} $$where $t$ is the ratio of alkalinity to dissolved carbon and $y$ is the calcification rate. The data have only four distinct values of $t$, with several observations of $y$ at each value.The parameters $\\beta_1$, $\\beta_2$ and $\\lambda$ are determined by least squares curve fit. This is a separable least squares problem. For any given value of $\\lambda$, the parameters $\\beta_1$ and $\\beta_2$ occur linearly and the least squares solution can be obtained by MATLAB's backslash.Gene Golub and Victor Pereyra described separable least squares in 1973 and proposed solving it by a variable projection algorithm. Since 1973 a number of people, including Pereyra, Linda Kaufman, Fred Krogh, John Bolstadt and David Gay, have contributed to the development of a series of Fortran programs named varpro. In 2011, Dianne O'Leary and Burt Rust created a MATLAB version of varpro. Their report, https://www.cs.umd.edu/~oleary/software/varpro/, is a good background source, as well as documentation for varpro.m.I have a section on separable least squares, and an example, expfitdemo, in NCM, Numerical Computing with MATLAB. I have modified expfitdemo to work on Greg's quahogs problem.Centering DataIt turns out that the problem Greg encountered can be traced to the fact that the data are not centered. The given values of $t$ are all positive. This causes fitnlm to print a warning message and attempt to rectify the situation by changing the degrees of freedom from 22 to 23, but this only makes the situation worse. (We should take another look at the portion of fitnlm that adjusts the degrees of freedom.)It is always a good idea in curve fitting to center the data with something like t = t - mean(t)The values of $y$ are already pretty well centered. Rescaling $y$ with y = 10000*ymakes interpretation of results easier.Exponential FittingWith the data centered and scaled, we have three different ways of tackling Greg's problem. All three methods agree on the results they compute.fitnlm. Treats all parameters as if they were nonlinear. Computes statistical quantities such as R-squared and RMS Error.varpro. Venerable software history. Only one nonlinear parameter for the quahogs problem. Delivers additional statistical quantities in Regression structure.quahogsfit. Textbook separable least squares code. Modification for the quahogs problem of expfitdemo from NCM. Only one nonlinear parameter. No statistics.ResultsfitnlmNonlinear regression model: y ~ param1 + param2*exp(param3*xval)Estimated Coefficients: Estimate SE tStat pValue ________ _______ _______ __________ param1 0.69536 0.1657 4.1964 0.00037344 param2 -0.26482 0.19909 -1.3302 0.19709 param3 -22.218 8.1494 -2.7263 0.012327Number of observations: 25, Error degrees of freedom: 22Root Mean Squared Error: 0.307R-Squared: 0.828, Adjusted R-Squared 0.813F-statistic vs. constant model: 53, p-value = 3.86e-09varproLinear Parameters: 0.695367 -0.264837Nonlinear Parameters: -22.217495Norm of weighted residual = 1.438935Norm of data vector = 3.545820Expected error of observations = 0.306782Coefficient of determination = 0.828145Regression.t_ratio 4.1962 -1.3301 -2.7264Regression.std_param 0.1657 0.1991 8.1490quahogsfitlambda = -22.2180condX = 4.3882beta = 0.6954 -0.2648normres = 1.4389quahogsfit produces this plot, which can be compared with figure 1K from Ries et al, reproduced above. SoftwareThe codes for this post are available here quahogs_driver.m and here varpro.m.ThanksThanks to Greg Pelletier for the bug report and to Tom Lane for his statistical expertise.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

We have been investigating a recent bug report about fitnlm, the Statistics and Machine Learning Toolbox function for robust fitting of nonlinear models.

Contents

Quahogs

\"\"

The bug report comes from Greg Pelletier, an independent research scientist and biogeochemical modeler in Olympia, Washington. Greg has been studying the vulnerability of sensitive marine organisms to increases in ocean acidification. One of the most important of these organisms is Mercenaria mercenaria, the hard clam.

Especially here in New England, hard clams are known by their traditional Native American name, quahog. They have a well-deserved reputation for making excellent clam chowder.

Acidification

We are all aware of increasing levels of carbon dioxide in the earth's atmosphere. We may not be as aware of the effect this increase has on the health of the earth's oceans. According to NOAA, the ocean absorbs about 30% of the atmospheric carbon dioxide.

A definitive and controversial 2009 paper by Justin Ries and colleagues, then at the Woods Hole Oceanographic Institution, is \"Marine calcifiers exhibit mixed responses to CO2-induced ocean acidification\", https://doi.org/10.1130/G30210A.1. The hard clam example in Greg's bug report comes from figure 1K in the Ries et al. paper.

The independent variable in experiments is the ratio of alkalinity of sea water to the concentration of dissolved inorganic carbon. The dependent variable is the calcification rate, which compares how fast the organism builds its shells to how fast the shells are dissolving.

\"\"

Separable Least Squares

The model chosen by Ries at al. is

$$ y \\approx \\beta_1 + \\beta_2 e^{\\lambda t} $$

where $t$ is the ratio of alkalinity to dissolved carbon and $y$ is the calcification rate. The data have only four distinct values of $t$, with several observations of $y$ at each value.

The parameters $\\beta_1$, $\\beta_2$ and $\\lambda$ are determined by least squares curve fit. This is a separable least squares problem. For any given value of $\\lambda$, the parameters $\\beta_1$ and $\\beta_2$ occur linearly and the least squares solution can be obtained by MATLAB's backslash.

Gene Golub and Victor Pereyra described separable least squares in 1973 and proposed solving it by a variable projection algorithm. Since 1973 a number of people, including Pereyra, Linda Kaufman, Fred Krogh, John Bolstadt and David Gay, have contributed to the development of a series of Fortran programs named varpro. In 2011, Dianne O'Leary and Burt Rust created a MATLAB version of varpro. Their report, https://www.cs.umd.edu/~oleary/software/varpro/, is a good background source, as well as documentation for varpro.m.

I have a section on separable least squares, and an example, expfitdemo, in NCM, Numerical Computing with MATLAB. I have modified expfitdemo to work on Greg's quahogs problem.

Centering Data

It turns out that the problem Greg encountered can be traced to the fact that the data are not centered. The given values of $t$ are all positive. This causes fitnlm to print a warning message and attempt to rectify the situation by changing the degrees of freedom from 22 to 23, but this only makes the situation worse. (We should take another look at the portion of fitnlm that adjusts the degrees of freedom.)

It is always a good idea in curve fitting to center the data with something like

  t = t - mean(t)

The values of $y$ are already pretty well centered. Rescaling $y$ with

  y = 10000*y

makes interpretation of results easier.

Exponential Fitting

With the data centered and scaled, we have three different ways of tackling Greg's problem. All three methods agree on the results they compute.

  • fitnlm. Treats all parameters as if they were nonlinear. Computes statistical quantities such as R-squared and RMS Error.
  • varpro. Venerable software history. Only one nonlinear parameter for the quahogs problem. Delivers additional statistical quantities in Regression structure.
  • quahogsfit. Textbook separable least squares code. Modification for the quahogs problem of expfitdemo from NCM. Only one nonlinear parameter. No statistics.

Results

  • fitnlm
Nonlinear regression model:    y ~ param1 + param2*exp(param3*xval)
Estimated Coefficients:              Estimate      SE        tStat       pValue              ________    _______    _______    __________
    param1     0.69536     0.1657     4.1964    0.00037344    param2    -0.26482    0.19909    -1.3302       0.19709    param3     -22.218     8.1494    -2.7263      0.012327
Number of observations: 25, Error degrees of freedom: 22Root Mean Squared Error: 0.307R-Squared: 0.828,  Adjusted R-Squared 0.813F-statistic vs. constant model: 53, p-value = 3.86e-09
  • varpro
Linear Parameters:  0.695367   -0.264837Nonlinear Parameters: -22.217495
Norm         of weighted residual  =   1.438935Norm         of data vector        =   3.545820Expected error of observations     =   0.306782Coefficient of determination       =   0.828145
Regression.t_ratio    4.1962   -1.3301   -2.7264
Regression.std_param    0.1657    0.1991    8.1490
  • quahogsfit
lambda =  -22.2180condX =    4.3882beta =    0.6954   -0.2648normres =    1.4389

quahogsfit produces this plot, which can be compared with figure 1K from Ries et al, reproduced above.

\"\"

Software

The codes for this post are available here quahogs_driver.m and here varpro.m.

Thanks

Thanks to Greg Pelletier for the bug report and to Tom Lane for his statistical expertise.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2024/exponential-fitting-separable-least-squares-and-quahogs/", + + + + + + "date_published": "2024-01-12T16:35:32-07:00", + "date_modified": "2024-01-12T16:35:32-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/season-s-greetings/", + "title": "Season’s Greetings", + "summary": null, + "content_text": "Season's Greeings Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

Season's Greeings

\"\"


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/season-s-greetings/", + + + + + + "date_published": "2023-12-20T14:13:20-07:00", + "date_modified": "2023-12-20T14:13:20-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/blog-post-number-300-vibrating-logo/", + "title": "Blog Post Number 300, Vibrating Logo", + "summary": null, + "content_text": "This is post number 300 of Cleve's Corner blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.ContentsVibrating LogoCodevibrating_logovibrating_logo_framefirst frameinit_figVibrating LogoFor my 300-th post, I want to take another look at our MathWorks logo. Here is a modified version of one of the animations that I entered in the recent MATLAB Flipbook Mini Hack. Vibrating LogoThe MathWorks company logo is the solution to a partial differential equation that describes how a disturbance travels through matter. I discussed the logo in a five-part blog post in 2014. Here are links to three of those posts.Why is it L-shaped?.The method of particular solutions.How the view has evolved..One of my most-liked blog posts is by ten-year old Eden Rajapakse.CodeThis code is available at vibrating_logo.vibrating_logofunction vibrating_logo % MathWorks logo, vibrating L-shaped membrane. % See Cleve's Corner, Dec. 13, 2023. % https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo. stop = init_fig; fps = 6; f = 0; % Loop until stop is toggled. while true f = f + 1; if stop.Value return end vibrating_logo_frame(f) pause(1/fps) end vibrating_logo_frame function vibrating_logo_frame(f) % % One frame of animation. if f == 1 first_frame end fud = get(gcf,'UserData'); [mu,L,s] = deal(fud{:}); t = (f-1)/fps; Z = cos(mu(1)*t)*L{1} + sin(mu(2)*t)*L{2} + sin(mu(3)*t)*L{3} + ... sin(mu(4)*t)*L{4} + sin(mu(5)*t)*L{5} + sin(mu(6)*t)*L{6}; s.ZData = Z; endfirst frame function first_frame cla axis off % First six eigenvalues. mu = sqrt([9.6397238445, 15.19725192, 2*pi^2, ... 29.5214811, 31.9126360, 41.4745099]); % First six eigenfunctions. L{1} = 30*membrane(1,25); L{2} = 2*membrane(2,25); L{3} = -2*membrane(3,25); L{4} = 5*membrane(4,25); L{5} = -3*membrane(5,25); L{6} = 4*membrane(6,25); % Surf plot with custom lighting. axes('CameraPosition', [-193.4013 -265.1546 220.4819],... 'CameraTarget',[26 26 10], ... 'CameraUpVector',[0 0 1], ... 'CameraViewAngle',9.5, ... 'DataAspectRatio', [1 1 .9],... 'Visible','off', ... 'XLim',[1 51], ... 'YLim',[1 51], ... 'ZLim',[-13 40]); s = surface(zeros(size(L{1})), ... 'EdgeColor','none', ... 'FaceColor',[0.9 0.2 0.2], ... 'FaceLighting','phong', ... 'AmbientStrength',0.3, ... 'DiffuseStrength',0.6, ... 'Clipping','off',... 'BackFaceLighting','lit', ... 'SpecularStrength',1.0, ... 'SpecularColorReflectance',1, ... 'SpecularExponent',7); light('Position',[40 100 20], ... 'Style','local', ... 'Color',[0 0.8 0.8]); light('Position',[.5 -1 .4], ... 'Color',[0.8 0.8 0]); set(gcf,'UserData',{mu,L,s}) endinit_fig function stop = init_fig % Initialize figure. fig = gcf; fig.Color = 'k'; fig.MenuBar = 'none'; fig.ToolBar = 'none'; fig.NumberTitle = 'off'; fig.Clipping = 'off'; stop = uicontrol; stop.Style = 'togglebutton'; stop.String = 'X'; stop.FontSize = 12; stop.FontWeight = 'bold'; stop.Units = 'normalized'; stop.Position = [.92 .92 .06 .06]; cla shg endendGet the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

This is post number 300 of Cleve's Corner blog. The first post was on June 6, 2012, which is 600 weeks ago. So, I have averaged one post every two weeks for over a decade. The posts were more frequent in the early days and are less frequent today.

Contents

Vibrating Logo

For my 300-th post, I want to take another look at our MathWorks logo. Here is a modified version of one of the animations that I entered in the recent MATLAB Flipbook Mini Hack.

\"\"

       Vibrating Logo

The MathWorks company logo is the solution to a partial differential equation that describes how a disturbance travels through matter. I discussed the logo in a five-part blog post in 2014. Here are links to three of those posts.

Why is it L-shaped?.

The method of particular solutions.

How the view has evolved..

One of my most-liked blog posts is by ten-year old Eden Rajapakse.

Code

This code is available at vibrating_logo.

vibrating_logo

function vibrating_logo
    % MathWorks logo, vibrating L-shaped membrane.    % See Cleve's Corner, Dec. 13, 2023.    % https://blogs.mathworks.com/cleve/2023/12/13/blog-post-number-300-vibrating-logo.    stop = init_fig;    fps = 6;    f = 0;    % Loop until stop is toggled.    while true        f = f + 1;        if stop.Value            return        end        vibrating_logo_frame(f)        pause(1/fps)    end
\"\"

vibrating_logo_frame

    function vibrating_logo_frame(f)        %        % One frame of animation.        if f == 1            first_frame        end        fud = get(gcf,'UserData');        [mu,L,s] = deal(fud{:});        t = (f-1)/fps;        Z = cos(mu(1)*t)*L{1} + sin(mu(2)*t)*L{2} + sin(mu(3)*t)*L{3} +  ...            sin(mu(4)*t)*L{4} + sin(mu(5)*t)*L{5} + sin(mu(6)*t)*L{6};        s.ZData = Z;    end

first frame

    function first_frame        cla        axis off        % First six eigenvalues.        mu = sqrt([9.6397238445, 15.19725192, 2*pi^2, ...                   29.5214811, 31.9126360, 41.4745099]);        % First six eigenfunctions.        L{1} = 30*membrane(1,25);        L{2} = 2*membrane(2,25);        L{3} = -2*membrane(3,25);        L{4} = 5*membrane(4,25);        L{5} = -3*membrane(5,25);        L{6} = 4*membrane(6,25);        % Surf plot with custom lighting.        axes('CameraPosition', [-193.4013 -265.1546  220.4819],...             'CameraTarget',[26 26 10], ...             'CameraUpVector',[0 0 1], ...             'CameraViewAngle',9.5, ...             'DataAspectRatio', [1 1 .9],...             'Visible','off', ...             'XLim',[1 51], ...             'YLim',[1 51], ...             'ZLim',[-13 40]);        s = surface(zeros(size(L{1})), ...             'EdgeColor','none', ...             'FaceColor',[0.9 0.2 0.2], ...             'FaceLighting','phong', ...             'AmbientStrength',0.3, ...             'DiffuseStrength',0.6, ...             'Clipping','off',...             'BackFaceLighting','lit', ...             'SpecularStrength',1.0, ...             'SpecularColorReflectance',1, ...             'SpecularExponent',7);        light('Position',[40 100 20], ...             'Style','local', ...             'Color',[0 0.8 0.8]);        light('Position',[.5 -1 .4], ...             'Color',[0.8 0.8 0]);        set(gcf,'UserData',{mu,L,s})    end

init_fig

    function stop = init_fig        % Initialize figure.        fig = gcf;        fig.Color = 'k';        fig.MenuBar = 'none';        fig.ToolBar = 'none';        fig.NumberTitle = 'off';        fig.Clipping = 'off';        stop = uicontrol;        stop.Style = 'togglebutton';        stop.String = 'X';        stop.FontSize = 12;        stop.FontWeight = 'bold';        stop.Units = 'normalized';        stop.Position = [.92 .92 .06 .06];        cla        shg    end
end


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/blog-post-number-300-vibrating-logo/", + + + + + + "date_published": "2023-12-13T18:23:26-07:00", + "date_modified": "2023-12-13T18:23:26-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/bouncing-bucky-ball-at-flipbook-mini-hack/", + "title": "Bouncing Bucky Ball at Flipbook Mini Hack", + "summary": null, + "content_text": "The 2023 MATLAB Central Flipbook Mini Hack contest runs from November 6 until December 3. Over 200 entries have been submitted in the first two weeks.ContentsNew RulesGalleryPersonal FavoritesBouncing Bucky BallSoftwareThanksNew RulesThis year's mini hack features short animations. The contest software runs the program you submit to make an animated GIF file with exactly 48 frames and an inner-frame delay time of 1/24 second. So, your animation will run for two seconds, then continuously repeat. If you want periodic motion, you need to be back where you started by frame 48.In previous mini hacks, programs had to be Twitter length -- at most 255 characters long. Now, the new limit is 2,000 characters. Comments and formatting blanks are not counted. Remixes and reuse of other submissions is encouraged.Participants and other viewers vote on the submissions. There are prizes like Amazon gift cards and T-shirts. MathWorkers may participate, but not win prizes.GalleryTake a look at the Gallery.Personal FavoritesI find the results fascinating. There are so many different creative styles, artistic talents and programming techniques. Here are a few of my personal favorites.Jenny BostenJenny Bosten is a familiar name on MATLAB Central. She is a Senior Lecturer in Psychology at the University of Sussex, where she is a \"visual neuroscientist specialising in colour vision.\" Her code for Time lapse of Lake view to the West shows she is also a wizard of coordinate systems and color maps. 隆光 中村I don't know anything about this person. All I see is this name, 隆光 中村, and this ingenious code for Fireworks. Ned GulleyNed is the long-time MathWorker who is the architect of MATLAB Central, and who, this time, is also a prolific participant. One of his more mathematical animations is Orbiting Roots. Eric Ludham'Eric is head of the MathWorks development team for Graphics and Charting. Contributions like this Blooming Rose demonstrate his artistic design talent. Bouncing Bucky BallMy own contributions are not nearly as attractive as these.The 2,000 character limit is a good idea. It forced me to look critically at some old code and rewrite it to be simpler and clearer.This program for a Bouncing Bucky Ball uses the hgtransform object to good effect. I also think it has a nice solution to the problem facing everybody of how to retain state from one frame to the next. SoftwareHere is a link to a slightly more complicated version with one togglebutton that provides a random restart capability. Bouncing_Bucky.mThanksChen Lin, David Wey and Vinay Ramesh are running the Mini Hack this year,Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

The 2023 MATLAB Central Flipbook Mini Hack contest runs from November 6 until December 3. Over 200 entries have been submitted in the first two weeks.

Contents

New Rules

This year's mini hack features short animations. The contest software runs the program you submit to make an animated GIF file with exactly 48 frames and an inner-frame delay time of 1/24 second. So, your animation will run for two seconds, then continuously repeat. If you want periodic motion, you need to be back where you started by frame 48.

In previous mini hacks, programs had to be Twitter length -- at most 255 characters long. Now, the new limit is 2,000 characters. Comments and formatting blanks are not counted. Remixes and reuse of other submissions is encouraged.

Participants and other viewers vote on the submissions. There are prizes like Amazon gift cards and T-shirts. MathWorkers may participate, but not win prizes.

Gallery

Take a look at the Gallery.

Personal Favorites

I find the results fascinating. There are so many different creative styles, artistic talents and programming techniques. Here are a few of my personal favorites.

Jenny Bosten

Jenny Bosten is a familiar name on MATLAB Central. She is a Senior Lecturer in Psychology at the University of Sussex, where she is a \"visual neuroscientist specialising in colour vision.\" Her code for Time lapse of Lake view to the West shows she is also a wizard of coordinate systems and color maps.

\"\"

隆光 中村

I don't know anything about this person. All I see is this name, 隆光 中村, and this ingenious code for Fireworks.

\"\"

Ned Gulley

Ned is the long-time MathWorker who is the architect of MATLAB Central, and who, this time, is also a prolific participant. One of his more mathematical animations is Orbiting Roots.

\"\"

Eric Ludham'

Eric is head of the MathWorks development team for Graphics and Charting. Contributions like this Blooming Rose demonstrate his artistic design talent.

\"\"

Bouncing Bucky Ball

My own contributions are not nearly as attractive as these.

The 2,000 character limit is a good idea. It forced me to look critically at some old code and rewrite it to be simpler and clearer.

This program for a Bouncing Bucky Ball uses the hgtransform object to good effect. I also think it has a nice solution to the problem facing everybody of how to retain state from one frame to the next.

\"\"

Software

Here is a link to a slightly more complicated version with one togglebutton that provides a random restart capability. Bouncing_Bucky.m

Thanks

Chen Lin, David Wey and Vinay Ramesh are running the Mini Hack this year,


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/bouncing-bucky-ball-at-flipbook-mini-hack/", + + + + + + "date_published": "2023-11-16T23:01:49-07:00", + "date_modified": "2023-11-16T23:01:49-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/exploring-matrices-exercises/", + "title": "Exploring Matrices Exercises", + "summary": null, + "content_text": "Try your hand at a few exercises involving Exploring Matrices.ContentsQube SimplifiedExploring Matrices ExercisesMatrix MultiplicationRotations and ScalingComputer GraphicsMatrices and CubesQube Simplified I have simplified the Qube app by removing these four buttons.solve. The <== key now controls the unscrambling operation.scramble. The ==> key now does six random rotations.order. I never found a satisfactory reference for the group theory of Rubik's cube.score. I never found a use for the nuclear norm.Code for Qube dated 9/24/2023 is included in the Apps mzip archive.Exploring Matrices ExercisesHere are a few exercises for Exploring Matrices. The answers are available at ExMatAnswers.Matrix Multiplication1. Compute by rows, and by columns.$$ \\left( \\begin{array}{rrr} 8 & 1 & 6 \\\\ 3 & 5 & 7 \\\\ 4 & 9 & 2 \\end{array} \\right) \\left( \\begin{array}{r} 1 \\\\ 1 \\\\ 1 \\end{array} \\right)$$2. Solve for $z$ using inner products of rows, and using linear combinations of columns.$$ \\left( \\begin{array}{rrr} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\end{array} \\right) \\left( \\begin{array}{r} 1 \\\\ z \\\\ 1 \\end{array} \\right) \\ = \\ \\left( \\begin{array}{r} 0 \\\\ 0 \\\\ 0 \\end{array} \\right)$$3. What do the m, n and p buttons on the Multiply app do? What are the other buttons and what do they do?4. If A is n-by-n and x is n-by-1, how many multiplications are required to compute A x ?5. If A is m-by-n and B is n-by-p, how many multiplications are required to compute A B ?Rotations and Scaling1. What is R(30º)?$$R(\\theta) \\ = \\\\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ -\\sin{\\theta} & \\cos{\\theta} \\end{array} \\right)$$2. Explain https://xkcd.com/184.3. What is the value of $\\theta$ ?$$R(\\theta) \\ = \\\\left( \\begin{array}{rr} 0.8 & 0.6 \\\\ -0.6 & 0.8 \\end{array} \\right)$$4. What is the value of $\\theta$ ? 5. Edit a copy of Rotate.m and replace the house with a hand. You can use my hand or your own hand; see exercise 3.4 in Numerical Computing with MATLAB . Computer Graphics1. Show how homogeneous coordinates and matrix-vector multiplication by Tx, Ty or Tz produce translation.2. What is the range of the rotations used by the pitch, roll, and yaw buttons on the Grafix app?3. What color in the beacon on top of the plane? How would you change the beacon's color?4, What is the function of the resolution and offset sliders for the teapot?5, How many times does the bucky ball bounce off the sides of the plot window?Matrices and Cubes1. What is the color of central cubelet in the Color Cube?2. What do the \"<=\" , \"<==\" , \"=>\" and \"==>\" buttons on Qube do?3. What is \"God's Number\" for a 3-by-3-by-3 Rubik's Cube? What are Q20 and Q26? See Cleve's Corner 2022/09/05.4. Can you restore the following scrambled cubes with fewer moves than <==, the unscramble key? Use the quarter-turn metric and reset the cube with start or by clicking on stack and Q0. You might also want to set speed to 30 or 45,LRUDFBLRL'R'FLLLRBQ26Reset the random number generator by entering rng(r) for some small integer r in the command window and then generate six random rotations with the ==> key.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

Try your hand at a few exercises involving Exploring Matrices.

Contents

Qube Simplified

\"\"

I have simplified the Qube app by removing these four buttons.

  • solve. The <== key now controls the unscrambling operation.
  • scramble. The ==> key now does six random rotations.
  • order. I never found a satisfactory reference for the group theory of Rubik's cube.
  • score. I never found a use for the nuclear norm.

Code for Qube dated 9/24/2023 is included in the Apps mzip archive.

Exploring Matrices Exercises

Here are a few exercises for Exploring Matrices. The answers are available at ExMatAnswers.

Matrix Multiplication

1. Compute by rows, and by columns.

$$ \\left( \\begin{array}{rrr} 8 & 1 & 6 \\\\ 3 & 5 & 7 \\\\ 4 & 9 & 2 \\end{array} \\right) \\left( \\begin{array}{r} 1 \\\\ 1 \\\\ 1 \\end{array} \\right)$$

2. Solve for $z$ using inner products of rows, and using linear combinations of columns.

$$ \\left( \\begin{array}{rrr} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\end{array} \\right) \\left( \\begin{array}{r} 1 \\\\ z \\\\ 1 \\end{array} \\right) \\ = \\ \\left( \\begin{array}{r} 0 \\\\ 0 \\\\ 0 \\end{array} \\right)$$

3. What do the m, n and p buttons on the Multiply app do? What are the other buttons and what do they do?

4. If A is n-by-n and x is n-by-1, how many multiplications are required to compute A x ?

5. If A is m-by-n and B is n-by-p, how many multiplications are required to compute A B ?

Rotations and Scaling

1. What is R(30º)?

$$R(\\theta) \\ = \\\\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ -\\sin{\\theta} & \\cos{\\theta} \\end{array} \\right)$$

2. Explain https://xkcd.com/184.

3. What is the value of $\\theta$ ?

$$R(\\theta) \\ = \\\\left( \\begin{array}{rr} 0.8 & 0.6 \\\\ -0.6 & 0.8 \\end{array} \\right)$$

4. What is the value of $\\theta$ ?

\"\"

5. Edit a copy of Rotate.m and replace the house with a hand. You can use my hand or your own hand; see exercise 3.4 in Numerical Computing with MATLAB .

\"\"

Computer Graphics

1. Show how homogeneous coordinates and matrix-vector multiplication by Tx, Ty or Tz produce translation.

2. What is the range of the rotations used by the pitch, roll, and yaw buttons on the Grafix app?

3. What color in the beacon on top of the plane? How would you change the beacon's color?

4, What is the function of the resolution and offset sliders for the teapot?

5, How many times does the bucky ball bounce off the sides of the plot window?

Matrices and Cubes

1. What is the color of central cubelet in the Color Cube?

2. What do the \"<=\" , \"<==\" , \"=>\" and \"==>\" buttons on Qube do?

3. What is \"God's Number\" for a 3-by-3-by-3 Rubik's Cube? What are Q20 and Q26? See Cleve's Corner 2022/09/05.

4. Can you restore the following scrambled cubes with fewer moves than <==, the unscramble key? Use the quarter-turn metric and reset the cube with start or by clicking on stack and Q0. You might also want to set speed to 30 or 45,

  • LRUDFB
  • LRL'R'
  • FLLLRB
  • Q26
  • Reset the random number generator by entering rng(r) for some small integer r in the command window and then generate six random rotations with the ==> key.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/exploring-matrices-exercises/", + + + + + + "date_published": "2023-09-25T17:57:28-06:00", + "date_modified": "2023-09-25T17:57:28-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/exploring-matrices/", + "title": "Exploring Matrices", + "summary": null, + "content_text": "I have spent much of my career working to bring abstract linear algebra and practical matrix computation closer together. This project is my latest effort.ContentsAlibiExploring MatricesYouTube VideosMatrix MultiplicationRotation and ScalingComputer GraphicsMatrices and CubesSimulinkAI and GorillasSoftwareThanksDedicationAlibiOver sixty years ago, as a sophomore contemplating a major in mathematics, I took a course entitled Survey of Modern Algebra. We used a now-classic textbook by MacLane and Birkhoff that featured abstract theorems about groups, rings, fields, vector spaces and linear algebra. I remember the colorful terms alias and alibi had something to do with change of basis and change of position, but I have never seen those terms again.The next year, I took Numerical Analysis. We did some of the homework on a Burroughhs 205 Datatron and I wrote a machine language program to solve simultaneous linear equations. I was hooked.But at the time I did not realize that the two courses were about the same magnificent object -- the matrix.Exploring MatricesExploring Matrices is a multi-media project that shows matrices in action. Short videos, blog posts, interactive MATLAB software and self-study exercises investigate applications of matrices. The material is intended for studebts in an undergraduate course in linear algebra or computational science. However, anyone using matrices should find topics that interest them.The first release of Exploring Matrices has six modules. All of the modules feature animated MATLAB displays and four of the modules include interactive MATLAB \"apps\". The modules are:Matrix MultiplicationRotation and ScalingComputer GraphicsMatrices and CubesSimulinkAI and Gorillas %YouTube VideosAn introduction and six videos ranging in length from one to six minutes, are available on YouTube athttps://youtube.com/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ.The first four of these videos feature animations produced by our four MATLAB apps -- Multiply, Rotate, Grafix, and Qube. The other two videos describe two applications, simulation of control systems and neural networks for facial recognition (of gorillas).Matrix MultiplicationSome viewers may just be learning the mechanics of matrix multiplication. Other viewers will have encountered it years ago. The traditional algorithm for computing the product of two matrices involves inner products between the rows of the first matrix and the columns of the second. A less familiar algorithm, which involves linear combinations of the columns of the first matrix, is often more efficient and informative. The two approaches produce the same final result from intermediate terms in different orders.Here is one frame from the animation of these two algorithms generated by our Multiply app. The highlighted element in the first matrix either moves across the rows or goes down the columns. Rotation and ScalingOur first matrices are 2-by-2. We see how the matrix$$R \\ = \\\\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ -\\sin{\\theta} & \\cos{\\theta} \\end{array} \\right)$$rotates points by the angle $\\theta$, measured in degrees.We also see how the matrix$$S \\ = \\\\left( \\begin{array}{rr} \\sigma & 0 \\\\ 0 & \\sigma \\end{array} \\right)\\ \\ \\ \\ \\ \\ \\ \\$$makes objects larger and smaller.The two can be combined with matrix multiplication. For more operations in higher dimensions, matrix multiplication provides a unifying framework.Here is one frame from the animation of rotation and scaling generated by the Rotate app. The first panel displays a 2-by-2 rotation matrix, the second panel displays a 2-by-2 diagonal scaling matrix, and the third panel displays their product. Computer GraphicsOperations with the 4-by-4 matrices that are at the heart of modern computer graphics employ a system known as \"homogeneous coordinates\". The leading 3-by-3 submatrix produces rotation and scaling in three dimensions. The fourth column produces translations.Here is one frame from an animation of rotation about the x-axis generated by the Grafix app. This is often called \"pitch\". Rotation about the y- and z-axes are \"roll\" and \"yaw\", Matrices and CubesRubik's Cube, named for its inventor, Ernő Rubik, a Hungarian professor of architecture, is the greatest mathematical puzzle of all time. Our digital simulation of the puzzle, Qube, is powered by rotation matrices.The model consists of 27 identical copies of a single small cubelet whose sides are colored red, white, blue, yellow, orange and green. Initially, all cubelets have the same orientation. A move is the simultaneous rotation of the nine cubelets in one of the six faces, by 90° or 180°, clockwise or counterclockwise. This leads to $4.3 \\times 10^{19}$ possible configurations for a scrambled cube.The object of the puzzle is to return a scrambled cube to the initial state. Most people are interested in solving the puzzle rapidly, but I am more interested in the number of moves required.Qube offers animations of many mathematical properties of Rubik's cubes. Here is a frame from one of them. SimulinkMATLAB's companion product, Simulink, is a block diagram programming environment used to design and simulate systems with multidomain models and to automatically generate the code required to operate embedded processors.Matrices are involved in dozens of different ways by Simulink, but most users rarely see operations at that detailed level. Our Simulink module shows a model of an automobile being driven on a test track and displays the pitch, roll and yaw recorded by the matrix connecting the coordinate system for the automobile to the coordinate system for the track. AI and GorillasThis is a personal story about a project in the early stages of development.My wife and I first visited gorillas in the Volcano National Park of Rwanda twelve years ago. An American primatologist named Dian Fossey had studied the gorillas between 1966 and her murder by poachers in 1985. Her book Gorillas in the Mist was very popular and was the basis for a critically acclaimed 1988 Hollywood movie starring Sigourney Weaver.We have become good friends with the people in the Gorilla Doctors organization. These African and American veterinarians attend to the health of the roughly 1,000 gorillas in the park. Most of the gorillas have African names like \"Inkundwa\" and \"Maisha\". We envision a gorilla facial recognition system that is available on cell phones and tablets so that new guides and doctors can learn the names of their patients.Inception-v3 is a convolutional neural network (CNN) that is widely used for image processing. We have a version of the network pretrained on more than a million images from the ImageNet database. This publicly available system knows nothing about gorillas. We must do additional training using photos of our unique subjects.This is where matrices are applied. Training a CNN involves determining the values of thousands of weights and coefficients. The digital photos, regarded as vectors, and repeatedly multiplied by circulant matrices where each row is a shifted copy of the other rows. Importantly, a modern CNN also contains some nonlinear layers.Here is one photo from a small test collection. Indundwa appears to have his own selfie stick. SoftwareA self-extracting MATLAB source archive of our four apps is available athttps://blogs.mathworks.com/cleve/files/Apps_mzip.mThanksThanks to Jackson Kustell, Josh Bethoney and Heather Gorr from MathWorks and Jan Ramer and Mike Cranfield from Gorilla Doctors.DedicationWe dedicate the Gorillas project to the memory of Mike Cranfield, DMV. Mike was Executive Director of the Mountain Gorillas Veterinary Project in Rwanda from 1999 until 2014. Before Rwanda, he held various positions at the Maryland Zoo in Baltimore.Three months ago, Mike sent us a disc drive containing over 14,000 photographs of gorillas he had taken in Rwanda. We are now sorting and organizing the photos to provide specialized training of the facial recognition neural net.A month ago, Mike was hospitalized from an apparent attack of West Nile Virus. He passed away on August 27. Ironically, after years of working safely in the mountain jungles of Central Africa, it is likely that he acquired the virus from a mosquito bite at his family's cabin in Canada.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

I have spent much of my career working to bring abstract linear algebra and practical matrix computation closer together. This project is my latest effort.

Contents

Alibi

Over sixty years ago, as a sophomore contemplating a major in mathematics, I took a course entitled Survey of Modern Algebra. We used a now-classic textbook by MacLane and Birkhoff that featured abstract theorems about groups, rings, fields, vector spaces and linear algebra. I remember the colorful terms alias and alibi had something to do with change of basis and change of position, but I have never seen those terms again.

The next year, I took Numerical Analysis. We did some of the homework on a Burroughhs 205 Datatron and I wrote a machine language program to solve simultaneous linear equations. I was hooked.

But at the time I did not realize that the two courses were about the same magnificent object -- the matrix.

Exploring Matrices

Exploring Matrices is a multi-media project that shows matrices in action. Short videos, blog posts, interactive MATLAB software and self-study exercises investigate applications of matrices. The material is intended for studebts in an undergraduate course in linear algebra or computational science. However, anyone using matrices should find topics that interest them.

The first release of Exploring Matrices has six modules. All of the modules feature animated MATLAB displays and four of the modules include interactive MATLAB \"apps\". The modules are:

  • Matrix Multiplication
  • Rotation and Scaling
  • Computer Graphics
  • Matrices and Cubes
  • Simulink
  • AI and Gorillas %

YouTube Videos

An introduction and six videos ranging in length from one to six minutes, are available on YouTube at

https://youtube.com/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ.

The first four of these videos feature animations produced by our four MATLAB apps -- Multiply, Rotate, Grafix, and Qube. The other two videos describe two applications, simulation of control systems and neural networks for facial recognition (of gorillas).

Matrix Multiplication

Some viewers may just be learning the mechanics of matrix multiplication. Other viewers will have encountered it years ago. The traditional algorithm for computing the product of two matrices involves inner products between the rows of the first matrix and the columns of the second. A less familiar algorithm, which involves linear combinations of the columns of the first matrix, is often more efficient and informative. The two approaches produce the same final result from intermediate terms in different orders.

Here is one frame from the animation of these two algorithms generated by our Multiply app. The highlighted element in the first matrix either moves across the rows or goes down the columns.

\"\"

Rotation and Scaling

Our first matrices are 2-by-2. We see how the matrix

$$R \\ = \\\\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ -\\sin{\\theta} & \\cos{\\theta} \\end{array} \\right)$$

rotates points by the angle $\\theta$, measured in degrees.

We also see how the matrix

$$S \\ = \\\\left( \\begin{array}{rr} \\sigma & 0 \\\\ 0 & \\sigma \\end{array} \\right)\\ \\ \\ \\ \\ \\ \\ \\$$

makes objects larger and smaller.

The two can be combined with matrix multiplication. For more operations in higher dimensions, matrix multiplication provides a unifying framework.

Here is one frame from the animation of rotation and scaling generated by the Rotate app. The first panel displays a 2-by-2 rotation matrix, the second panel displays a 2-by-2 diagonal scaling matrix, and the third panel displays their product.

\"\"

Computer Graphics

Operations with the 4-by-4 matrices that are at the heart of modern computer graphics employ a system known as \"homogeneous coordinates\". The leading 3-by-3 submatrix produces rotation and scaling in three dimensions. The fourth column produces translations.

Here is one frame from an animation of rotation about the x-axis generated by the Grafix app. This is often called \"pitch\". Rotation about the y- and z-axes are \"roll\" and \"yaw\",

\"\"

Matrices and Cubes

Rubik's Cube, named for its inventor, Ernő Rubik, a Hungarian professor of architecture, is the greatest mathematical puzzle of all time. Our digital simulation of the puzzle, Qube, is powered by rotation matrices.

The model consists of 27 identical copies of a single small cubelet whose sides are colored red, white, blue, yellow, orange and green. Initially, all cubelets have the same orientation. A move is the simultaneous rotation of the nine cubelets in one of the six faces, by 90° or 180°, clockwise or counterclockwise. This leads to $4.3 \\times 10^{19}$ possible configurations for a scrambled cube.

The object of the puzzle is to return a scrambled cube to the initial state. Most people are interested in solving the puzzle rapidly, but I am more interested in the number of moves required.

Qube offers animations of many mathematical properties of Rubik's cubes. Here is a frame from one of them.

\"\"

Simulink

MATLAB's companion product, Simulink, is a block diagram programming environment used to design and simulate systems with multidomain models and to automatically generate the code required to operate embedded processors.

Matrices are involved in dozens of different ways by Simulink, but most users rarely see operations at that detailed level. Our Simulink module shows a model of an automobile being driven on a test track and displays the pitch, roll and yaw recorded by the matrix connecting the coordinate system for the automobile to the coordinate system for the track.

\"\"

AI and Gorillas

This is a personal story about a project in the early stages of development.

My wife and I first visited gorillas in the Volcano National Park of Rwanda twelve years ago. An American primatologist named Dian Fossey had studied the gorillas between 1966 and her murder by poachers in 1985. Her book Gorillas in the Mist was very popular and was the basis for a critically acclaimed 1988 Hollywood movie starring Sigourney Weaver.

We have become good friends with the people in the Gorilla Doctors organization. These African and American veterinarians attend to the health of the roughly 1,000 gorillas in the park. Most of the gorillas have African names like \"Inkundwa\" and \"Maisha\". We envision a gorilla facial recognition system that is available on cell phones and tablets so that new guides and doctors can learn the names of their patients.

Inception-v3 is a convolutional neural network (CNN) that is widely used for image processing. We have a version of the network pretrained on more than a million images from the ImageNet database. This publicly available system knows nothing about gorillas. We must do additional training using photos of our unique subjects.

This is where matrices are applied. Training a CNN involves determining the values of thousands of weights and coefficients. The digital photos, regarded as vectors, and repeatedly multiplied by circulant matrices where each row is a shifted copy of the other rows. Importantly, a modern CNN also contains some nonlinear layers.

Here is one photo from a small test collection. Indundwa appears to have his own selfie stick.

\"\"

Software

A self-extracting MATLAB source archive of our four apps is available at

https://blogs.mathworks.com/cleve/files/Apps_mzip.m

Thanks

Thanks to Jackson Kustell, Josh Bethoney and Heather Gorr from MathWorks and Jan Ramer and Mike Cranfield from Gorilla Doctors.

Dedication

We dedicate the Gorillas project to the memory of Mike Cranfield, DMV. Mike was Executive Director of the Mountain Gorillas Veterinary Project in Rwanda from 1999 until 2014. Before Rwanda, he held various positions at the Maryland Zoo in Baltimore.

Three months ago, Mike sent us a disc drive containing over 14,000 photographs of gorillas he had taken in Rwanda. We are now sorting and organizing the photos to provide specialized training of the facial recognition neural net.

A month ago, Mike was hospitalized from an apparent attack of West Nile Virus. He passed away on August 27. Ironically, after years of working safely in the mountain jungles of Central Africa, it is likely that he acquired the virus from a mosquito bite at his family's cabin in Canada.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/exploring-matrices/", + + + + + + "date_published": "2023-09-12T03:11:52-06:00", + "date_modified": "2023-09-12T03:11:52-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/minigallery-sampler-of-matlab-test-matrices/", + "title": "MiniGallery, Sampler of MATLAB Test Matrices", + "summary": null, + "content_text": "MATLAB has dozens of test matrices. Here are a few.ContentsMini_GalleryCollectionsBlogsSoftware Mini_GalleryRandom. A = sprand(n,n,0.25). Random sparse, density = 0.25.Bucky. A = bucky. Sparse connectivity graph of the geodesic dome, the soccer ball, and the carbon-60 molecule.Wilkinson. A = wilkinson(n). Wn+. Nearly equal double eigenvalues.Band. A = triu(tril(A,2),-2). Elements near diagonal.Triangular. A = triu(A). Elements on and above diagonal.Hessenberg. A = triu(A,-1). Upper triangular plus one subdiagonal. See schur.Permutation. A = sparse(randperm(n),1:n,1). One +1 in each row and column.Companion. c = charpoly(A); A = [-c(2:end); eye(n-1,n)]. Traditional companion matrix.Fiedler. c = charpoly(A); A = fiedler(-c(2:end)). Fiedler companion matrix.Hankel. A = flip(gallery('toeppd',n)). Constant antidiagonals.Toeplitz. A = gallery('toeppd',n). Constant diagonals.Magic. A = magic(n). Magic square.Collectionsgallery. Nick Higham and MathWorks, https://www.mathworks.com/help/matlab/ref/gallery.htmlAnymatrix. Nick Higham and Mantas Mikaitis, https://nhigham.com/2021/11/09/anymatrix>SuiteSparse. Tim Davis, Yifan Hu and Scott Kolodzie, http://sparse.tamu.eduMatrixMarket, NIST, https://math.nist.gov/MatrixMarket.Blogshttps://blogs.mathworks.com/cleve/2012/11/05/magic-squares-part-2-algorithms/https://blogs.mathworks.com/cleve/2013/04/15/wilkinsons-matrices-2/.https://blogs.mathworks.com/cleve/2013/12/23/fiedler-companion-matrix/.https://blogs.mathworks.com/cleve/2021/05/12/bringing-back-the-bucky-ball/.Softwarehttps://blogs.mathworks.com/cleve/files/Mini_Gallery.mGet the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

MATLAB has dozens of test matrices. Here are a few.

Contents

\"\"

Mini_Gallery

  • Random. A = sprand(n,n,0.25). Random sparse, density = 0.25.
  • Bucky. A = bucky. Sparse connectivity graph of the geodesic dome, the soccer ball, and the carbon-60 molecule.
  • Wilkinson. A = wilkinson(n). Wn+. Nearly equal double eigenvalues.
  • Band. A = triu(tril(A,2),-2). Elements near diagonal.
  • Triangular. A = triu(A). Elements on and above diagonal.
  • Hessenberg. A = triu(A,-1). Upper triangular plus one subdiagonal. See schur.
  • Permutation. A = sparse(randperm(n),1:n,1). One +1 in each row and column.
  • Companion. c = charpoly(A); A = [-c(2:end); eye(n-1,n)]. Traditional companion matrix.
  • Fiedler. c = charpoly(A); A = fiedler(-c(2:end)). Fiedler companion matrix.
  • Hankel. A = flip(gallery('toeppd',n)). Constant antidiagonals.
  • Toeplitz. A = gallery('toeppd',n). Constant diagonals.
  • Magic. A = magic(n). Magic square.

Collections

Blogs

Software


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/minigallery-sampler-of-matlab-test-matrices/", + + + + + + "date_published": "2023-06-28T16:34:09-06:00", + "date_modified": "2023-06-28T16:34:09-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/arls-automatically-regularized-least-squares/", + "title": "ARLS, Automatically Regularized Least Squares", + "summary": null, + "content_text": "(I have a guest blogger today. Ron Jones worked with me in 1985 for his Ph. D. from the University of New Mexico. He retired recently after nearly 40 years at Sandia National Labs in Albuquerque and now has a chance to return to the problem he studied in his thesis. -- CBM)by Rondall Jones, rejones7@msn.comOur interest is in automatically solving difficult linear systems, A*x = bSuch systems often arise, for example, in \"inverse problems\" in which the analyst is trying to reverse the effects of natural smoothing processes such as heat dissipation, optical blurring, or indirect sensing. These problems exhibit \"ill-conditioning\", which means that the solution results are overly sensitive to insignificant changes to the observations, which are given in the right-hand-side vector, b .Here is a graphic showing this behavior using a common test matrix, a 31 x 31 Hilbert matrix, with the blue line being the ideal solution that one would hope a solver could compute. The jagged red line shows the result of a traditional solver on this problem. In fact this graph is extremely mild: the magnitude of the oscillations often measure in the millions, not just a little larger than the true solution. Traditionally analysts have approached this issue in the linear algebraic system context by appending equations to A*x = b that request each solution value, x(i), to be zero. Then, one weights these conditioning equations using a parameter usually called \"lambda\". We will call it p here. What we have to solve then is this expanded linear system: [ A ; p*I] * x = [b; 0]If we decompose A into its Singular Value Decomposition A = U * S * V'and multiply both sides by the transpose of the augmented LHS, the resulting solution to is x = V * inv(S^2 + p^2*I) * S * U' * binstead of the usual x = V * inv(S) * U' * bIt is convenient in the following discussion to represent this as x = V * PCVwhere PCV = inv(S) * U' * bis what we call the Picard Condition Vector. Then x is computed in the usual SVD manner with the change that each singular value S(i) is replaced by S(i) + p^2/S(i)This process is called Tikhonov regularization.Using Tikhonov regularization successfully requires somehow picking an appropriate value for p. Cleve Moler has for many years jokingly used the term \"eyeball norm\" to describe how to pick p. \"Try various values of p and pick the resulting solution (or its graph) that 'looks good'\".My early work in attempting to determine lambda automatically was based instead on determining when the PCV begins to seriously diverge. Beyond that point one can be fairly sure that noise in b is causing U'*b to decrease more slowly than inv(S) is increasing, so their product, which is the PCV, starts growing unacceptably. Such an algorithm can be made to work and versions of my work have been available in various forms over the years. But determining where the PCV starts growing unacceptably (which I refer to as the usable rank) is based on heuristics, moving averages, and such, as of which require choices of moving average lengths and other such parameters. This is not an optimal situation, so a I began trying to redesign algorithms that do not use any heuristics.How do we do that algorithmically? Per Christian Hansen gave a clue to this question when he said (my re-phrasing) that \"the analyst should not expect a good solution for such a problem unless the PCV is 'declining'\". We note that this adage is a context-specific application of a general requirement that when a function is represented by an orthogonal expansion the coefficients of the orthogonal basis functions should eventually decline toward zero. If this behavior does not happen, then typically either the model is incomplete or the data is contaminated. In our case the orthogonal basis is simply the columns of V, and b is the set of coefficients that would be expected to decline. A good working definition of \"declining\" has been hard to nail down. The algorithm in ARLS has implemented this concept using two specific essential steps:First, we replace the PCV by a second-degree polynomial (e.g., a parabolic) least-squares fit to the PCV. This allows a lot of the typical \"wild\" variations in the PCV to be smoothed over and thereby tolerated without eliminating the problem's distinctive behavior.Second, we don't actually fit the curve to the PCV, but rather to the logarithm of the PCV. Without this change, small values of the PCV are seen by the curve fit process as just near-zero values, with no significant difference in the effect of a value of 0.0001 or a value of 0.0000000001. But in the (base 10) logarithm of the PCV these values nicely spread out from -4 to -10 (for example).So, Phase 1 of ARLS searches a large range of values of p (remember, p is Tikhonov's \"lambda\") to find a value just barely large enough to make the slope of the parabolic fit entirely negative or zero. This gives us a tight lower bound for the \"correct\" value of p.Phase 2 of ARLS is much simpler. Since p is the minimum usable regularization parameter, the solution tends to be less smooth and less close to the ideal solution than optimum. So we simply increase p slightly to let the shape of the graph of x smooth out. Our current implementation increases p until the residual (that is, norm(A*x-b)) of the solution increases by a factor of 2. This is, unfortunately, a heuristic. But an appropriate value of it can be determined by “tuning” the algorithm on a wide range of test problems.We call this new algorithm Logarithmic Picard Condition Analysis. (If the problems you work on seem to need a bit more relaxation you can, of course, increase the number 2 a bit. It is 5 lines from the bottom of the file.) In the example shown in the graphic above, ARLS produces the blue line so closely that the ideal solution and ARLS computed solution are indistinguishable.In addition to ARLS(A,b) itself, we provide two constrained solvers built on ARLS which are called just like ARLS:ARLSNN(A,b), which constrains the solution to be non-negative (like the classic NNLS, buth with regularization.ARLSRISE(A,b) which constrains the solution to be non-decreasing. To get a non-increasing, or “falling” solution, you can compute -ARLSRISE(A,-b).Try ARLS. It's available from the MATLAB Central File Exchange, #130259, at this link.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

(I have a guest blogger today. Ron Jones worked with me in 1985 for his Ph. D. from the University of New Mexico. He retired recently after nearly 40 years at Sandia National Labs in Albuquerque and now has a chance to return to the problem he studied in his thesis. -- CBM)

by Rondall Jones, rejones7@msn.com

Our interest is in automatically solving difficult linear systems,

  A*x = b

Such systems often arise, for example, in \"inverse problems\" in which the analyst is trying to reverse the effects of natural smoothing processes such as heat dissipation, optical blurring, or indirect sensing. These problems exhibit \"ill-conditioning\", which means that the solution results are overly sensitive to insignificant changes to the observations, which are given in the right-hand-side vector, b .

Here is a graphic showing this behavior using a common test matrix, a 31 x 31 Hilbert matrix, with the blue line being the ideal solution that one would hope a solver could compute. The jagged red line shows the result of a traditional solver on this problem.

\"\"

In fact this graph is extremely mild: the magnitude of the oscillations often measure in the millions, not just a little larger than the true solution. Traditionally analysts have approached this issue in the linear algebraic system context by appending equations to A*x = b that request each solution value, x(i), to be zero. Then, one weights these conditioning equations using a parameter usually called \"lambda\". We will call it p here. What we have to solve then is this expanded linear system:

   [ A ; p*I] * x = [b; 0]

If we decompose A into its Singular Value Decomposition

   A = U * S * V'

and multiply both sides by the transpose of the augmented LHS, the resulting solution to is

   x = V * inv(S^2 + p^2*I) * S * U' * b

instead of the usual

   x = V * inv(S) * U' * b

It is convenient in the following discussion to represent this as

   x = V * PCV

where

   PCV = inv(S) * U' * b

is what we call the Picard Condition Vector. Then x is computed in the usual SVD manner with the change that each singular value S(i) is replaced by

   S(i) + p^2/S(i)

This process is called Tikhonov regularization.

Using Tikhonov regularization successfully requires somehow picking an appropriate value for p. Cleve Moler has for many years jokingly used the term \"eyeball norm\" to describe how to pick p. \"Try various values of p and pick the resulting solution (or its graph) that 'looks good'\".

My early work in attempting to determine lambda automatically was based instead on determining when the PCV begins to seriously diverge. Beyond that point one can be fairly sure that noise in b is causing U'*b to decrease more slowly than inv(S) is increasing, so their product, which is the PCV, starts growing unacceptably. Such an algorithm can be made to work and versions of my work have been available in various forms over the years. But determining where the PCV starts growing unacceptably (which I refer to as the usable rank) is based on heuristics, moving averages, and such, as of which require choices of moving average lengths and other such parameters. This is not an optimal situation, so a I began trying to redesign algorithms that do not use any heuristics.

How do we do that algorithmically? Per Christian Hansen gave a clue to this question when he said (my re-phrasing) that \"the analyst should not expect a good solution for such a problem unless the PCV is 'declining'\". We note that this adage is a context-specific application of a general requirement that when a function is represented by an orthogonal expansion the coefficients of the orthogonal basis functions should eventually decline toward zero. If this behavior does not happen, then typically either the model is incomplete or the data is contaminated. In our case the orthogonal basis is simply the columns of V, and b is the set of coefficients that would be expected to decline. A good working definition of \"declining\" has been hard to nail down. The algorithm in ARLS has implemented this concept using two specific essential steps:

  • First, we replace the PCV by a second-degree polynomial (e.g., a parabolic) least-squares fit to the PCV. This allows a lot of the typical \"wild\" variations in the PCV to be smoothed over and thereby tolerated without eliminating the problem's distinctive behavior.
  • Second, we don't actually fit the curve to the PCV, but rather to the logarithm of the PCV. Without this change, small values of the PCV are seen by the curve fit process as just near-zero values, with no significant difference in the effect of a value of 0.0001 or a value of 0.0000000001. But in the (base 10) logarithm of the PCV these values nicely spread out from -4 to -10 (for example).

So, Phase 1 of ARLS searches a large range of values of p (remember, p is Tikhonov's \"lambda\") to find a value just barely large enough to make the slope of the parabolic fit entirely negative or zero. This gives us a tight lower bound for the \"correct\" value of p.

Phase 2 of ARLS is much simpler. Since p is the minimum usable regularization parameter, the solution tends to be less smooth and less close to the ideal solution than optimum. So we simply increase p slightly to let the shape of the graph of x smooth out. Our current implementation increases p until the residual (that is, norm(A*x-b)) of the solution increases by a factor of 2. This is, unfortunately, a heuristic. But an appropriate value of it can be determined by “tuning” the algorithm on a wide range of test problems.

We call this new algorithm Logarithmic Picard Condition Analysis. (If the problems you work on seem to need a bit more relaxation you can, of course, increase the number 2 a bit. It is 5 lines from the bottom of the file.) In the example shown in the graphic above, ARLS produces the blue line so closely that the ideal solution and ARLS computed solution are indistinguishable.

In addition to ARLS(A,b) itself, we provide two constrained solvers built on ARLS which are called just like ARLS:

  • ARLSNN(A,b), which constrains the solution to be non-negative (like the classic NNLS, buth with regularization.
  • ARLSRISE(A,b) which constrains the solution to be non-decreasing. To get a non-increasing, or “falling” solution, you can compute -ARLSRISE(A,-b).

Try ARLS. It's available from the MATLAB Central File Exchange, #130259, at this link.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/arls-automatically-regularized-least-squares/", + + + + + + "date_published": "2023-06-17T00:57:05-06:00", + "date_modified": "2023-06-17T00:57:05-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/happy-birthday-john-gilbert/", + "title": "Happy Birthday, John Gilbert", + "summary": null, + "content_text": "I have just returned from a one-day workshop at U. C. Santa Barbara honoring John Gilbert on his 70th birthday and his official retirement after 20 years on the UCSB faculty. ContentsNew MexicoXerox PARCFriendshipUCSBNew MexicoI have known John since he was a teenager.In the late 1960's, John's father, Ed Gilbert, together with fellow mathematicians Don Morrison and Sto Bell, left their jobs at Sandia National Labs in Albuquerque and established the Computer Science Department at the University of New Mexico. Ed was especially interested in undergraduate education and led the department to early adoption of Pascal and Unix in the curriculum.In 1972, my wife at the time, Nancy Martin, and I were seeking a university where we could both have faculty positions. UNM offered me a job in the Math Department and Nancy one in Computer Science. I stayed at UNM for 13 years, eventually succeeding Morrison as Chairman of Computer Science.When I first met the Gilbert family in '72, both John and his younger brother Erik were undergrad students at UNM. A year later, both brothers were admitted to grad school in Computer Science at Stanford. After getting their Ph.D.'s in CS at Stanford, Erik went on to cofound a software company that produced a dialect of Lisp and John joined the Computer Science Department at Cornell.Xerox PARCAfter several years at Cornell, John returned to California and the famous Xerox Palo Alto Research Center.Sometime around Christmas in 1988, Ian Duff, the British authority on sparse matrices, wanted to go skiing in the Sierras. Iain arranged with Gene Golub to give a talk at Stanford. I was living in Menlo Park at the time and went to the talk. So did John Gilbert and Rob Schreiber, from Hewlett Packard Research in Palo Alto.After the talk, everybody went for coffee at Tresidder, Stanford's student union. During the ensuing discussion, John, Rob and I decided it was time to have sparse matrices in MATLAB. The first new data structure in MATLAB and its description resulted. See the links at SIAM and MathWorks.FriendshipOur collaboration on sparse matrices has led to an enduring friendship. Every year, at SCxx, the High Performance Computing conference in November, the three of us and Jack Dongarra get together. Here we are with Sven Hammarling from NAG, at SC17 in Denver. UCSBAfter a dozen years at PARC, John returned to academic life at the University of California near Santa Barbara. Last Saturday, Aydin Buluc and Daniel Lokshtanov, two of John's UCSB Ph. D. students, organized the JRG70 workshop. Here is a link to the Web page, including the list of talks presented. link. It was the first time since Tresidder that Iain, John, Rob and I have all been together.Here is a portrait of the JRG70 participants. As usual, John is being modest; he's in the back row, in a burgundy sweater. Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

I have just returned from a one-day workshop at U. C. Santa Barbara honoring John Gilbert on his 70th birthday and his official retirement after 20 years on the UCSB faculty.

\"\"

Contents

New Mexico

I have known John since he was a teenager.

In the late 1960's, John's father, Ed Gilbert, together with fellow mathematicians Don Morrison and Sto Bell, left their jobs at Sandia National Labs in Albuquerque and established the Computer Science Department at the University of New Mexico. Ed was especially interested in undergraduate education and led the department to early adoption of Pascal and Unix in the curriculum.

In 1972, my wife at the time, Nancy Martin, and I were seeking a university where we could both have faculty positions. UNM offered me a job in the Math Department and Nancy one in Computer Science. I stayed at UNM for 13 years, eventually succeeding Morrison as Chairman of Computer Science.

When I first met the Gilbert family in '72, both John and his younger brother Erik were undergrad students at UNM. A year later, both brothers were admitted to grad school in Computer Science at Stanford. After getting their Ph.D.'s in CS at Stanford, Erik went on to cofound a software company that produced a dialect of Lisp and John joined the Computer Science Department at Cornell.

Xerox PARC

After several years at Cornell, John returned to California and the famous Xerox Palo Alto Research Center.

Sometime around Christmas in 1988, Ian Duff, the British authority on sparse matrices, wanted to go skiing in the Sierras. Iain arranged with Gene Golub to give a talk at Stanford. I was living in Menlo Park at the time and went to the talk. So did John Gilbert and Rob Schreiber, from Hewlett Packard Research in Palo Alto.

After the talk, everybody went for coffee at Tresidder, Stanford's student union. During the ensuing discussion, John, Rob and I decided it was time to have sparse matrices in MATLAB. The first new data structure in MATLAB and its description resulted. See the links at SIAM and MathWorks.

Friendship

Our collaboration on sparse matrices has led to an enduring friendship. Every year, at SCxx, the High Performance Computing conference in November, the three of us and Jack Dongarra get together. Here we are with Sven Hammarling from NAG, at SC17 in Denver.

\"\"

UCSB

After a dozen years at PARC, John returned to academic life at the University of California near Santa Barbara. Last Saturday, Aydin Buluc and Daniel Lokshtanov, two of John's UCSB Ph. D. students, organized the JRG70 workshop. Here is a link to the Web page, including the list of talks presented. link. It was the first time since Tresidder that Iain, John, Rob and I have all been together.

Here is a portrait of the JRG70 participants. As usual, John is being modest; he's in the back row, in a burgundy sweater.

\"\"


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/happy-birthday-john-gilbert/", + + + + + + "date_published": "2023-06-07T14:48:32-06:00", + "date_modified": "2023-06-07T14:48:32-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/special-notice/", + "title": "Special Notice", + "summary": null, + "content_text": "Special Notice If you have been following my posts about Wordle, be sure to see the puzzle in today's New York Times, Tuesday, April 4.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

Special Notice

\"\"

If you have been following my posts about Wordle, be sure to see the puzzle in today's New York Times, Tuesday, April 4.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/special-notice/", + + + + + + "date_published": "2023-04-04T15:12:36-06:00", + "date_modified": "2023-04-04T15:12:36-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/my-chat-with-ernie-a-chinese-chat-bot/", + "title": "My Chat with Ernie, a Chinese Chat Bot", + "summary": null, + "content_text": "I recently had an opportunity to chat with Ernie, the Large Language Model currently under development at the Chinese internet search giant, Baidu. As I expected, Ernie's responses are in Chinese. I don't speak Chinese, so I have asked Google Translate for the response in English.ContentsEmbarrassingly ParallelLove MATLAB?Cleve's CornerConclusionEmbarrassingly ParallelOne of my questions that Microsoft's ChatGPT answered incorrectly was Who coined the term \"embarrassingly parallel?\"Ernie's response to the same question was Goggle translate: Who coined the embarrassing word parallel?Well that's a very unfortunate misunderstanding. And, it's just repeating the question. That's an old trick; the mother of all chat bots, Eliza , used it over sixty years ago.Love MATLAB?One of the questions I often ask when I meet someone for the first time is Do you use MATLAB?Earnie's reply was Google translation is I think I love you.Well, that's nice, but doesn't really answer my question.Cleve's CornerCan a chat bot assist with writing this blog? I don't expect help with the MATLAB code, or with the graphics, or with any mathematics. How about the prose, if it isn't too technical.Here is the opening sentence of the post I made a few weeks ago. The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics.I asked Ernie how that would look in Chinese. Ernie responded with When Google translates that back to English, we get The 4×4 matrix in the screenshot panel below is at the heart of computer graphics.Ernie decided to make the sentence singular, which happens to shorten it. But I am afraid that isn't much help for this blog.ConclusionI have already described my chat with ChatGPT. This Chinese competitor is certainly not an improvement. For now, I will continue to produce this blog the old fashioned way, without any \"help\" from AI.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

I recently had an opportunity to chat with Ernie, the Large Language Model currently under development at the Chinese internet search giant, Baidu. As I expected, Ernie's responses are in Chinese. I don't speak Chinese, so I have asked Google Translate for the response in English.

Contents

Embarrassingly Parallel

One of my questions that Microsoft's ChatGPT answered incorrectly was

   Who coined the term \"embarrassingly parallel?\"

Ernie's response to the same question was

\"\"

Goggle translate:

   Who coined the embarrassing word parallel?

Well that's a very unfortunate misunderstanding. And, it's just repeating the question. That's an old trick; the mother of all chat bots, Eliza , used it over sixty years ago.

Love MATLAB?

One of the questions I often ask when I meet someone for the first time is

  Do you use MATLAB?

Earnie's reply was

\"\"

Google translation is

  I think I love you.

Well, that's nice, but doesn't really answer my question.

Cleve's Corner

Can a chat bot assist with writing this blog? I don't expect help with the MATLAB code, or with the graphics, or with any mathematics. How about the prose, if it isn't too technical.

Here is the opening sentence of the post I made a few weeks ago.

   The 4-by-4 matrices in the panels on the following screenshots   are at the heart of computer graphics.

I asked Ernie how that would look in Chinese. Ernie responded with

\"\"

When Google translates that back to English, we get

   The 4×4 matrix in the screenshot panel below is at the heart of   computer graphics.

Ernie decided to make the sentence singular, which happens to shorten it. But I am afraid that isn't much help for this blog.

Conclusion

I have already described my chat with ChatGPT. This Chinese competitor is certainly not an improvement. For now, I will continue to produce this blog the old fashioned way, without any \"help\" from AI.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/my-chat-with-ernie-a-chinese-chat-bot/", + + + + + + "date_published": "2023-04-01T05:00:26-06:00", + "date_modified": "2023-04-01T05:00:26-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/three-wordle-assistants/", + "title": "Three Wordle Assistants", + "summary": null, + "content_text": "When I tackle a Wordle puzzle, I like to make all the key decisions myself. My three assistants set up puzzles and suggest words when I ask for help, but I guide the actual solution. My assistants also make it possible for me to play Wordle anywhere, anytime, even when my laptop is in airplane mode. I don't need the New York Times or access to the Web.ContentsThree AssistantsVocabularyWordsWordleNYTPared DownFive GoldsThanksSoftwareThree AssistantsWordler, Words and Wordie are the three assistants. Wordler replaces the Times by generating puzzles and evaluating responses. Words provides lists of possible responses. Wordie handles the Wordler Window and colors the letters gray, green or gold.VocabularyWords has a vocabulary of 4665 five-letter English words. Any of them are acceptable responses. The vocabulary begins with vocab = [ ... \"ABEAM\" \"ABETS\" \"ABHOR\" \"ABIDE\" \"ABLED\" \"ABLER\" \"ABODE\" \"ABORT\" ...And, 584 lines later, ends with \"ZILCH\" \"ZINCS\" \"ZINGS\" \"ZIPPY\" \"ZOMBI\" \"ZONAL\" \"ZONED\" \"ZONES\" ... \"ZOOMS\" ];If you were to print the entire vocabulary with 40 lines per page, you would print over 100 pages of words.WordsIt took me a long time to write the Words assistant, which is called whenever the Words button in the Wordle Window is clicked. Words is supported by a seventeen-program library of functions named Wordspq where p and q are nonnegative integers with p+q <= 5. Wordspq finds words with p green letters and q gold letters. The programs in the Words library all have the same structure involving five nested for loops.The last line of Words is feval(['Words' p q],Gray,Green,GreenLoc,Gold,GoldLoc)Gray, Green and Gold are lists of letters with specified colors and with locations GreenLoc and GoldLoc. Locating the green letters is easy because they must be in specific slots. Locating the gold letters is tricky because each of them can be in any of several different slots.For example, this situation in the NYT puzzle described below would result in a call to Words13 with Gray = 'AIHEC' Green = 'T' GreenLoc = 5 Gold = 'ROU' GoldLoc = {[2,3],[3,4],[1,2,4]} WordleWordle starts a game by choosing a secret random target from the vocabulary, or from a smaller subset about half the size. At the same time, I choose my starting word, which is usually RATIO. My assistants respond with the Wordler Window and a simple keyboard. The gold O tells me the target contains an O, that it is not in position 5, and the target does not contain R, A, T, or I. I know there are hundreds of such words in the vocabulary. One of them is DEMOS, which I enter on the keyboard. DEMOS happens to be a very lucky choice. The target has an E in the second slot, an S in the last slot, M and O in the remaining slots, and no D. When the answer does not occur to me in a minute or two, I click the Words button. The response is MEOWS cnt = 1So, there is only one word to choose, and it earns five greens. NYTLet's do the Times puzzle from March 23. I start with my mathematical RATIO. I see that the answer contains R, T and O and does not contain A or I.I happen to remember that OTHER qualifies. It does not hit any new letters, but it places additional restrictions on the ones I already have and eliminates E and H.Words now lists 37 words that I should choose from. I pick COURT because it contains U, the only remaining vowel.Words informs me that there are only two possibilities left, TROUT and GROUT. I pick the one without a double consonant and it is the winner. Pared DownHere is an atypical, but instructive, example. For this puzzle I am pleased to see Wordler gives RATIO a green A in position 2 and a gold R somewhere in positions 3 through 5. I remember one of my favorite \"technical\" terms, PARSE.To use a baseball metaphor, PARSE hits a triple and almost gets an in-the-park home run. Now I need to ask Words for qualifying responses. There are exactly two, PARED and PARER. (Both come from the verb \"to pare\", which means to cut the outer skin off something.)One of the choices has a double consonant, so I choose the other one. When it doesn't fly, the only choice left earns the five-leaf clover. Five GoldsHow do I generate five golds? I need the starting guess to be a permutation of the final answer. A few moments thought suggests TAKES and SKATE. I am sure there are other possibilities. But this one is special because STEAK makes it triplets. TEAKS would make four permutations but does not meet the \"hard mode\" restrictions. ThanksOver a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video.SoftwareWorking on my Wordle obsession has been very interesting. I have developed some useful tools and I see forgotten five-letter words everywhere. You can share the fun by downloading the code at this link and running it yourself.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

When I tackle a Wordle puzzle, I like to make all the key decisions myself. My three assistants set up puzzles and suggest words when I ask for help, but I guide the actual solution. My assistants also make it possible for me to play Wordle anywhere, anytime, even when my laptop is in airplane mode. I don't need the New York Times or access to the Web.

Contents

Three Assistants

Wordler, Words and Wordie are the three assistants. Wordler replaces the Times by generating puzzles and evaluating responses. Words provides lists of possible responses. Wordie handles the Wordler Window and colors the letters gray, green or gold.

Vocabulary

Words has a vocabulary of 4665 five-letter English words. Any of them are acceptable responses. The vocabulary begins with

  vocab = [ ...  \"ABEAM\" \"ABETS\" \"ABHOR\" \"ABIDE\" \"ABLED\" \"ABLER\" \"ABODE\" \"ABORT\" ...

And, 584 lines later, ends with

  \"ZILCH\" \"ZINCS\" \"ZINGS\" \"ZIPPY\" \"ZOMBI\" \"ZONAL\" \"ZONED\" \"ZONES\" ...  \"ZOOMS\" ];

If you were to print the entire vocabulary with 40 lines per page, you would print over 100 pages of words.

Words

It took me a long time to write the Words assistant, which is called whenever the Words button in the Wordle Window is clicked.

\"\"

Words is supported by a seventeen-program library of functions named Wordspq where p and q are nonnegative integers with p+q <= 5. Wordspq finds words with p green letters and q gold letters. The programs in the Words library all have the same structure involving five nested for loops.

The last line of Words is

  feval(['Words' p q],Gray,Green,GreenLoc,Gold,GoldLoc)

Gray, Green and Gold are lists of letters with specified colors and with locations GreenLoc and GoldLoc. Locating the green letters is easy because they must be in specific slots. Locating the gold letters is tricky because each of them can be in any of several different slots.

For example, this situation in the NYT puzzle described below would result in a call to Words13 with

  Gray = 'AIHEC'  Green = 'T'  GreenLoc = 5  Gold = 'ROU'  GoldLoc = {[2,3],[3,4],[1,2,4]}

\"\"

Wordle

Wordle starts a game by choosing a secret random target from the vocabulary, or from a smaller subset about half the size. At the same time, I choose my starting word, which is usually RATIO. My assistants respond with the Wordler Window and a simple keyboard.

\"\"

The gold O tells me the target contains an O, that it is not in position 5, and the target does not contain R, A, T, or I. I know there are hundreds of such words in the vocabulary. One of them is DEMOS, which I enter on the keyboard.

\"\"

DEMOS happens to be a very lucky choice. The target has an E in the second slot, an S in the last slot, M and O in the remaining slots, and no D. When the answer does not occur to me in a minute or two, I click the Words button. The response is

  MEOWS  cnt = 1

So, there is only one word to choose, and it earns five greens.

\"\"

NYT

Let's do the Times puzzle from March 23. I start with my mathematical RATIO. I see that the answer contains R, T and O and does not contain A or I.

I happen to remember that OTHER qualifies. It does not hit any new letters, but it places additional restrictions on the ones I already have and eliminates E and H.

Words now lists 37 words that I should choose from. I pick COURT because it contains U, the only remaining vowel.

Words informs me that there are only two possibilities left, TROUT and GROUT. I pick the one without a double consonant and it is the winner.

\"\"

Pared Down

Here is an atypical, but instructive, example. For this puzzle I am pleased to see Wordler gives RATIO a green A in position 2 and a gold R somewhere in positions 3 through 5. I remember one of my favorite \"technical\" terms, PARSE.

To use a baseball metaphor, PARSE hits a triple and almost gets an in-the-park home run. Now I need to ask Words for qualifying responses. There are exactly two, PARED and PARER. (Both come from the verb \"to pare\", which means to cut the outer skin off something.)

One of the choices has a double consonant, so I choose the other one. When it doesn't fly, the only choice left earns the five-leaf clover.

\"\"

Five Golds

How do I generate five golds? I need the starting guess to be a permutation of the final answer. A few moments thought suggests TAKES and SKATE. I am sure there are other possibilities. But this one is special because STEAK makes it triplets. TEAKS would make four permutations but does not meet the \"hard mode\" restrictions.

\"\"

Thanks

Over a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video.

Software

Working on my Wordle obsession has been very interesting. I have developed some useful tools and I see forgotten five-letter words everywhere. You can share the fun by downloading the code at this link and running it yourself.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/three-wordle-assistants/", + + + + + + "date_published": "2023-03-28T03:00:55-06:00", + "date_modified": "2023-03-28T03:00:55-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/wordle-sneak-previews/", + "title": "Wordle Sneak Previews", + "summary": null, + "content_text": "ContentsEarly BirdsEarly BirdsThere several sites on the Web that reveal the solution to the Wordle puzzle in the New York Times while it is still in play. Some of these sites are in India, where India Standard Time is 9-1/2 hours ahead of Eastern Daylight Time, so India sees the puzzle long before the USA does. These sites surround their puzzle clues with ads and are trying to get more visitors.For a while, whenever I get a chance, I intend try to update this animation with the latest reveals. I don't have any obvious ads, but I have to admit that my own motivation is similar to the other sites. Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

Contents

Early Birds

There several sites on the Web that reveal the solution to the Wordle puzzle in the New York Times while it is still in play. Some of these sites are in India, where India Standard Time is 9-1/2 hours ahead of Eastern Daylight Time, so India sees the puzzle long before the USA does. These sites surround their puzzle clues with ads and are trying to get more visitors.

For a while, whenever I get a chance, I intend try to update this animation with the latest reveals. I don't have any obvious ads, but I have to admit that my own motivation is similar to the other sites.

\"\"


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/wordle-sneak-previews/", + + + + + + "date_published": "2023-03-24T19:18:10-06:00", + "date_modified": "2023-03-24T19:18:10-06:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/wordbot-and-words-my-wordle-assistants/", + "title": "WordBot and Words, My Wordle Assistants", + "summary": null, + "content_text": "I am late joining the Wordle craze. Over a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video. But my programs for Wordle Assistants are different. WordBot doesn't try to solve any puzzles and Words just supplies lists of possible words. I enjoy providing the solution logic myself.Here are two examples, taken from recent Wordle puzzles in the New York Times.ContentsWednesdayThursdayFour Days in MarchSoftwareWednesdayWordBot has a list of 4676 possible words, but knows nothing about their probabilities, so I don't ask for any assistance with the opening guess.I like to use mathematical words whenever possible. I usually start with RATIO, which has three vowels and two popular consonants. RATIO was a good opening move for the puzzle in the Times on Wednesday. It received a green R and a gold A. I informed WordBot of our good fortune using 2, 1 and 0 to indicate green, gold and gray. My faithful assistant responded by reproducing the first graphic in the Times. WordBot ratio 21000 Words is my suite of programs that produce lists of acceptable words for various scenarios. In this situation with an R as the first letter, an A somewhere in the last three letters and T, I and O on the gray list, Words finds 25 words, starting with REACH and ending with RUMBA.The last of those 25 words got my attention. I decided to try RUMBA on my second move. I knew RUMBA was unlikely to succeed but would be spectacular if it did. Sure enough, Wordle didn't want to dance. WordBot rumba 20001 Three more letters gray-listed and A limited to two slots reduces the number of possible words from 25 to 18. The first word on the list is still REACH. WordBot reach 22100 There are now 11 possibilities.READSREADYREALSREAPSREARSREGALRELAXRELAYRENALREPAYRERANI need to relax. WordBot relax 22120 I don't need another list of possibilities. I can quickly see the previous list has only two words that end in L. The choice between \"fit for a monarch\" and \"pertaining to kidney function\" is clear. I have solved Wednesday's puzzle in five moves, including the Hail Mary at move two. WordBot regal 22222 closeThursdayThursday's puzzle in the Times offered different challenges. As always, I started with RATIO. This time I get only one gold letter. WordBot ratio 10000 I need an R somewhere in the last four positions and can't use A, T, I or O. Words knows 229 qualified candidates. I choose another mathematical word. WordBot perms 01100 I now must have an R and an E and can't have any of those seven grays. Words offers 72 possibilities. Have I been in an accident? WordBot wreck 21200 Well, that's much better. Two greens, one gold, and nine grays. There is only one possibility. The solution must be WHERE. WordBot where 22222 closeFour Days in MarchWednesday, Thursday, Friday and Saturday.If your browser isn't showing the animation, look here. SoftwareThis code is immature. Be gentle and let me know how it works for you.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

I am late joining the Wordle craze. Over a year ago, MATLAB programs for solving Wordle puzzles were described by Adam Filion as a guest blogger on Loren's blog and by Matt Tearle with a YouTube video. But my programs for Wordle Assistants are different. WordBot doesn't try to solve any puzzles and Words just supplies lists of possible words. I enjoy providing the solution logic myself.

Here are two examples, taken from recent Wordle puzzles in the New York Times.

Contents

Wednesday

WordBot has a list of 4676 possible words, but knows nothing about their probabilities, so I don't ask for any assistance with the opening guess.

I like to use mathematical words whenever possible. I usually start with RATIO, which has three vowels and two popular consonants. RATIO was a good opening move for the puzzle in the Times on Wednesday. It received a green R and a gold A. I informed WordBot of our good fortune using 2, 1 and 0 to indicate green, gold and gray. My faithful assistant responded by reproducing the first graphic in the Times.

    WordBot ratio 21000
\"\"

Words is my suite of programs that produce lists of acceptable words for various scenarios. In this situation with an R as the first letter, an A somewhere in the last three letters and T, I and O on the gray list, Words finds 25 words, starting with REACH and ending with RUMBA.

The last of those 25 words got my attention. I decided to try RUMBA on my second move. I knew RUMBA was unlikely to succeed but would be spectacular if it did. Sure enough, Wordle didn't want to dance.

    WordBot rumba 20001
\"\"

Three more letters gray-listed and A limited to two slots reduces the number of possible words from 25 to 18. The first word on the list is still REACH.

    WordBot reach 22100
\"\"

There are now 11 possibilities.

READSREADYREALSREAPSREARSREGALRELAXRELAYRENALREPAYRERAN

I need to relax.

    WordBot relax 22120
\"\"

I don't need another list of possibilities. I can quickly see the previous list has only two words that end in L. The choice between \"fit for a monarch\" and \"pertaining to kidney function\" is clear. I have solved Wednesday's puzzle in five moves, including the Hail Mary at move two.

    WordBot regal 22222
\"\"
    close

Thursday

Thursday's puzzle in the Times offered different challenges. As always, I started with RATIO. This time I get only one gold letter.

    WordBot ratio 10000
\"\"

I need an R somewhere in the last four positions and can't use A, T, I or O. Words knows 229 qualified candidates. I choose another mathematical word.

    WordBot perms 01100
\"\"

I now must have an R and an E and can't have any of those seven grays. Words offers 72 possibilities. Have I been in an accident?

    WordBot wreck 21200
\"\"

Well, that's much better. Two greens, one gold, and nine grays. There is only one possibility. The solution must be WHERE.

    WordBot where 22222
\"\"
    close

Four Days in March

Wednesday, Thursday, Friday and Saturday.

If your browser isn't showing the animation, look here.

\"\"

Software

This code is immature. Be gentle and let me know how it works for you.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/wordbot-and-words-my-wordle-assistants/", + + + + + + "date_published": "2023-03-11T19:07:02-07:00", + "date_modified": "2023-03-11T19:07:02-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/r2-d2-rotations-and-dilations-in-two-dimensions/", + "title": "R2-D2, Rotations and Dilations in Two Dimensions", + "summary": null, + "content_text": "R2_D2 is is the name I've given a new MATLAB program that provides animations of 2-by-2 rotation and dilation matrices. I admit I chose \"dilations\" so the acronym would be memorable, but otherwise the code has little to do with the famous Star Wars droid.ContentsHouseHandRotationDilationBothR2_D2Further ReadingHouseThis outline of a house is featured in Experiments with MATLAB. The data are the 11 blue dots. The coordinates of each dot form a 2-by-1 vector; the 2-by-2 rotation and dilation matrices multiply each of these vectors separately. (The lines between the dots complete the picture and are not involved in any computation.) The house also appears in several editions of Gil Strang's textbooks. The cover of the third edition of Strang's Introduction to Linear Algebra features nine houses on a quilt made by Gil's friend Chris Curtis. HandThis outline of a hand, which I made from measurements of my own hand, is also used in Experiments with MATLAB. There are 37 points, so Hand is a 2-by-37 matrix. RotationMultiplication by this matrix produces a two-dimensional rotation by an angle theta.$$ R = \\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ - \\sin{\\theta} & \\cos{\\theta} \\end{array} \\right) $$R is displayed in the first panel. If the house is not rotating in your browser, try this link: https://blogs.mathworks.com/cleve/files/house_rotate.gif DilationDilation is the process of making objects larger or smaller. Multiplication by this diagonal matrix produces a dilation by a factor sigma.$$ S = \\left( \\begin{array}{rr} \\sigma & 0 \\\\ 0 & \\sigma \\end{array} \\right) $$S is displayed in the second panel. The animation is also available at: https://blogs.mathworks.com/cleve/files/hand_dilate.gif BothHere rotation and dilation are combined. The product of the rotation and dilation matrices drives the action. If you are missing all the action, try: https://blogs.mathworks.com/cleve/files/hand_both.gif R2_D2When you run R2_D2 on your own computer, you can drive the rotations and dilations yourself. Mousing outside of the object creates rotation and mousing inside produces dilation.The R2_D2 program is available from https://blogs.mathworks.com/cleve/files/R2_D2_4.m.Further ReadingIf you are not familiar with matrices, or just want a quick refresher, check out the Matrices chapter of Experiments with MATLAB. Exercise 4.14 is particularly handy.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

R2_D2 is is the name I've given a new MATLAB program that provides animations of 2-by-2 rotation and dilation matrices. I admit I chose \"dilations\" so the acronym would be memorable, but otherwise the code has little to do with the famous Star Wars droid.

Contents

House

This outline of a house is featured in Experiments with MATLAB. The data are the 11 blue dots. The coordinates of each dot form a 2-by-1 vector; the 2-by-2 rotation and dilation matrices multiply each of these vectors separately. (The lines between the dots complete the picture and are not involved in any computation.)

\"\"

The house also appears in several editions of Gil Strang's textbooks. The cover of the third edition of Strang's Introduction to Linear Algebra features nine houses on a quilt made by Gil's friend Chris Curtis.

\"\"

Hand

This outline of a hand, which I made from measurements of my own hand, is also used in Experiments with MATLAB. There are 37 points, so Hand is a 2-by-37 matrix.

\"\"

Rotation

Multiplication by this matrix produces a two-dimensional rotation by an angle theta.

$$ R = \\left( \\begin{array}{rr} \\cos{\\theta} & \\sin{\\theta} \\\\ - \\sin{\\theta} & \\cos{\\theta} \\end{array} \\right) $$

R is displayed in the first panel. If the house is not rotating in your browser, try this link: https://blogs.mathworks.com/cleve/files/house_rotate.gif

\"\"

Dilation

Dilation is the process of making objects larger or smaller. Multiplication by this diagonal matrix produces a dilation by a factor sigma.

$$ S = \\left( \\begin{array}{rr} \\sigma & 0 \\\\ 0 & \\sigma \\end{array} \\right) $$

S is displayed in the second panel. The animation is also available at: https://blogs.mathworks.com/cleve/files/hand_dilate.gif

\"\"

Both

Here rotation and dilation are combined. The product of the rotation and dilation matrices drives the action. If you are missing all the action, try: https://blogs.mathworks.com/cleve/files/hand_both.gif

\"\"

R2_D2

When you run R2_D2 on your own computer, you can drive the rotations and dilations yourself. Mousing outside of the object creates rotation and mousing inside produces dilation.

The R2_D2 program is available from https://blogs.mathworks.com/cleve/files/R2_D2_4.m.

Further Reading

If you are not familiar with matrices, or just want a quick refresher, check out the Matrices chapter of Experiments with MATLAB. Exercise 4.14 is particularly handy.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/r2-d2-rotations-and-dilations-in-two-dimensions/", + + + + + + "date_published": "2023-03-03T19:50:25-07:00", + "date_modified": "2023-03-03T19:50:25-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/my-chat-with-chatgpt/", + "title": "My Chat With ChatGPT", + "summary": null, + "content_text": "While it is still fresh in my mind, I want to describe the conversation I had with a publicly available version of ChatGPT, the much-discussed large language model, LLM, for conversational artificial intelligence.ContentsMixed ReceptionWhere Is Sydney?Me and AIMe and ChatGPTAI WintersTruthMixed ReceptionA newer version of ChatGPT than the one I used is available to selected journalists and computer industry observers. Their reaction has been, shall I say, mixed. At first, some of the reports were positive and even ecstatic. Most of these early reports were from people whose primary concern is the stock market, not AI technology. Many of the more recent and more careful reports have been negative and critical.Where Is Sydney?I have given ChatGPT the nickname \"Chad\". Some early users of one of Chad's competitors asked deliberately provocative questions and encountered a cranky alter-ego named \"Sydney\". I didn't ask my Chad any unfair questions and didn't encounter any Sydney's.Me and AII have been a long-time observer of -- although not a contributor to -- artificial intelligence research.I took AI courses at Stanford from the inventor of the field, John McCarthy.Bill McKeeman and I entered McCarthy's chess program in a San Francisco Chronicle's by-mail chess contest. (The computer did not fair well.)I used Joe Weizenbaum's computer program Eliza, the very first Chat Bot.I was once married to someone with a PhD in AI.Symbolic Math, like MathWorks now does in our Toolbox, and which we used to do with Macsyma and Maple, was once considered AI.The wild animal trail cameras project that I did a few years ago with Heather Gorr and Jim Sanderson uses modern machine learning and AI.Me and ChatGPTI talked to -- I should say chatted with, or actually typed at -- Chad for most of an hour on a recent evening. Think of Stephen Hawking in a Web Browser. Chad's responses were always courteous and conversational. And the majority of Chad's responses were factually correct.However, a surprising number of Chad's answers were just plain wrong. Some examples:I was neither born in, nor raised in, rural New Mexico.I did not get a PhD from the University of Michigan. Neither did my wife, Patsy.Patsy is not the mother of my daughter Kam, nor of my sister Betsy.Patsy is not an expert in computational fluid dynamics.Ken Kennedy did not coin the term \"embarrassingly parallel.\"Pam McCorduck never worked for the Santa Fe Institute.I cannot find any reference to the guys Chad claimed improved Sympletic Spacewar.All of Chad's incorrect responses could have been fact-checked by simple Google queries.AI WintersEverybody wants to combine the conversational style offered by large language models with the reliability and breadth provided by Google. Now THAT sounds like a really good idea.Artificial intelligence has a history of flush successes interspersed with fallow periods known as AI Winters. I am afraid that continued obsession with Chat Bots might lead to another AI Winter.TruthSteve Eddins revealed the Truth behind ChatGPT with this internal MathWorks Yammer post. Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

While it is still fresh in my mind, I want to describe the conversation I had with a publicly available version of ChatGPT, the much-discussed large language model, LLM, for conversational artificial intelligence.

Contents

Mixed Reception

A newer version of ChatGPT than the one I used is available to selected journalists and computer industry observers. Their reaction has been, shall I say, mixed. At first, some of the reports were positive and even ecstatic. Most of these early reports were from people whose primary concern is the stock market, not AI technology. Many of the more recent and more careful reports have been negative and critical.

Where Is Sydney?

I have given ChatGPT the nickname \"Chad\". Some early users of one of Chad's competitors asked deliberately provocative questions and encountered a cranky alter-ego named \"Sydney\". I didn't ask my Chad any unfair questions and didn't encounter any Sydney's.

Me and AI

I have been a long-time observer of -- although not a contributor to -- artificial intelligence research.

  • I took AI courses at Stanford from the inventor of the field, John McCarthy.
  • Bill McKeeman and I entered McCarthy's chess program in a San Francisco Chronicle's by-mail chess contest. (The computer did not fair well.)
  • I used Joe Weizenbaum's computer program Eliza, the very first Chat Bot.
  • I was once married to someone with a PhD in AI.
  • Symbolic Math, like MathWorks now does in our Toolbox, and which we used to do with Macsyma and Maple, was once considered AI.
  • The wild animal trail cameras project that I did a few years ago with Heather Gorr and Jim Sanderson uses modern machine learning and AI.

Me and ChatGPT

I talked to -- I should say chatted with, or actually typed at -- Chad for most of an hour on a recent evening. Think of Stephen Hawking in a Web Browser. Chad's responses were always courteous and conversational. And the majority of Chad's responses were factually correct.

However, a surprising number of Chad's answers were just plain wrong. Some examples:

  • I was neither born in, nor raised in, rural New Mexico.
  • I did not get a PhD from the University of Michigan. Neither did my wife, Patsy.
  • Patsy is not the mother of my daughter Kam, nor of my sister Betsy.
  • Patsy is not an expert in computational fluid dynamics.
  • Ken Kennedy did not coin the term \"embarrassingly parallel.\"
  • Pam McCorduck never worked for the Santa Fe Institute.
  • I cannot find any reference to the guys Chad claimed improved Sympletic Spacewar.

All of Chad's incorrect responses could have been fact-checked by simple Google queries.

AI Winters

Everybody wants to combine the conversational style offered by large language models with the reliability and breadth provided by Google. Now THAT sounds like a really good idea.

Artificial intelligence has a history of flush successes interspersed with fallow periods known as AI Winters. I am afraid that continued obsession with Chat Bots might lead to another AI Winter.

Truth

Steve Eddins revealed the Truth behind ChatGPT with this internal MathWorks Yammer post.

\"\"


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/my-chat-with-chatgpt/", + + + + + + "date_published": "2023-02-22T02:06:53-07:00", + "date_modified": "2023-02-22T02:06:53-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/grafix-users-guide/", + "title": "Grafix Users Guide", + "summary": null, + "content_text": "This is a quick look at Grafix, our tool for exploring matrices via 3-D computer graphics. ContentsMatricesAxisRxRyRzTxTyTzSSwitchesPitch, Roll, YawStart, Reset, VizApps/taxiApps/takeoffPropInfoExercisesSoftwareMatricesThe word matrix comes from the Latin word mater, which means mother or origin. Matrices provide the origins of much of modern applied mathematics and computational science.Grafix is a study of the matrices that describe rotation, translation and scaling of objects moving in three-dimensional space. These matrices are the building blocks of today's computer graphics and are essential to all popular video games, to all CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films. and to MATLAB's Handle Graphics.MATLAB is short for Matrix Laboratory. Matrices are also the foundation of MATLAB and of MathWorks.The homogeneous coordinates system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an objec in the first three components and, for now, a one as the fourth component, e.g. [x,y,z,1]',The matrices, which we collectively denote by M, are always shown in the panel in our displays. Here is an animation of one important example. Do you see the pattern in the evolving elements of this M? How are they related to each other? How long before they repeat? AxisHere is the coordinate system used by view(3), MATLAB's default projection of our three-dimensional physical world onto the two-dimensional computer display. The positive x-axis goes up and to the right on the screen, the positive y-axis goes up and to the left, and the positive z-axis goes straight up. RxThe three knobs at the lower right of the Grafix window allow you to vary the angles of Rx, Ry and Rz. Here are snapshots of the resulting motion. The Rx knob produces rotation about the x-axis, leaving x unchanged while rotating y and z. RyRy, rotation about the y-axis, leaves y unchanged while rotating x and z. RzAnd, Rz, rotation about the z-axis, leaves z unchanged while rotating x and y. TxThe three sliders at the lower left of the Grafix window control matrices with values in the fourth column. Multiplying a vector by Tx, which has a nonzero element in the first row, produces a horizontal movement in the direction of the x-axis. TyTy, with a nonzero in the second row, is translation in the direction of the y-axis. TzAnd, Tz is translation in the z direction. SThe fourth slider controls S, a diagonal matrix with a single scaling factor for all three axes.The use of matrix multiplication allows translations and scaling to be combined with rotations and other operations in a uniform way. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs. SwitchesThe switch on the left provides other objects that we will introduce later. The switch on the right provides different views of three dimensions. The yz plane view is shown here. Pitch, Roll, YawPitch, roll and yaw are often used to describe the motion of aircraft and spacecraft. These terms are closely related to the rotations Rx, Ry and Rz. The Pitch button animates the Rx knob. Here is a snapshot near one extreme of the resulting motion. Start, Reset, VizThe Start button restarts Grafix. The Reset button resets all knobs and sliders.The Viz button turns off the display of buttons, knobs, sliders, and switches. A small button, emphasized here with color, but usually barely visible, turns the display back on. Apps/taxiGrafix is programable, in a primitive sort of way. Apps are Grafix programs. Taxi is a small app. This is a snapshot. Apps/takeoffWhen the takeoff app first appeared, I thought it was a bug in the code for Grafix.You can see the takeoff program by entering type takeoff at the MATLAB command prompt. You can also edit takeoff. PropOne of my favorite animations employs the rotations from the Matrices section to drive the propeller alone. InfoThe info button is a link to this User's Guide. ExercisesWhat color is the beacon on top of the plane?Demonstrate how matrix-vector multiplication, Mv, of a position vector, v = [x,y,z,1]', by a 4-by-4 matrix M, achieves a rotation, translation or scaling.Describe the evolution of the matrix values in the Matrices and prop animations.What angles are involved in the snapshots shown for Rx, Ry and Rz?Why is the plane in the Pitch animation upside down?What angles and what matrices characterize the extremes of the Pitch animation?Write another app like taxi and takeoff.SoftwareThe MATLAB code for Grafix is available here.Get the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

This is a quick look at Grafix, our tool for exploring matrices via 3-D computer graphics.

\"\"

Contents

Matrices

The word matrix comes from the Latin word mater, which means mother or origin. Matrices provide the origins of much of modern applied mathematics and computational science.

Grafix is a study of the matrices that describe rotation, translation and scaling of objects moving in three-dimensional space. These matrices are the building blocks of today's computer graphics and are essential to all popular video games, to all CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films. and to MATLAB's Handle Graphics.

MATLAB is short for Matrix Laboratory. Matrices are also the foundation of MATLAB and of MathWorks.

The homogeneous coordinates system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an objec in the first three components and, for now, a one as the fourth component, e.g. [x,y,z,1]',

The matrices, which we collectively denote by M, are always shown in the panel in our displays. Here is an animation of one important example. Do you see the pattern in the evolving elements of this M? How are they related to each other? How long before they repeat?

\"\"

Axis

Here is the coordinate system used by view(3), MATLAB's default projection of our three-dimensional physical world onto the two-dimensional computer display. The positive x-axis goes up and to the right on the screen, the positive y-axis goes up and to the left, and the positive z-axis goes straight up.

\"\"

Rx

The three knobs at the lower right of the Grafix window allow you to vary the angles of Rx, Ry and Rz. Here are snapshots of the resulting motion. The Rx knob produces rotation about the x-axis, leaving x unchanged while rotating y and z.

\"\"

Ry

Ry, rotation about the y-axis, leaves y unchanged while rotating x and z.

\"\"

Rz

And, Rz, rotation about the z-axis, leaves z unchanged while rotating x and y.

\"\"

Tx

The three sliders at the lower left of the Grafix window control matrices with values in the fourth column. Multiplying a vector by Tx, which has a nonzero element in the first row, produces a horizontal movement in the direction of the x-axis.

\"\"

Ty

Ty, with a nonzero in the second row, is translation in the direction of the y-axis.

\"\"

Tz

And, Tz is translation in the z direction.

\"\"

S

The fourth slider controls S, a diagonal matrix with a single scaling factor for all three axes.

The use of matrix multiplication allows translations and scaling to be combined with rotations and other operations in a uniform way. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.

\"\"

Switches

The switch on the left provides other objects that we will introduce later. The switch on the right provides different views of three dimensions. The yz plane view is shown here.

\"\"

Pitch, Roll, Yaw

Pitch, roll and yaw are often used to describe the motion of aircraft and spacecraft. These terms are closely related to the rotations Rx, Ry and Rz. The Pitch button animates the Rx knob. Here is a snapshot near one extreme of the resulting motion.

\"\"

Start, Reset, Viz

The Start button restarts Grafix. The Reset button resets all knobs and sliders.

The Viz button turns off the display of buttons, knobs, sliders, and switches. A small button, emphasized here with color, but usually barely visible, turns the display back on.

\"\"

Apps/taxi

Grafix is programable, in a primitive sort of way. Apps are Grafix programs. Taxi is a small app. This is a snapshot.

\"\"

Apps/takeoff

When the takeoff app first appeared, I thought it was a bug in the code for Grafix.

You can see the takeoff program by entering type takeoff at the MATLAB command prompt. You can also edit takeoff.

\"\"

Prop

One of my favorite animations employs the rotations from the Matrices section to drive the propeller alone.

\"\"

Info

The info button is a link to this User's Guide.

\"\"

Exercises

  • What color is the beacon on top of the plane?
  • Demonstrate how matrix-vector multiplication, Mv, of a position vector, v = [x,y,z,1]', by a 4-by-4 matrix M, achieves a rotation, translation or scaling.
  • Describe the evolution of the matrix values in the Matrices and prop animations.
  • What angles are involved in the snapshots shown for Rx, Ry and Rz?
  • Why is the plane in the Pitch animation upside down?
  • What angles and what matrices characterize the extremes of the Pitch animation?
  • Write another app like taxi and takeoff.

Software

The MATLAB code for Grafix is available here.


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/grafix-users-guide/", + + + + + + "date_published": "2023-02-10T18:36:06-07:00", + "date_modified": "2023-02-10T18:36:06-07:00", + + "author": "MathWorks Blogs" + + }, + + { + "id": "https://hpc.social/commercial-blog/2023/matrices-in-action-grafix-2-0/", + "title": "Matrices In Action, Grafix 2.0", + "summary": null, + "content_text": "The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films, and to most popular video games.ContentsGrafix 2.0RotationsPitch, Roll, and YawTranslationsHorizontal and VerticalScalingsLarger and SmallerSuggestionsGrafix 2.0Here is the opening screen from version 2.0 of Grafix, my tool for investigating the matrices involved in 3-D computer graphics. The MATLAB code for Grafix is availble here.I am interested in the matrix in the panel, which I call M. Many matrices like this one describe the dyamic transformations to be made on a set of target objects in a complex three-dimensional scene. This particular M is the product of a scaling and a rotation that results in the size and orientation of the plane shown.I also want to point out the coordinate axes being used. This is view(3), MATLAB's default 3-D cordinate system. The positive $x$-axis goes up and to the right on the screen, the positive $y$-axis up and to the left, and the positive $z$-axis goes straight up. RotationsThe homogeneous coordinates system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an object in the first three components and, for now, a one as the fourth component, eg. [ $x$, $y$, $z$, 1 ]',Rotations are described by products of these matrices, each of which operates on only two of the first three components of the vector. The first matrix, $R_x$, leaves $x$ unchanged while it rotates $y$ and $z$. The second matrix, $R_y$, leaves $y$ unchanged while it rotates $x$ and $z$. And the third matrix, $R_z$, leaves $z$ unchanged while it rotates $x$ and $y$.$$ R_x(\\theta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & \\cos{\\theta} & -\\sin{\\theta} & 0 \\\\ 0 & \\sin{\\theta} & \\cos{\\theta} & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$$$ R_y(\\theta) = \\left[ \\begin{array}{rrrr} \\cos{\\theta} & 0 & -\\sin{\\theta} & 0 \\\\ 0 & 1 & 0 & 0 \\\\ \\sin{\\theta} & 0 & \\cos{\\theta} & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$$$ R_z(\\theta) = \\left[ \\begin{array}{rrrr} \\cos{\\theta} & -\\sin{\\theta} & 0 & 0 \\\\ \\sin{\\theta} & \\cos{\\theta} & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$Pitch, Roll, and YawThe terms pitch, roll and yaw are often used to describe the motion of vehicles like aircraft, marine craft, and spacecraft. Pitch is $R_x$, rotation about the $x$-axis. Roll is $R_y$, rotation about the $y$-axis. And yaw is $R_z$, rotation about the $z$-axis. TranslationsTranslations are described by matrices with values in the fourth column. Multiplying a vector by one of these matrices produces a translation in the direction of the corresponding axis.$$ T_x(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & \\delta \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$$$ T_y(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & \\delta \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$$$ T_z(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & \\delta \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$While it is true that translations could be accomplished simply by adding the increment to the specified coordiate, the use of matrix multiplication allows translations to be combined in a uniform way with rotations and other operations. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.Horizontal and VerticalInspired by David Singmaster's notation for Rubik's cubes, L, R, B, F, U, and D, we can use the descriptive terms left and right for horizontal motion in the $x$ direction; back and forth for horizontal motion in the $y$ direction; and up and down for vertical motion in the $z$ direction.$T_x$, left and right. $T_y$, back and forth. $T_z$, up and down. ScalingsThis matrix applies a single scaling factor to all three axes.$$ S(\\sigma) = \\left[ \\begin{array}{rrrr} \\sigma & 0 & 0 & 0 \\\\ 0 & \\sigma & 0 & 0 \\\\ 0 & 0 & \\sigma & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$Larger and Smaller$S$ SuggestionsRefresh your browser to syncronize the animations.Download your own self-archiving copies ofGrafixQubeGet the MATLAB code (requires JavaScript) Published with MATLAB® R2023a", + "content_html": "

The 4-by-4 matrices in the panels on the following screenshots are at the heart of computer graphics. They describe objects moving in three-dimensional space and are essential to MATLAB's Handle Graphics, to CAD (Computer Added Design) packages, to CGI (Computer Graphics Imagery) in films, and to most popular video games.

Contents

Grafix 2.0

Here is the opening screen from version 2.0 of Grafix, my tool for investigating the matrices involved in 3-D computer graphics. The MATLAB code for Grafix is availble here.

I am interested in the matrix in the panel, which I call M. Many matrices like this one describe the dyamic transformations to be made on a set of target objects in a complex three-dimensional scene. This particular M is the product of a scaling and a rotation that results in the size and orientation of the plane shown.

I also want to point out the coordinate axes being used. This is view(3), MATLAB's default 3-D cordinate system. The positive $x$-axis goes up and to the right on the screen, the positive $y$-axis up and to the left, and the positive $z$-axis goes straight up.

\"\"

Rotations

The homogeneous coordinates system used in modern computer graphics makes it possible to describe rotations, translations and many other operations with 4-by-4 matrices. These matrices operate on vectors with the position of an object in the first three components and, for now, a one as the fourth component, eg. [ $x$, $y$, $z$, 1 ]',

Rotations are described by products of these matrices, each of which operates on only two of the first three components of the vector. The first matrix, $R_x$, leaves $x$ unchanged while it rotates $y$ and $z$. The second matrix, $R_y$, leaves $y$ unchanged while it rotates $x$ and $z$. And the third matrix, $R_z$, leaves $z$ unchanged while it rotates $x$ and $y$.

$$ R_x(\\theta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & \\cos{\\theta} & -\\sin{\\theta} & 0 \\\\ 0 & \\sin{\\theta} & \\cos{\\theta} & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

$$ R_y(\\theta) = \\left[ \\begin{array}{rrrr} \\cos{\\theta} & 0 & -\\sin{\\theta} & 0 \\\\ 0 & 1 & 0 & 0 \\\\ \\sin{\\theta} & 0 & \\cos{\\theta} & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

$$ R_z(\\theta) = \\left[ \\begin{array}{rrrr} \\cos{\\theta} & -\\sin{\\theta} & 0 & 0 \\\\ \\sin{\\theta} & \\cos{\\theta} & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

Pitch, Roll, and Yaw

The terms pitch, roll and yaw are often used to describe the motion of vehicles like aircraft, marine craft, and spacecraft. Pitch is $R_x$, rotation about the $x$-axis.

\"\"

Roll is $R_y$, rotation about the $y$-axis.

\"\"

And yaw is $R_z$, rotation about the $z$-axis.

\"\"

Translations

Translations are described by matrices with values in the fourth column. Multiplying a vector by one of these matrices produces a translation in the direction of the corresponding axis.

$$ T_x(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & \\delta \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

$$ T_y(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & \\delta \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

$$ T_z(\\delta) = \\left[ \\begin{array}{rrrr} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & \\delta \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

While it is true that translations could be accomplished simply by adding the increment to the specified coordiate, the use of matrix multiplication allows translations to be combined in a uniform way with rotations and other operations. The arithmetic units on today's Graphics Processing Units, GPUs, are designed to do 4-by-4 matrix multiplications at speeds hundreds of times faster than general purpose Central Processing Units, CPUs.

Horizontal and Vertical

Inspired by David Singmaster's notation for Rubik's cubes, L, R, B, F, U, and D, we can use the descriptive terms left and right for horizontal motion in the $x$ direction; back and forth for horizontal motion in the $y$ direction; and up and down for vertical motion in the $z$ direction.

$T_x$, left and right.

\"\"

$T_y$, back and forth.

\"\"

$T_z$, up and down.

\"\"

Scalings

This matrix applies a single scaling factor to all three axes.

$$ S(\\sigma) = \\left[ \\begin{array}{rrrr} \\sigma & 0 & 0 & 0 \\\\ 0 & \\sigma & 0 & 0 \\\\ 0 & 0 & \\sigma & 0 \\\\ 0 & 0 & 0 & 1 \\end{array} \\right] $$

Larger and Smaller

$S$

\"\"

Suggestions

Refresh your browser to syncronize the animations.

Download your own self-archiving copies of


Get the MATLAB code

Published with MATLAB® R2023a

", + "url": "https://hpc.social/commercial-blog/2023/matrices-in-action-grafix-2-0/", + + + + + + "date_published": "2023-02-04T13:00:33-07:00", + "date_modified": "2023-02-04T13:00:33-07:00", + + "author": "MathWorks Blogs" + + } + + ] +} diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000..54cfe1a --- /dev/null +++ b/feed.xml @@ -0,0 +1,3791 @@ +Jekyll2025-01-27T19:54:42-07:00https://hpc.social/commercial-blog/feed.xmlhpc.social - Aggregated Commercial BlogVendor and commercial posts in the hpc.social communityhpc.socialinfo@hpc.socialCode for Sonic and Ten Sonic Movies2024-12-18T15:13:08-07:002024-12-18T15:13:08-07:00https://hpc.social/commercial-blog/2024/code-for-sonic-and-ten-sonic-movies +

Two previous blog posts, Dec. 12, 2024 and Nov. 16, 2024, introduced "Sonic", my new tool for incorporating sound in videos. Today's blog post includes a link to the MATLAB source code for Sonic, as well as links to new versions of ten examples.

+ + +

Contents

+
+ +
+ +

Code +

+

The MATLAB code for Sonic and all the examples is available in this 11 MB zip file.

+ +

+Sonic.zip +

+ +

Sonic +

+

There are two ways to generate the musical sounds. The three movies Warm-Up, TanSin and Blackjack use recordings of C-major scales played on three different pianos. All the other movies rely on resampling a single note from a trumpet, xylophone or piano.

+ +

The function sonic_examples(kases,n) is a driver for sonic. The first parameter, kases, is an integer vector of desired examples, 0 though 9. The second parameter, n, is the number of desired samples.

+ +
+
    +
  • n = 25 is very fast
  • +
  • n = 100 is reasonable
  • +
  • n = 200 is the default
  • +
  • n = 300 is overkill
  • +
+
+ +

Ten Movies +

+

Here are links to new versions of the animated videos, and the final frames.

+ +

+0. Warm-Up +

+ +

+sonic_examples_0.mp4 +

+ +

+

+ +

+1. Lissajous +

+ +

+sonic_examples_1.mp4 +

+ +

+

+ +

+2. Mertens +

+ +

+sonic_examples_2.mp4 +

+ +

+

+ +

+3. TanSin +

+ +

+sonic_examples_3.mp4 +

+ +

+

+ +

+4. Van der Pol +

+ +

+sonic_examples_4.mp4 +

+ +

+

+ +

+5. VdP Derivative +

+ +

+sonic_examples_5.mp4 +

+ +

+

+ +

+6. Blackjack +

+ +

+sonic_examples_6.mp4 +

+ +

+

+ +

+7. Vibrating L-shaped Membrane +

+ +

+sonic_examples_7.mp4 +

+ +

+

+ +

+8. Recamán Sequence +

+ +

+sonic_examples_8.mp4 +

+ +

+

+ +

+9. Swinging Sticks +

+ +

+sonic_examples_9.mp4 +

+ +

+

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024b
+

+ +

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

+ +]]>MathWorks BlogsSonic Adds Sound to Logo, Recamán, Chaos2024-12-08T11:51:55-07:002024-12-08T11:51:55-07:00https://hpc.social/commercial-blog/2024/sonic-adds-sound-to-logo-recam%C3%A1n-chaos +

I introduced Sonic in my blog post last month. Today I will use Sonic to add sound to the graphics from three old posts, the vibrating L-shaped membrane, the Recamán sequence and the chaotic behavior of the Swinging Sticks.

+ + +

Contents

+ + +

Vibrating L-shaped Membrane +

+

For almost fifty years, I have wanted to hear the MathWorks logo. I have written about the L-shaped membrane many times, link #1, link #2, link #3.

+ +

+Click on this link and listen to the audio in a Sonic movie of the vibrating membrane. The sound is generated by resampling one tone from a xylophone.

+ +

And here is one frame from the movie.

+ +

+

+ +

Recamán +

+

The inventor of the Recamán sequence is a Columbian mathematician, Bernardo Recamán Santos. The sequence is A005132 in the OEIS, the On-Line Encyclopedia of Integer Sequences. Here is my blog post.

+ +

+Click on this link and the listen to the audio in a Sonic movie of the Recamán sequence. The sound is generated by resampling the middle-C key of a piano.

+ +

Here is one frame from the movie.

+ +

+

+ +

Swinging Sticks +

+

The Swinging Sticks is a kinetic sculpture that exhibits chaotic behavior. I have added sound to my blog post about the sticks.

+ +

+Here is the link to a Sonic movie of the Swinging Sticks. The audio is also generated by resampling one tone from a xylophone.

+ +

And, here is one frame from the movie.

+ +

+

+ +

Triple feature +

+

+Click on this link to see -- and hear-- all three movies.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsLights, Camera, Action — and Sound2024-11-16T06:03:58-07:002024-11-16T06:03:58-07:00https://hpc.social/commercial-blog/2024/lights-camera-action-and-sound +

I am very excited to incorporate sound in animations. This blog post has five examples with links to videos enclosed in '+ + + +'.

+ + +

Contents

+
+ +
+ +

Mertens +

+

I began making animations with sound while investigating the Mertens Conjecture. The OEIS page offers an opportunity to listen to the Mertens sequence, but I wanted more control.

+ +

The resample function is the Signal Processing Toolbox resamples a signal at a fraction, p/q, times the original sample rate. The sound in this Mertens example is generated from a recording of piano playing middle C that is resampled to simulate the other notes.

+ +

Here is a link to a 40-second video of M(n) and sqrt(n) for n = 200. (Homework: How long would the video last if n = 10^8? Post your answers in the comments.)

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+https://blogs.mathworks.com/cleve/files/mertens.mp4 +

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

Here is a static graphic, the last frame of the video.

+ +

+

+ +

Lissajous +

+

You may well have seen Lissajous curves before, but have you ever listened to them? They were first studied extensively by Jules Lissajous, a nineteenth-century French physicist. There are many Lissajous curves similar to the following, where the trajectory in the x-y plane is described by two functions of a parameter t.

+ +
+n = 200;
+t = 3*pi*(-1:2/n:1);
+x = 5*cos(t)+3*cos(5/3*t);
+y = 5*sin(t)-sin(5/3*t);
+
+

This 40-second video employs sound produced by resampling a note from a xylophone.

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+https://blogs.mathworks.com/cleve/files/lissajous.mp4 +

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

Here is the last frame.

+ +

+

+ +

tansin +

+

I have used variations of this function many times.

+ +
F = @(x) tan(sin(x))+sin(tan(x));
+

When x approaches an integer multiple of pi, both sin(x) and tan(x) approach zero, so F(x) also approaches zero. But when x approaches an odd multiple of pi/2, tan(x) becomes infinite, so both sin(tan(x)) and F(x) oscillate infinitely often.

+ +

Here is a link to a 45-second video of F(x) for n = 200 evenly spaced values of x between -2pi and 2pi. If we increase n, we would see more of the oscillations at the singularities. The sound comes from resampling a single note played by a trumpet.

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+https://blogs.mathworks.com/cleve/files/tansin.mp4 +

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+

+ +

Van der Pol +

+

Quoting Wikipedia.

+ +
  In the study of dynamical systems, the van der Pol oscillator
+  (named for Dutch physicist Balthasar van der Pol) is a
+  non-conservative, oscillating system with non-linear damping.
+

In this video, we see -- and hear -- the numerical solution, computed by ode45, of the Van der Pol equation at n points between t = 0 and t = 20. The damping parameter is mu = 2.

+ +

The sound comes from a recording of a student practicing a piano. In this case we have scales spanning four octaves, so no resampling is required.

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+https://blogs.mathworks.com/cleve/files/vanderpol.mp4 +

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+

+ +

Blackjack +

+

The card game Blackjack is another example that I use frequently; see "Simulating Blackjack" and MATLAB file exchange. The video shows a simulation of a few hundred hands, starting each hand with a $10 bet. The sound comes from a piano playing a C-major scale. Again, resampling is not necessary.

+ +

The emerging histograms in the video, and the static outcome in the final frame, show the percentages observed for each of ten possible outcomes. The histograms can be compared with those in the "Simulating Blackjack" article that describes the use of the Parallel Computing Toolbox to play 10,000 hands with these results.

+ +
bjpercent
+
+
    "   Push, player and dealer have equal totals not exceeding 21             "
+    "   Win, player's total is greater than dealer's and does not exceed 21    "
+    "   Lose, dealer's total is greater than player's and does not exceed 21   "
+    "   Blackjack, player has 21 with two cards, dealer does not               "
+    "                                                                          "
+    "   $-40     0.03     Split and double, lose both                          "
+    "   $-30     0.17     Split and double, lose one                           "
+    "   $-20     4.71     Split or double, lose                                "
+    "   $-10    42.94     Lose                                                 "
+    "   $  0     9.06     Push                                                 "
+    "   $+10    32.13     Win                                                  "
+    "   $+15     4.44     Blackjack                                            "
+    "   $+20     6.19     Split or double, win                                 "
+    "   $+30     0.28     Split and double, win one                            "
+    "   $+40     0.06     Split and double, win both                           "
+
+

(Homework. This simulation happens to have three hands with the very rare swings of more than $20. Find the hand numbers where such rare events occur. Post your answers in the comments. Hint: watch the emerging histograms.)

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+https://blogs.mathworks.com/cleve/files/blackjack.mp4 +

+ +

++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +

+

+ +

+

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024b
+

+ +
+ +]]>MathWorks BlogsMöbius, Mertens and Redheffer2024-10-23T00:53:53-06:002024-10-23T00:53:53-06:00https://hpc.social/commercial-blog/2024/m%C3%B6bius-mertens-and-redheffer +

Recently, I have made a series of blog posts about Redheffer matrices and the Mertens conjecture. After each of the posts, readers and colleagues offered suggestions to speed up the calculations. Here is a summary of what I have learned.

+ + +

Contents

+ + +

Möbius Function +

+

+

+ +

The function named after the mid-nineteenth century German mathematician August Möbius is fundamental to the study of prime numbers. The Möbius function maps the positive integers onto -1,0 and +1.

+ +
  mu(n) = 0 if n has a repeated prime factor,
+        = (-1)^(number prime factors) if the factors of n are not repeated
+

Here is my code for the Möbius function. It relies on factor(n) which uses a sieve to find the prime factors of n.

+ +
  function mu = mobius(n)
+     % mu = mobius(n) returns mu(1:n).
+     mu = -eye(1,n);
+     for k = 2:n
+         f = factor(k);
+         d = diff([1 f]);
+         if any(d == 0)
+             mu(k) = 0;
+         else
+             mu(k) = (-1)^length(f);
+         end
+     end
+  end
+

Here is a graph of mu(n) for n = 1:40. For example, mu(29:31) are all -1 because 29 and 31 are both prime and 30 has an odd number of prime factors, 2, 3 and 5.

+ +
+    mu = moebius(40);
+    plot(1:40,mu,'.-','linewidth',1.5,'markersize',16)
+    axis([-242-1.51.5])
+    title('Möbius function')
+
+

Mertens Function +

+

+

+ +

The Mertens function is named after the late-nineteenth century Polish mathematician Franz Mertens. The function, which we denote by M(n), is simply the partial sums of the Möbius function. The MATLAB code is very short.

+ +
  function M = mertens(n)
+     % M = mertens(n) returns Mertens(1:n).
+     mu = moebius(n);
+     M = cumsum([1 mu(2:n)]);
+  end
+

Here is a graph of M(n) for n = 1:40.

+ +
+    M = mertens(40);
+    plot(1:40,M,'.-','linewidth',1.5,'markersize',16)
+    axis([-242-4.51.5])
+    title('Mertens function')
+
+

Redheffer Matrices +

+

+

+ +

The twentieth-century American mathematician Ray Redheffer, who was a professor at UCLA for 55 years, had a wide range of interests. He was the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.

+ +

The n-by-n Redheffer's matrix R(n) is a matrix of zeros and ones. For j > 1, the element R(k,j) equals one if j is a divisor of k. And importantly, for j = 1, the first column R(:,1) is all ones.

+ +
  function R = redheffer(n)
+     k = 1:n;
+     j = k';
+     R = (mod(k,j) == 0);
+     R(:,1) = 1;
+  end
+

Nick Higham put Redheffer's matrix in the MATLAB Gallery several years ago. Here is a spy plot of the 200-by-200.

+ +
+    R = gallery('redheff',200);
+    spy(R)
+    title('Redheffer')
+
+

OEIS +

+

In the Online Encyclopedia of Integer Sequences, the Mertens function is OEIS/A002321. One of the many cool features of the OEIS is "listen", which generates music driven by the sequences. Take a look -- and a listen -- to my 63 second movie about A002321.

+ +

+https://blogs.mathworks.com/cleve/files/mertens_plot.mp4 +

+ +

Ten Million +

+

Here are plots of M(1:n) with n ranging from 100 to 10 million. Each plot after the first also shows the range of the previous plot. I will discuss the red lines in the next section

+ +
+    load mertens M
+    tiledlayout(2,3)
+    for n = 10.^(2:7)
+        nexttile
+        mertens_plot(M(1:n))
+    end
+
+

Mertens Conjecture +

+

The red lines above are plots of ±sqrt(n). They clearly bound M(n) for n up to 10 million. The Mertens Conjecture is that this holds for all n.

+ +
  |M(n)| < sqrt(n) for all n > 0
+

The conjecture appears in a 1885 letter from Thomas Stieltjes to Charles Hermite and in a 1897 paper by Mertens.

+ +

+Wikipedia says

+ +
  It is a striking example of a mathematical conjecture proven false
+  despite a large amount of computational evidence in its favor.
+

Conjecture is False +

+

In 1985, 100 years after the Stieltjes letter, Andrew Odlyzko and Herman te Riele proved that the conjecture is false. Their proof is indirect. They prove the existence of infinitely many n for which

+ +
  |M(n)|/sqrt(n) > 1.06
+

But they do not know the value of any particular n. They informally estimate that such an n would be greater than 10^30 and probably much larger.

+ +

Matrices +

+

Let's get back to the world of matrices. It is not obvious, but is true, that the determinants of Redheffer matrices are equal to the Mertens function.

+ +
  det(R(n)) = M(n)
+

So, if I could have proved that

+ +
  |det(R(n))| < sqrt(n) for all n > 0
+

I would have had a proof of the Riemann Hypothesis.

+ +

It might appear that I am out of the clutches of number theory and safely back to matrix computation. But that illusion does not last for long.

+ +

Sparsity +

+

The 0(n^3) memory required by the Redheffer matrix from the gallery runs out of steam quickly. We need to take advantage of sparsity. This function generates the sparse representation of a Redheffer matrix directly.

+ +
  function R = spredheffer(n)
+      j = (1:n)';
+      k = ones(n,1);
+      m = n;
+      for i = 2:n
+          t = [1 i:i:n];
+          p = length(t);
+          j(m+(1:p)) = t;
+          k(m+(1:p)) = i;
+          m = m+p;
+      end
+      R = sparse(k,j,1,n,n);
+  end
+

Computing Mertens +

+

Here are five methods for computing the Mertens function.

+ +

#1 +

+

The first simply takes the determinant of the Redheffer matrix in the gallery.

+ +
  M = det(gallery('redheff',n))
+

#2 +

+

The sparse Gaussian elimination function lu with one input and four sparse outputs is designed for solving sparse linear systems. Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to reduce fill-in while maintaining numerical stability. The determinant of the input matrix is the product of the four determinants of the output matrices. Two them are triangular and two are permutations, so it is easy, and quick, to compute their determinants.

+ +
  R = spredheffer(n);
+  [L,U,P,Q] = lu(R)
+  M = det(L)*det(U)*det(P)*det(Q);
+

#3 +

+

Pat Quillen realized that by interchanging the first and last columns, there would be little fill-in. We need only one determinant.

+ +
  R = spredheffer(n);
+  R(:,[1 n]) = R(:,[n 1]);
+  M = -det(R);
+

#4 +

+

A thoughtful reader of the blog submitted a suggestion based on the Schur complement. Suppose E is a block matrix,

+ +
  E = [A B
+       C D]
+

Schur's formula for the determinant of E is

+ +
  det(E) = det(D)*det(A - B*(D\C))
+

Apply this to R(n) with A the (1,1) entry, which is 1, and D the lower (n-1)-by-(n-1) submatrix, which is upper triangular with ones on the diagonal and determinant equal 1. This leads to method #4 which uses backslash with a sparse, unit, upper triangular matrix. There is a Redheffer matrix, but no determinant.

+ +
  S = spredheffer(n);
+  e = ones(n-1,1);
+  M = 1 - e'*(S(2:n,2:n)\e);
+

#5 +

+

Once we have generated R(n) and computed M(n), how do we get R(n+1) and M(n+1)? After several iterations of this approach, I found myself without any matrices and only the original definitions of Möbius and Mertens.

+ +
  mu = mobius(n);
+  M = cumsum([1 mu(2:n)]);
+

Performance +

+

Let's summarize the five methods. The first four generate a single, isolated value of M(n). Method #5 generates M(n) for all n from 1 to any specified maximum.

+ +
        matrix     function    dets    M
+
  #1    full       gallery       1     1
+  #2    sparse     lu            4     1
+  #3    sparse     swap          1     1
+  #4    sparse     \             0     1
+  #5    none       factor        0    many
+

Time in seconds to compute M(n) on my Lenovo T14 laptop running Windows.

+ +
    n    2e4      2e5      2e6     2e7
+
  #1    28.652     -        -       -
+  #2     0.344   21.77      -       -
+  #3     0.086    1.29    16.4
+  #4     0.055    0.65     6.7    70.1
+  #5     0.075    0.80    10.7   204.5
+ +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsExperience With Chatbots Generating MATLAB2024-10-07T14:31:38-06:002024-10-07T14:31:38-06:00https://hpc.social/commercial-blog/2024/experience-with-chatbots-generating-matlab +

A friend is investigating the use of generative AI in his classes. I asked two different popular chatbots to write MATLAB programs for a mathematically nontrivial problem. Both chatbots understood my query and both wrote plausible MATLAB programs, but one of the programs was not correct. My recommendation for coursework: carefully read and test programs produced by generative AI and repair any incorrect ones.

+ + +

Contents

+ + +

Redheffer, Mertens and Ahalt +

+

Frequent readers of this blog know about my recent obsession with Redheffer matrices and the Mertens conjecture. So, when my friend Stan Ahalt visited from North Carolina State a few days ago, and wanted to discuss the use of generative AI in the new Data Science curriculum, I suggested asking chatbots to write MATLAB programs that check the Mertens conjecture.

+ +

We logged onto the web sites for two different AI companies. Our query was the same at both sites.

+ +
Please write a MATLAB program to test the Mertens conjecture.
+

I was pleasantly surprised when both systems knew about MATLAB and understood the query. One of the systems replied:

+ +
Certainly! I'll create a MATLAB program to test the Mertens
+conjecture. First, let me briefly explain what the Mertens
+conjecture is, and then I'll provide the code.
+The Mertens conjecture states that the Mertens function M(n)
+is bounded by √n for all positive integers n. Mathematically,
+it can be expressed as:
+
|M(n)| ≤ √n for all n > 1
+
Where M(n) is the Mertens function, defined as the sum of
+the Möbius function μ(k) for all positive integers k up to n:
+
M(n) = Σ μ(k) for k = 1 to n
+
Here's a MATLAB program to test this conjecture.
+

Program number one +

+

The program from one of the web sites begins:

+ +
function M = test_Mertens(n)
+   % Function to test the Mertens conjecture for a given n
+   % Returns true if the conjecture holds for all values up to n, false otherwise
+

This is followed by code to sum the Möbius function and verify that abs(M) < sqrt(n). The crucial mobius is a straight-forward implementation of the definition. The code relies on MATLAB intrinsics, factor and unique.

+ +
function mu = mobius(k)
+   % Function to calculate the Möbius function of k
+   % Factorize k
+   p = factor(k);
+   % Check for square factors
+   if length(p) ~= length(unique(p))
+      mu = 0;
+   else
+      mu = (-1)^length(p);
+   end
+end
+

I was very pleased. The entire program is only 40 lines long, eminently readable, and correct.

+ +

Program number two +

+

The program from the other web site is more sophisticated. It knows enough about MATLAB to use its cumulative summation.

+ +
M = cumsum(mu);
+

Here is the crucial mobius function. At first glance, it looks OK. Is it?

+ +
function mu = mobius(n)
+   % Calculate Möbius function values up to n
+   mu = ones(1, n);
+   for i = 2:sqrt(n)
+      if mu(i) == 1
+         for j = i^2:i:n
+            if mod(j, i^2) == 0
+               mu(j) = 0;
+            else
+               mu(j) = -mu(j);
+            end
+         end
+      end
+   end
+end
+

As you have guessed, program number two is not correct. Even its own plot reveals that something is amiss.

+ +

Program number three +

+

Let's return to the second Web site and make a more specific query.

+ +
Please write a MATLAB program that uses Redheffer
+matrices to test the Mertens conjecture.
+

The resulting program generates a Redheffer matrix with

+ +
R = zeros(n,n);
+for i = 1:n
+   for j = 1:n
+      if mod(i, j) == 0
+         R(i, j) = 1;
+      end
+   end
+end
+

It computes the determinant to obtain the Mertens value, M(n). It is able to confirm the conjecture for all the n in the given range.

+ +

What's wrong now? Look at the plot. The computed M(n) is always equal to one. Why?

+ +

+

+ +

Happy Ending +

+

Program number three can be repaired by adding one line to the code that generates R. What is that line? Respond in the comments.

+ +

Look at the good side. Instead of just using AI to do homework, we can challenge students to check the results carefully and repair any incorrect programs.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsRedheffer and Mertens, Accelerated2024-09-30T14:28:40-06:002024-09-30T14:28:40-06:00https://hpc.social/commercial-blog/2024/redheffer-and-mertens-accelerated +

Shortly after I published the second post about the Mertens conjecture, a reader's comment suggested a new approach to computing Redheffer determinants and the Mertens function. It is now possible to compute a half-million values of the Mertens function in about five hours.

+ + +

Contents

+ + +

Block matrices +

+

The comment references the Wikipedia article on block matrices.

+ +
  You could also consider the matrix as a 2x2 block matrix and
+  use the formula for the determinant of a block matrix [1].
+      A = redheffer(n);
+      M = full(A(1,1) - A(1, 2:end) * (A(2:end,2:end) \ A(2:end, 1)));
+  Since the (n-1)x(n-1) block is upper triangular, the solve becomes
+  a back-substitution.
+

+redmert +

+

My new program is named redmert, an abbreviation of Redheffer-Mertens. It uses the fact that redheffer(n) is obtained from redheffer(n-1) by appending the last column.

+ +

Let R(n) denote the upper or right-triangular part of redheffer(n).

+ +
  R(n) = triu(redheffer(n))
+

+R(n) is sparse, upper triangular and has ones on the diagonal. The indices of the nonzeros in the last column of R(n) are the factors of n. For example, here is R(8).

+ +
+R8 = full(triu(redheffer(8)))
+
+
R8 =
+     1     1     1     1     1     1     1     1
+     0     1     0     1     0     1     0     1
+     0     0     1     0     0     1     0     0
+     0     0     0     1     0     0     0     1
+     0     0     0     0     1     0     0     0
+     0     0     0     0     0     1     0     0
+     0     0     0     0     0     0     1     0
+     0     0     0     0     0     0     0     1
+
+

The idea behind redmert is to compute a sequence of Redheffer matrices, R, and associated values of the Mertens function, M.

+ +
  [M,R] = redmert(p,R)
+

The input is a scalar integer p, the desired sequence length, and a sparse matrix R, the upper triangle of a Redheffer matrix of some order, n. The output is an integer vector of values M(n+1:n+p) and the upper triangle of the Redheffer matrix of order n+p. This output R can then be used as the input R in another call to redmert.

+ +

The sequence is started with an empty R.

+ +

For example,

+ +
+[M,R] = redmert(8,[]);
+
+

The output is mertens(n), n = 1:8, and R8 from the example above.

+ +
+MR8 = full(R)
+
+
+M =
+     1
+     0
+    -1
+    -1
+    -2
+    -1
+    -2
+    -2
+R8 =
+     1     1     1     1     1     1     1     1
+     0     1     0     1     0     1     0     1
+     0     0     1     0     0     1     0     0
+     0     0     0     1     0     0     0     1
+     0     0     0     0     1     0     0     0
+     0     0     0     0     0     1     0     0
+     0     0     0     0     0     0     1     0
+     0     0     0     0     0     0     0     1
+
+

Inside redmert +

+

The entire code for redmert is twelve lines long. It manipulates sparse matrices and uses sparse backslash to solve a triangular system. Nothing else is required.

+ +

Lines 7 and 8 generate the last column of R and lines 9 and 10 implement the new idea about block matrices.

+ +
+dbtype redmert
+
+
+1     function [M,R] = redmert(p,Rin)
+2         M = zeros(p,1);
+3         R = sparse(triu(Rin));
+4         n = size(R,1);
+5         for q = 1:p
+6             n = n+1;
+7             k = (mod(n,1:n) == 0);
+8             R(k,n) = 1;
+9             e = ones(n-1,1);
+10            M(q) = R(1,1) - e'*(R(2:n,2:n)\e);
+11        end
+12    end
+
+

mertens_plot +

+

It takes about five hours for redmert to compute half a million values on my laptop.

+ +
   n = 0.5e6;
+   p = 0.5e4;
+   R = sparse([]);
+   M = [];
+   for k = p:p:n
+       disp(k)
+       [Mout,R] = redmert(p,R);
+       M = [M; Mout];
+       mertens_plot(M)
+   end
+
+mertens_plot
+
+

Postscript +

+

I started this project by being surprised to find myself computing determinants. Now I am back to my long-time position disparaging determinants. They have been replaced by a good friend, backslash.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsRedheffer and Mertens, Continued2024-09-27T12:28:39-06:002024-09-27T12:28:39-06:00https://hpc.social/commercial-blog/2024/redheffer-and-mertens-continued +

Shortly after I posted Redheffer, Mertens and One-Million Dollars a few days ago, Mathworks' Pat Quillen made an important observation about computing the Mertens function.

+ + +

Contents

+ + +

+mertens +

+

The elements in the first column of the Redheffer matrix, A = redheffer(n), are all equal to one. That dense column does not make MATLAB happy about computing det(A) . However, the last column of A has only a few nonzero elements and so Pat suggested interchanging the first and last columns before computing the determinant. This makes a world of difference. (Thanks, Pat.)

+ +
typemertens
+
+
+function M = mertens(n)
+    if n > 1
+        A = redheffer(n);
+        A(:,[1 n]) = A(:,[n 1]);
+        M = -round(det(A));
+    else
+        M = 1;
+    end
+end
+
+

The time required to compute det(A) varies with the sparsity of the last column, but it is only a little more than the time to compute redheffer(n) in the first place.

+ +
mertens2_time
+
+

Mertens function +

+

Pat's change makes it possible to take n up to a quarter of a million, and beyond. Here is a new plot of the Mertens function M(n) and the sqrt(n) bounds of the Mertens conjecture.

+ +
mertens_plot
+
+

There are a quarter of a million points in the data for this plot. Fortunately, the .PNG file used for the blog only needs to sample the data.

+ +

Mertens computation +

+

The job that I ran on my laptop to compute one-quarter of a million values of M(n) is still running. It currently is past 0.35 million and takes less than two seconds for each value. I may keep the job running over the weekend, just to see how far it gets.

+ +

The task is embarrassingly parallel. If I had a pool with a million processors, I could have each processor compute one value. I would then just have to collect the results, but that doesn't involve any arithmetic.

+ +

Mertens conjecture +

+

You can see from the plot why late 19th- and early 20th-century mathematicians believed that the Mertens conjecture,

+ +
   |M(n)| < sqrt(n) for all n,
+

might be true. It is hard to imagine that the plot of M(n) ever escapes sqrt(n).

+ +

We now know that M(n) eventually does escape, but only barely and only briefly. We also know that all the computation we can do with determinants of Redheffer's matrix will never prove or disprove the conjecture or win that million-dollar prize.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsRedheffer, Mertens and One-Million Dollars2024-09-23T17:12:35-06:002024-09-23T17:12:35-06:00https://hpc.social/commercial-blog/2024/redheffer-mertens-and-one-million-dollars +

I didn't know anything about these topics until a couple of weeks ago. Now I can't stop thinking about them.

+ +
+
    +
  • Redheffer's matrix has been in the MATLAB Gallery for a long time, but I have ignored it .
  • +
  • Redheffer's matrix can be used to compute Mertens function and investigate the Mertens conjecture.
  • +
  • A proof of the Mertens conjecture would also provide a proof of the Riemann hypothesis.
  • +
  • For nearly a century, all the available computational evidence indicated that the Mertens conjecture was likely to be true.
  • +
  • The Riemann hypothesis is the most important unsolved problem in mathematics and wins a Clay prize worth one-million dollars.
  • +
  • MATLAB's sparse matrix functions turn out to be useful in an investigation of Redheffer's matrix and the Mertens conjecture.
  • +
  • However, it has been known since 1985 that the Mertens conjecture is false.
  • +
+
+ + +

Contents

+ + +

Redheffer's Matrix +

+

+Raymond Redheffer (1921-2005) was an American mathematician, a professor at UCLA for 55 years, the author of several popular textbooks, the inventor of the electronic game Nim and, with Ray and Charles Eames, the creator of a four-meter long poster Men of Modern Mathematics.

+ +

Redheffer's matrix is a matrix of zeros and ones. A(k,j) equals one if j is a divisor of k. In addition, the first column is all ones.

+ +
  function A = redheffer(n)
+      k = 1:n;
+      j = k';
+      A = (mod(k,j) == 0);
+      A(:,1) = 1;
+  end
+

Or

+ +
  A = gallery('redheff',n)
+

Here is the 10-by-10.

+ +
+    A = redheffer(10);
+    disp(full(A))
+
+
+     1     1     1     1     1     1     1     1     1     1
+     1     1     0     1     0     1     0     1     0     1
+     1     0     1     0     0     1     0     0     1     0
+     1     0     0     1     0     0     0     1     0     0
+     1     0     0     0     1     0     0     0     0     1
+     1     0     0     0     0     1     0     0     0     0
+     1     0     0     0     0     0     1     0     0     0
+     1     0     0     0     0     0     0     1     0     0
+     1     0     0     0     0     0     0     0     1     0
+     1     0     0     0     0     0     0     0     0     1
+
+

And here is a spy plot of the 200-by-200.

+ +
+    A = redheffer(200);
+    spy(A)
+    title('redheffer(200)')
+
+

Möbius Function +

+

The Möbius function was introduced in 1832 by German mathematician August Möbius and is ubiquitous in the study of prime numbers. For positive integers n, μ(n) is

+ +
+
    +
  • +0 if n has a squared prime factor,
  • +
  • ++1 if n is square-free and has an even number of prime factors,
  • +
  • +-1 if n is square-free and has an odd number of prime factors.
  • +
+
+ +

Mertens Function +

+

+Franz Mertens (1840-1927) was a Polish mathematician who spent most of his career in Austria at the University of Vienna. Here is a link to a biography of Mertens at the University of St. Andrews MacTutor project.

+ +

The Mertens function is sum of values of the Möbius function. For a positive integer n, the Mertens function is

+ +
   M(n) = sum(μ(1:n))
+

So M(n) is the difference between the number of square-free integers with an even number of prime factors and those with an odd number.

+ +

This graphic shows M(n) for n = 1:100000.

+ +
+    mertens_plot_2
+
+

Mertens Conjecture +

+

The Mertens function M(n) fluctuates wildly and grows slowly with increasing n. The graphic shows that M(n) is easily bounded by of sqrt(n) and -sqrt(n), at least for n less than 100k. The Mertens conjecture is that this continues for larger n.

+ +
  -sqrt(n) < M(n) < sqrt(n) for all n
+

The conjecture was included in a letter from Stieltjes to Hermite in 1895 and in a paper by Mertens in 1897. The result is important since a proof of the Mertens conjecture would imply the truth of the Riemann hypothesis.

+ +

Mertens Meets Redheffer +

+

I became interested in all this when I learned that the determinant of the MATLAB Gallery matrix which I have ignored for years is related to the Riemann hypothesis and the million-dollar prize.

+ +
  M(n) = det(gallery('redheff',n))
+

I know very little about the distribution of prime numbers and computing values of the Möbius function. On the other hand, I know a lot about numerical linear algebra and computing determinants.

+ +

In general, I am dead set against computing determinants. They are often used to check for singularity or to somehow compute eigenvalues. But here the determinant is an integer counter of modest size.

+ +

Redheffer Sparsity +

+

Computing M(n) directly with det(redheffer(n)) requires O(n^2) space and O(n^3) time and is not practical for large n.

+ +

However, A = redheffer(n) is modestly sparse. Here is the fraction of nonzeros.

+ +
  s = nnz(A)/n^2
+
+    disp(sparsity)
+
+
+       n         s    
+    _____    ________
+    10000    0.001037
+    20000    0.000553
+    30000    0.000382
+    40000    0.000294
+    50000    0.000239
+    60000    0.000203
+    70000    0.000176
+    80000    0.000156
+    90000    0.000139
+    1e+05    0.000127
+
+

Taking advantage of this sparsity and the MATLAB tools for sparse matrix computation provide linear space complexity and perhaps O(n^2) time complexity.

+ +

+redheffer +

+

Here is MATLAB code to generate a sparse redheffer(n) without creating any full intermediate matrices.

+ +
type    redheffer
+
+
+    function A = redheffer(n)
+        j(1:n) = (1:n)';
+        k(1:n) = 1;
+        m = n;
+        for i = 2:n
+            t = [1 i:i:n]';
+            p = length(t);
+            j(m+(1:p)) = t;
+            k(m+(1:p)) = i;
+            m = m+p;
+        end
+        A = sparse(k,j,1,n,n);
+    end
+
+

As expected, we see that the execution time for redheffer(n) is a linear function of n. (The space required also grows linearly.)

+ +
+    redheffer_time
+
+

Sparse LU +

+

The MATLAB Gaussian elimination function lu with one sparse input and four sparse outputs is designed for solving sparse linear systems.

+ +
  [L,U,P,Q] = lu(A)
+

Written primarily by Tim Davis and included in his UMFPACK package, the function uses an unsymmetric pattern multifrontal pivoting strategy to find permutations P and Q so that L is lower triangular, U is upper triangular and

+ +
  P*A*Q = L*U
+

Consequently, the determinant of A is the product of four easily computed determinants.

+ +
  det(A) = det(L)*det(U)*det(P)*det(Q)
+

The pivoting strategy aims to reduce fill-in while maintaining numerical stability.

+ +

For example, here are L and U for the Redheffer matrix in the spy plot near the top of this blog post.

+ +
+    close
+    A = redheffer(200);
+    [L,U,P,Q] = lu(A);
+    spy(L|U)
+    title('L|U')
+
+

And here are the four determinants.

+ +
+    dets = [det(L),det(U),det(P),det(Q)];
+    disp(dets)
+
+
+    1    -8    -1    -1
+
+

Finally, M(200) is

+ +
+    M_200 = det(L)*det(U)*det(P)*det(Q)
+
+
+    M_200 =
+        -8
+
+

+mertens +

+

Mertens function can be computed with four lines of code.

+ +
+    type    mertens
+
+
+    function M = mertens(n)
+        der = @(x) full(round(prod(diag(x))));
+        A = redheffer(n);
+        [L,U,P,Q] = lu(A);
+        M = der(L)*der(U)*det(P)*det(Q);
+    end
+
+

Execution time for mertens is dominated by the time in sparse lu. The time required to compute the four determinants is an order of magnitude smaller than the other two.

+ +

Experimentally, we see that the time complexity of sparse lu is O(n^2), but we have no proof.

+ +
+    mertens_time
+
+

Mertens Conjecture Is False +

+

The Mertens conjecture stood for nearly 100 years before it was proved false in 1985 by Andrew Odlyzko and Herman te Riele. The authors present indirect proofs that

+ +
  lim sup (n -> inf) M(n)/sqrt(n) > 1.06
+
  lim inf (n -> inf) M(n)/sqrt(n) < -1.009
+

Odlyzko and te Riele do not actually produce any value of n for which M(n) > sqrt(x). They suspect that any Mertens conjecture counterexample requires n > $10^{30}$, which is far beyond any computation possible today.

+ +

Odlyzko and te Riele also describe several complete tabulations of M(n) for n as large as $7.8 \cdot 10^{9}$ . These computations do not use Redheffer determinants.

+ +

Postscripts +

+

To tell the truth, I did not really expect to find any Mertens or Riemann counterexamples. I did, however, enjoy computing determinants for the first time and discovering an unexpected use for sparse LU.

+ +

Thanks a lot to Tim Davis for his help with this post.

+ +

References +

+

A. M. Odlyzko and H. J. J. te Riele, "Disproof of the Mertens conjecture", Journal für die reine und angewandte Mathematik, Vol. 357 (1985), Pages138-160. https://eudml.org/doc/152712.

+ +

Timothy A. Davis, "A Column Pre-Ordering Strategy for the Unsymmetric-Pattern Multifrontal Method", ACM Transactions on Mathematical Software, Vol. 30, No. 2, June 2004, Pages 165–195. https://dl.acm.org/doi/abs/10.1145/992200.992205.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsNA_Digest and NA_Net2024-08-31T21:44:36-06:002024-08-31T21:44:36-06:00https://hpc.social/commercial-blog/2024/na-digest-and-na-net +

The NA-Digest is an electronic newsletter for the numerical analysis and scientific software community. The NA-Digest is one of world's first examples of social networking. The Digest is one of the forces that makes our community a living, viable community.

+ +

The Digest is part of NA-Net, which also includes Netlib, a collection of mathematical software, papers, and databases.

+ +

For its first forty years, the NA-Digest has had only four editors. Now, we are adding two more. As we do that, I would like to take a personal look back at the history of the NA-Digest.

+ + +

Contents

+ + +

Gene and Mark +

+

Like many other developments in the numerical analysis world, the Digest began with Gene Golub. In the early 1980's, Golub was chair of Stanford's Computer Science Department. Email was a new thing and Gene maintained a list of email addresses for his many friends around the world. Email addresses came in many different formats; today's system of domain names was not yet in wide spread use.

+ +

In 1984, Mark Kent, one of Gene's grad students, with help from Ray Tuminaro, Mark Crispin and Dan Kolkowitz, wrote software that used Gene's list in an email forwarding service. Mail sent to

+ +

+na.name@su-score +

+ +

would be forwarded to the person with that last name. And email sent to

+ +

+na@su-score +

+ +

would be forwarded to everyone on the list.

+ +

Gene and Mark Kent began to gather contributions together and send the collection out periodically. By February 1987, this had evolved into a moderated weekly newsletter. Gene dubbed these email services the NA-Net.

+ +

Nick Trefethen has this memory.

+ +
  Early in the days of email, domain names were all over the place.
+  I think there was a period when Gene was using xxx.na for the
+  names of numerical analysts.  Then somebody decided addresses should
+  end with the country, giving us .uk and .fr and .ch and all
+  that.  For a period, we found that a lot of our numerical
+  analysis emails were being directed to Namibia!
+

In 1987, Gene asked me to moderate NA-Digest temporarily while he went on a sabbatical. That temporary position ultimately lasted 18 years, until 2005.

+ +

Jack and Eric +

+

+Jack Dongarra began his career at Argonne National Laboratory. Jack's colleague, Eric Grosse, began his career at Bell Labs. In 1984, Jack and Eric created Netlib, a software repository and distribution service, and merged it with NA-Net. In 1989, Jack and the NA-Net system moved from Argonne to Oak Ridge National Lab and the University of Tennessee.

+ +

Keith Moore, at the University of Tennessee, rewrote the NA-Net software and maintained the servers for many years.

+ +

Gerald Ragghianti, the Technical Services Leader at Tennessee's Innovative Computer Lab, currently maintains the NA-Net software and servers.

+ +

Tammy and Danny +

+

In 2005, I asked Tammy Kolda, who was then at Sandia Labs in Livermore, to be the NA-Digest editor. Tammy's Wikipedia page reveals that her given name is "Tamara", but everybody calls her "Tammy". She left Sandia is 2021 and now has her own consulting company, MathSci.ai.

+ +

In 2010, Tammy recommended that Danny Dunlavy, from Sandia Labs in Albuquerque, take over as editor. He has been the editor for 14 years. Danny's day job at Sandia's Center for Computing Research involves a wide range of fields including computer architecture, cognitive modeling and discrete mathematics.

+ +

+

+ +

David and Alex +

+

+

+ +

+Starting next week, NA-Digest and NA-Net will move lock, stock, and barrel to Cornell University. The new editors are David Bindell and Alex Townsend. Cornell's IT organization will be taking over the logistics.

+ +

David, Alex and Anil Damle are also the hosts for Householder XXII, June 8-13, 2025.

+ +

Archive +

+

Every issue of NA-Digest since February 1987 is available at https://www.netlib.org/na-digest-html.

+ +

Members +

+

When I succeeded Gene as editor in 1987, there were about 800 names on the NA-Net mailing list. Today, in 2024, there are a little over 10,000. Discontinuities in the size of the list result when unused and illegitimate names are removed.

+ +

+

+ +

Important Postings +

+

I have made three personally important announcements in the Digest over the years.

+ +

+October 29, 1989 +

+ +

In 1989 I was working at Ardent Computer, a startup in Silicon Valley. I announced in NA-Digest that MathWorks was looking for a numerical analyst. (Note the MathWorks telephone number near the end of this announcement.)

+ +
  From: Cleve Moler <na.moler@na-net.stanford.edu>
+  Date: Sun Oct 29 10:39:38 PST 1989
+  Subject: Positions at The MathWorks
+
  The MathWorks is the company which develops and markets MATLAB.
+  The company currently employs about 30 people and expects to
+  add three or four more soon. The company headquarters is in
+  East Natick, Massachusetts, which is about a half hour drive
+  west of Boston.
+
  The background and interests expected for the various positions
+  available range from numerical linear algebra and matrix computation
+  to systems programming and graphics. Educational level and
+  experience expected range from inexperienced beginner willing
+  to learn to seasoned Ph.D. with a personal library of M-files.
+
  For more information, send email to na.moler@na-net.stanford.edu
+  or phone me at 408-732-0400. Or, contact the MathWorks' president,
+  John Little, with email to jnl@mathworks.com, phone 508-653-1415,
+  or write to:
+
  The MathWorks
+  21 Eliot Street
+  South Natick, MA 01760
+

+November 26, 1989 +

+ +

Shortly after that announcement, Ardent imploded and I said that I was taking the job myself.

+ +
  From: Cleve Moler <moler@mathworks.com>
+  Date: Sun Nov 26 09:16:32 PST 1989
+  Subject: Change of Address for Moler
+
  A couple of weeks ago, I made an announcement here that
+  The MathWorks, the MATLAB company, was looking to fill several
+  positions, including one for a numerical analyst. Now, I've
+  decided to take that slot myself. I'm one of the founders of
+  MathWorks, and have always been a consultant to the company, but
+  now I'll be a full time employee. For a while at least, I'll
+  be working out of my home in California, even though MathWorks
+  headquarters is in Massachusetts. (There are already a couple
+  of other MathWorks developers in the Bay Area.)
+  . . .
+  My electronic address is "moler@mathworks.com". If your mailer
+  can't find the route via uunet to mathworks.com, you can still
+  use "na.moler@na-net.stanford.edu".
+

+November 16, 2007 +

+ +

In November 2007 I was attending the Super Computing conference in Reno. I had rented a car and intended to drive to the Bay Area after the conference. But my wife called me and said, "Hey Cleve, have you heard that Gene is in the hospital?" I left SC immediately and drove to Palo Alto. Two days later we sent out a special issue of the Digest:

+ +
  From: Cleve Moler <Cleve.Moler@mathworks.com>
+  Date: Fri, 16 Nov 2007 17:55:42 -0500
+  Subject: Gene Golub, 1932 - 2007
+
  Gene Golub, founder of the NA Digest, passed away today, Friday, November 16,
+  at the Stanford University Hospital. He was 75 years old.
+
  Gene returned home to Stanford recently from a trip to Hong Kong. He was
+  planning to leave again Tuesday on another trip, this one to Zurich where the
+  ETH was to honor him with a special degree. Instead, Sunday night he went to
+  the emergency room because he was "feeling lousy". On Tuesday, he was found
+  to have AML, acute myelogenous leukemia, a form of cancer that affects the
+  white blood cells. This is a potentially curable disease and he was expecting
+  to begin chemotherapy today. But serious complications developed suddenly
+  over night.
+
  I was able to see Gene for an hour last night and he was in reasonably good
+  spirits. Mike Saunders was trying to get Gene's laptop to use dial-up over
+  the hospital's phone system because Gene said he was a couple of days behind
+  on his email. I was planning to get a wireless card for his machine today.
+  None of us had any idea how suddenly the situation would worsen.
+
  The Stanford ICME students have created a memorial blog at
+  http://genehgolub.blogspot.com .
+
  Our community has lost its foremost member. He was a valued colleague and
+  friend. Goodbye, Gene.
+
  -- Cleve Moler
+

Thanks +

+
+
    +
  • Gene Golub and Mark Kent for creating NA-Digest and NA-Net.
  • +
  • Tammy Kolda and Danny Dunlavy for editing the Digest for two decades.
  • +
  • Jack Dongarra, Eric Grosse, Keith Moore and Geri Ragghianti for creating Netlib and for hosting the system for four decades.
  • +
  • David Bindel and Alex Townsend for joining this team.
  • +
+
+ +

References +

+

Jack Dongarra, Gene Golub, Eric Grosse, Cleve Moler and Keith Moore. "Netlib and NA-Net: Building a Scientific Computing Community", IEEE Annals of the History of Computing, (Volume: 30, Issue: 2, April-June 2008). A PDF is available here.

+ +

Mark Kent, The Numerical Analysis Net (NA-NET), Technical Report 85, ETH Zurich, Institut fuer Informatik, 1988.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks BlogsA Treacherous SVD2024-07-15T15:39:04-06:002024-07-15T15:39:04-06:00https://hpc.social/commercial-blog/2024/a-treacherous-svd +

A few days ago, a bug report from our office in Cambridge caught my attention. Computing the singular values and singular vectors of a particular matrix would sometimes cause MATLAB to crash.

+ + +

Contents

+
+ +
+ +

Two Computers +

+

I use two different two computers regularly. The machine in my home office is a Lenovo ThinkPad® model T14, loaded with two external monitors, several external disc drives, a sound bar and a dedicated internet connection. My traveling machine is a Lenovo ThinkPad X1 Nano with no external hardware.

+ +

The report of a crash in the SVD became even more interesting when I found that it happens on my office computer, but not on the portable. A quick check revealed that the CPUs on the two machines come from different manufacturers. The office computer uses an AMD® Ryzen Pro 5 while the traveling machine uses an Intel® Core i7.

+ +

Math Libraries +

+

The crash occurs several software layers deep in CGESVD, the LAPACK driver for single precision complex SVD. Various chip manufacturers provide math libraries that have been optimized for their CPUs. However, by default, MATLAB uses the reportedly faster Intel Math Kernel Library, MKL. It is possible to switch to other math libraries.

+ +

We have experts at MathWorks who know far more about the details of these libraries than I do. They will soon sort this all out. In the meantime, here is what I have learned about the offending matrix.

+ +

G3366394 +

+

We refer to the matrix in the crash report by its case number in our bug tracking system. The matrix is of modest size but is otherwise unusual for several reasons. It is rectangular with fewer rows than columns, it is in single precision, and it is complex.

+ +
  clear
+  load g3366394 X
+  whos
+
  Name        Size              Bytes  Class     Attributes
+  X         219x384            672768  single    complex
+

The following code calling SVD with three outputs will crash MATLAB on my T14, but not on my X1.

+ +
  trysvd = false
+  if trysvd
+      [U,S,V] = svd(X);
+      R = U*S*V' - X;
+      relres = norm(R)/norm(X)
+  end
+
  trysvd =
+    logical
+      0
+

Rank +

+

Computing the singular values without the vectors can be done on either machine. The following code uses double precision and then plots the singular values on a logarithmic scale with a line at single precision roundoff level.

+ +
  S = svd(X);
+  semilogy(S,'.-')
+  ep = eps('single');
+  line([0 230],[ep ep])
+  axis([0 230 1e-15 10])
+  legend({'singular values','eps(''single'')'})
+

+

+ +

We see that the matrix is far from full rank. About half of its singular values are negligible. This is confirmed by

+ +
   xrank = rank(X)
+
   xrank =
+      110
+

Zero rows +

+

The cause of the low rank is easy to find. This surf plot reveals that almost half of the rows are flat zero.

+ +

+

+ +

Let's remove the zero rows.

+ +
  c = sum(abs(X),2)==0;
+  nnzc = nnz(c)
+  X(c>0,:) = [];
+
  nnzc =
+     109
+

+

+ +

The remaining matrix is full rank and it is safe to compute its singular vectors.

+ +
  [U,S,V] = svd(X);
+  R = U*S*V' - X;
+  resnorm = norm(R)
+
  resnorm =
+     2.8191e-06
+

Fuzz +

+

Removing the zero rows was the first work-around that I tried. There are many others. You can replace the zeros with any nonzero "fuzz".

+ +
  fuzz = 1.e-20;
+  [U,S,V] = svd(X + fuzz*randn(size(X)));
+
  resnorm = norm(U*S*V'-X)
+
  resnorm =
+     2.8222e-06
+

Flip +

+

You can reorder the matrix so that the zero rows are not at the beginning.

+ +
  [U,S,V] = svd(flipud(X));
+  U = flipud(U);
+
  resnorm = norm(U*S*V'-X)
+
  resnorm =
+     2.3809e-06
+

Now what? +

+

How to avoid the crash is not the most important question. What causes the crash with the original matrix? We will find out and get it fixed.

+ + +

+
+Get + the MATLAB code + +
+
+ Published with MATLAB® R2024a
+

+ +
+ +]]>MathWorks Blogs \ No newline at end of file diff --git a/index.html b/index.html index fde9b9b..79c5488 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,203 @@ ---- -layout: home -title: Posts ---- + + + + + + + Posts - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

Posts

+
+ +
+ mathworks Code for Sonic and Ten Sonic Movies + +
+ +
+ mathworks Sonic Adds Sound to Logo, Recamán, Chaos + +
+ +
+ mathworks Lights, Camera, Action — and Sound + +
+ +
+ mathworks Möbius, Mertens and Redheffer + +
+ +
+ mathworks Experience With Chatbots Generating MATLAB + +
+ +
+ mathworks Redheffer and Mertens, Accelerated + +
+ +
+ mathworks Redheffer and Mertens, Continued + +
+ +
+ mathworks Redheffer, Mertens and One-Million Dollars + +
+ +
+ mathworks NA_Digest and NA_Net + +
+ +
+ mathworks A Treacherous SVD + +
+ +
+ mathworks SuperSum, In Defense of Floating Point Arithmetic + +
+ +
+ mathworks IBM Hexadecimal Floating Point + +
+ +
+ mathworks A Sixty-Year Old Program for Predicting the Future + +
+ +
+ mathworks R-squared. Is Bigger Better? + +
+ +
+ mathworks Closest Pair of Points Problem + +
+ +
+ mathworks Twenty Years of Parallel MATLAB + +
+ +
+ mathworks Chaotic Swinging Sticks + +
+ +
+ mathworks Nick Higham (1961-2024) + +
+ +
+ mathworks Exponential Fitting, Separable Least Squares, and Quahogs + +
+ +
+ mathworks Season’s Greetings + +
+ +
+ + + +
+ + +
+ + + + + diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..d558cd5 --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,207 @@ + + + + + + + Posts - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

Posts

+
+ +
+ mathworks Blog Post Number 300, Vibrating Logo + +
+ +
+ mathworks Bouncing Bucky Ball at Flipbook Mini Hack + +
+ +
+ mathworks Exploring Matrices Exercises + +
+ +
+ mathworks Exploring Matrices + +
+ +
+ mathworks MiniGallery, Sampler of MATLAB Test Matrices + +
+ +
+ mathworks ARLS, Automatically Regularized Least Squares + +
+ +
+ mathworks Happy Birthday, John Gilbert + +
+ +
+ mathworks Special Notice + +
+ +
+ mathworks My Chat with Ernie, a Chinese Chat Bot + +
+ +
+ mathworks Three Wordle Assistants + +
+ +
+ mathworks Wordle Sneak Previews + +
+ +
+ mathworks WordBot and Words, My Wordle Assistants + +
+ +
+ mathworks R2-D2, Rotations and Dilations in Two Dimensions + +
+ +
+ mathworks My Chat With ChatGPT + +
+ +
+ mathworks Grafix Users Guide + +
+ +
+ mathworks Matrices In Action, Grafix 2.0 + +
+ +
+ mathworks Singular Matrix Pencils and the QZ Algorithm, Update + +
+ +
+ mathworks Singular Matrix Pencils and the QZ Algorithm + +
+ +
+ mathworks Color Cube Meets Rubik’s Cube + +
+ +
+ mathworks Christian Reinsch, Roland Bulirsch, and the SVD + +
+ +
+ + + +
+ + +
+ + + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000..7409c07 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,145 @@ + + + + + + + Posts - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+
+
+
+

Posts

+
+ +
+ mathworks An Interactive Version of colorcubes + +
+ +
+ mathworks modfun, A Short Program Produces Impressive Graphics + +
+ +
+ mathworks Trio, A Wooden Puzzle from the Czech Republic + +
+ +
+ mathworks Rubik’s Cube Superflips and God’s Number + +
+ +
+ mathworks Polygons, Polyshapes and Puzzles + +
+ +
+ mathworks An Interesting, and Perhaps New, Matrix + +
+ +
+ mathworks The Soma Cube, Again + +
+ +
+ mathworks Rotation Matrices + +
+ +
+ + + +
+ + +
+ + + + + diff --git a/pages/404.md b/pages/404.md deleted file mode 100755 index 98cc312..0000000 --- a/pages/404.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: page -title: "404: Page not found" -permalink: /404.html ---- - -Whoops! We couldn't find that link! [Go home]({{ site.baseurl }}) or just admire this cute animation. diff --git a/pages/about.md b/pages/about.md deleted file mode 100755 index 20df5e8..0000000 --- a/pages/about.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: page -title: "About the hpc.social Community Blog" -permalink: /about/ ---- - -This belongs in the hpc.social family of blogs. In particular, this is an aggregated feed of commercial posts that meet the following criteria: - -> The commercial blog space is for vendor and company voices that don't fit in the personal or community spaces. We advocate for learning resources, tutorials, and related content, and encourage contributors to not use this as an advertising space. - -The hpc.social blogs aims to share ideas, news, and stories from diverse people, centers and groups across the High Performance Computing (HPC) community. -Whether you are an advanced practitioner, a developer that touches HPC, or a novice, your voice is welcome here. This community blog reflects exactly that - a syndicated feed of our community voices. It's one places that you can subscribe to via a variety of channels (below) and also follow instructions to contribute a commercial feed. - - - - - -As a word of caution, we curate authors at the point of adding the blog, but do not regularly curate individual posts that are added nightly via automation. The opinions expressed here are owned by the authors and do not reflect the opinion of the hpc.social community at large. Offensive or inappropriate posts should be reported to [info@hpc.social](mailto:info@hpc.social) if you wish to report anonymously. You can also submit a pull request to remove the offending feed if you are comfortable doing so publicly. - diff --git a/pages/archive.md b/pages/archive.md deleted file mode 100644 index 8477f28..0000000 --- a/pages/archive.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: page -title: Archive -description: A collection of posts, organized by year -permalink: /archive/ ---- - -{% include scrolltop.html %} -
- {% for post in site.posts %} - {% assign currentDate = post.date | date: "%Y" %} - {% if currentDate != myDate %} - {% unless forloop.first %}{% endunless %} -

{{ currentDate }}

- {% endif %} - {% endfor %} -
diff --git a/pages/atom.xml b/pages/atom.xml deleted file mode 100755 index 24704ce..0000000 --- a/pages/atom.xml +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: null -permalink: /atom.xml ---- - - - - - {{ site.title }} - - - {{ site.time | date_to_xmlschema }} - {{ site.url }} - - {{ site.author.name }} - {{ site.author.email }} - - - {% for post in site.posts %} - - {{ post.title | xml_escape }} - - {{ post.date | date_to_xmlschema }} - {{ site.url }}{{ post.id }} - {{ post.content | xml_escape }} - - {% endfor %} - - diff --git a/pages/feed.json b/pages/feed.json deleted file mode 100755 index 3b46295..0000000 --- a/pages/feed.json +++ /dev/null @@ -1,61 +0,0 @@ ---- -layout: null -permalink: /feed.json ---- -{ - "version": "https://jsonfeed.org/version/1", - "title": "{{ site.title | xml_escape }}", - "home_page_url": "{{ "/" | absolute_url }}", - "feed_url": "{{ "/feed.json" | absolute_url }}", - "description": {{ site.description | jsonify }}, - "icon": "{{ "assets/images/apple-touch-icon.png" | absolute_url }}", - "favicon": "{{ "assets/images/favicon.png" | absolute_url }}", - "expired": false, - {% if site.author %} - "author": {% if site.author.name %} { - "name": "{{ site.author.name }}", - "url": {% if site.author.url %}"{{ site.author.url }}"{% else %}null{% endif %}, - "avatar": {% if site.author.avatar %}"{{ site.author.avatar }}"{% else %}null{% endif %} - },{% else %}"{{ site.author }}",{% endif %} - {% endif %} -"items": [ - {% for post in site.posts limit:36 %} - { - "id": "{{ post.url | absolute_url | sha1 }}", - "title": {{ post.title | jsonify }}, - "summary": {{ post.description | jsonify }}, - "content_text": {{ post.content | strip_html | strip_newlines | jsonify }}, - "content_html": {{ post.content | strip_newlines | jsonify }}, - "url": "{{ post.url | absolute_url }}", - {% if post.image.size > 1 %}"image": {{ post.image | jsonify }},{% endif %} - {% if post.link.size > 1 %}"external_url": "{{ post.link }}",{% endif %} - {% if post.banner.size > 1 %}"banner_image": "{{ post.banner }}",{% endif %} - {% if post.tags.size > 1 %}"tags": {{ post.tags | jsonify }},{% endif %} - {% if post.enclosure.size > 1 %}"attachments": [ { - "url": "{{ post.enclosure }}", - "mime_type": "{{ post.enclosure_type }}", - "size_in_bytes": "{{ post.enclosure_length }}" - },{% endif %} - "date_published": "{{ post.date | date_to_xmlschema }}", - "date_modified": "{{ post.date | date_to_xmlschema }}", - {% if post.author %} - "author": {% if post.author.name %} { - "name": "{{ post.author.name }}", - "url": {% if post.author.url %}"{{ post.author.url }}"{% else %}null{% endif %}, - "avatar": {% if post.author.avatar %}"{{ post.author.avatar }}"{% else %}null{% endif %} - } - {% else %}"{{ post.author }}"{% endif %} - {% else %} - "author": {% if site.author.name %} { - "name": "{{ site.author.name }}", - "url": {% if site.author.url %}"{{ site.author.url }}"{% else %}null{% endif %}, - "avatar": {% if site.author.avatar %}"{{ site.author.avatar }}"{% else %}null{% endif %} - } - {% else %} - "{{ site.author }}" - {% endif %} - {% endif %} - }{% if forloop.last == false %},{% endif %} - {% endfor %} - ] -} diff --git a/pages/tags.md b/pages/tags.md deleted file mode 100644 index 62563c5..0000000 --- a/pages/tags.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: default -title: Tags -permalink: /tags/ ---- -{% capture site_tags %}{% for tag in site.tags %}{{ tag | first }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %} -{% assign tag_words = site_tags | split:',' | sort %} -
-

Tags in Blog

-
- {% for item in (0..site.tags.size) %}{% unless forloop.last %} - {% capture this_word %}{{ tag_words[item] | strip_newlines }}{% endcapture %} - {{ this_word }} ({{ site.tags[this_word].size }}) - {% endunless %}{% endfor %} -
-
-
- {% for item in (0..site.tags.size) %}{% unless forloop.last %} - {% capture this_word %}{{ tag_words[item] | strip_newlines }}{% endcapture %} -

{{ this_word }}

- - {% for post in site.tags[this_word] %}{% if post.title != null %} -
- {{ post.title }} - -
- {% endif %}{% endfor %} - {% endunless %}{% endfor %} -
\ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..00c74d9 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +Sitemap: https://hpc.social/commercial-blog/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..6964f11 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,213 @@ + + + +https://hpc.social/commercial-blog/2022/rotation-matrices/ +2022-05-18T23:50:24-06:00 + + +https://hpc.social/commercial-blog/2022/the-soma-cube-again/ +2022-06-10T09:07:52-06:00 + + +https://hpc.social/commercial-blog/2022/an-interesting-and-perhaps-new-matrix/ +2022-07-21T04:38:23-06:00 + + +https://hpc.social/commercial-blog/2022/polygons-polyshapes-and-puzzles/ +2022-08-21T15:42:36-06:00 + + +https://hpc.social/commercial-blog/2022/rubik-s-cube-superflips-and-god-s-number/ +2022-09-06T02:00:24-06:00 + + +https://hpc.social/commercial-blog/2022/trio-a-wooden-puzzle-from-the-czech-republic/ +2022-09-25T17:00:41-06:00 + + +https://hpc.social/commercial-blog/2022/modfun-a-short-program-produces-impressive-graphics/ +2022-10-17T23:17:12-06:00 + + +https://hpc.social/commercial-blog/2022/an-interactive-version-of-colorcubes/ +2022-10-21T20:58:02-06:00 + + +https://hpc.social/commercial-blog/2022/christian-reinsch-roland-bulirsch-and-the-svd/ +2022-10-23T23:41:27-06:00 + + +https://hpc.social/commercial-blog/2022/color-cube-meets-rubik-s-cube/ +2022-12-10T02:41:01-07:00 + + +https://hpc.social/commercial-blog/2023/singular-matrix-pencils-and-the-qz-algorithm/ +2023-01-05T16:37:04-07:00 + + +https://hpc.social/commercial-blog/2023/singular-matrix-pencils-and-the-qz-algorithm-update/ +2023-01-10T21:45:12-07:00 + + +https://hpc.social/commercial-blog/2023/matrices-in-action-grafix-2-0/ +2023-02-04T13:00:33-07:00 + + +https://hpc.social/commercial-blog/2023/grafix-users-guide/ +2023-02-10T18:36:06-07:00 + + +https://hpc.social/commercial-blog/2023/my-chat-with-chatgpt/ +2023-02-22T02:06:53-07:00 + + +https://hpc.social/commercial-blog/2023/r2-d2-rotations-and-dilations-in-two-dimensions/ +2023-03-03T19:50:25-07:00 + + +https://hpc.social/commercial-blog/2023/wordbot-and-words-my-wordle-assistants/ +2023-03-11T19:07:02-07:00 + + +https://hpc.social/commercial-blog/2023/wordle-sneak-previews/ +2023-03-24T19:18:10-06:00 + + +https://hpc.social/commercial-blog/2023/three-wordle-assistants/ +2023-03-28T03:00:55-06:00 + + +https://hpc.social/commercial-blog/2023/my-chat-with-ernie-a-chinese-chat-bot/ +2023-04-01T05:00:26-06:00 + + +https://hpc.social/commercial-blog/2023/special-notice/ +2023-04-04T15:12:36-06:00 + + +https://hpc.social/commercial-blog/2023/happy-birthday-john-gilbert/ +2023-06-07T14:48:32-06:00 + + +https://hpc.social/commercial-blog/2023/arls-automatically-regularized-least-squares/ +2023-06-17T00:57:05-06:00 + + +https://hpc.social/commercial-blog/2023/minigallery-sampler-of-matlab-test-matrices/ +2023-06-28T16:34:09-06:00 + + +https://hpc.social/commercial-blog/2023/exploring-matrices/ +2023-09-12T03:11:52-06:00 + + +https://hpc.social/commercial-blog/2023/exploring-matrices-exercises/ +2023-09-25T17:57:28-06:00 + + +https://hpc.social/commercial-blog/2023/bouncing-bucky-ball-at-flipbook-mini-hack/ +2023-11-16T23:01:49-07:00 + + +https://hpc.social/commercial-blog/2023/blog-post-number-300-vibrating-logo/ +2023-12-13T18:23:26-07:00 + + +https://hpc.social/commercial-blog/2023/season-s-greetings/ +2023-12-20T14:13:20-07:00 + + +https://hpc.social/commercial-blog/2024/exponential-fitting-separable-least-squares-and-quahogs/ +2024-01-12T16:35:32-07:00 + + +https://hpc.social/commercial-blog/2024/nick-higham-1961-2024/ +2024-01-25T16:36:37-07:00 + + +https://hpc.social/commercial-blog/2024/chaotic-swinging-sticks/ +2024-02-20T16:24:41-07:00 + + +https://hpc.social/commercial-blog/2024/twenty-years-of-parallel-matlab/ +2024-03-15T18:05:58-06:00 + + +https://hpc.social/commercial-blog/2024/closest-pair-of-points-problem/ +2024-03-28T20:00:00-06:00 + + +https://hpc.social/commercial-blog/2024/r-squared-is-bigger-better/ +2024-05-04T14:33:38-06:00 + + +https://hpc.social/commercial-blog/2024/a-sixty-year-old-program-for-predicting-the-future/ +2024-05-19T16:55:03-06:00 + + +https://hpc.social/commercial-blog/2024/ibm-hexadecimal-floating-point/ +2024-05-25T15:51:21-06:00 + + +https://hpc.social/commercial-blog/2024/supersum-in-defense-of-floating-point-arithmetic/ +2024-06-27T17:54:38-06:00 + + +https://hpc.social/commercial-blog/2024/a-treacherous-svd/ +2024-07-15T15:39:04-06:00 + + +https://hpc.social/commercial-blog/2024/na-digest-and-na-net/ +2024-08-31T21:44:36-06:00 + + +https://hpc.social/commercial-blog/2024/redheffer-mertens-and-one-million-dollars/ +2024-09-23T17:12:35-06:00 + + +https://hpc.social/commercial-blog/2024/redheffer-and-mertens-continued/ +2024-09-27T12:28:39-06:00 + + +https://hpc.social/commercial-blog/2024/redheffer-and-mertens-accelerated/ +2024-09-30T14:28:40-06:00 + + +https://hpc.social/commercial-blog/2024/experience-with-chatbots-generating-matlab/ +2024-10-07T14:31:38-06:00 + + +https://hpc.social/commercial-blog/2024/m%C3%B6bius-mertens-and-redheffer/ +2024-10-23T00:53:53-06:00 + + +https://hpc.social/commercial-blog/2024/lights-camera-action-and-sound/ +2024-11-16T06:03:58-07:00 + + +https://hpc.social/commercial-blog/2024/sonic-adds-sound-to-logo-recam%C3%A1n-chaos/ +2024-12-08T11:51:55-07:00 + + +https://hpc.social/commercial-blog/2024/code-for-sonic-and-ten-sonic-movies/ +2024-12-18T15:13:08-07:00 + + +https://hpc.social/commercial-blog/about/ + + +https://hpc.social/commercial-blog/archive/ + + +https://hpc.social/commercial-blog/ + + +https://hpc.social/commercial-blog/tags/ + + +https://hpc.social/commercial-blog/page/2/ + + +https://hpc.social/commercial-blog/page/3/ + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..0d50afb --- /dev/null +++ b/tags/index.html @@ -0,0 +1,96 @@ + + + + + + + Tags - hpc.social - Aggregated Commercial Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

hpc.social

+ + + + + + + + + + + +
+ High Performance Computing
Practitioners
and friends /#hpc +
+
+ +
+
+
+ +
+

Tags in Blog

+
+ +
+
+
+ +
+ + +
+ + + + +