{"id":10526,"date":"2023-09-11T23:11:52","date_gmt":"2023-09-12T03:11:52","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=10526"},"modified":"2023-10-01T10:30:31","modified_gmt":"2023-10-01T14:30:31","slug":"exploring-matrices","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2023\/09\/11\/exploring-matrices\/","title":{"rendered":"Exploring Matrices"},"content":{"rendered":"<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=\"#76e7f706-3666-4329-b846-6b0ab1b75468\">Alibi<\/a><\/li><li><a href=\"#6c62b301-b35d-4699-a60a-6dc8bd2f86c3\">Exploring Matrices<\/a><\/li><li><a href=\"#653e3c66-3977-46c8-aef6-8ae60d87baa9\">YouTube Videos<\/a><\/li><li><a href=\"#ea1683fd-3523-4939-8c2e-c581324ac557\">Matrix Multiplication<\/a><\/li><li><a href=\"#254c72ed-9b08-4442-b7a5-6d4f512351ef\">Rotation and Scaling<\/a><\/li><li><a href=\"#cef8c368-00e7-4ccb-9f05-f2435e94a403\">Computer Graphics<\/a><\/li><li><a href=\"#eec3c339-e1b1-466c-8361-62f63808b278\">Matrices and Cubes<\/a><\/li><li><a href=\"#873c693b-1541-41b8-b6c6-583b05562cd0\">Simulink<\/a><\/li><li><a href=\"#e6b8796b-c1b0-4132-9038-5e5cc92f9ec2\">AI and Gorillas<\/a><\/li><li><a href=\"#96f4d47e-9920-4215-bf7d-2bf2a3286ab9\">Software<\/a><\/li><li><a href=\"#29bbbdbc-5d65-4ac3-a74e-1aafe0388a95\">Thanks<\/a><\/li><li><a href=\"#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 Burroughs 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 students 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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Multy.png\" alt=\"\"> <\/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\nR \\ = \\\r\n\\left(\r\n  \\begin{array}{rr}\r\n     \\cos{\\theta} &amp; \\sin{\\theta} \\\\\r\n    -\\sin{\\theta} &amp; \\cos{\\theta}\r\n  \\end{array}\r\n  \\right)\r\n$$<\/p><p>rotates points by the angle $\\theta$, measured in degrees.<\/p><p>We also see how the matrix<\/p><p>$$\r\nS \\ = \\\r\n\\left(\r\n  \\begin{array}{rr}\r\n     \\sigma &amp; 0 \\\\\r\n     0 &amp; \\sigma\r\n  \\end{array}\r\n  \\right)\r\n\\ \\ \\ \\ \\ \\ \\ \\\r\n$$<\/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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Rotate.png\" alt=\"\"> <\/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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Graphics.png\" alt=\"\"> <\/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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Qube_frame.png\" alt=\"\"> <\/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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Simulink.png\" alt=\"\"> <\/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, are 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 decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Gorillas.png\" alt=\"\"> <\/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, DVM<\/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><script language=\"JavaScript\"> <!-- \r\n    function grabCode_77d29507140c40a1a497777d9fd035e6() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='77d29507140c40a1a497777d9fd035e6 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 77d29507140c40a1a497777d9fd035e6';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2023 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_77d29507140c40a1a497777d9fd035e6()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2023a<br><\/p><\/div><!--\r\n77d29507140c40a1a497777d9fd035e6 ##### SOURCE BEGIN #####\r\n%% Exploring Matrices\r\n% I have spent much of my career working to bring abstract linear \r\n% algebra and practical matrix computation closer together.  This project\r\n% is my latest effort.\r\n\r\n%% Alibi\r\n% Over sixty years ago, as a sophomore contemplating a major\r\n% in mathematics, I took a course entitled Survey of Modern Algebra.\r\n% We used a now-classic textbook by MacLane and Birkhoff that featured\r\n% abstract theorems about groups, rings, fields, vector spaces and\r\n% linear algebra.\r\n% I remember the colorful terms _alias_ and _alibi_ had something\r\n% to do with change  of basis and change of position, but I have never\r\n% seen those terms again.\r\n%\r\n% The next year, I took Numerical Analysis.  We did some of the homework\r\n% on a Burroughs 205 Datatron and I wrote a machine language program to\r\n% solve simultaneous linear equations.  I was hooked.\r\n%\r\n% But at the time I did not realize that the two courses were about the\r\n% same magnificent object REPLACE_WITH_DASH_DASH the _matrix_. \r\n% \r\n\r\n%% Exploring Matrices\r\n% Exploring Matrices is a multi-media project that shows matrices\r\n% in action.  Short videos, blog posts,\r\n% interactive MATLAB software and self-study exercises investigate\r\n% applications of matrices. The material is intended for students in an\r\n% undergraduate course in linear algebra or computational science.\r\n% However, anyone using matrices should find topics that interest them.\r\n%\r\n% The first release of Exploring Matrices has six modules.\r\n% All of the modules feature animated MATLAB displays and\r\n% four of the modules include interactive MATLAB \"apps\".\r\n% The modules are:\r\n% \r\n% * Matrix Multiplication\r\n% * Rotation and Scaling\r\n% * Computer Graphics\r\n% * Matrices and Cubes\r\n% * Simulink\r\n% * AI and Gorillas\r\n%\r\n\r\n%% YouTube Videos\r\n% An introduction and six videos ranging in length from one to \r\n% six minutes, are available on YouTube at\r\n%\r\n% <https:\/\/youtube.com\/playlist?list=PLn8PRpmsu08oGNmtBfFOmgVC0TlXDaLDJ>.\r\n%\r\n% The first four of these videos feature animations produced by our four\r\n% MATLAB apps REPLACE_WITH_DASH_DASH |Multiply|, |Rotate|, |Grafix|, and |Qube|.\r\n% The other two videos describe two applications, simulation of control\r\n% systems and neural networks for facial recognition (of gorillas).\r\n\r\n%% Matrix Multiplication\r\n% Some viewers may just be learning the mechanics of matrix multiplication.\r\n% Other viewers will have encountered it years ago.\r\n% The traditional algorithm for computing the product of two\r\n% matrices involves inner products between the rows of the first matrix\r\n% and the columns of the second.  A less familiar algorithm, which\r\n% involves linear combinations of the columns of the first matrix,\r\n% is often more efficient and informative.  The two approaches produce\r\n% the same final result from intermediate terms in different orders.\r\n%\r\n% Here is one frame from the animation of these two algorithms generated\r\n% by our |Multiply| app.  The highlighted element in the first matrix\r\n% either moves across the rows or goes down the columns.\r\n%\r\n% <<Multy.png>>\r\n\r\n%% Rotation and Scaling\r\n% Our first matrices are 2-by-2.  We see how the matrix\r\n%\r\n% $$ \r\n% R \\ = \\\r\n% \\left(\r\n%   \\begin{array}{rr}\r\n%      \\cos{\\theta} & \\sin{\\theta} \\\\\r\n%     -\\sin{\\theta} & \\cos{\\theta}\r\n%   \\end{array}\r\n%   \\right) \r\n% $$\r\n%\r\n% rotates points by the angle $\\theta$, measured in degrees.\r\n%\r\n% We also see how the matrix\r\n%\r\n% $$ \r\n% S \\ = \\\r\n% \\left(\r\n%   \\begin{array}{rr}\r\n%      \\sigma & 0 \\\\\r\n%      0 & \\sigma\r\n%   \\end{array}\r\n%   \\right) \r\n% \\ \\ \\ \\ \\ \\ \\ \\\r\n% $$\r\n%\r\n% makes objects larger and smaller.\r\n%\r\n% The two can be combined with matrix multiplication.\r\n% For more operations in higher dimensions, matrix multiplication\r\n% provides a unifying framework.\r\n%\r\n% Here is one frame from the animation of rotation and scaling generated\r\n% by the |Rotate| app.  The first panel displays a 2-by-2 rotation \r\n% matrix, the second panel displays a 2-by-2 diagonal scaling matrix,\r\n% and the third panel displays their product.\r\n%\r\n% <<Rotate.png>>\r\n%\r\n\r\n%% Computer Graphics\r\n% Operations with the 4-by-4 matrices that are at the heart of modern \r\n% computer graphics employ a system known as \"homogeneous coordinates\".\r\n% The leading 3-by-3 submatrix produces rotation and scaling in \r\n% three dimensions.  The fourth column produces translations.\r\n%\r\n% Here is one frame from an animation of rotation about the x-axis\r\n% generated by the |Grafix| app.\r\n% This is often called \"pitch\".  Rotation about the y- and z-axes\r\n% are \"roll\" and \"yaw\",\r\n% \r\n% <<Graphics.png>>\r\n%\r\n\r\n%% Matrices and Cubes\r\n% Rubik's Cube, named for its inventor, Ern\u0151 Rubik, a Hungarian professor\r\n% of architecture, is the greatest mathematical puzzle of all time. Our\r\n% digital simulation of the puzzle, |Qube|, is powered by rotation \r\n% matrices.\r\n%\r\n% The model consists of 27 identical copies of a single small _cubelet_ \r\n% whose sides are colored red, white, blue, yellow, orange and green.\r\n% Initially, all cubelets have the same orientation.\r\n% A _move_ is the simultaneous rotation of the nine cubelets in one of \r\n% the six faces, by 90\u00b0 or 180\u00b0, clockwise or counterclockwise.  This\r\n% leads to $4.3 \\times 10^{19}$ possible configurations for a scrambled\r\n% cube.  \r\n% \r\n% The object of the puzzle is to return a scrambled cube to the initial\r\n% state.  Most people are interested in solving the puzzle rapidly,\r\n% but I am more interested in the number of moves required.\r\n%\r\n% |Qube| offers animations of many mathematical properties\r\n% of Rubik's cubes.  Here is a frame from one of them.\r\n%\r\n% <<Qube_frame.png>>\r\n\r\n%% Simulink\r\n% MATLAB's companion product, Simulink, is a block diagram programming\r\n% environment used to design and simulate systems with multidomain \r\n% models and to automatically generate the code required to operate\r\n% embedded processors.\r\n%\r\n% Matrices are involved in dozens of different ways by Simulink,\r\n% but most users rarely see operations at that detailed level.\r\n% Our Simulink module shows a model of an automobile being driven\r\n% on a test track and displays the pitch, roll and yaw recorded by\r\n% the matrix connecting the coordinate system for the automobile to\r\n% the coordinate system for the track.\r\n%\r\n% <<Simulink.png>>\r\n\r\n%% AI and Gorillas\r\n% This is a personal story about a project in the early stages of \r\n% development.  \r\n% \r\n% My wife and I first visited gorillas\r\n% in the Volcano National Park of Rwanda twelve years ago.\r\n% An American primatologist named Dian Fossey had studied the gorillas\r\n% between 1966 and her murder by poachers in 1985.\r\n% Her book _Gorillas in the Mist_ was very popular and was the basis \r\n% for a critically acclaimed 1988 Hollywood movie starring\r\n% Sigourney Weaver.\r\n%\r\n% We have become good friends with the people in the\r\n% <https:\/\/www.gorilladoctors.org\/ Gorilla Doctors> organization.\r\n% These African and American veterinarians attend to the health of the\r\n% roughly 1,000 gorillas in the park.  Most of the gorillas have\r\n% African names like \"Inkundwa\" and \"Maisha\".  We envision a\r\n% gorilla facial recognition system that is available on\r\n% cell phones and tablets so that new guides and doctors can learn\r\n% the names of their patients.\r\n%\r\n% Inception-v3 is a convolutional neural network (CNN) that is widely\r\n% used for image processing. We have a version of the network \r\n% pretrained on more than a million images from the ImageNet database. \r\n% This publicly available system knows nothing about gorillas.\r\n% We must do additional training using photos of our unique subjects.\r\n%\r\n% This is where matrices are applied.  Training a CNN involves determining\r\n% the values of thousands of weights and coefficients.  The digital photos,\r\n% regarded as vectors, are repeatedly multiplied by circulant matrices\r\n% where each row is a shifted copy of the other rows.  Importantly,\r\n% a modern CNN also contains some nonlinear layers.\r\n%\r\n% Here is one photo from a small test collection.  Indundwa appears\r\n% to have his own selfie stick. \r\n%\r\n% <<Gorillas.png>>\r\n\r\n%% Software\r\n% A self-extracting MATLAB source archive of our four apps is available at\r\n%\r\n% <https:\/\/blogs.mathworks.com\/cleve\/files\/Apps_mzip.m>\r\n% \r\n\r\n%% Thanks\r\n% Thanks to Jackson Kustell, Josh Bethoney and Heather Gorr from MathWorks\r\n% and Jan Ramer and Mike Cranfield from Gorilla Doctors.\r\n\r\n%% Dedication  \r\n% We dedicate the Gorillas project to the memory of\r\n% <https:\/\/www.marylandzoo.org\/news-and-updates\/2023\/08\/mourning-the-loss-of-dr-mike-cranfield\r\n% Mike Cranfield, DVM>.  Mike was Executive Director of the Mountain Gorillas \r\n% Veterinary Project in Rwanda from 1999 until 2014.  Before Rwanda, \r\n% he held various positions at the Maryland Zoo in Baltimore.\r\n%\r\n% Three months ago, Mike sent us a disc drive containing over 14,000\r\n% photographs of gorillas he had taken in Rwanda.  We are now\r\n% sorting and organizing the photos to provide  specialized training\r\n% of the facial recognition neural net.\r\n%\r\n% A month ago, Mike was hospitalized from an apparent attack of West Nile\r\n% Virus.  He passed away on August 27.  Ironically, after years of working\r\n% safely in the mountain jungles of Central Africa, it is likely that\r\n% he acquired the virus from a mosquito bite at his family's cabin\r\n% in Canada.\r\n##### SOURCE END ##### 77d29507140c40a1a497777d9fd035e6\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Multiply.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--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.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2023\/09\/11\/exploring-matrices\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":10646,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,32,23,4,6,16,8,39],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/10526"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=10526"}],"version-history":[{"count":23,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/10526\/revisions"}],"predecessor-version":[{"id":10784,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/10526\/revisions\/10784"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/10646"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=10526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=10526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=10526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}