123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- def finite_diff(expression, variable, increment=1):
- """
- Takes as input a polynomial expression and the variable used to construct
- it and returns the difference between function's value when the input is
- incremented to 1 and the original function value. If you want an increment
- other than one supply it as a third argument.
- Examples
- ========
- >>> from sympy.abc import x, y, z
- >>> from sympy.series.kauers import finite_diff
- >>> finite_diff(x**2, x)
- 2*x + 1
- >>> finite_diff(y**3 + 2*y**2 + 3*y + 4, y)
- 3*y**2 + 7*y + 6
- >>> finite_diff(x**2 + 3*x + 8, x, 2)
- 4*x + 10
- >>> finite_diff(z**3 + 8*z, z, 3)
- 9*z**2 + 27*z + 51
- """
- expression = expression.expand()
- expression2 = expression.subs(variable, variable + increment)
- expression2 = expression2.expand()
- return expression2 - expression
- def finite_diff_kauers(sum):
- """
- Takes as input a Sum instance and returns the difference between the sum
- with the upper index incremented by 1 and the original sum. For example,
- if S(n) is a sum, then finite_diff_kauers will return S(n + 1) - S(n).
- Examples
- ========
- >>> from sympy.series.kauers import finite_diff_kauers
- >>> from sympy import Sum
- >>> from sympy.abc import x, y, m, n, k
- >>> finite_diff_kauers(Sum(k, (k, 1, n)))
- n + 1
- >>> finite_diff_kauers(Sum(1/k, (k, 1, n)))
- 1/(n + 1)
- >>> finite_diff_kauers(Sum((x*y**2), (x, 1, n), (y, 1, m)))
- (m + 1)**2*(n + 1)
- >>> finite_diff_kauers(Sum((x*y), (x, 1, m), (y, 1, n)))
- (m + 1)*(n + 1)
- """
- function = sum.function
- for l in sum.limits:
- function = function.subs(l[0], l[- 1] + 1)
- return function
|