Esempio n. 1
0
    def Solve(self, inUserFunctionString = None, inAlgorithmName="Levenberg-Marquardt"):
        if inUserFunctionString:
            self.ParseAndCompileUserFunctionString(inUserFunctionString)

        # starting point
        if len(self.estimatedCoefficients) == 0:
            self.estimatedCoefficients = pyeq2.solverService().SolveUsingDE(self)
            
        if self.fittingTarget == 'ODR':
            return pyeq2.solverService().SolveUsingODR(self)
        
        self.estimatedCoefficients = pyeq2.solverService().SolveUsingSelectedAlgorithm(self, inAlgorithmName=inAlgorithmName)
        return pyeq2.solverService().SolveUsingSimplex(self)
Esempio n. 2
0
    def Solve(self, inUserFunctionString = None, inAlgorithmName="Levenberg-Marquardt"):
        if inUserFunctionString:
            self.ParseAndCompileUserFunctionString(inUserFunctionString)

        # starting point
        if len(self.estimatedCoefficients) == 0:
            self.estimatedCoefficients = pyeq2.solverService().SolveUsingDE(self)
            
        if self.fittingTarget == 'ODR':
            return pyeq2.solverService().SolveUsingODR(self)
        
        self.estimatedCoefficients = pyeq2.solverService().SolveUsingSelectedAlgorithm(self, inAlgorithmName=inAlgorithmName)
        return pyeq2.solverService().SolveUsingSimplex(self)
Esempio n. 3
0
def scaleFitter(fit_eq, file, estimated,weight):
  '''Ajusta datos del archivo para mi función arbitraria
     que es un escalamiento de la función Membrane Transport'''
  f=open(file)
  data = f.read()
  #Crea el objeto de función a escala y lo llena de datos
  equation = pyeq2.Models_2D.UserDefinedFunction.UserDefinedFunction('SSQABS','Default', fit_eq)
  pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(data, equation,weight)
  f.close()

  #Calcula el ajuste
  equation.estimatedCoefficients = estimated
  pyeq2.solverService().SolveUsingSimplex(equation)
  equation.CalculateCoefficientAndFitStatistics()
  return equation
Esempio n. 4
0
 def test_SolveUsingSimplex_3D(self):
     coefficientsShouldBe = numpy.array([0.28658383, -0.90215775, 1.15483864])
     model = pyeq2.Models_3D.Polynomial.Linear('SSQABS')
     model.estimatedCoefficients = numpy.array([1.0, 1.0, 1.0]) # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSimplex(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-06, atol=1.0E-300))
Esempio n. 5
0
 def test_SolveUsingODR_3D(self):
     coefficientsShouldBe = numpy.array([-0.04925, -0.90509, 1.28076])
     model = pyeq2.Models_3D.Polynomial.Linear('ODR')
     model.estimatedCoefficients = numpy.array([0.2, -1.0, 1.0]) # starting values for the ODR solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingODR(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-03, atol=1.0E-300))
Esempio n. 6
0
 def test_SolveUsingSimplex_3D(self):
     coefficientsShouldBe = numpy.array([0.28658383, -0.90215775, 1.15483864])
     model = pyeq2.Models_3D.Polynomial.Linear("SSQABS")
     model.estimatedCoefficients = numpy.array([1.0, 1.0, 1.0])  # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSimplex(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
Esempio n. 7
0
 def test_SolveUsingSimplex_SSQREL_2D(self):
     coefficientsShouldBe = numpy.array([-6.74510573, 1.32459622])
     model = pyeq2.Models_2D.Polynomial.Linear('SSQREL')
     model.estimatedCoefficients = numpy.array([1.0, 1.0]) # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSimplex(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-06, atol=1.0E-300))
    def test_SolveUsingSpline_2D(self):
        knotPointsShouldBe = numpy.array(
            [5.357, 5.357, 5.357, 5.357, 9.861, 9.861, 9.861, 9.861])
        coefficientsShouldBe = numpy.array([
            0.38297001, 1.95535226, 4.59605664, 7.16162379, 0.0, 0.0, 0.0, 0.0
        ])
        testEvaluationShouldBe = numpy.array([4.02361487093])
        model = pyeq2.Models_2D.Spline.Spline(inSmoothingFactor=1.0,
                                              inXOrder=3)
        pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
            DataForUnitTests.asciiDataInColumns_2D, model, False)
        fittedParameters = pyeq2.solverService().SolveUsingSpline(model)

        # example of later using the saved spline knot points and coefficients
        unFittedSpline = scipy.interpolate.fitpack2.UnivariateSpline(
            model.dataCache.allDataCacheDictionary['X'],
            model.dataCache.allDataCacheDictionary['DependentData'],
            s=model.smoothingFactor,
            k=model.xOrder)
        unFittedSpline._eval_args = fittedParameters
        testEvaluation = unFittedSpline(numpy.array([8.0]))

        self.assertTrue(
            numpy.allclose(testEvaluation,
                           testEvaluationShouldBe,
                           rtol=1.0E-10,
                           atol=1.0E-300))
        self.assertTrue(
            numpy.equal(fittedParameters[0], knotPointsShouldBe).all())
        self.assertTrue(
            numpy.allclose(fittedParameters[1],
                           coefficientsShouldBe,
                           rtol=1.0E-06,
                           atol=1.0E-300))
Esempio n. 9
0
 def test_SolveUsingLevenbergMarquardt_2D(self):
     coefficientsShouldBe = numpy.array([-8.01913565, 1.5264473])
     model = pyeq2.Models_2D.Polynomial.Linear('SSQABS')
     model.estimatedCoefficients = numpy.array([-4.0, 2.0]) # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSelectedAlgorithm(model, inAlgorithmName="Levenberg-Marquardt")
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-06, atol=1.0E-300))
Esempio n. 10
0
 def test_SolveUsingSimplex_SSQREL_2D(self):
     coefficientsShouldBe = numpy.array([-6.74510573, 1.32459622])
     model = pyeq2.Models_2D.Polynomial.Linear("SSQREL")
     model.estimatedCoefficients = numpy.array([1.0, 1.0])  # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSimplex(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
Esempio n. 11
0
    def Solve(self):
        solver = pyeq2.solverService()

        if self.splineFlag:
            return solver.SolveUsingSpline(self)

        if self.fixedCoefficients != []:
            self._canLinearSolverBeUsedForSSQABS = False

        if self.fittingTarget == 'SSQABS':
            if self.CanLinearSolverBeUsedForSSQABS() == True:
                return solver.SolveUsingLinear(self)
            else:
                self.estimatedCoefficients = solver.SolveUsingDE(self)
                self.estimatedCoefficients = solver.SolveUsingLevenbergMarquardt(
                    self)
                return solver.SolveUsingSimplex(self)

        if self.fittingTarget == 'ODR':
            self.estimatedCoefficients = solver.SolveUsingDE(self)
            return solver.SolveUsingODR(self)

        # default
        self.estimatedCoefficients = solver.SolveUsingDE(self)
        return solver.SolveUsingSimplex(self)
Esempio n. 12
0
 def test_SolveUsingODR_3D(self):
     coefficientsShouldBe = numpy.array([-0.04925, -0.90509, 1.28076])
     model = pyeq2.Models_3D.Polynomial.Linear("ODR")
     model.estimatedCoefficients = numpy.array([0.2, -1.0, 1.0])  # starting values for the ODR solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingODR(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-03, atol=1.0e-300))
Esempio n. 13
0
 def test_SolveUsingDE_3D(self):
     coefficientsShouldBe = numpy.array([-2.05105972, -0.49194959,  1.77817475])
     model = pyeq2.Models_3D.UserDefinedFunction.UserDefinedFunction('SSQABS', 'Default', 'a + b*X + c*Y')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D_small, model, False)
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     fittingTarget = model.CalculateAllDataFittingTarget(coefficients)
     self.assertTrue(fittingTarget <= 0.1)
Esempio n. 14
0
 def test_SolveUsingDE_3D(self):
     coefficientsShouldBe = numpy.array([-2.05105972, -0.49194959,  1.77817475])
     model = pyeq2.Models_3D.UserDefinedFunction.UserDefinedFunction('SSQABS', 'Default', 'a + b*X + c*Y')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D_small, model, False)
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     fittingTarget = model.CalculateAllDataFittingTarget(coefficients)
     self.assertTrue(fittingTarget <= 0.1)
Esempio n. 15
0
 def test_SolveUsingLevenbergMarquardt_2D(self):
     coefficientsShouldBe = numpy.array([-8.01913565, 1.5264473])
     model = pyeq2.Models_2D.Polynomial.Linear("SSQABS")
     model.estimatedCoefficients = numpy.array([-4.0, 2.0])  # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingLevenbergMarquardt(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
Esempio n. 16
0
    def test_SolveUsingSpline_3D(self):
        xKnotPointsShouldBe = numpy.array([0.607, 0.607, 0.607, 3.017, 3.017, 3.017])
        yKnotPointsShouldBe = numpy.array([1.984, 1.984, 1.984, 3.153, 3.153, 3.153])
        coefficientsShouldBe = numpy.array(
            [2.33418963, 1.80079612, 5.07902936, 0.54445029, 1.04110843, 2.14180324, 0.26992805, 0.39148852, 0.8177307]
        )
        testEvaluationShouldBe = numpy.array([0.76020577997])
        model = pyeq2.Models_3D.Spline.Spline(inSmoothingFactor=1.0, inXOrder=2, inYOrder=2)
        pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
        fittedParameters = pyeq2.solverService().SolveUsingSpline(model)

        # example of later using the saved spline knot points and coefficients
        unFittedSpline = scipy.interpolate.fitpack2.SmoothBivariateSpline(
            model.dataCache.allDataCacheDictionary["X"],
            model.dataCache.allDataCacheDictionary["Y"],
            model.dataCache.allDataCacheDictionary["DependentData"],
            s=model.smoothingFactor,
            kx=model.xOrder,
            ky=model.yOrder,
        )
        unFittedSpline.tck = fittedParameters
        testEvaluation = unFittedSpline.ev(2.5, 2.5)

        self.assertTrue(numpy.allclose(testEvaluation, testEvaluationShouldBe, rtol=1.0e-10, atol=1.0e-300))
        self.assertTrue(numpy.equal(fittedParameters[0], xKnotPointsShouldBe).all())
        self.assertTrue(numpy.equal(fittedParameters[1], yKnotPointsShouldBe).all())
        self.assertTrue(numpy.allclose(fittedParameters[2], coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
Esempio n. 17
0
 def test_SolveUsingLevenbergMarquardt_3D(self):
     coefficientsShouldBe = numpy.array([0.28658387, -0.90215776, 1.15483863])
     model = pyeq2.Models_3D.Polynomial.Linear('SSQABS')
     model.estimatedCoefficients = numpy.array([0.2, -1.0, 1.0]) # starting values for the simplex solver
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingSelectedAlgorithm(model, inAlgorithmName="Levenberg-Marquardt")
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-05, atol=1.0E-300))
Esempio n. 18
0
def scaleFitter(fit_eq, file, estimated, weight):
    '''Ajusta datos del archivo para mi función arbitraria
     que es un escalamiento de la función Membrane Transport'''
    f = open(file)
    data = f.read()
    #Crea el objeto de función a escala y lo llena de datos
    equation = pyeq2.Models_2D.UserDefinedFunction.UserDefinedFunction(
        'SSQABS', 'Default', fit_eq)
    pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
        data, equation, weight)
    f.close()

    #Calcula el ajuste
    equation.estimatedCoefficients = estimated
    pyeq2.solverService().SolveUsingSimplex(equation)
    equation.CalculateCoefficientAndFitStatistics()
    return equation
Esempio n. 19
0
 def test_SolveUsingDE_2D(self):
     coefficientsShouldBe = numpy.array([-6.15515504031, 1.21618173729])
     model = pyeq2.Models_2D.UserDefinedFunction.UserDefinedFunction("SSQABS", "Default", "m*X + b")
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_2D_small, model, False
     )
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
Esempio n. 20
0
 def test_SolveUsingDE_3D(self):
     coefficientsShouldBe = numpy.array([-0.206068766376, -0.644872592849, 1.13361007134])
     model = pyeq2.Models_3D.UserDefinedFunction.UserDefinedFunction("SSQABS", "Default", "a + b*X + c*Y")
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_3D_small, model, False
     )
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-06, atol=1.0e-300))
 def test_SolveUsingODR_2D(self):
     coefficientsShouldBe = numpy.array([-8.04624, 1.53032])
     model = pyeq2.Models_2D.Polynomial.Linear('ODR')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingODR(model)
     self.assertTrue(
         numpy.allclose(coefficients,
                        coefficientsShouldBe,
                        rtol=1.0E-03,
                        atol=1.0E-300))
 def test_SolveUsingDE_2D(self):
     coefficientsShouldBe = numpy.array([-6.15515504031, 1.21618173729])
     model = pyeq2.Models_2D.UserDefinedFunction.UserDefinedFunction(
         'SSQABS', 'Default', 'm*X + b')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_2D_small, model, False)
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     self.assertTrue(
         numpy.allclose(coefficients,
                        coefficientsShouldBe,
                        rtol=1.0E-06,
                        atol=1.0E-300))
 def test_SolveUsingLinear_2D(self):
     coefficientsShouldBe = numpy.array(
         [-8.0191356407516956E+00, 1.5264472941853220E+00])
     model = pyeq2.Models_2D.Polynomial.Linear('SSQABS')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingLinear(model)
     self.assertTrue(
         numpy.allclose(coefficients,
                        coefficientsShouldBe,
                        rtol=1.0E-10,
                        atol=1.0E-300))
 def test_SolveUsingDE_3D(self):
     coefficientsShouldBe = numpy.array(
         [-0.206068766376, -0.644872592849, 1.13361007134])
     model = pyeq2.Models_3D.UserDefinedFunction.UserDefinedFunction(
         'SSQABS', 'Default', 'a + b*X + c*Y')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_3D_small, model, False)
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     self.assertTrue(
         numpy.allclose(coefficients,
                        coefficientsShouldBe,
                        rtol=1.0E-06,
                        atol=1.0E-300))
Esempio n. 25
0
    def test_CalculateCoefficientAndFitStatisticsUsingSpline_2D(self):
        model_df_e_ShouldBe = 8.0
        model_df_r_ShouldBe = 2.0
        model_r2_ShouldBe = 0.999870240966
        model_rmse_ShouldBe = 0.0270425329959
        model_r2adj_ShouldBe = 0.999837801207
        model_Fstat_ShouldBe = 30822.3699783
        model_Fpv_ShouldBe = 3.33066907388e-16
        model_ll_ShouldBe = 24.1054640542
        model_aic_ShouldBe = -3.83735710076
        model_bic_ShouldBe = -3.72884020818
        model_cov_beta_ShouldBe = None
        model_sd_beta_ShouldBe = None
        model_tstat_beta_ShouldBe = None
        model_pstat_beta_ShouldBe = None
        model_ci_ShouldBe = None
        
        model = pyeq2.Models_2D.Spline.Spline(inSmoothingFactor = 1.0, inXOrder = 3)
        pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
        pyeq2.solverService().SolveUsingSpline(model)
        model.CalculateModelErrors(model.solvedCoefficients, model.dataCache.allDataCacheDictionary)
        model.CalculateCoefficientAndFitStatistics()

        self.assertTrue(numpy.allclose(model.df_e, model_df_e_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.df_r, model_df_r_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.r2, model_r2_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.rmse, model_rmse_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.r2adj, model_r2adj_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.Fstat, model_Fstat_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.Fpv, model_Fpv_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.ll, model_ll_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.aic, model_aic_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertTrue(numpy.allclose(model.bic, model_bic_ShouldBe, rtol=1.0E-06, atol=1.0E-300))
        self.assertEqual(model.cov_beta, None)
        self.assertEqual(model.sd_beta, None)
        self.assertEqual(model.tstat_beta, None)
        self.assertEqual(model.pstat_beta, None)
        self.assertEqual(model.ci, None)
 def test_SolveUsingLinear_3D(self):
     coefficientsShouldBe = numpy.array([
         2.8658381589774945E-01, -9.0215775175410395E-01,
         1.1548386445491325E+00
     ])
     model = pyeq2.Models_3D.Polynomial.Linear('SSQABS')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
         DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingLinear(model)
     self.assertTrue(
         numpy.allclose(coefficients,
                        coefficientsShouldBe,
                        rtol=1.0E-10,
                        atol=1.0E-300))
Esempio n. 27
0
    def test_SolveUsingSpline_2D(self):
        knotPointsShouldBe = numpy.array([5.357,  5.357,  5.357,  5.357,  9.861,  9.861,  9.861,  9.861])
        coefficientsShouldBe = numpy.array([ 0.38297001,  1.95535226,  4.59605664, 7.16162379, 0.0, 0.0, 0.0, 0.0])
        testEvaluationShouldBe = numpy.array([4.02361487093])
        model = pyeq2.Models_2D.Spline.Spline(inSmoothingFactor = 1.0, inXOrder = 3)
        pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
        fittedParameters = pyeq2.solverService().SolveUsingSpline(model)

        # example of later using the saved spline knot points and coefficients
        unFittedSpline = scipy.interpolate.fitpack2.UnivariateSpline(model.dataCache.allDataCacheDictionary['X'], model.dataCache.allDataCacheDictionary['DependentData'], s=model.smoothingFactor, k=model.xOrder)
        unFittedSpline._eval_args = fittedParameters
        testEvaluation = unFittedSpline(numpy.array([8.0]))
        
        self.assertTrue(numpy.allclose(testEvaluation, testEvaluationShouldBe, rtol=1.0E-10, atol=1.0E-300))
        self.assertTrue(numpy.equal(fittedParameters[0], knotPointsShouldBe).all())
        self.assertTrue(numpy.allclose(fittedParameters[1], coefficientsShouldBe, rtol=1.0E-06, atol=1.0E-300))
Esempio n. 28
0
    def test_SolveUsingSpline_3D(self):
        xKnotPointsShouldBe = numpy.array([0.607, 0.607, 0.607, 3.017, 3.017, 3.017])
        yKnotPointsShouldBe = numpy.array([1.984, 1.984, 1.984, 3.153, 3.153, 3.153])
        coefficientsShouldBe = numpy.array([2.33418963, 1.80079612, 5.07902936, 0.54445029, 1.04110843, 2.14180324, 0.26992805, 0.39148852, 0.8177307])
        testEvaluationShouldBe = numpy.array([0.76020577997])
        model = pyeq2.Models_3D.Spline.Spline(inSmoothingFactor = 1.0, inXOrder = 2, inYOrder = 2)
        pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
        fittedParameters = pyeq2.solverService().SolveUsingSpline(model)

        # example of later using the saved spline knot points and coefficients
        unFittedSpline = scipy.interpolate.fitpack2.SmoothBivariateSpline(model.dataCache.allDataCacheDictionary['X'], model.dataCache.allDataCacheDictionary['Y'], model.dataCache.allDataCacheDictionary['DependentData'], s=model.smoothingFactor, kx=model.xOrder, ky=model.yOrder)
        unFittedSpline.tck = fittedParameters
        testEvaluation = unFittedSpline.ev(2.5, 2.5)
        
        self.assertTrue(numpy.allclose(testEvaluation, testEvaluationShouldBe, rtol=1.0E-10, atol=1.0E-300))
        self.assertTrue(numpy.equal(fittedParameters[0], xKnotPointsShouldBe).all())
        self.assertTrue(numpy.equal(fittedParameters[1], yKnotPointsShouldBe).all())
        self.assertTrue(numpy.allclose(fittedParameters[2], coefficientsShouldBe, rtol=1.0E-06, atol=1.0E-300))
Esempio n. 29
0
 def Solve(self, inNonLinearSolverAlgorithmName='Levenberg-Marquardt'):
     
     solver = pyeq2.solverService()
             
     # if any of these conditions exist, a linear solver cannot be used
     if self.fixedCoefficients != [] or self.upperCoefficientBounds != [] or self.lowerCoefficientBounds != [] or len(self.dataCache.allDataCacheDictionary['Weights']):
         self._canLinearSolverBeUsedForSSQABS = False
     
     # selection of different solvers and algorithms.
     if self.splineFlag:
         return solver.SolveUsingSpline(self)
     elif self.fittingTarget == 'SSQABS' and self.CanLinearSolverBeUsedForSSQABS() == True:
         return solver.SolveUsingLinear(self)
     elif self.fittingTarget == 'ODR':
         if len(self.deEstimatedCoefficients) == 0:
             self.deEstimatedCoefficients = solver.SolveUsingDE(self)
         return solver.SolveUsingODR(self)
     else:
         if len(self.deEstimatedCoefficients) == 0:
             self.deEstimatedCoefficients = solver.SolveUsingDE(self)
         self.estimatedCoefficients = solver.SolveUsingSelectedAlgorithm(self, inAlgorithmName=inNonLinearSolverAlgorithmName)
         return solver.SolveUsingSimplex(self)
Esempio n. 30
0
    def Solve(self, inNonLinearSolverAlgorithmName='Levenberg-Marquardt'):

        solver = pyeq2.solverService()

        # if any of these conditions exist, a linear solver cannot be used
        if self.fixedCoefficients != [] or self.upperCoefficientBounds != [] or self.lowerCoefficientBounds != [] or len(self.dataCache.allDataCacheDictionary['Weights']):
            self._canLinearSolverBeUsedForSSQABS = False

        # selection of different solvers and algorithms.
        if self.splineFlag:
            return solver.SolveUsingSpline(self)
        elif self.fittingTarget == 'SSQABS' and self.CanLinearSolverBeUsedForSSQABS(
        ) == True:
            return solver.SolveUsingLinear(self)
        elif self.fittingTarget == 'ODR':
            if len(self.deEstimatedCoefficients) == 0:
                self.deEstimatedCoefficients = solver.SolveUsingDE(self)
            return solver.SolveUsingODR(self)
        else:
            if len(self.deEstimatedCoefficients) == 0:
                self.deEstimatedCoefficients = solver.SolveUsingDE(self)
            self.estimatedCoefficients = solver.SolveUsingSelectedAlgorithm(
                self, inAlgorithmName=inNonLinearSolverAlgorithmName)
            return solver.SolveUsingSimplex(self)
Esempio n. 31
0
 def Solve(self):
     solver = pyeq2.solverService()
     
     if self.splineFlag:
         return solver.SolveUsingSpline(self)
     
     if self.fixedCoefficients != []:
         self._canLinearSolverBeUsedForSSQABS = False
         
     if self.fittingTarget == 'SSQABS':
         if self.CanLinearSolverBeUsedForSSQABS() == True:
             return solver.SolveUsingLinear(self)
         else:
             self.estimatedCoefficients = solver.SolveUsingDE(self)
             self.estimatedCoefficients = solver.SolveUsingLevenbergMarquardt(self)
             return solver.SolveUsingSimplex(self)
     
     if self.fittingTarget == 'ODR':
         self.estimatedCoefficients = solver.SolveUsingDE(self)
         return solver.SolveUsingODR(self)
     
     # default
     self.estimatedCoefficients = solver.SolveUsingDE(self)
     return solver.SolveUsingSimplex(self)
Esempio n. 32
0
6.58146965059
5.60990756287
9.53792438164
5.79102705637
5.33559365272
6.48809806813
7.66644773214
7.60246282819
7.23133792963
'''

pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(
    asciiTextData, simpleObject, False)

resultList = []
solver = pyeq2.solverService()
criteriaForUseInListSorting = 'AIC'  # ['AIC', 'AICc_BA', 'nnlf'] from top of SolverService.SolveStatisticalDistribution()
for distribution in inspect.getmembers(
        scipy.stats):  # try to fit every distribution
    if isinstance(distribution[1], scipy.stats.rv_continuous):
        print("Fitting", distribution[0])
        try:
            result = solver.SolveStatisticalDistribution(
                distribution[0], simpleObject.dataCache.
                allDataCacheDictionary['IndependentData'][0],
                criteriaForUseInListSorting)
        except:
            continue
        if result:
            resultList.append(result)
9.57246613925
6.58146965059
5.60990756287
9.53792438164
5.79102705637
5.33559365272
6.48809806813
7.66644773214
7.60246282819
7.23133792963
'''

pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(asciiTextData, simpleObject, False)

resultList = []
solver = pyeq2.solverService()
criteriaForUseInListSorting = 'AIC' # ['AIC', 'AICc_BA', 'nnlf'] from top of SolverService.SolveStatisticalDistribution()
for distribution in inspect.getmembers(scipy.stats): # try to fit every distribution
    if isinstance(distribution[1], scipy.stats.rv_continuous):
        print("Fitting", distribution[0])
        try:
            result = solver.SolveStatisticalDistribution(distribution[0], simpleObject.dataCache.allDataCacheDictionary['IndependentData'][0], criteriaForUseInListSorting)
        except:
            continue
        if result:
            resultList.append(result)

print()
resultList.sort()
print(resultList[0])
Esempio n. 34
0
 def test_SolveUsingDE_2D(self):
     coefficientsShouldBe = numpy.array([ -7.19386218627, 1.45067239435])
     model = pyeq2.Models_2D.UserDefinedFunction.UserDefinedFunction('SSQABS', 'Default', 'm*X + b')
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D_small, model, False)
     coefficients = pyeq2.solverService().SolveUsingDE(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0E-05, atol=1.0E-300))
Esempio n. 35
0
 def test_SolveUsingLinear_2D(self):
     coefficientsShouldBe = numpy.array([-8.0191356407516956e00, 1.5264472941853220e00])
     model = pyeq2.Models_2D.Polynomial.Linear("SSQABS")
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingLinear(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-10, atol=1.0e-300))
Esempio n. 36
0
 def test_SolveUsingLinear_3D(self):
     coefficientsShouldBe = numpy.array([2.8658381589774945e-01, -9.0215775175410395e-01, 1.1548386445491325e00])
     model = pyeq2.Models_3D.Polynomial.Linear("SSQABS")
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_3D, model, False)
     coefficients = pyeq2.solverService().SolveUsingLinear(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-10, atol=1.0e-300))
Esempio n. 37
0
 def test_SolveUsingODR_2D(self):
     coefficientsShouldBe = numpy.array([-8.04624, 1.53032])
     model = pyeq2.Models_2D.Polynomial.Linear("ODR")
     pyeq2.dataConvertorService().ConvertAndSortColumnarASCII(DataForUnitTests.asciiDataInColumns_2D, model, False)
     coefficients = pyeq2.solverService().SolveUsingODR(model)
     self.assertTrue(numpy.allclose(coefficients, coefficientsShouldBe, rtol=1.0e-03, atol=1.0e-300))