Commit 1aa484e3 authored by Jay Belanger's avatar Jay Belanger
Browse files

(calcFunc-kron, calc-kron): New functions.

parent 60f2c210
......@@ -479,6 +479,11 @@
(calc-binary-op "cros" 'calcFunc-cross arg)))
(defun calc-kron (arg)
(interactive "P")
(calc-binary-op "kron" 'calcFunc-kron arg)))
(defun calc-remove-duplicates (arg)
(interactive "P")
......@@ -1466,6 +1471,41 @@
(math-reject-arg a "*Three-vector expected")))
;;; Compute a Kronecker product
(defun calcFunc-kron (x y &optional nocheck)
"The Kronecker product of objects X and Y.
The objects X and Y may be scalars, vectors or matrices.
The type of the result depends on the types of the operands;
the product of two scalars is a scalar,
of one scalar and a vector is a vector,
of two vectors is a vector.
of one vector and a matrix is a matrix,
of two matrices is a matrix."
(unless nocheck
(cond ((or (math-matrixp x)
(math-matrixp y))
(unless (math-matrixp x)
(setq x (if (math-vectorp x)
(list 'vec x)
(list 'vec (list 'vec x)))))
(unless (math-matrixp y)
(setq y (if (math-vectorp y)
(list 'vec y)
(list 'vec (list 'vec y))))))
((or (math-vectorp x)
(math-vectorp y))
(unless (math-vectorp x)
(setq x (list 'vec x)))
(unless (math-vectorp y)
(setq y (list 'vec y))))))
(if (math-vectorp x)
(let (ret)
(dolist (v (cdr x))
(dolist (w (cdr y))
(setq ret (cons (calcFunc-kron v w t) ret))))
(cons 'vec (nreverse ret)))
(math-mul x y)))
;; The variable math-rb-close is local to math-read-brackets, but
;; is used by math-read-vector, which is called (directly and
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment