Java 使用Apache的commons-math-2.2.jar求解联立线性方程

Java 使用Apache的commons-math-2.2.jar求解联立线性方程,java,Java,我正在尝试使用Apache中的commons-math-2.2.jar来解线性方程 对于三个小点,我得到了正确的结果 当我使用以下数据(大数字)时,我并没有得到正确的结果,而我会说结果毫无意义 以下是我使用的代码和数据: double [][]matrixPoint= new double[][]{{1,80,6400,512000,4.096*Math.pow(10, 7)},{1,100,10000,1000000,1.0*Math.pow(10, 8)},{1,120,14400,1728

我正在尝试使用Apache中的commons-math-2.2.jar来解线性方程

对于三个小点,我得到了正确的结果

当我使用以下数据(大数字)时,我并没有得到正确的结果,而我会说结果毫无意义

以下是我使用的代码和数据:

double [][]matrixPoint= new double[][]{{1,80,6400,512000,4.096*Math.pow(10, 7)},{1,100,10000,1000000,1.0*Math.pow(10, 8)},{1,120,14400,1728000,2.073*Math.pow(10, 8)},{1,160,25600,4096000,6.553*Math.pow(10, 8)},{1,200,40000,8000000,1.6*Math.pow(10, 9)}};
        double [] matrixVector=new double[]{300,350,300,350,250};

RealMatrix coefficients =
                    new Array2DRowRealMatrix(matrixPoint,false);                           
         DecompositionSolver solver = new LUDecompositionImpl(coefficients).getSolver();    
            //  RealVector constants = new ArrayRealVector(new double[] { 1, -2, 1 }, false);
         RealVector constants = new ArrayRealVector(matrixVector, false);
         RealVector solution = solver.solve(constants); 
                System.out.println("The values are:"+Math.round(solution.getEntry(0))+":"+Math.round(solution.getEntry(1))+":"+Math.round(solution.getEntry(2))+":"+Math.round(solution.getEntry(3))+":"+Math.round(solution.getEntry(4)));
API有什么限制吗?如果你知道其他解线性方程的库,请告诉我

提前谢谢


拉凯什

你得到了什么结果

最接近精确解分量的
double
s向量为

[-7680.952380952381,261.8703703703704,-3.102149470899471,1.5775462962962963e-2,-2.9100529100529102e-5]
将组件四舍五入产生
[-7681262,-3,0,0]
。将其与原始矩阵相乘得到

[-5921,-11481,-19441,-42561,-75281]
这很遥远,但这是意料之中的,因为系数中的舍入误差远远大于除第一个系数外的所有相应列条目的倒数

将矩阵与
double
近似值相乘,得到精确解

[300.0000000000019,350.00000000000256,300.00000000000335,350.0000000000051,250.0000000000071]
非常接近

double
算法而不是有理数算法求解系统可能会产生稍有不同的结果,但应该是相近的。我用高斯消去法得到的值是

[-7680.952380952391,261.8703703703705,-3.1021494708994711.577546296296295e-2,-2.9100529100529095e-5]
[299.9999999999927,349.99999999999227,299.99999999998636,349.99999999996,249.9999999999054]
[-1.000444171950221e-11,1.1368683772161603e-13,0.0,-1.3877787807814457e-17,6.776263578034403e-21]
对于解,
矩阵×解
以及解与精确解的最佳近似之间的差异


如果您得到的结果与这些结果接近,则该库工作得足够好。我怀疑你得到的无意义的结果完全是由于你为印刷所做的四舍五入。如果没有,请使用您从库中获得的
double
结果进行更新。

谢谢Danial。您是对的。四舍五入会产生意外的结果。