-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDirectCostFunction.cs
More file actions
25 lines (23 loc) · 1.32 KB
/
DirectCostFunction.cs
File metadata and controls
25 lines (23 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using minuit2.net;
using minuit2.net.CostFunctions;
namespace ExampleProblems;
internal class DirectCostFunction(
IReadOnlyList<string> parameters,
Func<IReadOnlyList<double>, double> value,
Func<IReadOnlyList<double>, IReadOnlyList<double>>? gradient = null,
Func<IReadOnlyList<double>, IReadOnlyList<double>>? hessian = null,
Func<IReadOnlyList<double>, IReadOnlyList<double>>? hessianDiagonal = null,
double errorDefinition = 1)
: ICostFunction
{
public IReadOnlyList<string> Parameters { get; } = parameters;
public bool HasGradient { get; } = gradient != null;
public bool HasHessian { get; } = hessian != null;
public bool HasHessianDiagonal { get; } = hessianDiagonal != null;
public double ErrorDefinition { get; } = errorDefinition;
public double ValueFor(IReadOnlyList<double> parameterValues) => value(parameterValues);
public IReadOnlyList<double> GradientFor(IReadOnlyList<double> parameterValues) => gradient!(parameterValues);
public IReadOnlyList<double> HessianFor(IReadOnlyList<double> parameterValues) => hessian!(parameterValues);
public IReadOnlyList<double> HessianDiagonalFor(IReadOnlyList<double> parameterValues) => hessianDiagonal!(parameterValues);
public ICostFunction WithErrorDefinitionRecalculatedBasedOnValid(IMinimizationResult result) => this;
}