类 BaseSecantSolver

所有已实现的接口:
BaseUnivariateSolver<UnivariateFunction>, BracketedUnivariateSolver<UnivariateFunction>, UnivariateSolver
直接已知子类:
IllinoisSolver, PegasusSolver, RegulaFalsiSolver

public abstract class BaseSecantSolver extends AbstractUnivariateSolver implements BracketedUnivariateSolver<UnivariateFunction>
所有括号法根查找(逼近单变量实函数零点)的基类。

基于以下文章实现了Regula FalsiIllinois方法:M. Dowell and P. Jarratt,计算方程根的修改的拟牛顿法,BIT数值数学,卷11,号2,页168-174,Springer,1971年。

基于以下文章实现了Pegasus方法:M. Dowell and P. Jarratt,计算方程根的“飞马”方法,BIT数值数学,卷12,号4,页503-508,Springer,1972年。

Secant方法不是一个括号法,因此这里没有实现。它有一个单独的实现。

  • 字段详细资料

    • DEFAULT_ABSOLUTE_ACCURACY

      protected static final double DEFAULT_ABSOLUTE_ACCURACY
      默认绝对精度。
      另请参阅:
  • 构造器详细资料

    • BaseSecantSolver

      protected BaseSecantSolver(double absoluteAccuracy, BaseSecantSolver.Method method)
      构造一个求解器。
      参数:
      absoluteAccuracy - 绝对精度。
      method - 使用的基于拟牛顿法的根查找方法。
    • BaseSecantSolver

      protected BaseSecantSolver(double relativeAccuracy, double absoluteAccuracy, BaseSecantSolver.Method method)
      构造一个求解器。
      参数:
      relativeAccuracy - 相对精度。
      absoluteAccuracy - 绝对精度。
      method - 使用的基于拟牛顿法的根查找方法。
    • BaseSecantSolver

      protected BaseSecantSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy, BaseSecantSolver.Method method)
      构造一个求解器。
      参数:
      relativeAccuracy - 最大相对误差。
      absoluteAccuracy - 最大绝对误差。
      functionValueAccuracy - 最大函数值误差。
      method - 使用的基于拟牛顿法的根查找方法。
  • 方法详细资料

    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, AllowedSolution allowedSolution)
      在给定区间中求解零点。求解器可能要求区间括住单个零点。那些需要括号的求解器应该能够处理一个端点本身就是根的情况。
      指定者:
      solve 在接口中 BracketedUnivariateSolver<UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要求解的函数。
      min - 区间下限。
      max - 区间上限。
      allowedSolution - 根查找算法可能接受的解的类型。
      返回:
      函数为零的值。
    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, double startValue, AllowedSolution allowedSolution)
      在给定区间中求解零点,从startValue开始。求解器可能要求区间括住单个零点。那些需要括号的求解器应该能够处理一个端点本身就是根的情况。
      指定者:
      solve 在接口中 BracketedUnivariateSolver<UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要求解的函数。
      min - 区间下限。
      max - 区间上限。
      startValue - 要使用的起始值。
      allowedSolution - 根查找算法可能接受的解的类型。
      返回:
      函数为零的值。
    • solve

      public double solve(int maxEval, UnivariateFunction f, double min, double max, double startValue)
      在给定区间中求解零点,从startValue开始。求解器可能要求区间括住单个零点。那些需要括号的求解器应该能够处理一个端点本身就是根的情况。
      指定者:
      solve 在接口中 BaseUnivariateSolver<UnivariateFunction>
      覆盖:
      solve 在类中 BaseAbstractUnivariateSolver<UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要求解的函数。
      min - 区间下限。
      max - 区间上限。
      startValue - 要使用的起始值。
      返回:
      函数为零的值。
    • solveInterval

      public BracketedUnivariateSolver.Interval solveInterval(int maxEval, UnivariateFunction f, double min, double max, double startValue) throws MathIllegalArgumentException, MathIllegalStateException
      在给定区间中求解零点并返回围绕根的容差区间。

      要求起始区间括住一个根,或者两个端点的函数值为0.0。

      指定者:
      solveInterval 在接口中 BracketedUnivariateSolver<UnivariateFunction>
      参数:
      maxEval - 最大评估次数。
      f - 要解决的函数。
      min - 区间的下界。
      max - 区间的上界。必须大于min
      startValue - 要使用的起始值。必须在区间[min, max]内。
      返回:
      一个区间[ta, tb],使得存在某个t在[ta, tb]内满足f(t) == 0.0,或者具有跨越零点的阶梯不连续性。两个端点也满足收敛标准,因此任何一个都可以用作根。也就是说,该区间满足条件(| tb - ta | <= absolute 精度 + max(ta, tb) * relative 精度)或(max(|f(ta)|, |f(tb)|) <= BaseUnivariateSolver.getFunctionValueAccuracy()),或者在ta和tb之间没有浮点数。区间的宽度(tb - ta)可能为零。
      抛出:
      MathIllegalArgumentException - 如果参数不满足求解器指定的要求。
      MathIllegalStateException - 如果超过允许的评估次数。
    • doSolve

      protected final double doSolve() throws MathIllegalStateException
      在派生类中实现实际优化算法的方法。
      指定者:
      doSolve 在类中 BaseAbstractUnivariateSolver<UnivariateFunction>
      返回:
      根。
      抛出:
      MathIllegalStateException - 如果由于有限精度而算法失败。
    • doSolveInterval

      protected final BracketedUnivariateSolver.Interval doSolveInterval() throws MathIllegalStateException
      找到根并返回包含根的区间。
      返回:
      一个包含根的区间,使得所选端点满足收敛标准。
      抛出:
      MathIllegalStateException - 如果收敛失败。