def test_modeling_4p(self): exponents = [(0, 1, 1), (0, 1, 2), (1, 4, 0), (1, 3, 0), (1, 4, 1), (1, 3, 1), (1, 4, 2), (1, 3, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 3, 0), (3, 4, 0), (2, 3, 1), (3, 4, 1), (4, 5, 0), (2, 3, 2), (3, 4, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (5, 4, 0), (5, 4, 1), (4, 3, 0), (4, 3, 1), (3, 2, 0), (3, 2, 1), (3, 2, 2), (5, 3, 0), (7, 4, 0), (2, 1, 0), (2, 1, 1), (2, 1, 2), (9, 4, 0), (7, 3, 0), (5, 2, 0), (5, 2, 1), (5, 2, 2), (8, 3, 0), (11, 4, 0), (3, 1, 0), (3, 1, 1)] points = np.array( list(zip(*itertools.product([2, 4, 8, 10, 12], repeat=4)))) for expo1, expo2, expo3, expo4 in zip(exponents, exponents[1:], exponents[2:], exponents[3:]): termX = CompoundTerm.create(*expo1) termY = CompoundTerm.create(*expo2) termZ = CompoundTerm.create(*expo3) termW = CompoundTerm.create(*expo4) term = MultiParameterTerm((0, termX), (1, termY), (2, termZ), (3, termW)) term.coefficient = 10 function = MultiParameterFunction(term) function.constant_coefficient = 20000 values = function.evaluate(points) measurements = [ Measurement(Coordinate(p), None, None, v) for p, v in zip(zip(*points), values) ] modeler = MultiParameterModeler() models = modeler.model([measurements]) self.assertEqual(1, len(models)) self.assertApproxFunction(function, models[0].hypothesis.function)
def test_modeling_plus(self): exponents = [(0, 1, 1), (0, 1, 2), (1, 4, 0), (1, 3, 0), (1, 4, 1), (1, 3, 1), (1, 4, 2), (1, 3, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 3, 0), (3, 4, 0), (2, 3, 1), (3, 4, 1), (4, 5, 0), (2, 3, 2), (3, 4, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (5, 4, 0), (5, 4, 1), (4, 3, 0), (4, 3, 1), (3, 2, 0), (3, 2, 1), (3, 2, 2), (5, 3, 0), (7, 4, 0), (2, 1, 0), (2, 1, 1), (2, 1, 2), (9, 4, 0), (7, 3, 0), (5, 2, 0), (5, 2, 1), (5, 2, 2), (8, 3, 0), (11, 4, 0), (3, 1, 0), (3, 1, 1)] for expo1, expo2 in zip(exponents, exponents[1:]): termX = CompoundTerm.create(*expo1) termY = CompoundTerm.create(*expo2) term1 = MultiParameterTerm((0, termX)) term1.coefficient = 10 term2 = MultiParameterTerm((1, termY)) term2.coefficient = 20 function = MultiParameterFunction(term1, term2) function.constant_coefficient = 200 points = [np.array([2, 4, 8, 16, 32, 2, 4, 8, 16, 32, 2, 4, 8, 16, 32, 2, 4, 8, 16, 32, 2, 4, 8, 16, 32]), np.array([2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 16, 16, 16, 16, 16, 32, 32, 32, 32, 32])] values = function.evaluate(np.array(points)) measurements = [Measurement(Coordinate(p), None, None, v) for p, v in zip(zip(*points), values)] modeler = MultiParameterModeler() models = modeler.model([measurements]) self.assertEqual(1, len(models)) self.assertApproxFunction(function, models[0].hypothesis.function)