[英]Why does sympy think that a function of only real variables is complex?
我一直在努力為我簡化這個復雜的代數表達式:
Delta,Gamma,t和hbar是真實的。 我用來生成這個表達式的代碼是:
from __future__ import division
from pylab import *
from sympy import *
def main():
d, g, t = symbols("Delta Gamma t", real=True)
hbar = symbols("hbar", positive=True, real=True)
dg = sqrt(d**2 + g**2)
S = simplify(Matrix([[(dg - g) / d, -(g + dg)/d], [1, 1]]))
D = simplify(Matrix([[exp(I * t * dg / hbar), 0], [0, exp(-I * t * dg / hbar)]]))
Sinverse = simplify(Matrix([[d / (2*dg), (g / dg + 1)/2], [-d / (2 * dg), 1/2 - g / (2*dg)]]))
U = simplify(S * D * Sinverse)
initial = Matrix([[1], [0]])
later = simplify(U * initial)
P1 = simplify(abs(later[0])**2)
preview(P1)
if __name__=="__main__":
main()
由於我不理解的原因,sympy拒絕承認階段的大小為1(即我們可以消除絕對值符號內表達式最右側的乘法指數)。 我測試了如果我們在絕對值符號中有一個非常簡單的指數,那么sympy是否會簡化這種情況。 似乎不是:
>>> from pylab import *
>>> from sympy import *
>>> t = symbols("t", real=True)
>>> z = exp(t*I)
>>> abs(z).simplify()
Abs(exp(I*t))
我已經嘗試了兩個針對這個問題的補救措施,其中任何一個都沒有效果:
(1)用參數乘以參數的復共軛替換絕對值符號的平方。 當我改變main()
函數的結尾時:
...
P1 = simplify(later[0] * later[0].conjugate())
preview(P1)
我得到了更加丑陋的表達:
這確實修復了上面組成的情節:
>>> from pylab import *
>>> from sympy import *
>>> t = symbols("t", real=True)
>>> z = exp(t*I)
>>> abs(z).simplify()
Abs(exp(I*t))
>>> z * z.conjugate()
1
(2)用關鍵字complex=True
擴展幅度,然后簡化。 此方法還解決了構成方案:
>>> from pylab import *
>>> from sympy import *
>>> t = symbols("t", real=True)
>>> z = exp(t*I)
>>> abs(z).simplify()
Abs(exp(I*t))
>>> abs(z).expand(complex=True).simplify()
1
但是,我的實際表達卻滑稽地失敗了。 當我調整main()
函數以使用此方法時:
...
P1 = (abs(later[0])**2).expand(complex=True).simplify()
preview(P1)
程序崩潰了。 當我取下.simplify()
並將preview
更改為print
,我得到613.8 kB的文本輸出! 看一下輸出文件的第一頁和最后一頁,它實際上看起來像一個非常巨大的表達式(即我不認為它是一些愚蠢的長錯誤信息或類似的東西)。 難怪當我試圖簡化它時程序崩潰了:)
我不知道第二種方法出了什么問題,但是看第一種方法的輸出,看來同情並沒有意識到實變量的平方和的平方根也是實數。 我該怎么做才能解決這個問題? 是否有一些參數我需要傳遞給某個函數來告訴它Gamma和Delta的平方和的平方根是一個實數?
任何幫助將不勝感激!
看起來SymPy的開發版本(即將發布為1.0)可以實現這種簡化:
In [1]: t = Symbol('t', real=True)
In [2]: abs(exp(-t*I))
Out[2]: 1
以我為例,我得到了
In [13]: P1
Out[13]:
2
│ _________│
│ ╱ 2 2 │
│ 2⋅ⅈ⋅t⋅╲╱ Δ + Γ │
│ _________ ⎛ _________⎞ ──────────────────│
│ ╱ 2 2 ⎜ ╱ 2 2 ⎟ h̅ │
-│Γ + ╲╱ Δ + Γ - ⎝Γ - ╲╱ Δ + Γ ⎠⋅ℯ │
──────────────────────────────────────────────────────────────
2 2
4⋅Δ + 4⋅Γ
但是我檢查了並且最新的穩定版本(0.7.6.1)沒有這樣做,因此您需要等待1.0或使用git版本 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.