@Override public IExpr e1ObjArg(final IExpr o) { return F.Log(F.C2, o); }
@Override public IExpr e1ObjArg(final IExpr o) { return F.Log(F.C10, o); }
/** * {@inheritDoc} */ @Override public void increment(final IExpr d) { value = F.eval(F.Plus(value, F.Log(d))); n++; }
@Override public IExpr median(IAST dist) { if (dist.isAST1()) { // Log(2)/x return F.Times(F.Log(F.C2), F.Power(dist.arg1(), F.CN1)); } return F.NIL; }
public IExpr e1FraArg(final IFraction f) { if (f.isPositive() && f.isLessThan(F.C1)) { return F.Negate(F.Log(f.inverse())); } return F.NIL; }
@Override public IExpr randomVariate(Random random, IAST dist) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); if (n.isReal() && m.isReal()) { // avoid result -Infinity when reference is close to 1.0 double reference = random.nextDouble(); double uniform = reference == NEXTDOWNONE ? reference : Math.nextUp(reference); uniform = -Math.log(uniform); return m.add(n.times(F.Log(F.num(uniform)))); } } return F.NIL; }
@Override public IExpr median(IAST dist) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // (n,m) => m/Log(2)^n^(-1) return F.Times(m, F.Power(F.Log(F.C2), F.Negate(F.Power(n, -1)))); } return F.NIL; }
@Override public IExpr median(IAST dist) { if (dist.isAST2()) { // (a,b) -> b*Log(2)^(1/a) IExpr a = dist.arg1(); IExpr b = dist.arg2(); return F.Times(b, F.Power(F.Log(F.C2), F.Power(a, -1))); } if (dist.isAST3()) { // (a,b,m) -> m + b*Log(2)^(1/a) IExpr a = dist.arg1(); IExpr b = dist.arg2(); IExpr m = dist.arg3(); return F.Plus(m, F.Times(b, F.Power(F.Log(F.C2), F.Power(a, -1)))); } return F.NIL; }
IAST sumLog = F.Plus(); for (int i = begin; i < begin + length; i++) { sumLog.add(F.Log(values.get(i)));
@Override public IExpr evaluate(final IAST ast, EvalEngine engine) { Validate.checkSize(ast, 2); IExpr arg1 = ast.arg1(); if (arg1.isInteger()) { if (arg1.isZero() || arg1.isOne() || arg1.isNegative()) { return F.C0; } IExpr expr = F.FactorInteger.of(engine, arg1); if (expr.isList()) { IAST list = (IAST) expr; if (list.size() == 2) { IInteger temp = (IInteger) list.arg1().first(); return F.Log(temp); } return F.C0; } } return F.NIL; }
private IExpr power(IExpr x1, IExpr z) { // Power[x_ ^ y_, z_] :> x ^(y*z) IExpr base = x1.base(); IExpr exponent = x1.exponent(); IAST powerResult = Power(base, Times(exponent, z)); if (assumptions) { IAST floorResult = Floor(Divide(Subtract(Pi, Im(Times(exponent, Log(base)))), Times(C2, Pi))); IAST expResult = Power(E, Times(C2, I, Pi, z, floorResult)); IAST timesResult = Times(powerResult, expResult); return timesResult; } return powerResult; } }
@Override public IExpr evaluateArg1(final IExpr arg1) { if (arg1.isInfinity() || arg1.isZero()) { return F.CInfinity; } if (arg1.isNegativeInfinity() || arg1.isDirectedInfinity(F.CI) || arg1.isDirectedInfinity(F.CNI) || arg1.isComplexInfinity()) { return F.CComplexInfinity; } if (arg1.isPositive()) { if (arg1.isInteger()) { return F.Log(F.Factorial(arg1.dec())); } } if (arg1.isNegative()) { if (arg1.isInteger()) { return F.CInfinity; } } return F.NIL; }
/** * <p> * Match <code>a_.*variable^n_+b_.*variable^m_</code> to * <code>E^(((-I)*Pi + Log(a) - Log(b))/(m - n)) /; FreeQ(a,x)&&FreeQ(b,x)&&FreeQ(n,x)&&FreeQ(m,x)</code> * </p> * * @param ast * @param x * @return */ private static IExpr matchSpecialExpressions(IAST ast, IExpr exprWithoutVariable, IExpr x) { if (exprWithoutVariable.isZero()) { final Matcher matcher = new Matcher(); // match a_.*variable^n_.+b_.*variable^m_ to E^(((-I)*Pi + Log(a) - Log(b))/(m - n)) matcher.caseOf( F.Plus(F.Times(F.b_DEFAULT, F.Power(x, F.m_)), F.Times(F.a_DEFAULT, F.Power(x, F.n_DEFAULT))), // F.Condition( F.Exp(F.Times(F.Power(F.Plus(F.m, F.Negate(F.n)), -1), F.Plus(F.Times(F.CNI, F.Pi), F.Log(F.a), F.Negate(F.Log(F.b))))), F.And(F.FreeQ(F.a, x), F.FreeQ(F.b, x), F.FreeQ(F.n, x), F.FreeQ(F.m, x)))); return matcher.replaceAll(ast); } return F.NIL; }
@Override public IExpr cdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ Piecewise({{(1/2)*Erfc((n - Log(#))/(Sqrt(2)*m)), # > 0}}, 0) & $] F.Function( F.Piecewise(F.List(F.List( F.Times(F.C1D2, F.Erfc(F.Times(F.Power(F.Times(F.CSqrt2, m), -1), F.Plus(n, F.Negate(F.Log(F.Slot1)))))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
/** * Evaluate <code>Im(x^(a+I*b))</code> * * @param x * @param a the real part of the exponent * @param b the imaginary part of the exponent * @return */ private IExpr imPowerComplex(IExpr x, IExpr a, IExpr b) { if (x.isE()) { // Im(E^(a+I*b)) -> E^a*Sin[b] return Times(Power(F.E, a), Sin(b)); } return Times(Times(Power(Power(x, C2), Times(C1D2, a)), Power(E, Times(Negate(b), Arg(x)))), Sin(Plus(Times(a, Arg(x)), Times(Times(C1D2, b), Log(Power(x, C2)))))); }
@Override public IExpr e2ComArg(final IComplex base, final IComplex exponent) { if (base.getImaginaryPart().isZero()) { IRational a = base.getRealPart(); IRational b = exponent.getRealPart(); IRational c = exponent.getImaginaryPart(); IExpr temp = // [$ b*Arg(a)+1/2*c*Log(a^2) $] F.Plus(F.Times(b, F.Arg(a)), F.Times(F.C1D2, c, F.Log(F.Sqr(a)))); // $$; return // [$ (a^2)^(b/2)*E^(-c*Arg(a)) * (Cos(temp)+I* Sin(temp)) $] F.Times(F.Power(F.Sqr(a), F.Times(F.C1D2, b)), F.Exp(F.Times(F.CN1, c, F.Arg(a))), F.Plus(F.Cos(temp), F.Times(F.CI, F.Sin(temp)))); // $$; } return F.NIL; }
/** * Evaluate <code>Re(x^(a+I*b))</code> * * @param x * @param a the real part of the exponent * @param b the imaginary part of the exponent * @return */ private static IExpr rePowerComplex(IExpr x, IExpr a, IExpr b) { if (x.isE()) { // Re(E^(a+I*b)) -> E^a*Cos[b] return Times(Power(F.E, a), Cos(b)); } return Times(Times(Power(Power(x, C2), Times(C1D2, a)), Power(E, Times(Negate(b), Arg(x)))), Cos(Plus(Times(a, Arg(x)), Times(Times(C1D2, b), Log(Power(x, C2)))))); }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ (Piecewise({{1/(E^((-n + Log(#))^2/(2*m^2))*(#*m*Sqrt(2*Pi))), # > 0}}, 0)) & $] F.Function( F.Piecewise( F.List(F.List( F.Power(F.Times( F.Exp(F.Times(F.Power(F.Times(F.C2, F.Sqr(m)), -1), F.Sqr(F.Plus(F.Negate(n), F.Log(F.Slot1))))), F.Slot1, m, F.Sqrt(F.Times(F.C2, F.Pi))), -1), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }