samer@0
|
1
|
samer@0
|
2 (define (matmult A x nm)
|
samer@0
|
3 (define y (VVector. nm (.getRowDimension A)))
|
samer@0
|
4 (addtask (seq
|
samer@0
|
5 (Ops.times y A x)
|
samer@0
|
6 (Ops.update y)))
|
samer@0
|
7 y
|
samer@0
|
8 )
|
samer@0
|
9
|
samer@0
|
10 ;;; apply function to vector
|
samer@0
|
11 (define (fn-vec fn in outname)
|
samer@0
|
12 (let ((out (VVector. outname (.size in))))
|
samer@0
|
13 (addtasks (Ops.apply out fn in) (Ops.update out))
|
samer@0
|
14 out))
|
samer@0
|
15
|
samer@0
|
16
|
samer@0
|
17 ; set up signal containing of sum_i fn(x_i)
|
samer@0
|
18 (define (sum-fn fn x nm)
|
samer@0
|
19 (define sig (node (.getNode x) (VDouble. nm)))
|
samer@0
|
20 (addtask (SumFnVec. fn x sig))
|
samer@0
|
21 sig
|
samer@0
|
22 )
|
samer@0
|
23
|
samer@0
|
24 ;;; power spectrum
|
samer@0
|
25 (define (ft-vec in)
|
samer@0
|
26 (define ftv (FFTVector. in))
|
samer@0
|
27 (addtask (.calcTask ftv))
|
samer@0
|
28 (put "FFTVector" ftv)
|
samer@0
|
29 ftv
|
samer@0
|
30 )
|
samer@0
|
31
|
samer@0
|
32 (define (ft-power ftv)
|
samer@0
|
33 (define y (VVector. "ft.power" (+ 1 (/ (.size ftv) 2))))
|
samer@0
|
34 (addtask (.getPower ftv y))
|
samer@0
|
35 y
|
samer@0
|
36 )
|
samer@0
|
37
|
samer@0
|
38 ;;; magnitude spectrum, ie sqrt(power)
|
samer@0
|
39 (define (ft-mag ftv)
|
samer@0
|
40 (define y (VVector. "ft.mag" (+ 0 (/ (.size ftv) 2))))
|
samer@0
|
41 (addtasks (.getFnPower ftv (Sqrt.) y))
|
samer@0
|
42 y
|
samer@0
|
43 )
|
samer@0
|
44
|
samer@0
|
45 ;; log spectrum, ie log(power)
|
samer@0
|
46 (define (ft-log ftv)
|
samer@0
|
47 (define y (VVector. "ft.log" (+ 1 (/ (.size ftv) 2))))
|
samer@0
|
48 (addtasks (.getFnPower ftv (Log.) y))
|
samer@0
|
49 y
|
samer@0
|
50 )
|
samer@0
|
51
|
samer@0
|
52 ;;; linear FT, real valued version with sin and cosine parts
|
samer@0
|
53 (define (ft-linear ftv)
|
samer@0
|
54 (define y (VVector. "ft" (.size ftv)))
|
samer@0
|
55 (addtask (.getLinearFT ftv y))
|
samer@0
|
56 y
|
samer@0
|
57 )
|
samer@0
|
58
|
samer@0
|
59 ;;; creates parameter viewables for a VFunction
|
samer@0
|
60 ;;; vfn: the VFunction (we need the node and the observable parts)
|
samer@0
|
61 ;;; models: list of (String,DoubleModel) pairs: we create a
|
samer@0
|
62 ;;; VParameter with the given name for each DoubleModel
|
samer@0
|
63
|
samer@0
|
64 (define (vfn-params vfn models)
|
samer@0
|
65 (define obs (observer (.changed vfn)))
|
samer@0
|
66 (node (.getNode vfn)
|
samer@0
|
67 (for-each
|
samer@0
|
68 (lambda (model)
|
samer@0
|
69 ;; these VParameters will INITIALISE the DoubleModel with a value
|
samer@0
|
70 ;; read from the environment
|
samer@0
|
71 (define param (VParameter. (first model) (second model)))
|
samer@0
|
72 (.addObserver param obs)
|
samer@0
|
73 )
|
samer@0
|
74 models)))
|
samer@0
|
75
|
samer@0
|
76 (define (id x) x)
|
samer@0
|
77 (define (vscale k) (define f (Scale. k)) (VParameter. "scale" f) f)
|
samer@0
|
78 (define (vpower k) (define f (Power. k)) (VParameter. "power" f) f)
|
samer@0
|
79 (define (vgenexp)
|
samer@0
|
80 (define genexp (samer.functions.LogGenExp.))
|
samer@0
|
81 (define vfn (VFunction. "logprior" genexp))
|
samer@0
|
82 (vfn-params vfn `( ( "quad" ,genexp ,(.getEpsModel genexp))))
|
samer@0
|
83 vfn
|
samer@0
|
84 )
|
samer@0
|
85
|
samer@0
|
86 (define-method (logcosh)
|
samer@0
|
87 (define fn (LogGenCosh.))
|
samer@0
|
88 (define vfn (VFunction. "logcosh" fn))
|
samer@0
|
89 (vfn-params vfn `(("alpha" ,fn)))
|
samer@0
|
90 fn)
|
samer@0
|
91
|
samer@0
|
92 (define-method (genexp alpha lin quad)
|
samer@0
|
93 (define fn (LogGenExp2.))
|
samer@0
|
94 (.set (.getAlphaModel fn) alpha)
|
samer@0
|
95 (.set (.getLinearScale fn) lin)
|
samer@0
|
96 (.set (.getQuadraticScale fn) quad)
|
samer@0
|
97 fn
|
samer@0
|
98 )
|
samer@0
|
99
|
samer@0
|
100 (define-method (genexp)
|
samer@0
|
101 (define fn (LogGenExp2.))
|
samer@0
|
102 (define vfn (VFunction. "genexp" fn))
|
samer@0
|
103 (vfn-params vfn `(
|
samer@0
|
104 ("alpha" ,fn)
|
samer@0
|
105 ("lin" ,(.getLinearScale fn))
|
samer@0
|
106 ("quad" ,(.getQuadraticScale fn))
|
samer@0
|
107 ))
|
samer@0
|
108 fn
|
samer@0
|
109 )
|
samer@0
|
110
|
samer@0
|
111 (define (nonneg logpr str)
|
samer@0
|
112 (define sq (ScaledFunction. (Square.) str))
|
samer@0
|
113 (define vfn (VFunction. "hybrid" (HybridFunction. sq logpr)))
|
samer@0
|
114 ; (vfn-params vfn `(("strictness" ,sq)))
|
samer@0
|
115 (.getFunction vfn)
|
samer@0
|
116 )
|
samer@0
|
117
|
samer@0
|
118
|
samer@0
|
119 ; returns list of integers from start to end
|
samer@0
|
120 (define (range start end)
|
samer@0
|
121 (define (rr l j) (if (< j start) l (rr (cons j l) (- j 1))))
|
samer@0
|
122 (rr () (- end 1))
|
samer@0
|
123 )
|
samer@0
|
124
|