pro*_*s91 5 python symbolic-math sympy
我有许多符号表达式,我可能会发现其中一个系数为零.我想,也许是因为我习惯了mathematica,以下是有道理的:
from sympy import Symbol
x = Symbol('x')
y = Symbol('y')
f = x + y
x = 0
f
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,返回的是x + y.除了明确地在每个等式上调用"subs"之外,还有什么方法f可以返回y吗?
我认为这subs是唯一的方法.它似乎是一种表达自己的表达方式.它没有引用构成它的部分.那f只是表达式x+y,但不知道它有任何链接回python对象x和y.请考虑以下代码:
from sympy import Symbol
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
f1 = x + y
f2 = z + f1
f1 = f1.subs(x,0)
print(f1)
print(f2)
Run Code Online (Sandbox Code Playgroud)
这个输出是
y
x + y + z
Run Code Online (Sandbox Code Playgroud)
所以即使f1改变了f2也没有.据我所知,这subs是完成你想要的唯一方法.
我认为没有办法自动完成(或者至少没有修改SymPy).
SymPy常见问题解答中的以下问题解释了原因:
为什么不改变一个变量会改变另一个变量呢?
简短的回答是"因为它不依赖于它".:-)即使你正在使用方程式,你仍然在使用Python对象.您输入的等式使用创建时存在的值来"填充"值,就像常规的python定义一样.之后所做的更改不会改变它们.考虑以下:
Run Code Online (Sandbox Code Playgroud)>>> a = Symbol('a') # create an object with name 'a' for variable a to point to >>> b = a + 1; b # create another object that refers to what 'a' refers to a + 1 >>> a = 4; a # a now points to the literal integer 4, not Symbol('a') 4 >>> b # but b is still pointing at Symbol('a') a + 1变化的数量
a不会改变b; 你没有使用一组联立方程.记住在打印引用sympy对象的变量时打印的字符串可能会有所帮助,它是在创建时提供给它的字符串; 该字符串不必与您为其分配的变量相同:Run Code Online (Sandbox Code Playgroud)>>> r, t, d = symbols('rate time short_life') >>> d = r*t; d rate*time >>> r=80; t=2; d # we haven't changed d, only r and t rate*time >>> d=r*t; d # now d is using the current values of r and t 160
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |