Python 在辛中假设复数的正实部

Python 在辛中假设复数的正实部,python,math,sympy,complex-numbers,Python,Math,Sympy,Complex Numbers,我不知道如何在辛中假定复数的正实部。 Mathematica代码示例: a = InverseFourierTransform[ R/(I omega - lambda) + Conjugate[R]/(I omega - Conjugate[lambda]), omega, t, FourierParameters -> {1, -1}] Simplify[a, {Re[lambda] < 0, t > 0}] 我怎么能假设lambda的真实部分是正的呢?如果我假设

我不知道如何在辛中假定复数的正实部。 Mathematica代码示例:

a = InverseFourierTransform[ R/(I omega - lambda) +  Conjugate[R]/(I omega - Conjugate[lambda]), omega, t,   FourierParameters -> {1, -1}]

Simplify[a, {Re[lambda] < 0, t > 0}]
我怎么能假设lambda的真实部分是正的呢?如果我假设lambda有
正=True
,那么sympy假设
虚=False


有什么想法吗?

创建两个实符号x,y,假设x为正,让
λ
成为
x+I*y

import sympy as sym
ω, x, t = sym.symbols('omega x t', positive=True) 
y = sym.symbols('y', real=True)
R = sym.symbols('R')
λ = x + sym.I*y
α = R/(sym.I*ω-λ)+sym.conjugate(R)/(sym.I*ω-sym.conjugate(λ))    
res = sym.inverse_fourier_transform(α, ω, t) 
结果是

2*pi*R*exp(2*pi*t*(x + I*y)) + 2*pi*exp(2*pi*t*(x - I*y))*conjugate(R)
然后,可以使用替换返回到单个符号λ:

λ = sym.symbols('lambda')
res.subs(x + sym.I*y, λ).conjugate().subs(x + sym.I*y, λ).conjugate()
获得

2*pi*R*exp(2*pi*lambda*t) + 2*pi*exp(2*pi*t*conjugate(lambda))*conjugate(R)
(需要两个共轭的技巧,因为
subs
不会用共轭(lambda)替换
x-I*y
。)


关于假设的评论
  • complex=True
    是冗余的;实数包含在复数中(7是复数),因此这没有效果
  • 当给定
    positive=True
    时,
    real=True
    是冗余的

您试过使用吗?是的,当然。我在符号创建时添加了假设(例如lambda=sym.symbols('lambda',complex=True)。但它看起来不可能假设正/负实值。如果我假设正=真,那么这会将虚数设置为假,并且我不再有复数……你看了我链接的内容吗?@AndrasDeak
假设
模块不会与Symphy的其余部分交互,因此它无法帮助解决此问题(或有任何其他问题).@兄弟,谢谢,我不知道。我试过了,但一开始我的表达式得到了0,然后我就分心了。谢谢你;这很好!但是有没有办法做出类似于Mathematica的假设?我应该把它作为一个功能提案吗?你怎么想?你是说只有一个符号,假设它的真实部分吗?那就是n不可能。请在Github中的Symphy问题跟踪器上自由提出建议。很好的帖子和讨论!存在一个问题,即符号在全局范围内更改,将真实符号转换为复杂符号不起作用。有什么解决方案吗?
2*pi*R*exp(2*pi*lambda*t) + 2*pi*exp(2*pi*t*conjugate(lambda))*conjugate(R)