From 0f4daa9a9c7ce2803b85cf2a558ca197d93c68ab Mon Sep 17 00:00:00 2001 From: Stephen Mardson McQuay Date: Sun, 31 Jan 2010 21:10:37 -0700 Subject: [PATCH] fixed a little bug and getting good results again. still will have problems if you try to simply get a linear interpolation --- bin/driver.py | 7 ++++++- lib/baker.py | 19 ++++++++++++++----- test/baker.test.py | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/bin/driver.py b/bin/driver.py index 41fd3ae..d958277 100755 --- a/bin/driver.py +++ b/bin/driver.py @@ -100,9 +100,14 @@ if __name__ == '__main__': S = [mesh_source.points[i] for i in indicies[3:] ] Sq = [mesh_source.q[i] for i in indicies[3:] ] s_mesh = grid.grid(S, Sq) + print len(S) - answer = baker.run_baker(X, r_mesh, s_mesh, options.extra, options.verbose) + answer = baker.run_baker(X, r_mesh, s_mesh, options.verbose) + print "]\n[".join([str(i) for i in [answer, r_mesh, s_mesh]]) + print + print + print exact = exact_func(X[0], X[1]) if np.abs(exact - answer['final']) < np.abs(exact - answer['qlin']): success += 1 diff --git a/lib/baker.py b/lib/baker.py index 34f2cec..7196fec 100644 --- a/lib/baker.py +++ b/lib/baker.py @@ -93,7 +93,7 @@ def qlinear_3D(X, R, q): qlin = sum([q_i * phi_i for q_i, phi_i in zip(q, phis)]) return qlin -def run_baker(X, R, S, extra_points = 3, verbose = False): +def run_baker(X, R, S, verbose = False): """ This is the main function to call to get an interpolation to X from the tree @@ -107,10 +107,19 @@ def run_baker(X, R, S, extra_points = 3, verbose = False): """ # calculate values only for the triangle - phi = get_phis(X, S.points) - qlin = qlinear (X, S.points, S.q) + phi = get_phis(X, R.points) + qlin = qlinear (X, R.points, R.q) - if extra_points == 0: return qlin + if len(S.points) == 0: + answer = { + 'a': None, + 'b': None, + 'c': None, + 'qlin': qlin, + 'error': None, + 'final': None, + } + return answer B = [] # baker eq 9 w = [] # baker eq 11 @@ -147,6 +156,6 @@ def run_baker(X, R, S, extra_points = 3, verbose = False): 'qlin': qlin, 'error': error_term, 'final': q_final, - } + } return answer diff --git a/test/baker.test.py b/test/baker.test.py index bd4c3d1..47aa3b9 100755 --- a/test/baker.test.py +++ b/test/baker.test.py @@ -91,6 +91,7 @@ class TestSequenceFunctions(unittest.TestCase): self.q[size_of_simplex:size_of_simplex + extra_points]) answer = baker.run_baker(self.X, R, S) + a = self.approx_fmt % answer['a'] b = self.approx_fmt % answer['b'] c = self.approx_fmt % answer['c']