1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-02-07 20:54:32 +00:00

(math-trig-rewrite, math-hyperbolic-trig-rewrite): New functions.

(calc-simplify): Simplify trig functions when asked.
This commit is contained in:
Jay Belanger 2009-08-24 18:43:50 +00:00
parent 88421f3e11
commit 42110eaf95
2 changed files with 58 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2009-08-24 Jay Belanger <jay.p.belanger@gmail.com>
* calc/calc-alg.el (math-trig-rewrite)
(math-hyperbolic-trig-rewrite): New functions.
(calc-simplify): Simplify trig functions when asked.
2009-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
* diff-mode.el (diff-find-source-location): Avoid goto-line.

View File

@ -51,8 +51,17 @@
(defun calc-simplify ()
(interactive)
(calc-slow-wrapper
(calc-with-default-simplification
(calc-enter-result 1 "simp" (math-simplify (calc-top-n 1))))))
(let ((top (calc-top-n 1)))
(if (calc-is-inverse)
(setq top
(let ((calc-simplify-mode nil))
(math-normalize (math-trig-rewrite top)))))
(if (calc-is-hyperbolic)
(setq top
(let ((calc-simplify-mode nil))
(math-normalize (math-hyperbolic-trig-rewrite top)))))
(calc-with-default-simplification
(calc-enter-result 1 "simp" (math-simplify top))))))
(defun calc-simplify-extended ()
(interactive)
@ -303,6 +312,47 @@
(defalias 'calcFunc-esimplify 'math-simplify-extended)
;;; Rewrite the trig functions in a form easier to simplify.
(defun math-trig-rewrite (fn)
"Rewrite trigonometric functions in terms of sines and cosines."
(cond
((not (consp fn))
fn)
((eq (car-safe fn) 'calcFunc-sec)
(list '/ 1 (cons 'calcFunc-cos (math-trig-rewrite (cdr fn)))))
((eq (car-safe fn) 'calcFunc-csc)
(list '/ 1 (cons 'calcFunc-sin (math-trig-rewrite (cdr fn)))))
((eq (car-safe fn) 'calcFunc-tan)
(let ((newfn (math-trig-rewrite (cdr fn))))
(list '/ (cons 'calcFunc-sin newfn)
(cons 'calcFunc-cos newfn))))
((eq (car-safe fn) 'calcFunc-cot)
(let ((newfn (math-trig-rewrite (cdr fn))))
(list '/ (cons 'calcFunc-cos newfn)
(cons 'calcFunc-sin newfn))))
(t
(mapcar 'math-trig-rewrite fn))))
(defun math-hyperbolic-trig-rewrite (fn)
"Rewrite hyperbolic functions in terms of sinhs and coshs."
(cond
((not (consp fn))
fn)
((eq (car-safe fn) 'calcFunc-sech)
(list '/ 1 (cons 'calcFunc-cosh (math-hyperbolic-trig-rewrite (cdr fn)))))
((eq (car-safe fn) 'calcFunc-csch)
(list '/ 1 (cons 'calcFunc-sinh (math-hyperbolic-trig-rewrite (cdr fn)))))
((eq (car-safe fn) 'calcFunc-tanh)
(let ((newfn (math-hyperbolic-trig-rewrite (cdr fn))))
(list '/ (cons 'calcFunc-sinh newfn)
(cons 'calcFunc-cosh newfn))))
((eq (car-safe fn) 'calcFunc-coth)
(let ((newfn (math-hyperbolic-trig-rewrite (cdr fn))))
(list '/ (cons 'calcFunc-cosh newfn)
(cons 'calcFunc-sinh newfn))))
(t
(mapcar 'math-hyperbolic-trig-rewrite fn))))
;; math-top-only is local to math-simplify, but is used by
;; math-simplify-step, which is called by math-simplify.
(defvar math-top-only)