package symjava.examples; import no.uib.cipr.matrix.DenseMatrix; import no.uib.cipr.matrix.DenseVector; import no.uib.cipr.matrix.Matrix; import no.uib.cipr.matrix.Vector; import no.uib.cipr.matrix.sparse.CG; import no.uib.cipr.matrix.sparse.IterativeSolverNotConvergedException; public class Solver { public static double[] solveCG(double[][] A, double[] b, double[] x) { DenseMatrix DA = new DenseMatrix(A); DenseVector Db = new DenseVector(b); DenseVector Dx = new DenseVector(x); CG sol = new CG(Db); try { long begin = System.currentTimeMillis(); sol.solve(DA, Db, Dx); long end = System.currentTimeMillis(); System.out.println(String.format("Iter=%03d Time=%dms", sol .getIterationMonitor().iterations(), (end - begin))); } catch (IterativeSolverNotConvergedException e) { e.printStackTrace(); } return Dx.getData(); } public static double[] solveCG2(double[][] _A, double[] _b, double[] _x) { //System.out.println("b="); //for(int i=0; i<_b.length; i++) // System.out.println(_b[i]+" "); //System.out.println(); Matrix A = new DenseMatrix(_A); Vector b = new DenseVector(_b); DenseVector x = new DenseVector(_x); Matrix AT = A.copy().transpose(); Matrix ATA = new DenseMatrix(AT.numRows(), A.numColumns()); AT.mult(A, ATA); DenseMatrix I = new DenseMatrix(ATA.numRows(), ATA.numColumns()); for(int i=0;i