/** * <tt>a / constant</tt>. */ public static Mult div(final double constant) { return mult(1/constant); } /**
/** * <tt>a * constant</tt>. */ public static Mult mult(final double constant) { return new Mult(constant); } }
cern.jet.math.Mult div = cern.jet.math.Mult.div(0); cern.jet.math.PlusMult minusMult = cern.jet.math.PlusMult.minusMult(0);
cern.jet.math.Mult div = cern.jet.math.Mult.div(0); cern.jet.math.PlusMult minusMult = cern.jet.math.PlusMult.minusMult(0);
/** * <tt>a / constant</tt>. */ public static Mult div(final double constant) { return mult(1/constant); } /**
/** * <tt>a * constant</tt>. */ public static Mult mult(final double constant) { return new Mult(constant); } }
/** * <tt>a / constant</tt>. */ public static Mult div(final double constant) { return mult(1 / constant); }
/** * <tt>a * constant</tt>. */ public static Mult mult(final double constant) { return new Mult(constant); } }
@Override public double[] gradient(double[] X) { DoubleMatrix1D x = DoubleFactory1D.dense.make(X); DoubleMatrix1D D = x.assign(C, Functions.minus); return D.assign(Mult.mult(2)).toArray(); }
/** * Constructs a function that returns <tt>a * b</tt>. * <tt>a</tt> is a variable, <tt>b</tt> is fixed. */ public static DoubleFunction mult(final double b) { return new Mult(b); /* return new DoubleFunction() { public final double apply(double a) { return a * b; } }; */ } /**
@Override public double[][] hessian(double[] X) { DoubleMatrix1D x = F1.make(X); DoubleMatrix2D hessF0X = getHessF0(x); double[][] hessX = barrierFunction.hessian(X); if(hessX == FunctionsUtils.ZEROES_2D_ARRAY_PLACEHOLDER){ return hessF0X.assign(Mult.mult(tIter)).toArray(); }else{ DoubleMatrix2D phiHess = F2.make(hessX); return hessF0X.assign(Mult.mult(tIter)).assign(phiHess, Functions.plus).toArray(); } }
/** * Constructs a function that returns <tt>a * b</tt>. * <tt>a</tt> is a variable, <tt>b</tt> is fixed. */ public static DoubleFunction mult(final double b) { return new Mult(b); /* return new DoubleFunction() { public final double apply(double a) { return a * b; } }; */ } /**
@Override public double[] gradient(double[] X) { DoubleMatrix1D x = F1.make(X); DoubleMatrix1D phiGrad = F1.make(barrierFunction.gradient(X)); return getGradF0(x).assign(Mult.mult(tIter)).assign(phiGrad, Functions.plus).toArray(); }
@Override public double[] gradient(double[] X) { DoubleMatrix1D gradFiSum = F1.make(getDim()); for(int j=0; j<fi.length; j++){ double ineqValuejX = fi[j].value(X); DoubleMatrix1D ineqGradjX = F1.make(fi[j].gradient(X)); gradFiSum.assign(ineqGradjX.assign(Mult.mult(-1./ineqValuejX)), Functions.plus); } return gradFiSum.toArray(); }
@Override public double[][] hessian(double[] X) { DoubleMatrix2D HessSum = F2.make(new double[getDim()][getDim()]); DoubleMatrix2D GradSum = F2.make(new double[getDim()][getDim()]); for (int j = 0; j < fi.length; j++) { double ineqValuejX = fi[j].value(X); double[][] fijHessianX = fi[j].hessian(X); DoubleMatrix2D ineqHessjX = (fijHessianX!=FunctionsUtils.ZEROES_2D_ARRAY_PLACEHOLDER)? F2.make(fijHessianX) : FunctionsUtils.ZEROES_MATRIX_PLACEHOLDER; DoubleMatrix1D ineqGradjX = F1.make(fi[j].gradient(X)); if(ineqHessjX!=FunctionsUtils.ZEROES_MATRIX_PLACEHOLDER){ HessSum.assign(ineqHessjX.assign(Mult.mult(-1./ineqValuejX)), Functions.plus); } GradSum.assign(ALG.multOuter(ineqGradjX, ineqGradjX, null).assign(Mult.mult(1. / Math.pow(ineqValuejX, 2))), Functions.plus); } return HessSum.assign(GradSum, Functions.plus).toArray(); }
@Override public double[][] hessian(double[] X) { DoubleMatrix1D x = DoubleFactory1D.dense.make(X); DoubleMatrix1D g = ALG.mult(A, x).assign(b, Functions.plus).assign(Functions.exp); double den = g.zSum(); DoubleMatrix1D r = DoubleFactory1D.dense.make(dim); for(int i=0; i<dim; i++){ double d = 0d; for(int k=0; k<A.rows(); k++){ d += g.get(k) * A.get(k, i); } r.set(i, d); } DoubleMatrix2D ret = DoubleFactory2D.dense.make(dim, dim); ret.assign(ALG.multOuter(r, r, null).assign(Mult.mult(-1d/Math.pow(den, 2))), Functions.plus); for(int k=0; k<A.rows(); k++){ ret.assign(ALG.multOuter(A.viewRow(k), A.viewRow(k), null).assign(Mult.mult(g.get(k))).assign(Mult.mult(1d/den)), Functions.plus); } return ret.toArray(); }
b = F1.append(g, h).assign(Mult.mult(-1)); }else{