Расширение многомерного ряда в sympy

Кто-нибудь знает, есть ли в sympy встроенная функция для получения расширения многомерного ряда формы

f(x,y) = a + b*x + c*y + d*x**2 + e*x*y + f*y**2 + ...

то есть по возрастанию по всем переменным?

Заранее спасибо.


person doetoe    schedule 09.09.2013    source источник
comment
С чего вы начинаете (многочлен, какая-то другая (аналитическая) функция)? Какой результат вы ожидаете? (Полином, список одночленов, что-то другое?)   -  person Piotr Migdal    schedule 11.03.2014
comment
Привет, Петр, меня интересуют разложения в степенной ряд любой многомерной функции как многомерный вариант ряда:   -  person doetoe    schedule 12.03.2014
comment
Я хотел продолжить пример: что-то вроде (exp(x)*exp(y)).series() дает 1 + x + y + x2/2 + x*y + y 2/2 + ...   -  person doetoe    schedule 18.03.2014


Ответы (2)


Может быть, уже слишком поздно, но вот что я бы сделал. Это не совсем встроенная функция, но она выполняет свою работу. Идея состоит в том, чтобы ввести временную переменную (eps) с помощью подстановок и расширить ряд по ней. Вот пример:

import sympy
x, y , eps = sympy.symbols('x y eps')
f = sympy.exp(x-y)
f.subs(x,x*eps).subs(y,y*eps).series(eps).removeO().subs(eps,1)

Обратите внимание, что с помощью этой техники вы можете иметь «асимметричные» расширения по x и y. Например: f.subs(x,x*eps).subs(y,y*eps**2) ...

person JBD    schedule 04.12.2014

Краткий ответ заключается в том, что в настоящее время (sympy build 0.7.5) в sympy нет встроенной функции, которая будет обрабатывать многомерные расширения рядов.

По-видимому, поддерживается разложение многомерных функций только по одной переменной. Вы можете увидеть это в строке документации _eval_nseries в документации function здесь< /а>. Если это важно для вас, вы можете прокомментировать систему отслеживания ошибок или присоединиться к список рассылки.

Итак, чтобы было ясно, это работает:

In [1]: import sympy as sp
In [2]: x, y = sp.symbols('x,y')
In [3]: g = sp.exp(-x*y)
In [4]: g
Out[4]: exp(-x*y)
In [5]: g.series(x, 0)
Out[5]: 1 - x*y + x**2*y**2/2 - x**3*y**3/6 + x**4*y**4/24 - x**5*y**5/120 + O(x**6)
In [6]: g.series(y, 0)
Out[6]: 1 - x*y + x**2*y**2/2 - x**3*y**3/6 + x**4*y**4/24 - x**5*y**5/120 + O(y**6)

но ни в одной из следующих функций нет желаемой функциональности:

In [7]: g.series((x, y), (0, 0))
Out[7]: exp(-x*y)

In [8]: g.series((x, 0), (y, 0))
Out[8]: exp(-x*y)

In [9]: g.series(x, 0, y, 0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-20c1ab732928> in <module>()
----> 1 g.series(x, 0, y, 0)

/usr/lib/python2.7/dist-packages/sympy/core/expr.pyc in series(self, x, x0, n, dir, logx)
   2401                 return self
   2402 
-> 2403         if len(dir) != 1 or dir not in '+-':
   2404             raise ValueError("Dir must be '+' or '-'")
   2405 

TypeError: object of type 'int' has no len()

In [10]: g.series(x, y, 0, 0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-32b57736cd3d> in <module>()
----> 1 g.series(x, y, 0, 0)

/usr/lib/python2.7/dist-packages/sympy/core/expr.pyc in series(self, x, x0, n, dir, logx)
   2401                 return self
   2402 
-> 2403         if len(dir) != 1 or dir not in '+-':
   2404             raise ValueError("Dir must be '+' or '-'")
   2405 

TypeError: object of type 'int' has no len()
person wflynny    schedule 12.05.2014