Exemplo n.º 1
0
  public static OptimisationReport runNewton(MatrixChains chains, double[] angles) {
    System.out.println("f: " + Newton.f(chains, angles));
    System.out.println();

    DenseMatrix64F dby1 = Newton.get1d(chains, angles);
    System.out.println("dby1: " + dby1);

    System.out.println("numDiff: " + Newton.numDiff1d(chains, angles, 1e-6));
    System.out.println();

    DenseMatrix64F dby11 = Newton.get2d(chains, angles);
    System.out.println("dby11: " + dby11);

    System.out.println("numDiff: " + Newton.numDiff2d(chains, angles, 1e-5));

    OptimisationReport report = runNewtonRun(chains, angles, 25);

    if (report.gradn >= chains.tolerance) {
      report.status = "FAILED";
    } else {
      int minIndex = diagnoseEigenvalues(report.eigenvalues);
      if (minIndex == -1) {
        report.status = "RIGID";
      } else {
        report.status = "LOOSE";
        chains.regularise = 1e-1;
        chains.initialPoint = angles;
        System.out.println("Beginning 2nd run with regularisation " + chains.regularise);
        report = runNewtonRun(chains, angles, 30);
        report.status = (report.gradn >= chains.tolerance) ? "LOOSE-FAILED" : "LOOSE";
        System.out.println("Original vector was " + printVec(angles));
        chains.regularise = 1e-4;
        chains.initialPoint = report.angles;
        System.out.println("Beginning 3nd run with regularisation " + chains.regularise);
        report = runNewtonRun(chains, report.angles, 30);
        report.status = (report.gradn >= chains.tolerance) ? "LOOSE-FAILED" : "LOOSE";
        System.out.println("Original vector was " + printVec(angles));
      }
    }

    System.out.println("Optimisation concluded - the configuration is " + report.status);
    return report;
  }