Я использую 64-битный Python 3.3.1, pylab и 32 ГБ оперативной памяти. Эта функция:
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()
должна помочь. Не могли бы вы объяснить цель того, что вы делаете? - person Krastanov   schedule 06.05.2013sqrt2Expansion(1000)
. Моя цель состояла в том, чтобы изучить SymPy, решая в этом случае проблему Эйлера 57. Я знаю более элегантные решения, но я хотел посмотреть, сработает ли в этом случае грубая сила. Если вы хотите опубликовать свой комментарий в качестве ответа, я проголосую за него и выберу его в качестве принятого ответа. - person Paul Jurczak   schedule 06.05.2013