{"id":3401,"date":"2018-05-28T12:00:00","date_gmt":"2018-05-28T17:00:00","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=3401"},"modified":"2018-05-22T15:31:07","modified_gmt":"2018-05-22T20:31:07","slug":"the-jordan-canonical-form-just-doesnt-compute","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2018\/05\/28\/the-jordan-canonical-form-just-doesnt-compute\/","title":{"rendered":"The Jordan Canonical Form Just Doesn&#8217;t Compute"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Jordan.jpg\" alt=\"\"> <\/p><p>Camille Jordan (1838-1922)<\/p><p>Photo credit: <a href=\"http:\/\/serge.mehl.free.fr\/chrono\/Jordan.html\">http:\/\/serge.mehl.free.fr\/chrono\/Jordan.html<\/a><\/p><p>(This column first appeared in <a href=\"https:\/\/www.mathworks.com\/company\/newsletters\/articles\/jordans-canonical-form-just-doesnt-compute.html\">the May 1994 issue of the MathWorks Newsletter<\/a>.)<\/p><p>Matrices and differential equations are the key mathematical tools in MATLAB&reg; and Simulink&reg;. The Jordan Canonical Form is the key relationship between matrices and differential equations. So, why doesn't MATLAB use the JCF in any of its computations? In fact, until the Symbolic Math Toolbox came along, we didn't even have a function to compute the JCF.<\/p><p>The difficulty with the Jordan Canonical Form is that it is wildly sensitive to perturbation. Any kind of error -- uncertainty in experimental data, arithmetic roundoff error, linearization of nonlinear functions -- completely changes the JCF and, more importantly, the transformations that generate it.<\/p><p>Let's start with a system of $n$ linear, constant coefficient ordinary differential equations.<\/p><p>$$\\dot{x} = Ax$$<\/p><p>Here $x(t)$ is a vector-valued function of $t$, the dot denotes differentiation with respect to $t$, and $A$ is a given $n$ -by- $n$ matrix which is independent of $t$. If you've never heard of -- or want to forget -- the Jordan Canonical Form, then you have to hope there is a matrix $V$ which diagonalizes $A$, that is $V^{-1} A V$ is a diagonal matrix $\\Lambda$. Then the change of variables,<\/p><p>$$x = Vy$$<\/p><p>reduces the $n$ -by- $n$ problem to $n$ instances of the 1-by-1 case,<\/p><p>$$\\dot{y}_k = \\lambda_k y_k$$<\/p><p>The elements of the diagonal matrix $\\Lambda$ are the <i>eigenvalues<\/i> of $A$ and the columns of $V$ are the <i>eigenvectors<\/i> of $A$. The $k$-th component of the solution $y(t)$ is the exponential function of $t$ determined by the eigenvalue $\\lambda_k$, and the initial value $y_k(0)$.<\/p><p>$$ y_k(t) = y_k(0) e^{\\lambda_k t} $$<\/p><p>The components of the solution $x(t)$ of the original problem are then linear combinations of the exponential functions determined by the eigenvalues and eigenvectors and the initial values.<\/p><!--\/introduction--><p>But this fantasy about diagonalizing matrices leaves out some very important differential equations, like the single, second order<\/p><p>$$\\ddot{u} = 0$$<\/p><p>The solution, of course, is a straight line -- a linear polynomial in $t$. The solution does <i>not<\/i> involve any exponentials. This equation can be converted to a 2-by-2, first-order system by taking $x$ to be the vector with components<\/p><p>$$x_1 = u$$<\/p><p>$$x_2 = \\dot{u}$$<\/p><p>Then the differential equation is<\/p><p>$$\\dot{x_1} = x_2$$<\/p><p>$$\\dot{x_2} = 0$$<\/p><p>This can be written in matrix form<\/p><p>$$\\dot{x} = J x$$<\/p><p>where $J$ is the 2-by-2 matrix generated by the MATLAB statement<\/p><pre>  J = [ 0 1; 0 0 ]<\/pre><pre>  J =\r\n      0     1\r\n      0     0<\/pre><p>This matrix <i>cannot<\/i> be diagonalized; no change of variable which preserves the differential equation will produce a zero in the upper right hand corner. That had better be the case, because the differential equation has polynomial, not exponential, solutions. The matrix <tt>J<\/tt> is the simplest example of a nondiagonal Jordan Canonical Form. The eigenvalues -- in this case, a pair of zeros -&shy; are on the diagonal, but that crucial <tt>1<\/tt> off the diagonal couples the two differential equations.<\/p><p>A different change of variable leads to a matrix whose structure is not quite so obvious. Let<\/p><p>$$x_1 = u + \\dot{u}$$<\/p><p>$$x_2 = u - \\dot{u}$$<\/p><p>Then the equation becomes<\/p><p>$$\\dot{x} = Ax$$<\/p><p>where $A$ is generated by the MATLAB statement<\/p><pre>  A = [ 1\/2 -1\/2; 1\/2 -1\/2 ]<\/pre><pre>  A =\r\n      0.5000   -0.5000\r\n      0.5000   -0.5000<\/pre><p>This new change of variables really hasn't altered things very much. The Jordan Canonical Form of <tt>A<\/tt> is the matrix <tt>J<\/tt> from our first system. The differential equation still has solutions which are linear polynomials in $t$; it can't be transformed into a pair of decoupled equations with exponential solutions.<\/p><p>But now, let's perturb the matrix A very slightly to<\/p><pre>  A = [ 0.5 -0.49999999; 0.49999999 -0.5 ]<\/pre><pre>  A =\r\n    0.500000000000000  -0.499999990000000\r\n    0.499999990000000  -0.500000000000000<\/pre><p>The eigenvalues are changed from a pair of zeros to<\/p><pre>  lambda = eig(A)<\/pre><pre>  lambda =\r\n    1.0e-04 *\r\n       1.0000\r\n      -1.0000<\/pre><p>A change of $10^{-8}$ in the matrix elements changes the eigenvalues by $10^{-4}$. Now this perturbed matrix has distinct eigenvalues, and can be diagonalized. The eigenvector matrix is<\/p><pre class=\"language-matlab\">[V,~] = eig(A)\r\n<\/pre><pre class=\"language-matlab\">V =\r\n   0.707177488329075   0.707036066972953\r\n   0.707036066972953   0.707177488329075\r\n<\/pre><p>This eigenvector matrix <tt>V<\/tt> defines a change of variables that transforms the system into a decoupled system whose solutions involve <tt>exp(t\/10000)<\/tt> and <tt>exp(-t\/10000)<\/tt>. But we know the solution should be very close to a linear function of $t$. It is probably a lousy idea to try to represent the solution in terms of these two exponentials.<\/p><p>This is reflected in the fact that <tt>V<\/tt> is badly conditioned.<\/p><pre>   cond(V) = 1.0000e+04<\/pre><p>This matrix <tt>A<\/tt> is an example of why we can't use the Jordan Canonical Form for practical computation. Technically, <tt>A<\/tt> has a full set of linearly independent eigenvectors and a diagonal JCF. But any attempt to use this fact will be plagued by the condition number of <tt>V<\/tt> and a resulting loss of accuracy. On the other hand, if we try to say that <tt>A<\/tt> does not have a full set of eigenvectors and use a nondiagonal JCF, we are also making possibly significant errors.<\/p><p>Another example can be generated starting with MATLAB's test matrix,<\/p><pre class=\"language-matlab\">A = gallery(5)\r\n<\/pre><pre class=\"language-matlab\">A =\r\n        -9        11       -21        63      -252\r\n        70       -69       141      -421      1684\r\n      -575       575     -1149      3451    -13801\r\n      3891     -3891      7782    -23345     93365\r\n      1024     -1024      2048     -6144     24572\r\n<\/pre><p>This matrix was constructed so that its characteristic polynomial is<\/p><p>$$\\lambda^5 = 0$$<\/p><p>All five eigenvalues are zero. The Jordan Canonical Form can be obtained from the Symbolic Math Toolbox which, in this case, does exact integer calculations with <i>no<\/i> round off error.<\/p><pre class=\"language-matlab\">J = jordan(A)\r\n<\/pre><pre class=\"language-matlab\">J =\r\n     0     1     0     0     0\r\n     0     0     1     0     0\r\n     0     0     0     1     0\r\n     0     0     0     0     1\r\n     0     0     0     0     0\r\n<\/pre><p>With a well-conditioned change of variables, the equation<\/p><p>$$ \\dot{x} = Ax$$<\/p><p>essentially becomes<\/p><p>$$ \\frac{d^4u}{dt^4} = 0 $$<\/p><p>All solutions are cubic polynomials in $t$. So far, so good.<\/p><p>But now change the second diagonal element of <tt>A<\/tt> from -69 to<\/p><pre class=\"language-matlab\">A(2,2) = -70\r\n<\/pre><pre class=\"language-matlab\">A =\r\n        -9        11       -21        63      -252\r\n        70       -70       141      -421      1684\r\n      -575       575     -1149      3451    -13801\r\n      3891     -3891      7782    -23345     93365\r\n      1024     -1024      2048     -6144     24572\r\n<\/pre><p>I want to regard that as a significant change; I am not willing to approximate this new matrix by the unaltered <tt>gallery(5)<\/tt>. The characteristic polynomial is now<\/p><pre>  factor(charpoly(A,'lambda'))<\/pre><p>$$(\\lambda-1)(\\lambda^4 + 2\\lambda^3 - 67\\lambda^2 + 234\\lambda - 168)$$<\/p><p>One of the eigenvalues is $1$. The other four are the distinct, irrational numbers which are the roots of an irreducible quartic. The Jordan Canonical Form is diagonal. We could ask the Symbolic Math Toolbox to compute it, but the result is not very usable.<\/p><p>Instead we can simply ask for<\/p><pre>  [V, lambda] = eig(A);\r\n  lambda = diag(lambda)<\/pre><pre>  lambda =\r\n   -10.5726 + 0.0000i\r\n     3.7953 + 1.3331i\r\n     3.7953 - 1.3331i\r\n     1.0000 + 0.0000i\r\n     0.9820 + 0.0000i<\/pre><p>The form of the solution to the differential equation has changed dramatically, from a cubic polynomial in $t$, to a function involving terms like $\\exp(-10.5726 t)$ and $\\exp(3.7953 t) \\sin(1.3331 t)$. Moreover, the change of variables required to obtain this representation is badly conditioned.<\/p><pre>  cond(V) = 2.3890e+04<\/pre><p>The fundamental difficulty is with matrices, like this last <tt>A<\/tt>, which are close to, but not exactly equal to, matrices with non&shy;diagonal JCFs. If we try to diagonalize such matrices, then errors are magnified by the condition number of the eigenvector matrix, which can be arbitrarily large. On the other hand , to use the \"nearby\" nondiagonal JCF may also represent an unacceptably large error. We're damned if we do and damned if we don't.<\/p><p>The numerically reliable approach to all this is to avoid the Jordan Canonical Form altogether. The portions of MATLAB and Simulink that deal with matrix differential equations use other solution methods, including the Schur Form (which is triangular, instead of bidiagonal) and the matrix exponential (which is <i>not<\/i> computed from eigenvalues and eigenvectors).<\/p><p>I can't resist finishing up with a personal story. Prof. G. W. \"Pete\" Stewart of the University of Maryland introduces speakers at conferences by composing original limericks for them. Several years ago, he honored me with:<\/p><pre>  Said Professor Cleve Moler one day,\r\n  I'd like to get e to the A.\r\n     It's as easy as heck,\r\n     To get e to the x,\r\n  But I can't get e to the J.<\/pre><p>Thanks, Pete.<\/p><script language=\"JavaScript\"> <!-- \r\n    function grabCode_c5767c916292452f9a11a4140767c502() {\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='c5767c916292452f9a11a4140767c502 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' c5767c916292452f9a11a4140767c502';\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 2018 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_c5767c916292452f9a11a4140767c502()\"><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; R2017a<br><\/p><\/div><!--\r\nc5767c916292452f9a11a4140767c502 ##### SOURCE BEGIN #####\r\n%% The Jordan Canonical Form Just Doesn't Compute\r\n%\r\n% <<Jordan.jpg>>\r\n%\r\n% Camille Jordan (1838-1922)\r\n%\r\n% Photo credit: http:\/\/serge.mehl.free.fr\/chrono\/Jordan.html\r\n%\r\n% (This column first appeared in\r\n% <https:\/\/www.mathworks.com\/company\/newsletters\/articles\/jordans-canonical-form-just-doesnt-compute.html\r\n% the May 1994 issue of the MathWorks Newsletter>.)\r\n%\r\n% Matrices and differential equations are the key mathematical tools\r\n% in MATLAB(R) and Simulink(R). The Jordan Canonical Form is the key\r\n% relationship between matrices and differential equations.\r\n% So, why doesn't MATLAB use the JCF in any of its computations?\r\n% In fact, until the Symbolic Math Toolbox came along, we didn't even\r\n% have a function to compute the JCF.\r\n%\r\n% The difficulty with the Jordan Canonical Form is that it is wildly\r\n% sensitive to perturbation. Any kind of error REPLACE_WITH_DASH_DASH uncertainty in\r\n% experimental data, arithmetic roundoff error, linearization of\r\n% nonlinear functions REPLACE_WITH_DASH_DASH completely changes the JCF and, more importantly,\r\n% the transformations that generate it.\r\n%\r\n% Let's start with a system of $n$ linear, constant coefficient ordinary\r\n% differential equations.\r\n%\r\n% $$\\dot{x} = Ax$$\r\n%\r\n% Here $x(t)$ is a vector-valued function of $t$, the dot denotes\r\n% differentiation with respect to $t$, and $A$ is a given $n$ -by- $n$\r\n% matrix which is independent of $t$. If you've never heard of REPLACE_WITH_DASH_DASH or\r\n% want to forget REPLACE_WITH_DASH_DASH the Jordan Canonical Form, then you have to hope\r\n% there is a matrix $V$ which diagonalizes $A$, that is $V^{-1} A V$\r\n% is a diagonal matrix $\\Lambda$. Then the change of variables, \r\n%\r\n% $$x = Vy$$\r\n%\r\n% reduces the $n$ -by- $n$ problem to $n$ instances of the 1-by-1 case,\r\n%\r\n% $$\\dot{y}_k = \\lambda_k y_k$$\r\n%\r\n% The elements of the diagonal matrix $\\Lambda$ are the _eigenvalues_\r\n% of $A$ and the columns of $V$ are the _eigenvectors_ of $A$.\r\n% The $k$-th component of the solution $y(t)$ is the exponential function\r\n% of $t$ determined by the eigenvalue $\\lambda_k$, and the initial value\r\n% $y_k(0)$.\r\n%    \r\n% $$ y_k(t) = y_k(0) e^{\\lambda_k t} $$\r\n%\r\n% The components of the solution $x(t)$ of the original problem are then\r\n% linear combinations of the exponential functions determined by the\r\n% eigenvalues and eigenvectors and the initial values.\r\n\r\n%%\r\n% But this fantasy about diagonalizing matrices leaves out some very\r\n% important differential equations, like the single, second order\r\n%\r\n% $$\\ddot{u} = 0$$\r\n%\r\n% The solution, of course, is a straight line REPLACE_WITH_DASH_DASH a linear polynomial in\r\n% $t$. The solution does _not_ involve any exponentials. This equation\r\n% can be converted to a 2-by-2, first-order system by taking $x$ to be\r\n% the vector with components\r\n%\r\n% $$x_1 = u$$\r\n%\r\n% $$x_2 = \\dot{u}$$\r\n%\r\n% Then the differential equation is\r\n%\r\n% $$\\dot{x_1} = x_2$$\r\n%  \r\n% $$\\dot{x_2} = 0$$\r\n%\r\n% This can be written in matrix form\r\n%\r\n% $$\\dot{x} = J x$$\r\n%\r\n% where $J$ is the 2-by-2 matrix generated by the MATLAB statement\r\n%\r\n%    J = [ 0 1; 0 0 ]\r\n%\r\n%    J =\r\n%        0     1\r\n%        0     0\r\n%\r\n% This matrix _cannot_ be diagonalized; no change of variable which\r\n% preserves the differential equation will produce a zero in the upper\r\n% right hand corner. That had better be the case, because the differential\r\n% equation has polynomial, not exponential, solutions.\r\n% The matrix |J| is the simplest example of a nondiagonal Jordan\r\n% Canonical Form. The eigenvalues REPLACE_WITH_DASH_DASH in this case, a pair of zeros -\u00c2\u00ad\r\n% are on the diagonal, but that crucial |1| off the diagonal couples the\r\n% two differential equations.\r\n\r\n%%\r\n% A different change of variable leads to a matrix whose structure is not\r\n% quite so obvious. Let\r\n%\r\n% $$x_1 = u + \\dot{u}$$\r\n%  \r\n% $$x_2 = u - \\dot{u}$$  \r\n% \r\n% Then the equation becomes\r\n%\r\n% $$\\dot{x} = Ax$$\r\n%\r\n% where $A$ is generated by the MATLAB statement\r\n%  \r\n%    A = [ 1\/2 -1\/2; 1\/2 -1\/2 ]\r\n%\r\n%    A =\r\n%        0.5000   -0.5000\r\n%        0.5000   -0.5000\r\n%\r\n% This new change of variables really hasn't altered things very much.\r\n% The Jordan Canonical Form of |A| is the matrix |J| from our first system.\r\n% The differential equation still has solutions which are linear\r\n% polynomials in $t$; it can't be transformed into a pair of decoupled\r\n% equations with exponential solutions.\r\n%\r\n% But now, let's perturb the matrix A very slightly to\r\n%\r\n%    A = [ 0.5 -0.49999999; 0.49999999 -0.5 ]\r\n%\r\n%    A =\r\n%      0.500000000000000  -0.499999990000000\r\n%      0.499999990000000  -0.500000000000000\r\n% \r\n% The eigenvalues are changed from a pair of zeros to\r\n%\r\n%    lambda = eig(A)\r\n%\r\n%    lambda =\r\n%      1.0e-04 *\r\n%         1.0000\r\n%        -1.0000\r\n% \r\n% A change of $10^{-8}$ in the matrix elements changes the eigenvalues\r\n% by $10^{-4}$. Now this perturbed matrix has distinct eigenvalues, and\r\n% can be diagonalized. The eigenvector matrix is\r\n%\r\n%   [V,~] = eig(A)\r\n%\r\n%   V =\r\n%      0.707177488329075   0.707036066972953\r\n%      0.707036066972953   0.707177488329075\r\n\r\n%%\r\n% This eigenvector matrix |V| defines a change of variables that transforms\r\n% the system into a decoupled system whose solutions involve\r\n% |exp(t\/10000)| and |exp(-t\/10000)|. But we know the solution should \r\n% be very close to a linear function of $t$. It is probably a lousy idea\r\n% to try to represent the solution in terms of these two exponentials.\r\n% \r\n% This is reflected in the fact that |V| is badly conditioned.\r\n%\r\n%     cond(V) = 1.0000e+04\r\n%\r\n% This matrix |A| is an example of why we can't use the Jordan Canonical\r\n% Form for practical computation. Technically, |A| has a full set of\r\n% linearly independent eigenvectors and a diagonal JCF. But any attempt\r\n% to use this fact will be plagued by the condition number of |V|\r\n% and a resulting loss of accuracy. On the other hand, if we try to say\r\n% that |A| does not have a full set of eigenvectors and use a nondiagonal\r\n% JCF, we are also making possibly significant errors.\r\n\r\n%%\r\n% Another example can be generated starting with MATLAB's test matrix,\r\n%\r\n%   A = gallery(5)\r\n%\r\n%   A =\r\n%           -9        11       -21        63      -252\r\n%           70       -69       141      -421      1684\r\n%         -575       575     -1149      3451    -13801\r\n%         3891     -3891      7782    -23345     93365\r\n%         1024     -1024      2048     -6144     24572\r\n%\r\n% This matrix was constructed so that its characteristic polynomial is\r\n%\r\n% $$\\lambda^5 = 0$$\r\n%\r\n% All five eigenvalues are zero. The Jordan Canonical Form can be\r\n% obtained from the Symbolic Math Toolbox which, in this case, does\r\n% exact integer calculations with _no_ round off error.\r\n%\r\n%   J = jordan(A)\r\n%\r\n%   J =\r\n%        0     1     0     0     0\r\n%        0     0     1     0     0\r\n%        0     0     0     1     0\r\n%        0     0     0     0     1\r\n%        0     0     0     0     0\r\n%\r\n% With a well-conditioned change of variables, the equation\r\n%\r\n% $$ \\dot{x} = Ax$$\r\n% \r\n% essentially becomes\r\n%\r\n% $$ \\frac{d^4u}{dt^4} = 0 $$\r\n%\r\n% All solutions are cubic polynomials in $t$. So far, so good.\r\n\r\n%%\r\n% But now change the second diagonal element of |A| from -69 to\r\n%\r\n%   A(2,2) = -70\r\n%\r\n%   A =\r\n%           -9        11       -21        63      -252\r\n%           70       -70       141      -421      1684\r\n%         -575       575     -1149      3451    -13801\r\n%         3891     -3891      7782    -23345     93365\r\n%         1024     -1024      2048     -6144     24572\r\n%\r\n% I want to regard that as a significant change; I am not willing to\r\n% approximate this new matrix by the unaltered |gallery(5)|.\r\n% The characteristic polynomial is now\r\n%\r\n%    factor(charpoly(A,'lambda'))\r\n% \r\n% $$(\\lambda-1)(\\lambda^4 + 2\\lambda^3 - 67\\lambda^2 + 234\\lambda - 168)$$\r\n%\r\n% One of the eigenvalues is $1$. The other four are the distinct,\r\n% irrational numbers which are the roots of an irreducible quartic.\r\n% The Jordan Canonical Form is diagonal. We could ask the\r\n% Symbolic Math Toolbox to compute it, but the result\r\n% is not very usable.\r\n%\r\n% Instead we can simply ask for\r\n%\r\n%    [V, lambda] = eig(A);\r\n%    lambda = diag(lambda)\r\n%\r\n%    lambda =\r\n%     -10.5726 + 0.0000i\r\n%       3.7953 + 1.3331i\r\n%       3.7953 - 1.3331i\r\n%       1.0000 + 0.0000i\r\n%       0.9820 + 0.0000i\r\n%\r\n% The form of the solution to the differential equation has changed\r\n% dramatically, from a cubic polynomial in $t$, to a function involving\r\n% terms like $\\exp(-10.5726 t)$ and $\\exp(3.7953 t) \\sin(1.3331 t)$.\r\n% Moreover, the change of variables required to obtain this representation\r\n% is badly conditioned.\r\n%\r\n%    cond(V) = 2.3890e+04\r\n\r\n%%\r\n% The fundamental difficulty is with matrices, like this last |A|, which\r\n% are close to, but not exactly equal to, matrices with non\u00c2\u00addiagonal JCFs.\r\n% If we try to diagonalize such matrices, then errors are magnified by\r\n% the condition number of the eigenvector matrix, which can be arbitrarily\r\n% large. On the other hand , to use the \"nearby\" nondiagonal JCF may also \r\n% represent an unacceptably large error. We're damned if we do and\r\n% damned if we don't.\r\n%\r\n% The numerically reliable approach to all this is to avoid the Jordan\r\n% Canonical Form altogether. The portions of MATLAB and Simulink that\r\n% deal with matrix differential equations use other solution methods,\r\n% including the Schur Form (which is triangular, instead of bidiagonal)\r\n% and the matrix exponential (which is _not_ computed from eigenvalues\r\n% and eigenvectors).\r\n\r\n%%\r\n% I can't resist finishing up with a personal story. Prof. G. W.\r\n% \"Pete\" Stewart of the University of Maryland introduces speakers at\r\n% conferences by composing original limericks for them. Several years ago,\r\n% he honored me with:\r\n%\r\n%    Said Professor Cleve Moler one day,\r\n%    I'd like to get e to the A.\r\n%       It's as easy as heck,\r\n%       To get e to the x,\r\n%    But I can't get e to the J.\r\n%\r\n% Thanks, Pete.\r\n\r\n\r\n##### SOURCE END ##### c5767c916292452f9a11a4140767c502\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img decoding=\"async\"  class=\"img-responsive\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/Jordan.jpg\" onError=\"this.style.display ='none';\" \/><\/div><p>Camille Jordan (1838-1922)... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2018\/05\/28\/the-jordan-canonical-form-just-doesnt-compute\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,4,6,16,20],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3401"}],"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=3401"}],"version-history":[{"count":3,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3401\/revisions"}],"predecessor-version":[{"id":3407,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3401\/revisions\/3407"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=3401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=3401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=3401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}