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+")";
	}
}

 

Ads help maintain this website.