package jscl.math.function;
import jscl.math.*;
import jscl.mathml.MathML;
import javax.annotation.Nonnull;
public class Cubic extends Algebraic {
public Cubic(Generic generic) {
super("cubic", new Generic[]{generic});
}
public Root rootValue() {
return new Root(
new Generic[]{
parameters[0].negate(),
JsclInteger.valueOf(0),
JsclInteger.valueOf(0),
JsclInteger.valueOf(1)
},
0
);
}
public Generic antiDerivative(@Nonnull Variable variable) throws NotIntegrableException {
Root r = rootValue();
Generic g[] = r.getParameters();
if (g[0].isPolynomial(variable)) {
return AntiDerivative.compute(r, variable);
} else throw new NotIntegrableException(this);
}
public Generic derivative(int n) {
return Constants.Generic.THIRD.multiply(
new Inverse(
selfExpand().pow(2)
).selfExpand()
);
}
public Generic selfExpand() {
try {
JsclInteger en = parameters[0].integerValue();
if (en.signum() < 0) ;
else {
Generic rt = en.nthrt(3);
if (rt.pow(3).compareTo(en) == 0) return rt;
}
} catch (NotIntegerException e) {
}
return expressionValue();
}
public Generic selfElementary() {
return selfExpand();
}
public Generic selfSimplify() {
try {
JsclInteger en = parameters[0].integerValue();
if (en.signum() < 0) return new Cubic(en.negate()).selfSimplify().negate();
else {
Generic rt = en.nthrt(3);
if (rt.pow(3).compareTo(en) == 0) return rt;
}
} catch (NotIntegerException e) {
}
return expressionValue();
}
public Generic selfNumeric() {
return ((NumericWrapper) parameters[0]).nThRoot(3);
}
public String toJava() {
StringBuffer buffer = new StringBuffer();
buffer.append(parameters[0].toJava());
buffer.append(".pow(");
buffer.append(Constants.Generic.THIRD.toJava());
buffer.append(")");
return buffer.toString();
}
void bodyToMathML(MathML element, boolean fenced) {
MathML e1 = element.element("mroot");
parameters[0].toMathML(e1, null);
JsclInteger.valueOf(3).toMathML(e1, null);
element.appendChild(e1);
}
@Nonnull
public Variable newInstance() {
return new Cubic(null);
}
}