wisp
 
(Arne Babenhauserheide)
2016-11-08: use a sparse covariance matrix

use a sparse covariance matrix

diff --git a/examples/ensemble-estimation.w b/examples/ensemble-estimation.w
--- a/examples/ensemble-estimation.w
+++ b/examples/ensemble-estimation.w
@@ -35,6 +35,8 @@ exec guile -L $(dirname $(dirname $(real
 
 define-module : examples ensemble-estimation 
 use-modules : srfi srfi-42 ; list-ec
+              srfi srfi-9 ; records
+              oop goops ; generic functions
 use-modules 
   : ice-9 popen
         . #:select : open-output-pipe close-pipe
@@ -50,8 +52,21 @@ define : make-diagonal-matrix-with-trace
                       list-ref trace i
                       . 0.0
 
+define-class <sparse-covariance-matrix> ()
+  trace #:getter get-trace #:init-keyword #:trace
+                
+
+define-generic list-ref 
+define-method : list-ref (M <sparse-covariance-matrix>) (i <integer>)
+              let : : trace : slot-ref M 'trace
+                list-ec (: j (length trace))
+                    if : equal? i j
+                         list-ref trace i
+                         . 0
+
 define : make-covariance-matrix-from-standard-deviations stds
-         make-diagonal-matrix-with-trace : map (lambda (x) (expt x 2)) stds
+         ; make-diagonal-matrix-with-trace : map (lambda (x) (expt x 2)) stds
+         make <sparse-covariance-matrix> #:trace : map (lambda (x) (expt x 2)) stds
 
 define : mean l
        . "Calculate the average value of l (numbers)."