我正在使用64位Python 3.3.1,pylab和32GB系统内存。这个功能:长表达式崩溃SymPy
def sqrt2Expansion(limit):
x = Symbol('x')
term = 1+1/x
for _ in range(limit):
term = term.subs({x: (2+1/x)})
return term.subs({x: 2})
生产这种表达:1 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(2 + 1/(...))))))
。 当被调用时:sqrt2Expansion(100)
返回有效结果,但sqrt2Expansion(200)
产生RuntimeError
带有许多追溯页面,并挂起pylab/IPython解释器,留下大量未使用的系统内存。任何想法如何更有效地实施它?我想打电话sqrt2Expansion(1000)
,仍然可以得到结果。
将term = term.subs({x:(2 + 1/x)})'改为term = term.subs {x:(2 + 1/x)})。factor()'应该做的。你能解释一下你在做什么的目的吗? – Krastanov 2013-05-06 11:29:12
@Krastanov谢谢,它的确适用于'sqrt2Expansion(1000)'。我的目的是在解决[Euler问题57](http://projecteuler.net/problem=57)的同时学习SymPy。我知道更优雅的解决方案,但我希望看到,如果在这种情况下强力可行。如果你喜欢张贴你的评论作为答案,我会upvote它并选择它作为一个接受的答案。 – 2013-05-06 16:14:36
我试着在下面更广泛地回答。希望对你有帮助。 – Krastanov 2013-05-06 19:34:01