changeset 5:4a4e5204ecf5

Added Least squares time test
author nikcleju
date Sat, 05 Nov 2011 10:21:46 +0000
parents 4393ad5bffc1
children cc7239d5e972
files tests/RecomTST_test.py tests/RecomTSTgentest.m tests/testLstsq.m tests/testLstsq.mat
diffstat 4 files changed, 61 insertions(+), 53 deletions(-) [+]
line wrap: on
line diff
--- a/tests/RecomTST_test.py	Mon Oct 24 23:39:53 2011 +0000
+++ b/tests/RecomTST_test.py	Sat Nov 05 10:21:46 2011 +0000
@@ -5,7 +5,7 @@
 @author: Nic
 
 Test RecommendedTST algorithm
-"""
+u"""
 
 import numpy as np
 import numpy.linalg
@@ -28,39 +28,34 @@
         
         # check if found solution is the same as the correct cslution
         diff = numpy.linalg.norm(xr - Xr[:,i])
-        self.assertTrue(diff < 1e-12)
-        #err1 = numpy.linalg.norm(Y[:,i] - np.dot(A,xr))
-        #err2 = numpy.linalg.norm(Y[:,i] - np.dot(A,Xr[:,i]))
-        #norm1 = numpy.linalg.norm(xr,1)
-        #norm2 = numpy.linalg.norm(Xr[:,i],1)
-        #print 'diff = ',diff
-        #print 'err1 = ',err1
-        #print 'err2 = ',err2
-        #print 'norm1 = ',norm1
-        #print 'norm2 = ',norm2
-        #
-        # It seems Matlab's linsolve and scipy solve are slightly different
-        # Therefore make a more robust condition:
+        err1 = numpy.linalg.norm(Y[:,i] - np.dot(A,xr))
+        err2 = numpy.linalg.norm(Y[:,i] - np.dot(A,Xr[:,i]))
+        norm1 = numpy.linalg.norm(xr,1)
+        norm2 = numpy.linalg.norm(Xr[:,i],1)
+                
+        # Make a more robust condition:
         #  OK;    if   solutions are close enough (diff < 1e-6)
         #              or
         #              (
-        #               they fulfill the constraint close enough (differr < 1e-6)
+        #               Python solution fulfills the constraint better (or up to 1e-6 worse)
         #                 and
         #               Python solution has l1 norm no more than 1e-6 larger as the reference solution
         #                 (i.e. either norm1 < norm2   or   norm1>norm2 not by more than 1e-6)
         #              )
         #        
-        #  ERROR: else
-        #differr  = abs((err1 - err2))
-        #diffnorm = norm1 - norm2  # intentionately no abs(), since norm1 < norm2 is good
-        #if diff < 1e-6 or (differr < 1e-6 and (diffnorm < 1e-6)):
-        #  isok = True
-        #else:
-        #  isok = False
-        #if not isok:
-        #  print "should raise"
-        #  #self.assertTrue(isok)
-        #self.assertTrue(isok)
+        #  ERROR: else        
+        differr  = err1 - err2    # intentionately no abs(), since err1` < err2 is good
+        diffnorm = norm1 - norm2  # intentionately no abs(), since norm1 < norm2 is good
+        if diff < 1e-6 or (differr < 1e-6 and (diffnorm < 1e-6)):
+          isok = True
+        else:
+          isok = False
+        self.assertTrue(isok)
+        
+        #diff = numpy.linalg.norm(xr - Xr[:,i])
+        #if diff > 1e-6:
+        #    self.assertTrue(diff < 1e-6)
+
   
 if __name__ == "__main__":
     unittest.main(verbosity=2)    
--- a/tests/RecomTSTgentest.m	Mon Oct 24 23:39:53 2011 +0000
+++ b/tests/RecomTSTgentest.m	Sat Nov 05 10:21:46 2011 +0000
@@ -1,36 +1,37 @@
 % Run BP and save parameters and solutions as reference test data
 % to check if other algorithms are correct
 
-numA = 10;
-numY = 100;
-
-sizesA{1} = [50 100];
-sizesA{2} = [20 25];
-sizesA{3} = [10 120];
-sizesA{4} = [15 100];
-sizesA{5} = [70 100];
-sizesA{6} = [80 100];
-sizesA{7} = [90 100];
-sizesA{8} = [99 100];
-sizesA{9} = [100 100];
-sizesA{10} = [250 400];
-
-for i = 1:numA
-    sz = sizesA{i};
-    cellA{i} = randn(sz);
-    cellY{i} = randn(sz(1), numY);
-    for j = 1:numY
-        cellTol{i}(j) = rand / 5; % restrict from 0 to 20% if measurements
-        %cellX0{i}(:,j) = cellA{i} \ cellY{i}(:,j);
-        cellX0{i}(:,j) = zeros(size(cellA{i},2),1);
-    end
-end
-%load BPtestdata
-
+% numA = 10;
+% numY = 100;
+% 
+% sizesA{1} = [50 100];
+% sizesA{2} = [20 25];
+% sizesA{3} = [10 120];
+% sizesA{4} = [15 100];
+% sizesA{5} = [70 100];
+% sizesA{6} = [80 100];
+% sizesA{7} = [90 100];
+% sizesA{8} = [99 100];
+% sizesA{9} = [100 100];
+% sizesA{10} = [250 400];
+% 
+% for i = 1:numA
+%     sz = sizesA{i};
+%     cellA{i} = randn(sz);
+%     cellY{i} = randn(sz(1), numY);
+%     for j = 1:numY
+%         cellTol{i}(j) = rand / 5; % restrict from 0 to 20% if measurements
+%         %cellX0{i}(:,j) = cellA{i} \ cellY{i}(:,j);
+%         cellX0{i}(:,j) = zeros(size(cellA{i},2),1);
+%     end
+% end
+% %load BPtestdata
+tic
 for i = 1:numA
     for j = 1:numY
         cellXr{i}(:,j) = RecommendedTST(cellA{i}, cellY{i}(:,j), 300, cellTol{i}(j), cellX0{i}(:,j));
     end
 end
+toc
 
-save RecomTSTtestdata
\ No newline at end of file
+% save RecomTSTtestdata
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/testLstsq.m	Sat Nov 05 10:21:46 2011 +0000
@@ -0,0 +1,12 @@
+% test how much time solving a system takes in Matlab
+
+clear all
+close all
+
+load testLstsq
+
+tic
+for i = 1:nruns
+    A \ b;
+end
+toc
\ No newline at end of file
Binary file tests/testLstsq.mat has changed