public FloatInterval[] solve() {

    A = new FloatInterval[fprime.length][];
    for (int i = 0; i < fprime.length; i++) {
      A[i] = new FloatInterval[fprime[i].length];
      for (int j = 0; j < fprime[i].length; j++) {
        A[i][j] = new FloatInterval(fprime[i][j].min(), fprime[i][j].max());
      }
    }

    xInit = new double[x.length];
    for (int i = 0; i < x.length; i++) xInit[i] = (x[i].max() + x[i].min()) / 2.0;

    b = values();

    if (debug) {
      System.out.println("Middle values for x");
      for (int i = 0; i < xInit.length; i++) System.out.print(xInit[i] + " ");
      System.out.println();

      System.out.println("Middle values for f");
      for (int i = 0; i < b.length; i++) System.out.print(b[i] + ", ");
      System.out.println();
    }

    IntervalGaussSeidel igs = new IntervalGaussSeidel(A, b);

    if (debug) System.out.println(igs);

    FloatInterval[] v = igs.solve();

    if (v == null) return null;

    FloatInterval[] result = new FloatInterval[v.length];
    for (int i = 0; i < v.length; i++) {
      FloatIntervalDomain r = FloatDomain.addBounds(v[i].min(), v[i].max(), xInit[i], xInit[i]);
      result[i] = new FloatInterval(r.min(), r.max());
    }

    return result;
  }
Exemplo n.º 2
0
  @Override
  public void consistency(Store store) {

    do {
      store.propagationHasOccurred = false;

      FloatIntervalDomain pDom = FloatDomain.subBounds(r.min(), r.max(), c, c);
      p.domain.in(store.level, p, pDom.min(), pDom.max());

      FloatIntervalDomain rDom = FloatDomain.addBounds(p.min(), p.max(), c, c);
      r.domain.in(store.level, r, rDom.min(), rDom.max());

    } while (store.propagationHasOccurred);
  }