Python 与symphy中的非交换符号集成

Python 与symphy中的非交换符号集成,python,sympy,Python,Sympy,如果我有 x=Symbol('x',commutative=False) 还有一些表情 expr = x**2+x 那么如果你尝试整合这个 integrate(expr,x) 出现以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/sympy/integrals/i

如果我有

x=Symbol('x',commutative=False)
还有一些表情

expr = x**2+x
那么如果你尝试整合这个

integrate(expr,x)
出现以下错误:

  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sympy/integrals/integrals.py", line 1295, in integrate
    risch=risch, manual=manual)
  File "/usr/local/lib/python2.7/dist-packages/sympy/integrals/integrals.py", line 486, in doit
    conds=conds)
  File "/usr/local/lib/python2.7/dist-packages/sympy/integrals/integrals.py", line 774, in _eval_integral
    poly = f.as_poly(x)
  File "/usr/local/lib/python2.7/dist-packages/sympy/core/basic.py", line 706, in as_poly
    poly = Poly(self, *gens, **args)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/polytools.py", line 113, in __new__
    opt = options.build_options(gens, args)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/polyoptions.py", line 731, in build_options
    return Options(gens, args)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/polyoptions.py", line 154, in __init__
    preprocess_options(args)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/polyoptions.py", line 152, in preprocess_options
    self[option] = cls.preprocess(value)
  File "/usr/local/lib/python2.7/dist-packages/sympy/polys/polyoptions.py", line 293, in preprocess
    raise GeneratorsError("non-commutative generators: %s" % str(gens))
sympy.polys.polyerrors.GeneratorsError: non-commutative generators: (x,)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/sympy/integrals/integrals.py”,第1295行,在integrate中
risch=risch,手动=手动)
文件“/usr/local/lib/python2.7/dist packages/sympy/integrals/integrals.py”,第486行,在doit中
秒=秒)
文件“/usr/local/lib/python2.7/dist packages/sympy/integrals/integrals.py”,第774行,in_eval_integral
多边形=f.as_多边形(x)
文件“/usr/local/lib/python2.7/dist packages/sympy/core/basic.py”,第706行,格式为
poly=poly(自,*gens,**args)
文件“/usr/local/lib/python2.7/dist packages/symphy/polys/polytools.py”,第113行,新__
opt=options.build_选项(gens,args)
文件“/usr/local/lib/python2.7/dist packages/sympy/polys/polyoptions.py”,第731行,内置选项
返回选项(发电机、参数)
文件“/usr/local/lib/python2.7/dist-packages/symphy/polys/polypoptions.py”,第154行,在__
预处理_选项(args)
文件“/usr/local/lib/python2.7/dist packages/symphy/polys/polyoptions.py”,第152行,在预处理选项中
self[option]=cls.preprocess(值)
文件“/usr/local/lib/python2.7/dist packages/sympy/polys/polypoptions.py”,第293行,在预处理中
raise GENATORSERROR(“非交换发电机:%s”%str(发电机))
symphy.polys.polyerrors.generators错误:非交换生成器:(x,)

有办法解决这个问题吗?因为我确实需要x是非交换的

事实上,高级积分方法(Risch,Meijer G)需要变量是交换的;他们依靠多项式像平时一样工作。将积分方法限制为“手动”(初等微积分技术)可避免错误:

x = Symbol('x',commutative=False)
integrate(x**2 + x, x, manual=True)
返回
x**2/2+x**3/3
。折衷是只对简单积分(在微积分课程水平上)进行评估


也就是说,我不能100%确定
manualintegrate
模块中的所有积分规则都是在考虑到可能缺乏可交换性的情况下编写的

有时这仍然失败,例如,
x*y
wrt
x
,当
x
y
都是非对易的时候。@asmurer-Yes,ConstantTimesRule期望常数在左边。我不知道对于非对易符号我们能期望多少微积分。例如,换向器
x*y-y*x
是非对易x的一个非平凡函数,但它对
x
的导数等于零。。。