/** * Evaluate the definite sum: <code>Sum[arg1, {var, from, Infinity}]</code> * * @param arg1 * the first argument of the <code>Sum[]</code> function. * @param list * constructed as <code>{Symbol: var, Integer: from, Infinity}</code> * @return */ private IExpr definiteSumInfinity(final IExpr expr, final IIterator<IExpr> iterator, IAST list, EvalEngine engine) { final ISymbol var = iterator.getVariable(); final IExpr from = iterator.getLowerLimit(); final IExpr to = iterator.getUpperLimit(); if (expr.isZero()) { return F.C0; } if (from.isInteger() && !from.isOne()) { IExpr subSum = engine.evaluateNull(F.Sum(expr, F.List(var, C1, to))); if (subSum.isPresent()) { if (F.Less.ofQ(engine, from, C1)) { return F.Plus(F.Sum(expr, F.List(var, from, C0)), subSum); } if (F.Greater.ofQ(engine, from, C1)) { return F.Subtract(subSum, F.Sum(expr, F.List(var, C1, from.minus(F.C1)))); } } } return F.NIL; }
IAST list = (IAST) ast.get(2); if (ast.get(1).isPlus()) { return ((IAST) ast.get(1)).map(Functors.replace1st(F.Sum(F.Null, ast.get(2)))); if (filterCollector.size() > 1) { if (restCollector.size() == 2) { filterCollector.add(F.Sum(restCollector.get(1), ast.get(2))); } else { filterCollector.add(F.Sum(restCollector, ast.get(2))); return F.Subtract(F.Sum(ast.get(1), F.List(var, C0, to)), F.Sum(ast.get(1), F.List(var, C0, from.minus(F.C1))));
IExpr temp = engine.evalQuiet(F.Sum(restCollector.getOneIdentity(F.C1), list)); if (temp.isFreeAST(F.Sum)) { filterCollector.append(temp); IExpr temp1 = engine.evalQuiet(F.Sum(arg1, F.List(var, C0, from.minus(F.C1)))); if (!temp1.isComplexInfinity() && temp1.isFreeAST(F.Sum)) { IExpr temp2 = engine.evalQuietNull(F.Sum(arg1, F.List(var, C0, to))); if (temp2.isPresent() && !temp2.isComplexInfinity()) { return F.Subtract(temp2, temp1);
} else { term1 = F.eval( ExpandAll(Plus(Times(Power(Plus(fromMinusOne, C1), Plus(p, C1)), Power(Plus(p, C1), CN1)), Sum( Times(Times(Times(Power(Plus(fromMinusOne, C1), Plus(Plus(p, Times(CN1, k)), C1)), Binomial(p, k)), BernoulliB(k)), Power(Plus(Plus(p, Times(CN1, k)), C1), CN1)), term2 = Times(C1D2, to, Plus(C1, to)); } else { term2 = F.eval(ExpandAll(Plus(Times(Power(Plus(to, C1), Plus(p, C1)), Power(Plus(p, C1), CN1)), Sum(Times( Times(Times(Power(Plus(to, C1), Plus(Plus(p, Times(CN1, k)), C1)), Binomial(p, k)), BernoulliB(k)), Power(Plus(Plus(p, Times(CN1, k)), C1), CN1)), List(k, C1, p)))));
rest.addAll(timesAST, 2, timesAST.size()); if (result.isSin()) { return Sum(Times(Times(Times(Power(CN1, Times(Plus(F.$s("i"), Times(CN1, C1)), C1D2)), Binomial(iNum, $s("i"))), Power(Cos(rest), Plus(iNum, Times(CN1, $s("i"))))), Power(Sin(rest), $s("i"))), List($s("i"), C1, iNum, C2)); } else if (result.isCos()) { return Sum(Times(Times(Times(Power(CN1, Times(F.$s("i"), C1D2)), Binomial(iNum, $s("i"))), Power(Cos(rest), Plus( iNum, Times(CN1, $s("i"))))), Power(Sin(rest), $s("i"))), List($s("i"), C0, iNum, C2));
F.CSqrt2, F.Power(F.Pi, F.CN1D2), F.Power(z, F.CN1D2), F .Plus(F.Times( F.Cos(F.Plus(F.Times(F.C1D2, F.Plus(F.CN1D2, n), F.Pi), F.Negate(z))), F.Sum( F.Times(F.Power(F.CN1, j), F.Power(F.Times(F.C2, z), F.Plus(F.CN1, F.Times(F.CN2, j))), n), F.Pi), F .Negate(z))), F.Sum(F.Times( F.Power(F.CN1, j), F.Power(F.Times(F.Factorial(F.Times(F.C2, j)),