0

我在 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.

4

2 回答 2

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

于 2017-08-11T17:46:39.147 回答
0

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

于 2017-08-12T10:22:10.913 回答