Mercurial > hg > pycsalgos
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