为了计算导数和其他表达式,我使用了 sympy 包并说 T = sy.Symbol('T')
现在我已经计算出正确的表达式:
E= -T**2*F_deriv_T(T,rho)
在哪里
def F_deriv_rho(T,rho):
ret = 0
for n in range(5):
for m in range(4):
inner= c[n,m]*g_rho_deriv_rho_np*g_T_np
ret += inner
return ret
看起来像这样:
F_deriv_rho: [0.0 7.76971e-5*T 0.0001553942*T**2*rho
T*(-5.14488e-5*log(rho) - 5.14488e-5)*log(T) + T*(1.22574e-5*log(rho)+1.22574e-5)*log(T) + T *(1.89488e-5*log(rho) + 1.89488e-5)*log(T) + T(2.29441e-5*log(rho) + 2.29441e-5)*log(T) + T*(7.49956 e-5*log(rho) + 7.49956e-5)*log(T)
T**2*(-0.0001028976*rho*log(rho) - 5.14488e-5*rho)*log(T) + T**2*(2.45148e-5*rho*log(rho) + 1.22574e- 5*rho)*log(T) + T**2*(3.78976e-5*rho*log(rho) + 1.89488e-5*rho)*log(T) + T**2*(4.58882e- 5*rho*log(rho) + 2.29441e-5*rho)*log(T) + T**2*(0.0001499912*rho*log(rho) + 7.49956e 5*rho)*log(T)]
对于 python,我想将 T(和 rho)作为一个符号更改为一个值。我怎么能那样做?
所以,我想创建 10 个数字,例如 T_def = np.arange(2000, 10000, 800)
并交换我所有的 sy.symbol(
T)
通过迭代我在数组中创建的 10 个值。
谢谢你的帮助
最佳答案
我根据这篇文章找到了解决方案:
How to substitute multiple symbols in an expression in sympy?
通过使用“subs”:
>>> from sympy import Symbol
>>> x, y = Symbol('x y')
>>> f = x + y
>>> f.subs({x:10, y: 20})
>>> f
30
这里还有更多关于这种事情的信息:http://docs.sympy.org/latest/tutorial/basic_operations.html
编辑:按照@Bjoern Dahlgren 的建议,更快的方法是使用“lamdify”
关于python:更改符号变量并分配数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40609184/