//calculates the optimization nodes and generates the related node selector private NodeSelector GenerateSelector(OptimizationOptions options) { List <Vector2D> rightNodes = new List <Vector2D>(options.RightIntervals); Vector2D currentNode = initialCondition; for (int i = 0; i < options.RightIntervals; i++) { for (int j = 0; j < options.RightIntervalsSpan; j++) { currentNode = Iteration(currentNode, discretizer.CalculateRightStep(currentNode)); } rightNodes.Add(currentNode); } List <Vector2D> leftNodes = new List <Vector2D>(options.LeftIntervals); currentNode = initialCondition; for (int i = 0; i < options.LeftIntervals; i++) { for (int j = 0; j < options.LeftIntervalsSpan; j++) { currentNode = Iteration(currentNode, discretizer.CalculateLeftStep(currentNode)); } leftNodes.Add(currentNode); } return(options.SelectorGenerator(initialCondition, rightNodes, leftNodes)); }
private HeunSolver(ODEFunction function, Vector2D initialCondition, IDiscretizer discretizer, OptimizationOptions options, int maxIterations = DEFAULT_MAX_ITERATIONS) : base(function, initialCondition, discretizer, options, maxIterations) { }
public static Function MakeSolution(ODEFunction argument, Vector2D initialCondition, OptimizationOptions options, int maxIterations = DEFAULT_MAX_ITERATIONS) { return(new HeunSolver(argument, initialCondition, new UniformDiscretizer(DEFAULT_DISCRETIZER_STEP), options, maxIterations).Solve); }
public static Function MakeSolution(ODEFunction argument, Vector2D initialCondition, IDiscretizer discretizer, OptimizationOptions options, int maxIterations = DEFAULT_MAX_ITERATIONS) { return(new HeunSolver(argument, initialCondition, discretizer, options, maxIterations).Solve); }
public static Function RungeKuttaSolve(this ODEFunction argument, Vector2D initialCondition, OptimizationOptions options, int maxIterations = StandardODESolver.DEFAULT_MAX_ITERATIONS) { return(RungeKuttaSolver.MakeSolution(argument, initialCondition, options, maxIterations)); }
public static Function HeunSolve(this ODEFunction argument, Vector2D initialCondition, IDiscretizer discretizer, OptimizationOptions options, int maxIterations = StandardODESolver.DEFAULT_MAX_ITERATIONS) { return(HeunSolver.MakeSolution(argument, initialCondition, discretizer, options, maxIterations)); }
protected StandardODESolver(ODEFunction function, Vector2D initialCondition, IDiscretizer discretizer, OptimizationOptions options, int maxIterations = DEFAULT_MAX_ITERATIONS) : this(function, initialCondition, discretizer, maxIterations) { nodeSelector = GenerateSelector(options); }