All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jscl.math.function.hyperbolic.Coth Maven / Gradle / Ivy

There is a newer version: 1.0.11
Show newest version
package jscl.math.function.hyperbolic;

import jscl.math.*;
import jscl.math.function.Fraction;
import jscl.math.function.Ln;
import jscl.math.function.Trigonometric;

import javax.annotation.Nonnull;

public class Coth extends Trigonometric {
	public Coth(Generic generic) {
		super("coth", new Generic[]{generic});
	}

	public Generic antiDerivative(int n) throws NotIntegrableException {
		return new Ln(
				JsclInteger.valueOf(4).multiply(
						new Sinh(parameters[0]).selfExpand()
				)
		).selfExpand();
	}

	public Generic derivative(int n) {
		return JsclInteger.valueOf(1).subtract(
				new Coth(parameters[0]).selfExpand().pow(2)
		);
	}

	public Generic selfExpand() {
		if (parameters[0].signum() < 0) {
			return new Coth(parameters[0].negate()).selfExpand().negate();
		}
		return expressionValue();
	}

	public Generic selfElementary() {
		return new Fraction(
				new Cosh(parameters[0]).selfElementary(),
				new Sinh(parameters[0]).selfElementary()
		).selfElementary();
	}

	public Generic selfSimplify() {
		if (parameters[0].signum() < 0) {
			return new Coth(parameters[0].negate()).selfExpand().negate();
		}
		try {
			Variable v = parameters[0].variableValue();
			if (v instanceof Acoth) {
				Generic g[] = ((Acoth) v).getParameters();
				return g[0];
			}
		} catch (NotVariableException e) {
		}
		return identity();
	}

	public Generic identity(Generic a, Generic b) {
		Generic ta = new Coth(a).selfSimplify();
		Generic tb = new Coth(b).selfSimplify();
		return new Fraction(
				ta.multiply(tb).add(JsclInteger.valueOf(1)),
				ta.add(tb)
		).selfSimplify();
	}

	public Generic selfNumeric() {
		return ((NumericWrapper) parameters[0]).coth();
	}

	@Nonnull
	public Variable newInstance() {
		return new Coth(null);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy