升级ojAlgo至55.2.0版本后SolverTask报错,请求排查原因
问题原因及解决方案
- 这不是版本bug,是ojAlgo 55.2.0版本对
SolverTask的使用限制做了严格收紧。 SolverTask的设计目标是处理方阵线性系统(即矩阵A的行数等于列数),而你代码中的A是3行2列的超定矩阵,不符合该任务的输入要求。- 55.1.2版本可能在内部自动兼容了超定场景的处理,但55.2.0版本明确校验了输入维度,因此抛出
IllegalArgumentException。
修复后的代码
将SolverTask替换为LeastSquaresTask,该类专门用于处理超定或欠定系统的最小二乘求解:
double[][] A = {{1, 2}, {3, 4}, {5, 6}}; double[] b = {4, 3, 3}; RawStore Ar = RawStore.wrap(A); RawStore br = RawStore.wrap(b); MatrixStore<Double> x; // 改用LeastSquaresTask处理超定系统 LeastSquaresTask<Double> solverX = LeastSquaresTask.R064.make(Ar, br); try { x = solverX.solve(Ar, br); } catch (RecoverableCondition e) { throw new RuntimeException(e); }
额外说明
如果你的业务场景确实是方阵线性系统,只需确保矩阵A的行数等于列数即可避免该异常。对于非方阵的线性问题,ojAlgo提供了LeastSquaresTask(最小二乘)、IterativeSolverTask(迭代求解)等针对性的任务类来处理。
内容的提问来源于stack exchange,提问作者Carl-Fredrik Lindberg
相关产品推荐
相关产品推荐

