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

jscl.math.function.Ln Maven / Gradle / Ivy

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

import jscl.math.*;

import javax.annotation.Nonnull;

public class Ln extends Function {

	public Ln(Generic generic) {
		super("ln", new Generic[]{generic});
	}

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

	public Generic derivative(int n) {
		return new Inverse(parameters[0]).selfExpand();
	}

	public Generic selfExpand() {
		if (parameters[0].compareTo(JsclInteger.valueOf(1)) == 0) {
			return JsclInteger.valueOf(0);
		}
		return expressionValue();
	}

	public Generic selfElementary() {
		return selfExpand();
	}

	public Generic selfSimplify() {
		try {
			JsclInteger en = parameters[0].integerValue();
			if (en.signum() < 0) {
				return Constants.Generic.I_BY_PI.add(new Ln(en.negate()).selfSimplify());
			} else {
				Generic a = en.factorize();
				Generic p[] = a.productValue();
				Generic s = JsclInteger.valueOf(0);
				for (int i = 0; i < p.length; i++) {
					Power o = p[i].powerValue();
					s = s.add(JsclInteger.valueOf(o.exponent()).multiply(new Ln(o.value(true)).expressionValue()));
				}
				return s;
			}
		} catch (NotIntegerException e) {
		}
		try {
			Variable v = parameters[0].variableValue();
			if (v instanceof Sqrt) {
				Generic g[] = ((Sqrt) v).getParameters();
				return Constants.Generic.HALF.multiply(new Ln(g[0]).selfSimplify());
			}
		} catch (NotVariableException e) {
		}
		Generic n[] = Fraction.separateCoefficient(parameters[0]);
		if (n[0].compareTo(JsclInteger.valueOf(1)) == 0 && n[1].compareTo(JsclInteger.valueOf(1)) == 0) ;
		else return new Ln(n[2]).selfSimplify().add(
				new Ln(n[0]).selfSimplify()
		).subtract(
				new Ln(n[1]).selfSimplify()
		);
		return expressionValue();
	}

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

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy