python:更改符号变量并分配数值

Posted

技术标签:

【中文标题】python:更改符号变量并分配数值【英文标题】:python: changing symbol variable and assign numerical value 【发布时间】:2017-03-29 07:07:26 【问题描述】:

为了计算导数和其他表达式,我使用了 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.49956e-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),并通过遍历我在数组中创建的 10 个值来交换我所有的 sy.symbol(T)

感谢您的帮助

【问题讨论】:

您的示例代码不是独立的,例如您正在引用诸如 g_T_np 之类的内容,这使得提供帮助变得更加困难。但据我所知,您可能对“lambdify”感兴趣,它为基于符号表达式的数值评估创建回调。 @BjoernDahlgren:我知道,但其余代码对我的问题并不重要,可能更令人困惑。我想要的只是更改符号 T 并将其替换为数值。但我现在正在检查 lamdify,它可能会很有帮助!非常感谢 【参考方案1】:

我根据这篇帖子找到了解决方案:

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:更改符号变量并分配数值的主要内容,如果未能解决你的问题,请参考以下文章

即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]

Python更新不同的变量而不是分配的参考变量[重复]

如何在一个已经在python中保存整数值的索引处将字符分配给字符串?

如果我为无符号变量分配负值会发生啥?

开始学习python -python变量类型

python 变量 赋值浅拷贝深拷贝