package mikera.vectorz.ops; import mikera.vectorz.Op; /** * Operator representing the inverse of another operator * * @author Mike */ public class Inverse extends Op { private final Op op; public Inverse(Op op) { this.op=op; } @Override public double apply(double x) { return op.applyInverse(x); } @Override public double applyInverse(double y) { return op.apply(y); } @Override public double minValue() { return op.minDomain(); } @Override public double maxValue() { return op.maxDomain(); } @Override public double minDomain() { return op.minValue(); } @Override public double maxDomain() { return op.maxValue(); } @Override public double derivative(double y) { return 1.0/op.derivative(op.applyInverse(y)); } @Override public Op getInverse() { return op; } @Override public double averageValue() { return op.applyInverse(op.averageValue()); } @Override public boolean hasInverse() { return true; } @Override public boolean hasDerivative() { return op.hasDerivative(); } }