diff scripts/linear-algebra/expm.m @ 10831:1646bd8e3735

special case diagonal matrices and scalars in expm
author Jaroslav Hajek <highegg@gmail.com>
date Thu, 29 Jul 2010 08:51:23 +0200
parents 3140cb7a05a1
children 994e2a93a8e2
line wrap: on
line diff
--- a/scripts/linear-algebra/expm.m
+++ b/scripts/linear-algebra/expm.m
@@ -76,6 +76,14 @@
     error ("expm: input must be a square matrix");
   endif
 
+  if (isscalar (a))
+    r = exp (a);
+    return
+  elseif (strfind (typeinfo (a), "diagonal matrix"))
+    r = diag (exp (diag (a)));
+    return
+  endif
+
   n = rows (a);
   ## Trace reduction.
   a(a == -Inf) = -realmax;