Apache Common Maths - 单变量函数求解器
Apache Common Maths - Univariate Function Solver
我正在尝试使用 apache-commons-math 求解器求解 "V" 的以下数学方程式。
等式:
V = log(X/ (V-1))
以下是MWE;
import org.apache.commons.math3.analysis.UnivariateFunction;
import org.apache.commons.math3.analysis.solvers.*;
public class Test {
public static void main(String[] args) {
UnivariateFunction function = v -> v - Math.log( (9/(v-1)) );
UnivariateSolver solver = new BrentSolver();
double c = solver.solve(100, function, -10.0, 10.0, 0);
System.out.println(c);
}
}
但是,我收到以下错误;
线程 "main" org.apache.commons.math3.exception.NoBracketingException 中的异常:端点处的函数值没有不同的符号,端点:[-10, 10],值:[�, 10 ]
我已经在互联网上四处寻找解决方法,但到目前为止没有成功。我正在寻找 MWE 来解决 "V",任何帮助将不胜感激。
BrentSolver
仅适用于实数上的单变量函数。函数 f(v) = v - log(c / (v - 1))
的实数支持是 (1, Infinity)
。如果 v 小于或等于 1,则函数的计算结果为复数。
求解器失败,因为它试图在 -10 处计算函数并在值处接收 NaN
。这会导致括号异常发生,因为 NaN
的符号不确定。
因此,为了使求解器工作,您必须提供包含在实数支持中的初始下限。大于 1 的值就足够了。
我正在尝试使用 apache-commons-math 求解器求解 "V" 的以下数学方程式。
等式:
V = log(X/ (V-1))
以下是MWE;
import org.apache.commons.math3.analysis.UnivariateFunction;
import org.apache.commons.math3.analysis.solvers.*;
public class Test {
public static void main(String[] args) {
UnivariateFunction function = v -> v - Math.log( (9/(v-1)) );
UnivariateSolver solver = new BrentSolver();
double c = solver.solve(100, function, -10.0, 10.0, 0);
System.out.println(c);
}
}
但是,我收到以下错误;
线程 "main" org.apache.commons.math3.exception.NoBracketingException 中的异常:端点处的函数值没有不同的符号,端点:[-10, 10],值:[�, 10 ]
我已经在互联网上四处寻找解决方法,但到目前为止没有成功。我正在寻找 MWE 来解决 "V",任何帮助将不胜感激。
BrentSolver
仅适用于实数上的单变量函数。函数 f(v) = v - log(c / (v - 1))
的实数支持是 (1, Infinity)
。如果 v 小于或等于 1,则函数的计算结果为复数。
求解器失败,因为它试图在 -10 处计算函数并在值处接收 NaN
。这会导致括号异常发生,因为 NaN
的符号不确定。
因此,为了使求解器工作,您必须提供包含在实数支持中的初始下限。大于 1 的值就足够了。