在 sympy 中将所有变量隔离到 LHS?
Isolate all variables to LHS in sympy?
我正在使用 sympy 来处理一些方程式。我想以规范形式编写方程式,以便感兴趣的变量都在 LHS 上。例如。如果我有,
lhs = sympify("e*x +f")`
rhs = sympify("g*y + t*x +h")`
eq = Eq(lhs,rhs)
e*x + f == g*y + h + t*x
我需要一个可以隔离给定变量列表(我所谓的规范形式)的函数,比如
IsolateVariablesToLHS(eq,[x,y]) # desired function
(e-t)*x - g*y == h-f # now x and y are on LHS and remaining are on RHS
我保证我只会得到线性方程,所以这总是可能的。
使用问题中提供的等式组合所有项并构建过滤器以发现所需变量。
>>> from itertools import filterfalse
>>> terms = eq.lhs - eq.rhs
>>> vars = ['x', 'y']
>>> filt = lambda t: any(t.has(v) for v in vars)
>>> result = Eq(sum(filter(filt, terms.args)), - sum(filterfalse(filt, terms.args))
>>> result
e*x - g*y - t*x == -f + h
我不熟悉 sympy,但我认为这适用于由适当的原子组成的方程式,例如 Symbols。确保将 vars 列表替换为实际实例化的符号 x、y 而不是 'ascii' 表示。这可能需要组合具有共同变量的术语。
filter 和 filterfalse 在 python 2.x 中可能有不同的名称,但此功能可能仍在 itertools 包中。
>>> import sympy as sm
>>> lhs = sm.sympify('e*x + f')
>>> rhs = sm.sympify('g*y + t*x + h')
>>> eq = sm.Eq(lhs, rhs)
这是一个简单的结构
def isolateVariablesToLHS(eq, syms):
l = sm.S.Zero
eq = eq.args[0] - eq.args[1]
for e in syms:
ind = eq.as_independent(e)[1]
l += ind
eq -= ind
return sm.Eq(l, eq)
>>> isolateVariablesToLHS(eq, [x, y])
Eq(e*x - g*y - t*x, f - h)
我正在使用 sympy 来处理一些方程式。我想以规范形式编写方程式,以便感兴趣的变量都在 LHS 上。例如。如果我有,
lhs = sympify("e*x +f")`
rhs = sympify("g*y + t*x +h")`
eq = Eq(lhs,rhs)
e*x + f == g*y + h + t*x
我需要一个可以隔离给定变量列表(我所谓的规范形式)的函数,比如
IsolateVariablesToLHS(eq,[x,y]) # desired function
(e-t)*x - g*y == h-f # now x and y are on LHS and remaining are on RHS
我保证我只会得到线性方程,所以这总是可能的。
使用问题中提供的等式组合所有项并构建过滤器以发现所需变量。
>>> from itertools import filterfalse
>>> terms = eq.lhs - eq.rhs
>>> vars = ['x', 'y']
>>> filt = lambda t: any(t.has(v) for v in vars)
>>> result = Eq(sum(filter(filt, terms.args)), - sum(filterfalse(filt, terms.args))
>>> result
e*x - g*y - t*x == -f + h
我不熟悉 sympy,但我认为这适用于由适当的原子组成的方程式,例如 Symbols。确保将 vars 列表替换为实际实例化的符号 x、y 而不是 'ascii' 表示。这可能需要组合具有共同变量的术语。
filter 和 filterfalse 在 python 2.x 中可能有不同的名称,但此功能可能仍在 itertools 包中。
>>> import sympy as sm
>>> lhs = sm.sympify('e*x + f')
>>> rhs = sm.sympify('g*y + t*x + h')
>>> eq = sm.Eq(lhs, rhs)
这是一个简单的结构
def isolateVariablesToLHS(eq, syms):
l = sm.S.Zero
eq = eq.args[0] - eq.args[1]
for e in syms:
ind = eq.as_independent(e)[1]
l += ind
eq -= ind
return sm.Eq(l, eq)
>>> isolateVariablesToLHS(eq, [x, y])
Eq(e*x - g*y - t*x, f - h)