0

Apache の commons-math-2.2.jar を使用して線形方程式を解こうとしています。

3 つの小さな点については、正しい結果が得られます。

次のデータ(大きな数)を使用すると、正しい結果が得られず、むしろ結果が意味をなさないと言えます。

以下は、私が使用しているコードとデータです:

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 に制限はありますか?線形方程式を解くための他のライブラリを知っている場合は、お知らせください。

前もって感謝します

ラケシュ

4

1 に答える 1

0

どのような結果が得られますか?

double厳密解の成分に最も近い s のベクトルは

[-7680.952380952381,261.8703703703704,-3.102149470899471,1.5775462962962963e-2,-2.9100529100529102e-5]

コンポーネントを丸めると、 が得られ[-7681,262,-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]

matrix × solutionおよび解と正確な解の最良近似との差。

得られた結果がそれに近い場合、ライブラリは十分に機能しています。あなたが得た無意味な結果は、印刷のために行った丸めのみが原因であると思われます. doubleそうでない場合は、ライブラリから取得した結果で更新してください。

于 2012-08-01T16:17:50.500 に答える