對于使用 Sympy 的 Python 大學項目,我需要在部分替換后評估 2 var 符號函數的輸出,例如:f = (x-1)/sqrt((x-10)^2+(y-10)^2) / x = 1 => f = 0如果我使用 1 var func,它工作正常:>>> from sympy import *>>> x = symbols('x')>>> F = 1-x>>> F.evalf(subs={x: 1})0.e-125但是在 2 var 函數的情況下, subs 似乎沒有正確進行替換:>>> from sympy import *>>> x,y = symbols('x y')>>> F = (x-1)/sqrt((x-10)**2+(y-10)**2)>>> F.evalf(subs={x: 1})(x - 1.0)*((x - 10.0)**2 + (y - 10.0)**2)**(-0.5)我期望 F = 0 因為 x = 1
2 回答

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
我不是同情專家,但當 的值y
使表達式非零時,我發現了一個反例:
>>> F.evalf(subs={x:1,y:float("nan")}) nan
當y
is 時nan
,結果不為零。所以不可能在不知道值的情況下簡化表達式y
(注意:F.evalf(subs={x:1,y:oo})
即使結果也應該是 nan ,sympy 也會愉快地評估為 0)

森林海
TA貢獻2011條經驗 獲得超2個贊
如上所述,如果 y = nan 會創建數學異常,因此替換永遠不會發生。但我發現如果我只使用 subs 然后我得到了我想要的:
>>> F.subs(x,1) 0
現在,如果我明確地替換 y = nan 那么我就會得到 nan 答案
>>> F.subs(y,nan) nan
我猜 evalf 只是在評估替換之前檢查更多異常。
添加回答
舉報
0/150
提交
取消