类 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。然而,强烈建议不要依赖默认值,而是仔细考虑与用户期望值以及每个实现的具体情况相匹配的值。
-
构造器概要
构造器限定符构造器说明protectedBaseAbstractUnivariateSolver(double absoluteAccuracy) 使用给定的绝对精度构造求解器。protectedBaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy) 使用给定的精度构造求解器。protectedBaseAbstractUnivariateSolver(double relativeAccuracy, double absoluteAccuracy, double functionValueAccuracy) 使用给定的精度构造求解器。 -
方法概要
修饰符和类型方法说明protected doublecomputeObjectiveValue(double point) 计算目标函数值。protected abstract doubledoSolve()在派生类中实现实际优化算法的方法。double获取求解器的绝对精度。int获取目标函数的评估次数。double获取求解器的函数值精度。doublegetMax()获取搜索区间的上限。doublegetMin()获取搜索区间的下限。double获取求解器的相对精度。double获取初始猜测值。protected void将评估次数增加一次。protected booleanisBracketing(double lower, double upper) 检查函数在端点处是否取相反的符号。protected booleanisSequence(double start, double mid, double end) 检查参数是否形成(严格)递增序列。protected void准备计算。double在startValue附近求解零点。double在给定区间内求解零根。double在给定区间内求解零点,从startValue开始。protected voidverifyBracketing(double lower, double upper) 检查端点是否指定一个区间,并且函数在端点处取相反的符号。protected voidverifyInterval(double lower, double upper) 检查端点是否指定一个区间。protected voidverifySequence(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- 当允许的函数评估次数已用完时。
-