[英]Avoid Complex Number Sympy
我正在使用sympy解析來解析字符串:
f = parse_expr('(x-1)^(1/3)')
當我使用f.subs({x:0})
它給出的是復數而不是-1。 我該如何擺脫這種行為?
我需要一些通用的東西,因為函數可以是任意的,而且我不知道會有什么變量。
謝謝。
查看代碼並找出函數real_root
,我設法使用轉換來編寫自己的轉換器。
您的解決方案似乎是最好的解決方案。 您也許也可以象征性地進行替換,而不必嘗試更改解析器。 看一下atoms
和xreplace
。
我只想補充一點,SymPy使用以下約定:小數冪是具有最小復雜參數的原始根。 Python本身遵循以下約定:
>>> (-1+0j)**(1/3)
(0.5000000000000001+0.8660254037844386j)
這樣做有很多充分的理由。 最明顯的是,數字的第二和第三次冪將為您提供另外兩個根源:
>>> (-1+0j)**(2/3)
(-0.4999999999999998+0.8660254037844388j)
>>> (-1+0j)**(3/3)
(-1+0j)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.