gpt4 book ai didi

python - 替换为 SymPy 中的多个子表达式

转载 作者:行者123 更新时间:2023-12-01 03:01:04 25 4
gpt4 key购买 nike

我遇到了一种情况,我正在将表达式分配给 SymPy 中的许多符号。它们相互引用,并且我希望能够根据一些决定其他所有内容的起始参数来评估高级表达式之一。

这是我的示例代码:

In [1]: from sympy import *
In [2]: x, y, z = symbols('x y z')
In [3]: z = x+y
In [4]: x=y
In [5]: z.subs({y: 2})
Out[5]: x + 2

我希望得到 4,因为 x 应该被评估为 2我错过了什么以及如何“一路”评估z

在我的实际代码中,即使需要多层评估,我也希望能够“一路”评估事物。当然,在实际代码中,我不能只执行 z.subs({y: 2, x: y}),因为 xy 很复杂。

真正的代码恰好是这样的:

In [1]: from sympy import *
...: y, q, c, F, M, cr, ct, bst, kq, kF, kM = symbols('y q c F M cr ct bst kq
...: kF kM')
...: c = cr + y*(cr+ct)/(bst/2)
...: q = kq*c
...: F = integrate(q, y) + kF
...: kF = -(F-kF).subs({y: bst/2}) # BC: F=0 when y=bst/2
...: M = integrate(F, y) + kM
...: kM = -(M-kM).subs({y: bst/2}) # BC: M=0 when y=bst/2
...:
...: LV3parms = {cr: 18, ct: 5, kq: 1, bst: 6.42}
...: M.subs(LV3parms)
Out[1]: kF*y + kM + 1.19418483904465*y**3 + 9*y**2

最佳答案

您的行 In[3] 和 In[4] 都创建新的不可变表达式,并且不会以任何方式更改其右侧表达式。因此,In[5] 中的调用与您设置 x=y 的 In[4] 没有任何关系,这只会更改 x,而在 In[5] 中您对 z 进行操作。

您只需要正确链接表达式即可:

x,y,z = symbols('x y z')
x = y
z = x+y
z.subs({y: 2})

这会输出 4,如您所料。

关于python - 替换为 SymPy 中的多个子表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com