Browse Source

Cleanup NonLinearCurveFittingTests.

arrays
diluculo 8 years ago
parent
commit
68265cf9cd
  1. 201
      src/Numerics.Tests/OptimizationTests/NonLinearCurveFittingTests.cs

201
src/Numerics.Tests/OptimizationTests/NonLinearCurveFittingTests.cs

@ -9,6 +9,8 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
[TestFixture] [TestFixture]
public class NonLinearCurveFittingTests public class NonLinearCurveFittingTests
{ {
#region Rosenbrock
// model: Rosenbrock // model: Rosenbrock
// f(x; a, b) = (1 - a)^2 + 100*(b - a^2)^2 // f(x; a, b) = (1 - a)^2 + 100*(b - a^2)^2
// derivatives: // derivatives:
@ -37,9 +39,12 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
private Vector<double> RosebbrockLowerBound = new DenseVector(new double[] { -5.0, -5.0 }); private Vector<double> RosebbrockLowerBound = new DenseVector(new double[] { -5.0, -5.0 });
private Vector<double> RosenbrockUpperBound = new DenseVector(new double[] { 5.0, 5.0 }); private Vector<double> RosenbrockUpperBound = new DenseVector(new double[] { 5.0, 5.0 });
#endregion Rosenbrock
[Test] [Test]
public void LMDER_FindMinimum_Rosenbrock_Unconstrained() public void Rosenbrock_LM_Der()
{ {
// unconstrained
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY); var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY);
var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000); var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000);
var result = solver.FindMinimum(obj, RosenbrockStart1); var result = solver.FindMinimum(obj, RosenbrockStart1);
@ -48,14 +53,12 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
{ {
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 3); AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 3);
} }
}
[Test] // box constrained
public void LMDIF_FindMinimum_Rosenbrock_Unconstrained() obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY,
{ lowerBound: RosebbrockLowerBound, upperBound: RosenbrockUpperBound);
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockX, RosenbrockY, accuracyOrder:2); solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000);
var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000); result = solver.FindMinimum(obj, RosenbrockStart1);
var result = solver.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++) for (int i = 0; i < result.BestFitParameters.Count; i++)
{ {
@ -64,10 +67,10 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void LMDER_FindMinimum_Rosenbrock_BoxConstrained() public void Rosenbrock_LM_Dif()
{ {
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY, // unconstrained
lowerBound : RosebbrockLowerBound, upperBound : RosenbrockUpperBound); var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockX, RosenbrockY, accuracyOrder:2);
var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000); var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000);
var result = solver.FindMinimum(obj, RosenbrockStart1); var result = solver.FindMinimum(obj, RosenbrockStart1);
@ -75,16 +78,13 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
{ {
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 3); AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 3);
} }
}
[Test] // box constrained
public void LMDIF_FindMinimum_Rosenbrock_BoxConstrained() obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockX, RosenbrockY,
{
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockX, RosenbrockY,
lowerBound: RosebbrockLowerBound, upperBound: RosenbrockUpperBound, lowerBound: RosebbrockLowerBound, upperBound: RosenbrockUpperBound,
accuracyOrder: 6); accuracyOrder: 6);
var solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000); solver = new LevenbergMarquardtMinimizer(maximumIterations: 10000);
var result = solver.FindMinimum(obj, RosenbrockStart1); result = solver.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++) for (int i = 0; i < result.BestFitParameters.Count; i++)
{ {
@ -93,54 +93,32 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void TRDLDER_FindMinimum_Rosenbrock_Unconstrained() public void Rosenbrock_Bfgs_Dif()
{ {
// DogLeg Minimizer var obj = ObjectiveModel.FittingFunction(RosenbrockModel, RosenbrockX, RosenbrockY, accuracyOrder: 6);
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY); var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);
var solver = new TrustRegionDogLegMinimizer(maximumIterations: 10000);
var result = solver.FindMinimum(obj, RosenbrockStart1); var result = solver.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++) for (int i = 0; i < result.MinimizingPoint.Count; i++)
{
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 1);
}
// NewtonCG Minimizer
obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY);
var solverNCG = new TrustRegionNewtonCGMinimizer(maximumIterations: 10000);
result = solverNCG.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++)
{ {
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 1); AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.MinimizingPoint[i], 3);
} }
} }
[Test] [Test]
public void TRDLDIF_FindMinimum_Rosenbrock_Unconstrained() public void Rosenbrock_LBfgs_Dif()
{ {
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY); var obj = ObjectiveModel.FittingFunction(RosenbrockModel, RosenbrockX, RosenbrockY, accuracyOrder: 6);
var solver = new TrustRegionDogLegMinimizer(maximumIterations: 10000); var solver = new LimitedMemoryBfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);
var result = solver.FindMinimum(obj, RosenbrockStart1); var result = solver.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++) for (int i = 0; i < result.MinimizingPoint.Count; i++)
{ {
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 1); AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.MinimizingPoint[i], 3);
} }
} }
[Test] #region Rat43
public void TRNCGDER_FindMinimum_Rosenbrock_Unconstrained()
{
var obj = ObjectiveModel.FittingModel(RosenbrockModel, RosenbrockPrime, RosenbrockX, RosenbrockY);
var solver = new TrustRegionNewtonCGMinimizer(maximumIterations: 10000);
var result = solver.FindMinimum(obj, RosenbrockStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++)
{
AssertHelpers.AlmostEqualRelative(RosenbrockPbest[i], result.BestFitParameters[i], 1);
}
}
// model: Rat43 (https://www.itl.nist.gov/div898/strd/nls/data/ratkowsky3.shtml) // model: Rat43 (https://www.itl.nist.gov/div898/strd/nls/data/ratkowsky3.shtml)
// f(x; a, b, c, d) = a / ((1 + exp(b - c * x))^(1 / d)) // f(x; a, b, c, d) = a / ((1 + exp(b - c * x))^(1 / d))
@ -172,8 +150,10 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
private Vector<double> Rat43Start1 = new DenseVector(new double[] { 100, 10, 1, 1 }); private Vector<double> Rat43Start1 = new DenseVector(new double[] { 100, 10, 1, 1 });
private Vector<double> Rat43Start2 = new DenseVector(new double[] { 700, 5, 0.75, 1.3 }); private Vector<double> Rat43Start2 = new DenseVector(new double[] { 700, 5, 0.75, 1.3 });
#endregion Rat43
[Test] [Test]
public void LMDIF_FindMinimum_Rat43_Unconstrained() public void Rat43_LM_Dif()
{ {
var obj = ObjectiveModel.FittingModel(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6); var obj = ObjectiveModel.FittingModel(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6);
var solver = new LevenbergMarquardtMinimizer(); var solver = new LevenbergMarquardtMinimizer();
@ -187,7 +167,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void TRLMDIF_FindMinimum_Rat43_Unconstrained() public void Rat43_TRDL_Dif()
{ {
var obj = ObjectiveModel.FittingModel(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6); var obj = ObjectiveModel.FittingModel(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6);
var solver = new TrustRegionDogLegMinimizer(); var solver = new TrustRegionDogLegMinimizer();
@ -200,6 +180,48 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
} }
[Test]
public void Rat43_TRNCG_Dif()
{
var obj = ObjectiveModel.FittingModel(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6);
var solver = new TrustRegionNewtonCGMinimizer();
var result = solver.FindMinimum(obj, Rat43Start2);
for (int i = 0; i < result.BestFitParameters.Count; i++)
{
AssertHelpers.AlmostEqualRelative(Rat43Pbest[i], result.BestFitParameters[i], 2);
AssertHelpers.AlmostEqualRelative(Rat43Pstd[i], result.StandardErrors[i], 2);
}
}
[Test]
public void Rat43_Bfgs_Dif()
{
var obj = ObjectiveModel.FittingFunction(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6);
var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);
var result = solver.FindMinimum(obj, Rat43Start2);
for (int i = 0; i < result.MinimizingPoint.Count; i++)
{
AssertHelpers.AlmostEqualRelative(Rat43Pbest[i], result.MinimizingPoint[i], 2);
}
}
[Test]
public void Rat43_LBfgs_Dif()
{
var obj = ObjectiveModel.FittingFunction(Rat43Model, Rat43X, Rat43Y, accuracyOrder: 6);
var solver = new LimitedMemoryBfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);
var result = solver.FindMinimum(obj, Rat43Start2);
for (int i = 0; i < result.MinimizingPoint.Count; i++)
{
AssertHelpers.AlmostEqualRelative(Rat43Pbest[i], result.MinimizingPoint[i], 2);
}
}
#region BoxBod
// model: BoxBod (https://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml) // model: BoxBod (https://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml)
// f(x; a, b) = a*(1 - exp(-b*x)) // f(x; a, b) = a*(1 - exp(-b*x))
// derivatives: // derivatives:
@ -231,24 +253,13 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
private Vector<double> BoxBodUpperBound = new DenseVector(new double[] { 1000.0, 100 }); private Vector<double> BoxBodUpperBound = new DenseVector(new double[] { 1000.0, 100 });
private Vector<double> BoxBodScales = new DenseVector(new double[] { 100.0, 0.1 }); private Vector<double> BoxBodScales = new DenseVector(new double[] { 100.0, 0.1 });
[Test] #endregion BoxBod
public void LMDER_FindMinimum_BoxBod_Unconstrained()
{
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY);
var solver = new LevenbergMarquardtMinimizer();
var result = solver.FindMinimum(obj, BoxBodStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++)
{
AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6);
AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6);
}
}
[Test] [Test]
public void LMDIF_FindMinimum_BoxBod_Unconstrained() public void BoxBod_LM_Der()
{ {
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder:6); // unconstrained
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY);
var solver = new LevenbergMarquardtMinimizer(); var solver = new LevenbergMarquardtMinimizer();
var result = solver.FindMinimum(obj, BoxBodStart1); var result = solver.FindMinimum(obj, BoxBodStart1);
@ -257,18 +268,14 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6); AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6);
AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6); AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6);
} }
}
[Test]
public void LMDER_FindMinimum_BoxBod_BoxConstrained()
{
// lower < parameters < upper // lower < parameters < upper
// Note that in this case, scales have no effect. // Note that in this case, scales have no effect.
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY, obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY,
lowerBound: BoxBodLowerBound, upperBound: BoxBodUpperBound); lowerBound: BoxBodLowerBound, upperBound: BoxBodUpperBound);
var solver = new LevenbergMarquardtMinimizer(); solver = new LevenbergMarquardtMinimizer();
var result = solver.FindMinimum(obj, BoxBodStart1); result = solver.FindMinimum(obj, BoxBodStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++) for (int i = 0; i < result.BestFitParameters.Count; i++)
{ {
@ -343,11 +350,10 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void LMDIF_FindMinimum_BoxBod_BoxConstrained() public void BoxBod_LM_Dif()
{ {
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, // unconstrained
lowerBound: BoxBodLowerBound, upperBound: BoxBodUpperBound, var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder:6);
accuracyOrder: 6);
var solver = new LevenbergMarquardtMinimizer(); var solver = new LevenbergMarquardtMinimizer();
var result = solver.FindMinimum(obj, BoxBodStart1); var result = solver.FindMinimum(obj, BoxBodStart1);
@ -356,10 +362,23 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6); AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6);
AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6); AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6);
} }
// box constrained
obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY,
lowerBound: BoxBodLowerBound, upperBound: BoxBodUpperBound,
accuracyOrder: 6);
solver = new LevenbergMarquardtMinimizer();
result = solver.FindMinimum(obj, BoxBodStart1);
for (int i = 0; i < result.BestFitParameters.Count; i++)
{
AssertHelpers.AlmostEqualRelative(BoxBodPbest[i], result.BestFitParameters[i], 6);
AssertHelpers.AlmostEqualRelative(BoxBodPstd[i], result.StandardErrors[i], 6);
}
} }
[Test] [Test]
public void TRDLDIF_FindMinimum_BoxBod_Unconstrained() public void BoxBod_TRDL_Dif()
{ {
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder: 6); var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder: 6);
var solver = new TrustRegionDogLegMinimizer(); var solver = new TrustRegionDogLegMinimizer();
@ -373,7 +392,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void TRNCGDIF_FindMinimum_BoxBod_Unconstrained() public void BoxBod_TRNCG_Dif()
{ {
var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder: 6); var obj = ObjectiveModel.FittingModel(BoxBodModel, BoxBodX, BoxBodY, accuracyOrder: 6);
var solver = new TrustRegionNewtonCGMinimizer(); var solver = new TrustRegionNewtonCGMinimizer();
@ -387,7 +406,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void Bfgs_FindMinimum_BoxBod_Unconstrained() public void BoxBod_Bfgs_Der()
{ {
var obj = ObjectiveModel.FittingFunction(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY); var obj = ObjectiveModel.FittingFunction(BoxBodModel, BoxBodPrime, BoxBodX, BoxBodY);
var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 100); var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 100);
@ -399,6 +418,8 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
} }
#region Thurber
// model : Thurber (https://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml) // model : Thurber (https://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml)
// f(x; b1 ... b7) = (b1 + b2*x + b3*x^2 + b4*x^3) / (1 + b5*x + b6*x^2 + b7*x^3) // f(x; b1 ... b7) = (b1 + b2*x + b3*x^2 + b4*x^3) / (1 + b5*x + b6*x^2 + b7*x^3)
// derivatives: // derivatives:
@ -474,8 +495,10 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
private Vector<double> ThurberUpperBound = new DenseVector(new double[] { 1E6, 1E6, 1E6, 1E6, 1E6, 1E6, 1E6 }); private Vector<double> ThurberUpperBound = new DenseVector(new double[] { 1E6, 1E6, 1E6, 1E6, 1E6, 1E6, 1E6 });
private Vector<double> ThurberScales = new DenseVector(new double[7] { 1000, 1000, 400, 40, 0.7, 0.3, 0.03 }); private Vector<double> ThurberScales = new DenseVector(new double[7] { 1000, 1000, 400, 40, 0.7, 0.3, 0.03 });
#endregion Thurber
[Test] [Test]
public void LMDER_FindMinimum_Thurber_Unconstrained() public void Thurber_LM_Der()
{ {
var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberPrime, ThurberX, ThurberY); var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberPrime, ThurberX, ThurberY);
var solver = new LevenbergMarquardtMinimizer(); var solver = new LevenbergMarquardtMinimizer();
@ -489,7 +512,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void LMDIF_FindMinimum_Thurber_Unconstrained() public void Thurber_LM_Dif()
{ {
var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6); var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6);
var solver = new LevenbergMarquardtMinimizer(); var solver = new LevenbergMarquardtMinimizer();
@ -503,7 +526,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void TRDLDIF_FindMinimum_Thurber_Scaled() public void Thurber_TRDL_Dif()
{ {
var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY, var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY,
scales: ThurberScales, scales: ThurberScales,
@ -519,7 +542,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void TRNCGDIF_FindMinimum_Thurber_Scaled() public void Thurber_TRNCG_Dif()
{ {
var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY, var obj = ObjectiveModel.FittingModel(ThurberModel, ThurberX, ThurberY,
scales: ThurberScales, scales: ThurberScales,
@ -535,7 +558,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void Bfgs_FindMinimum_Thurber_Unconstrained() public void Thurber_Bfgs_Dif()
{ {
var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6); var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6);
var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 1000); var solver = new BfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);
@ -548,7 +571,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void BfgsB_FindMinimum_Thurber() public void Thurber_BfgsB_Dif()
{ {
var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6); var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6);
var solver = new BfgsBMinimizer(1e-10, 1e-10, 1e-10, 1000); var solver = new BfgsBMinimizer(1e-10, 1e-10, 1e-10, 1000);
@ -561,7 +584,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
} }
[Test] [Test]
public void LBfgs_FindMinimum_Thurber() public void Thurber_LBfgs_Dif()
{ {
var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6); var obj = ObjectiveModel.FittingFunction(ThurberModel, ThurberX, ThurberY, accuracyOrder: 6);
var solver = new LimitedMemoryBfgsMinimizer(1e-10, 1e-10, 1e-10, 1000); var solver = new LimitedMemoryBfgsMinimizer(1e-10, 1e-10, 1e-10, 1000);

Loading…
Cancel
Save