2011-10-27 4 views
2

例えば、私はここに私が試したものだ撮影シンボルは、[sympy]

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. 

答えて

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 

は注意、あなたに依存し、実際に達成したい:

>>> 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] 

あなたはまだ、複雑な結果を無視する必要があります。

+0

加算機能を試してみてください 'Sum'は、(f(x)が-55、x)'は動作しませんでしたを解決 '働いたが、。 – weis26

+0

@ weis26:申し訳ありませんが、私の答えはやや間違っていました。 'Sum()'は数値評価のようですsympy.sum()は記号評価用です。 –

+0

はい、完璧に機能しました! – weis26

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] 
+0

最初にsympyから 'Symbol'と' summation'をインポートする必要があります。 または単に 'import sympy;を使用してください。 sympy.Symbol; sympy.summation' – nexayq