Mercurial > rlm
view src/rlm/thermal_noise.clj @ 0:78a630e650d2
initial import
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 18 Oct 2011 00:57:08 -0700 |
parents | |
children |
line wrap: on
line source
1 (ns rlm.thermal-noise2 (:refer-clojure :only [])3 (:require rlm.ns-rlm mobius.base))4 (rlm.ns-rlm/ns-clone mobius.base)6 (defrecord imaginary [real complex])8 (defmethod + [imaginary Number] [i r]9 (imaginary. (+ (:real i) r) (:complex i)))10 (defmethod + [Number imaginary] [r i]11 (+ i r))12 (defmethod + [imaginary imaginary] [i1 i2]13 (imaginary. (+ (:real i1) (:real i2))14 (+ (:complex i1) (:complex i2))))17 (defmethod * [imaginary Number] [i r]18 (imaginary. (* r (:real i)) (* r (:complex i))))19 (defmethod * [Number imaginary] [r i]20 (* i r))21 (defmethod * [imaginary imaginary] [i1 i2]22 (let [[a1 b1] [(:real i1) (:complex i1)]23 [a2 b2] [(:real i2) (:complex i2)]]24 (imaginary. (- (* a1 a2) (* b1 b2))25 (+ (* a1 b2) (* a2 b1)))))27 (defmethod / imaginary [i]29 (cond (and (not= (:real i) 0) (not= (:complex i) 0))30 (let [[a b] [(:real i) (:complex i)]31 d (- (/ (/ a) (+ (/ a b) (/ b a))))32 c (/ (+ 1 (* b d)) a)]33 (imaginary. c d))34 (= (:real i) 0)35 (imaginary. 0 (- (/ (:complex i))))36 (= (:complex i) 0)37 (imaginary. (/ (:real i)) 0)))40 (defmethod / [imaginary imaginary] [i1 i2]41 (* i1 (/ i2)))43 (defmethod / [imaginary Number] [i r]44 (* i (/ r)))46 (defmethod / [Number imaginary] [r i]47 (* r (/ i)))49 (defmulti norm class)50 (defmethod norm Number [r] r)51 (defmethod norm imaginary [i]52 (sqrt (+ (sq (:real i) ) (sq (:complex i)))))57 (def i (imaginary. 0 1))59 (defn h** [w_0 v_0 y w]60 (/ v_0 (+ (- (sq w)) (* 2 y i w) (sq w_0))))62 (def f_0 10e3)63 (def w_0 (* f_0 2 Math/PI))64 (def v_0 0.01)65 (def h* (partial h** w_0 v_0))68 (def x (range 1 1e7 100))70 (def y-range [0.1 0.5 1 2 5 10 100 1000])73 (defn graphs []74 (let [plot (xy-plot)]75 (dorun76 (for [ y y-range]77 (let [result (vec (map (partial (comp norm h*) y) x))]78 (add-lines plot (vec (map log10 x)) (vec (map log10 result))))))79 (set-x-label plot "log frequency")80 (set-y-label plot "log h*")))82 (def rrr (imaginary. 1 1))