类 BaseAbstractUnivariateSolver<F extends UnivariateFunction>

java.lang.Object
org.hipparchus.analysis.solvers.BaseAbstractUnivariateSolver<F>
类型参数:
F - 要解决的函数类型。
所有已实现的接口:
BaseUnivariateSolver<F>
直接已知子类:
AbstractPolynomialSolver, AbstractUnivariateDifferentiableSolver, AbstractUnivariateSolver

public abstract class BaseAbstractUnivariateSolver<F extends UnivariateFunction> extends Object implements BaseUnivariateSolver<F>
为通用求解器提供了几个有用的函数的默认实现。相对误差和函数容差的默认值分别为1e-14和1e-15。然而,强烈建议不要依赖默认值,而是仔细考虑与用户期望值以及每个实现的具体情况相匹配的值。
  • 构造器概要

    构造器
    限定符
    构造器
    说明
    protected
    BaseAbstractUnivariateSolver(double absoluteAccuracy)
    使用给定的绝对精度构造求解器。
    protected
    BaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy)
    使用给定的精度构造求解器。
    protected
    BaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy)
    使用给定的精度构造求解器。
  • 方法概要

    修饰符和类型
    方法
    说明
    protected double
    computeObjectiveValue(double point)
    计算目标函数值。
    protected abstract double
    在派生类中实现实际优化算法的方法。
    double
    获取求解器的绝对精度。
    int
    获取目标函数的评估次数。
    double
    获取求解器的函数值精度。
    double
    getMax()
    获取搜索区间的上限。
    double
    getMin()
    获取搜索区间的下限。
    double
    获取求解器的相对精度。
    double
    获取初始猜测值。
    protected void
    将评估次数增加一次。
    protected boolean
    isBracketing(double lower, double upper)
    检查函数在端点处是否取相反的符号。
    protected boolean
    isSequence(double start, double mid, double end)
    检查参数是否形成(严格)递增序列。
    protected void
    setup(int maxEval, F f, double min, double max, double startValue)
    准备计算。
    double
    solve(int maxEval, F f, double startValue)
    startValue附近求解零点。
    double
    solve(int maxEval, F f, double min, double max)
    在给定区间内求解零根。
    double
    solve(int maxEval, F f, double min, double max, double startValue)
    在给定区间内求解零点,从startValue开始。
    protected void
    verifyBracketing(double lower, double upper)
    检查端点是否指定一个区间,并且函数在端点处取相反的符号。
    protected void
    verifyInterval(double lower, double upper)
    检查端点是否指定一个区间。
    protected void
    verifySequence(double lower, double initial, double upper)
    检查lower < initial < upper

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造器详细资料

    • BaseAbstractUnivariateSolver

      protected BaseAbstractUnivariateSolver(double absoluteAccuracy)
      使用给定的绝对精度构造求解器。
      参数:
      absoluteAccuracy - 最大绝对误差。
    • BaseAbstractUnivariateSolver

      protected BaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy)
      使用给定的精度构造求解器。
      参数:
      relativeAccuracy - 最大相对误差。
      absoluteAccuracy - 最大绝对误差。
    • BaseAbstractUnivariateSolver

      protected BaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy)
      使用给定的精度构造求解器。
      参数:
      relativeAccuracy - 最大相对误差。
      absoluteAccuracy - 最大绝对误差。
      functionValueAccuracy - 最大函数值误差。
  • 方法详细资料

    • getEvaluations

      public int getEvaluations()
      获取目标函数的评估次数。评估次数对应于最后一次调用optimize方法。如果尚未调用该方法,则为0。
      指定者:
      getEvaluations 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      返回:
      目标函数的评估次数。
    • getMin

      public double getMin()
      获取搜索区间的下限。
      返回:
      搜索区间的下限。
    • getMax

      public double getMax()
      获取搜索区间的上限。
      返回:
      搜索区间的上限。
    • getStartValue

      public double getStartValue()
      获取初始猜测值。
      返回:
      初始猜测值。
    • getAbsoluteAccuracy

      public double getAbsoluteAccuracy()
      获取求解器的绝对精度。求解器返回的解应该精确到此容差,即,如果ε是求解器的绝对精度,v是solve方法之一返回的值,则函数的根应该存在于区间(v - ε,v + ε)中的某个位置。
      指定者:
      getAbsoluteAccuracy 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      返回:
      绝对精度。
    • getRelativeAccuracy

      public double getRelativeAccuracy()
      获取求解器的相对精度。相对精度的约定与BaseUnivariateSolver.getAbsoluteAccuracy()相同,但使用相对误差而不是绝对误差。如果ρ是为求解器配置的相对精度,v是返回的值,则函数的根应该存在于区间(v - ρv,v + ρv)中的某个位置。
      指定者:
      getRelativeAccuracy 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      返回:
      相对精度。
    • getFunctionValueAccuracy

      public double getFunctionValueAccuracy()
      获取求解器的函数值精度。如果v是求解器对函数f返回的值,则按照约定,|f(v)|应小于或等于为求解器配置的函数值精度。
      指定者:
      getFunctionValueAccuracy 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      返回:
      函数值精度。
    • computeObjectiveValue

      protected double computeObjectiveValue(double point) throws MathIllegalStateException
      计算目标函数值。
      参数:
      point - 必须评估目标函数的点。
      返回:
      指定点处的目标函数值。
      抛出:
      MathIllegalStateException - 如果超过最大评估次数。
    • setup

      protected void setup(int maxEval, F f, double min, double max, double startValue) throws NullArgumentException
      准备计算。如果子类重写任何solve方法,则必须调用此方法。
      参数:
      maxEval - 最大评估次数。
      f - 要解决的函数。
      min - 区间的下限。
      max - 区间的上限。
      startValue - 要使用的起始值。
      抛出:
      NullArgumentException - 如果f为null
    • solve

      public double solve(int maxEval, F f, double min, double max, double startValue) throws MathIllegalArgumentException, MathIllegalStateException
      在给定区间内求解零点,从startValue开始。求解器可能要求区间围绕单个零根。需要区间围绕的求解器应该能够处理一个端点本身就是根的情况。
      指定者:
      solve 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要解决的函数。
      min - 区间的下界。
      max - 区间的上界。
      startValue - 要使用的起始值。
      返回:
      使函数为零的值。
      抛出:
      MathIllegalArgumentException - 如果参数不满足求解器指定的要求。
      MathIllegalStateException - 如果超过允许的评估次数。
    • solve

      public double solve(int maxEval, F f, double min, double max)
      在给定区间中求零根。求解器可能要求区间将单个零根围起来。需要围绕的求解器应能处理一个端点本身就是根的情况。
      指定者:
      solve 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要解决的函数。
      min - 区间的下界。
      max - 区间的上界。
      返回:
      使函数为零的值。
    • solve

      public double solve(int maxEval, F f, double startValue) throws MathIllegalArgumentException, MathIllegalStateException
      startValue附近求零点。
      指定者:
      solve 在接口中 BaseUnivariateSolver<F extends UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要解决的函数。
      startValue - 要使用的起始值。
      返回:
      使函数为零的值。
      抛出:
      MathIllegalArgumentException - 如果参数不满足求解器指定的要求。
      MathIllegalStateException - 如果超过允许的评估次数。
    • doSolve

      protected abstract double doSolve() throws MathIllegalArgumentException, MathIllegalStateException
      在派生类中实现实际优化算法的方法。
      返回:
      根。
      抛出:
      MathIllegalStateException - 如果超过最大评估次数。
      MathIllegalArgumentException - 如果初始搜索区间不包围根且求解器要求。
    • isBracketing

      protected boolean isBracketing(double lower, double upper)
      检查函数在端点处是否取相反的符号。
      参数:
      lower - 下端点。
      upper - 上端点。
      返回:
      如果给定点处的函数值取相反的符号,则返回true
    • isSequence

      protected boolean isSequence(double start, double mid, double end)
      检查参数是否形成(严格)递增序列。
      参数:
      start - 第一个数字。
      mid - 第二个数字。
      end - 第三个数字。
      返回:
      如果参数形成递增序列,则返回true
    • verifyInterval

      protected void verifyInterval(double lower, double upper) throws MathIllegalArgumentException
      检查端点是否指定一个区间。
      参数:
      lower - 下端点。
      upper - 上端点。
      抛出:
      MathIllegalArgumentException - 如果lower >= upper
    • verifySequence

      protected void verifySequence(double lower, double initial, double upper) throws MathIllegalArgumentException
      检查lower < initial < upper
      参数:
      lower - 下端点。
      initial - 初始值。
      upper - 上端点。
      抛出:
      MathIllegalArgumentException - 如果lower >= initialinitial >= upper
    • verifyBracketing

      protected void verifyBracketing(double lower, double upper) throws MathIllegalArgumentException, NullArgumentException
      检查端点是否指定一个区间,并且函数在端点处取相反的符号。
      参数:
      lower - 下端点。
      upper - 上端点。
      抛出:
      NullArgumentException - 如果函数未设置。
      MathIllegalArgumentException - 如果函数在端点处取相同的符号。
    • incrementEvaluationCount

      protected void incrementEvaluationCount() throws MathIllegalStateException
      将评估次数增加一。方法computeObjectiveValue(double)在内部调用此方法。对于不仅使用computeObjectiveValue来解决函数的子类,提供此方法。例如参见AbstractUnivariateDifferentiableSolver
      抛出:
      MathIllegalStateException - 当允许的函数评估次数已用完时。