toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN wls.h


From: Edward Rosten
Subject: [Toon-members] TooN wls.h
Date: Fri, 22 May 2009 17:47:12 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        09/05/22 17:47:12

Modified files:
        .              : wls.h 

Log message:
        Compute the upper right triangle only.
        
        Not yet done for multiple measurements.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/wls.h?cvsroot=toon&r1=1.19&r2=1.20

Patches:
Index: wls.h
===================================================================
RCS file: /cvsroot/toon/TooN/wls.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- wls.h       18 May 2009 15:12:16 -0000      1.19
+++ wls.h       22 May 2009 17:47:12 -0000      1.20
@@ -100,9 +100,15 @@
        /// @param weight The inverse variance of the measurement (default = 1)
        template<class B2>
        inline void add_mJ(Precision m, const Vector<Size, Precision, B2>& J, 
Precision weight = 1) {
-               Vector<Size,Precision> Jw = J*weight;
-               my_C_inv += Jw.as_col() * J.as_row();
-               my_vector+= m*Jw;
+               
+               //Upper right triangle only, for speed
+               for(int r=0; r < my_C_inv.num_rows(); r++)
+               {
+                       double Jw = weight * J[r];
+                       my_vector[r] += m * Jw;
+                       for(int c=r; c < my_C_inv.num_rows(); c++)
+                               my_C_inv[r][c] += Jw * J[c];
+               }
        }
 
        /// Add multiple measurements at once (much more efficiently)
@@ -123,6 +129,12 @@
        /// Process all the measurements and compute the weighted least squares 
set of parameter values
        /// stores the result internally which can then be accessed by calling 
get_mu()
        void compute(){
+       
+               //Copy the upper right triangle to the empty lower-left.
+               for(int r=1; r < my_C_inv.num_rows(); r++)
+                       for(int c=0; c < r; c++)
+                               my_C_inv[r][c] = my_C_inv[c][r];
+
                my_decomposition.compute(my_C_inv);
                my_mu=my_decomposition.backsub(my_vector);
        }
@@ -147,7 +159,7 @@
 
 
 private:
-       Matrix<Size,Size,Precision> my_C_inv;
+       Matrix<Size,Size,Precision> my_C_inv, my_C_inv2;
        Vector<Size,Precision> my_vector;
        Decomposition<Size,Precision> my_decomposition;
        Vector<Size,Precision> my_mu;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]