]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - maxima/maxima-init.mac
maxima/maxima-init.mac: Add notes how to solve Ax = b.
[config/dotfiles.git] / maxima / maxima-init.mac
index df7c66bd91fde1ccfdfaee832b4e949c4fe38594..1dedac1ba79932fc63ab1222536bf25db42be6a6 100644 (file)
@@ -1,21 +1,44 @@
 /*
- * Maxima (computer algebra system) configuration file, maxima part.
+ * Maxima (computer algebra system) configuration file, Maxima part.
  *
- * Also have a look at maxima/maxima-init.mac.
+ * Also have a look at maxima/maxima-init.lisp.
+ *
+ * Notes:
+ *
+ * Solve Ax = b, thanks to Florian.
+ *
+ * A : matrix([1,2,0],[0,2,3],[0,0,4])$
+ * b : matrix([1],[3],[5])$
+ * linsolve_by_lu(A,b);
  */
 
-
-/* PACKAGES */
-
-/* Provides maxi() and mini() (and more). */
-load (descriptive);
+/*
+ * Copyright (C) 2011-2012  Simon Ruderich
+ *
+ * This file is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this file.  If not, see <http://www.gnu.org/licenses/>.
+ */
 
 
 /* CUSTOM FUNCTIONS */
 
-/* Maxima's norm() can't calculate the 2-norm. Only works for non-complex
- * matrices. */
-norm_2(x) := sqrt(maxi(eigenvalues(transpose(x) . x)[1]));
+/* Didn't find any euclid norm in Maxima, so here it is. */
+norm(x) := sqrt(transpose(x) . x);
+
+/* Maxima's mat_norm() can't calculate the 2-norm. Thanks to Wolfgang Lindner
+ * (http://www.ma.utexas.edu/pipermail/maxima/2007/006300.html) for an
+ * improved version. */
+mat_norm2(x) := sqrt(lmax(eigenvalues(transpose(conjugate(x)) . x)[1]));
 
 /* Shortcut to perform lu factorization. */
 lu(x) := block(x : lu_factor(x), get_lu_factors(x));