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)
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
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))
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))
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))
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))
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))
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 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)
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))
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)
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))
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))
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))
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
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_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))
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))
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))
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))
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)
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)
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)
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])
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))
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))
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))
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))