UnivariateFunction.java
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.commons.math4.legacy.analysis;
- import java.util.function.DoubleUnaryOperator;
- /**
- * An interface representing a univariate real function.
- * <p>
- * When a <em>user-defined</em> function encounters an error during
- * evaluation, the {@link #value(double) value} method should throw a
- * <em>user-defined</em> unchecked exception.</p>
- * <p>
- * The following code excerpt shows the recommended way to do that using
- * a root solver as an example, but the same construct is applicable to
- * ODE integrators or optimizers.</p>
- *
- * <pre>
- * private static class LocalException extends RuntimeException {
- * // The x value that caused the problem.
- * private final double x;
- *
- * public LocalException(double x) {
- * this.x = x;
- * }
- *
- * public double getX() {
- * return x;
- * }
- * }
- *
- * private static class MyFunction implements UnivariateFunction {
- * public double value(double x) {
- * double y = hugeFormula(x);
- * if (somethingBadHappens) {
- * throw new LocalException(x);
- * }
- * return y;
- * }
- * }
- *
- * public void compute() {
- * try {
- * solver.solve(maxEval, new MyFunction(a, b, c), min, max);
- * } catch (LocalException le) {
- * // Retrieve the x value.
- * }
- * }
- * </pre>
- *
- * As shown, the exception is local to the user's code and it is guaranteed
- * that Apache Commons Math will not catch it.
- */
- @FunctionalInterface
- public interface UnivariateFunction extends DoubleUnaryOperator {
- /**
- * Compute the value of the function.
- *
- * @param x Point at which the function value should be computed.
- * @return the value of the function.
- * @throws IllegalArgumentException when the activated method itself can
- * ascertain that a precondition, specified in the API expressed at the
- * level of the activated method, has been violated.
- * When Commons Math throws an {@code IllegalArgumentException}, it is
- * usually the consequence of checking the actual parameters passed to
- * the method.
- */
- double value(double x);
- /** {@inheritDoc} */
- @Override
- default double applyAsDouble(double x) {
- return value(x);
- }
- }