2017-08-11 32 views
0

我在SymPy验证码:评估的许多参数尽可能(SymPy)

from sympy import * 
par_amplitude, par_const_force = symbols('Delta_U f') 
equation = par_amplitude * par_const_force 
print(equation.evalf(subs={'f':3, 'Delta_U':2})) 

输出显然是6

print(equation.evalf(subs={'Delta_U':2})) 

相反的预期2 * f我得到Delta_U * f:当我有机会获得只有一个参数,像这样发生

我的问题。

我在做什么错?有没有一种方法来评估一个表达式,其中并非所有参数都可用?

编辑:

是的,我是在一个混合的数字/符号输出。想象一下,有很多参数(自动生成,所以你甚至不知道有多少),并且有一个函数提供所有subs值。如果你错过了一个替代值,你基本上什么都没有得到evalf

回答

0

你可以在你的符号表达数字评估之前替换:

print(equa.subs({'Delta_U':2})) 
print(equa.subs({'Delta_U':2}).evalf()) 

换人也产生6即使没有数值评价:

print(equa.subs({'Delta_U':2, 'f':3})) 

编辑:我有一个想法,为什么evalf(...)不会返回2*f。我假设evalf试图只返回完全数字结果,但2*f显然是混合的。数字2和符号f

0

这是一个已知问题,有关于它的讨论here

+0

我会说你的链接中描述的情况与此处的不同。在链接中,问题就像'1/0'的数值评估那样,而这里没有出现这样的数字问题。我认为问题在于OP希望'evalf'返回一些与数字'2'和符号'f'混合的东西。 – Hannebambel

+1

在页面上引用I网站是相关问题的列表,例如, https://github.com/sympy/sympy/issues/6974与此处给出的情况类似。 – smichr