类 BaseAbstractUnivariateSolver<F extends UnivariateFunction>
java.lang.Object
org.hipparchus.analysis.solvers.BaseAbstractUnivariateSolver<F>
- 类型参数:
-
F
- 要解决的函数类型。
- 所有已实现的接口:
-
BaseUnivariateSolver<F>
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
doSolve()
在派生类中实现实际优化算法的方法。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
准备计算。double
在startValue
附近求解零点。double
在给定区间内求解零根。double
在给定区间内求解零点,从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
。
-
构造器详细资料
-
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
计算目标函数值。- 参数:
-
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
在给定区间中求零根。求解器可能要求区间将单个零根围起来。需要围绕的求解器应能处理一个端点本身就是根的情况。- 指定者:
-
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
在派生类中实现实际优化算法的方法。- 返回:
- 根。
- 抛出:
-
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
检查端点是否指定一个区间。- 参数:
-
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 >= initial
或initial >= upper
。
-
verifyBracketing
protected void verifyBracketing(double lower, double upper) throws MathIllegalArgumentException, NullArgumentException 检查端点是否指定一个区间,并且函数在端点处取相反的符号。- 参数:
-
lower
- 下端点。 -
upper
- 上端点。 - 抛出:
-
NullArgumentException
- 如果函数未设置。 -
MathIllegalArgumentException
- 如果函数在端点处取相同的符号。
-
incrementEvaluationCount
将评估次数增加一。方法computeObjectiveValue(double)
在内部调用此方法。对于不仅使用computeObjectiveValue
来解决函数的子类,提供此方法。例如参见AbstractUnivariateDifferentiableSolver
。- 抛出:
-
MathIllegalStateException
- 当允许的函数评估次数已用完时。
-