diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-23 11:49:31 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-23 11:49:31 +0000 |
commit | 611ec68f65624f34b05739c75a722eb8ac7131ef (patch) | |
tree | 8fdd96ae87923dbb346e9fd2cf8e5f8a1caae39d /src/clojure/contrib/complex_numbers.clj | |
parent | abd6be55e42eb77dc2bf49a7c9f6d67584de77ee (diff) |
complex-numbers: abs, conjugate, sqrt
Diffstat (limited to 'src/clojure/contrib/complex_numbers.clj')
-rw-r--r-- | src/clojure/contrib/complex_numbers.clj | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/clojure/contrib/complex_numbers.clj b/src/clojure/contrib/complex_numbers.clj index 579aba10..1a05934a 100644 --- a/src/clojure/contrib/complex_numbers.clj +++ b/src/clojure/contrib/complex_numbers.clj @@ -1,7 +1,7 @@ ;; Complex numbers ;; by Konrad Hinsen -;; last updated March 19, 2009 +;; last updated March 23, 2009 ;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use ;; and distribution terms for this software are covered by the Eclipse @@ -222,3 +222,37 @@ ; can be added later... ; +; +; Conjugation +; +(defmethod gm/conjugate ::complex + [x] + (let [[r i] (vals x)] + (complex r (ga/- i)))) + +(defmethod gm/conjugate ::pure-imaginary + [x] + (imaginary (ga/- (imag x)))) + +; +; Absolute value +; +(defmethod gm/abs ::complex + [x] + (let [[r i] (vals x)] + (gm/sqrt (ga/+ (ga/* r r) (ga/* i i))))) + +(defmethod gm/abs ::pure-imaginary + [x] + (gm/abs (imag x))) + +; +; Square root +; +(defmethod gm/sqrt ::complex + [{r :real i :imag}] + (let [abs (gm/sqrt (ga/+ (ga/* r r) (ga/* i i))) + p (gm/sqrt ((ga/qsym ga /) (ga/+ abs r) 2)) + q (ga/* (gm/sgn i) + (gm/sqrt ((ga/qsym ga /) (ga/- abs r) 2)))] + (complex p q))) |