package jscl.math.function; import jscl.AngleUnit; import jscl.JsclMathEngine; import jscl.math.Generic; import jscl.math.NotIntegrableException; import jscl.math.Variable; import jscl.math.polynomial.Polynomial; import jscl.text.msg.Messages; import javax.annotation.Nonnull; public abstract class Trigonometric extends Function { public Trigonometric(String name, Generic parameter[]) { super(name, parameter); } public Generic antiDerivative(@Nonnull Variable variable) throws NotIntegrableException { if (JsclMathEngine.getInstance().getAngleUnits() != AngleUnit.rad) { throw new NotIntegrableException(Messages.msg_20, getName()); } final Generic parameter = parameters[0]; if (parameter.isPolynomial(variable)) { final Polynomial polynomial = Polynomial.factory(variable).valueOf(parameter); if (polynomial.degree() == 1) { final Generic elements[] = polynomial.elements(); return new Inverse(elements[1]).selfExpand().multiply(antiDerivative(0)); } else { throw new NotIntegrableException(this); } } else { throw new NotIntegrableException(this); } } public Generic identity() { // Generic a[]=parameter[0].sumValue(); // if(a.length>1) { // Generic s=JsclInteger.valueOf(0); // for(int i=1;i<a.length;i++) s=s.add(a[i]); // return identity(a[0],s); // } // Generic n[]=Frac.separateCoefficient(parameter[0]); // if(n[0].compareTo(JsclInteger.valueOf(1))==0); // else { // Generic s=new Frac(n[2],n[1]).evaluateSimplify(); // return identity(s,n[0].subtract(JsclInteger.valueOf(1)).multiply(s)); // } return expressionValue(); } public abstract Generic identity(Generic a, Generic b); }