在求和中使用符号 [sympy]
比如,我想解决这个问题:
(来源: texify.com)
这是我尝试过的:
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 个回答
3
试试这个求和函数
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]
5
Python自带的range()
函数并不知道符号计算是什么。你可以试试用SymPy的sum()
函数来代替:
>>> 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
注意,根据你想要实现的目标,使用lambda表达式可能并不是必须的:
>>> 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]
你仍然需要忽略那些复杂的结果。