假设 Sympy 中复数的正实部
Assuming positive real part of a complex number in Sympy
我不知道如何在 Sympy 中假设复数的正实部。
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}]
类似的 Sympy 代码:
import sympy as sym
sym.init_printing()
ω = sym.symbols('omega', real=True, positive=True)
R, λ = sym.symbols('R, lambda', complex=True)
t = sym.symbols('t', real=True, positive=True)
α = R/(sym.I*ω-λ)+sym.conjugate(R)/(sym.I*ω-sym.conjugate(λ))
sym.inverse_fourier_transform(α, ω, t)
我如何假设 lambda 的实部为正?如果我假设 lambda 有 positive=True
,那么 sympy 假设 imaginary=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)
然后您可以 return 替换为单个符号 λ:
λ = 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是复数),所以这个没有作用
real=True
在给出 positive=True
时是多余的
我不知道如何在 Sympy 中假设复数的正实部。 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}]
类似的 Sympy 代码:
import sympy as sym
sym.init_printing()
ω = sym.symbols('omega', real=True, positive=True)
R, λ = sym.symbols('R, lambda', complex=True)
t = sym.symbols('t', real=True, positive=True)
α = R/(sym.I*ω-λ)+sym.conjugate(R)/(sym.I*ω-sym.conjugate(λ))
sym.inverse_fourier_transform(α, ω, t)
我如何假设 lambda 的实部为正?如果我假设 lambda 有 positive=True
,那么 sympy 假设 imaginary=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)
然后您可以 return 替换为单个符号 λ:
λ = 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是复数),所以这个没有作用real=True
在给出positive=True
时是多余的