/** * Solve linear ODE. * * @param p * coefficient of degree 1 * @param q * coefficient of degree 0 * @param xVar * variable * @param engine * the evaluation engine * @return <code>F.NIL</code> if the evaluation was not possible */ private IExpr linearODE(IExpr p, IExpr q, IExpr xVar, IExpr C_1, EvalEngine engine) { // integrate p IExpr pInt = engine.evaluate(F.Exp(F.Integrate(p, xVar))); if (q.isZero()) { return engine.evaluate(F.Divide(C_1, pInt)); } else { IExpr qInt = engine.evaluate(F.Plus(C_1, F.Expand(F.Integrate(F.Times(F.CN1, q, pInt), xVar)))); return engine.evaluate(F.Expand(F.Divide(qInt, pInt))); } }
/** * {@inheritDoc} */ @Override public IExpr getResult() { if (product.getN() > 0) { return F.eval(F.Exp(F.Divide(product.getResult(), F.integer(product.getN())))); // FastMath.exp(sumOfLogs.getResult() / sumOfLogs.getN()); } else { return null; } }
@Override public IExpr cdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); IExpr function = // [$ (1 - E^(-E^((# - n)/m))) & $] F.Function(F.Plus(F.C1, F.Negate( F.Exp(F.Negate(F.Exp(F.Times(F.Power(m, -1), F.Plus(F.Negate(n), F.Slot1)))))))); // $$; return callFunction(function, k); } return F.NIL; }
private IExpr effectiveInterestFormula(IExpr a, IExpr b) { if (b.isZero()) { return // [$ -1 + E^a $] F.Plus(F.CN1, F.Exp(a)); // $$; } return // // [$ -1 + (1 + a*b)^(1/b) $] F.Plus(F.CN1, F.Power(F.Plus(F.C1, F.Times(a, b)), F.Power(b, -1))); // $$; } }
public static IExpr gaussianWindow(IExpr x) { return // [$ Piecewise({{E^(-((50*x^2)/9)), -(1/2) <= x <= 1/2}}, 0) $] F.Piecewise(F.List( F.List(F.Exp(F.Times(F.CN1, F.QQ(1L, 9L), F.ZZ(50L), F.Sqr(x))), F.LessEqual(F.CN1D2, x, F.C1D2))), F.C0); // $$; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); IExpr function = // [$ (E^(-E^((# - n)/m) + (# - n)/m)/m) & $] F.Function(F.Times( F.Exp(F.Plus(F.Negate(F.Exp(F.Times(F.Power(m, -1), F.Plus(F.Negate(n), F.Slot1)))), F.Times(F.Power(m, -1), F.Plus(F.Negate(n), F.Slot1)))), F.Power(m, -1))); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST1()) { IExpr n = dist.arg1(); // IExpr function = // [$ Piecewise({{n/E^(#*n), # >= 0}}, 0) & $] F.Function(F.Piecewise(F.List(F.List(F.Times(F.Power(F.Exp(F.Times(F.Slot1, n)), -1), n), F.GreaterEqual(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr cdf(IAST dist, IExpr k) { if (dist.isAST1()) { IExpr n = dist.arg1(); IExpr function = // [$ (Piecewise({{1 - E^((-#)*n), # >= 0}}, 0)) & $] F.Function(F.Piecewise(F.List(F.List(F.Plus(F.C1, F.Negate(F.Exp(F.Times(F.CN1, F.Slot1, n)))), F.GreaterEqual(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); // Piecewise({{1 - E^((-k)*n), k >= 0}}, 0) // return F.Piecewise(F.List( // F.List(F.Plus(F.C1, F.Negate(F.Power(F.E, F.Times(F.CN1, k, n)))), F.GreaterEqual(k, F.C0))), // F.C0); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST1()) { IExpr p = dist.arg1(); // IExpr function = // [$ Piecewise({{p^#/(E ^ p * #!), # >= 0}}, 0) & $] F.Function(F.Piecewise(F.List(F.List( F.Times(F.Power(p, F.Slot1), F.Power(F.Times(F.Exp(p), F.Factorial(F.Slot1)), -1)), F.GreaterEqual(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST0()) { IExpr function = // [$ ( 1/(E^(#^2/2)*Sqrt(2*Pi)) & ) $] F.Function(F.Power(F.Times(F.Exp(F.Times(F.C1D2, F.Sqr(F.Slot1))), F.Sqrt(F.Times(F.C2, F.Pi))), -1)); // $$; return callFunction(function, k); } else if (dist.isAST2()) { // IExpr n = dist.arg1(); IExpr m = dist.arg2(); IExpr function = // [$ ( 1/(E^((# - n)^2/(2*m^2))*(m*Sqrt(2*Pi))) & ) $] F.Function(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.Slot1)))), m, F.Sqrt(F.Times(F.C2, F.Pi))), -1)); // $$; return callFunction(function, k); } 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({{E^(-(#/m)^(-n)), # > 0}}, 0)) & $] F.Function(F.Piecewise( F.List(F.List(F.Exp(F.Negate(F.Power(F.Times(F.Power(m, -1), F.Slot1), F.Negate(n)))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } 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 - E^(-(#/m)^n),# > 0}}, 0) & $] F.Function( F.Piecewise(F.List(F.List( F.Plus(F.C1, F.Negate( F.Exp(F.Negate(F.Power(F.Times(F.Power(m, -1), F.Slot1), n))))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ Piecewise({{(#^(-1 + n)*m^n)/(E^(#*m)*Gamma(n)), # > 0}}, 0) & $] F.Function(F.Piecewise(F.List(F.List( F.Times(F.Power(m, n), F.Power(F.Times(F.Exp(F.Times(F.Slot1, m)), F.Gamma(n)), -1), F.Power(F.Slot1, F.Plus(F.CN1, n))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ Piecewise({{((#/m)^(-1 + n)*n)/(E^(#/m)^n*m), # > 0}}, 0) & $] F.Function(F.Piecewise(F.List(F.List( F.Times(F.Power(F.Times(F.Exp(F.Power(F.Times(F.Power(m, -1), F.Slot1), n)), m), -1), n, F.Power(F.Times(F.Power(m, -1), F.Slot1), F.Plus(F.CN1, n))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@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; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST1()) { IExpr v = dist.arg1(); IExpr function = // [$ Piecewise({{#^(-1 + v/2)/(2^(v/2)*E^(#/2)*Gamma(v/2)), # > 0}}, 0) & $] F.Function( F.Piecewise(F.List(F.List( F.Times(F.Power( F.Times(F.Power(F.C2, F.Times(F.C1D2, v)), F.Exp(F.Times(F.C1D2, F.Slot1)), F.Gamma(F.Times(F.C1D2, v))), -1), F.Power(F.Slot1, F.Plus(F.CN1, F.Times(F.C1D2, v)))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ Piecewise({{((#/m)^(-1 - n)*n)/(E^(#/m)^(-n)*m), # > 0}}, 0) & $] F.Function(F.Piecewise(F.List(F.List( F.Times(F.Power( F.Times(F.Exp(F.Power(F.Times(F.Power(m, -1), F.Slot1), F.Negate(n))), m), -1), n, F.Power(F.Times(F.Power(m, -1), F.Slot1), F.Plus(F.CN1, F.Negate(n)))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } return F.NIL; }
@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; }
@Override public IExpr pdf(IAST dist, IExpr k) { if (dist.isAST2()) { IExpr n = dist.arg1(); IExpr m = dist.arg2(); // IExpr function = // [$ (Piecewise({{(2*#^(-1 + 2*n)*(n/m)^n)/(E^((#^2*n)/m)*Gamma(n)), # > 0}}, 0)) & $] F.Function( F.Piecewise(F.List(F.List( F.Times(F.C2, F.Power(F.Times(F.Power(m, -1), n), n), F.Power(F.Times(F.Exp(F.Times(F.Power(m, -1), n, F.Sqr(F.Slot1))), F.Gamma(n)), -1), F.Power(F.Slot1, F.Plus(F.CN1, F.Times(F.C2, n)))), F.Greater(F.Slot1, F.C0))), F.C0)); // $$; return callFunction(function, k); } 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; }