package mikera.vectorz.ops;
import mikera.vectorz.Op;
public final class Sum extends Op {
public final Op a;
public final Op b;
private Sum(Op a, Op b) {
this.a=a;
this.b=b;
}
public static Op create(Op a, Op b) {
if ((b instanceof ALinearOp)&&(!(a instanceof ALinearOp))) {
return b.sum(a);
}
return new Sum(a,b);
}
@Override
public double apply(double x) {
return a.apply(x)+b.apply(x);
}
@Override
public double averageValue() {
return a.averageValue()+b.averageValue();
}
@Override
public boolean hasDerivative() {
return (a.hasDerivative())&&(b.hasDerivative());
}
@Override
public double derivative(double x) {
return a.derivative(x)+b.derivative(x);
}
@Override
public Op getDerivativeOp() {
return a.getDerivativeOp().sum(b.getDerivativeOp());
}
@Override
public boolean isStochastic() {
return a.isStochastic()||b.isStochastic();
}
@Override public String toString() {
return "Sum("+a+","+b+")";
}
}