взятие символа в сумме [sympy] - PullRequest
2 голосов
/ 27 октября 2011

Например, я хотел бы решить

http://www.texify.com/img/%5CLARGE%5C%21%5Cdisplayst%5Csum_%7Bn%3D1%7D%5EN%5C%20n%5E2%5C%20%3D%5C%2055.gif

Вот что я попробовал:

from sympy import var, solve
x = var('x')
f = lambda N: sum( n**2 for n in range(1,N+1) )
f(x)

# output:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: range() integer end argument expected, got Add.

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Встроенная в Python функция range() не знает о символической оценке.Попробуйте вместо этого использовать sum() функцию SymPy:

>>> from sympy import sum, var, solve
>>> x = var('x')
>>> f = lambda N: sum(n**2, (n, 1, N))
>>> n = var("n")
>>> f(x)
x/6 + x**2/2 + x**3/3

Обратите внимание, что лямбда-выражение может быть ненужным, в зависимости от того, чего вы на самом деле хотите достичь:

>>> N = var("N")
>>> solve(sum(n**2, (n, 1, N)) - 55, N)
[-13/4 - I*359**(1/2)/4, 5, -13/4 + I*359**(1/2)/4]

Вам все равно придетсяигнорировать сложные результаты.

3 голосов
/ 29 февраля 2012

Попробуйте функцию суммирования

In [1]: n = Symbol('n', real=True)

In [2]: N = Symbol('N', real=True)

In [3]: summation(n**2, (n, 1, N)) # sum n**2 taking n from 1 to N
Out[3]: 
 3    2    
N    N    N
── + ── + ─
3    2    6

In [4]: solve(summation(n**2, (n, 1, N)) - 55, N)
Out[4]: [5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...