Я пишу программу, вычисляющую степенной ряд sum_{m=0}{oo} a[m]x^m
, где a[m]
рекурсивно определено: a[m]=f(a[m-1])
. Я генерирую символы следующим образом:
a = list(sympy.symbols(' '.join([('a%d' % i) for i in range(10)])))
for i in range(1, LIMIT):
a[i] = f_recur(a[i-1], i-1)
Это позволяет мне ссылаться на символы a0,a1,...,a9
используя a[0],a[1],...,a[9]
, a[m]
является функцией от a[m-1]
заданный f_recur
.
Теперь я надеюсь, что код суммирования будет следующим:
m, x, y = sympy.symbols('m x y')
y = sympy.Sum(a[m]*x**m, (m, 0, 10))
Но m
не является целым числом, поэтому a[m]
выбрасывает исключение.
В этой ситуации, где символы хранятся в списке, как бы вы закодировали суммирование? Спасибо за любую помощь!
SymPy Sum
представляет собой сумму с символическим индексом. Вы хотите получить сумму с конкретным индексом, проходящим через 0,... 9. Это может быть sum
Питона
y = sum([a[m]*x**m for m in range(10)])
или, что предпочтительнее с точки зрения производительности (соответствующая проблема)
y = sympy.Add(*[a[m]*x**m for m in range(10)])
В любом случае m
не является символом, а целым числом.
У меня есть работа, которая не использует sympy.Sum
:
x = sympy.symbols('x')
y = a[0]*x**0
for i in range(1, LIMIT):
y += a[i]*x**i
Это делает работу, но sympy.Sum
не используется.