我有9个方程式和9个未知数的系统。我可以在Mathcad,wxMaxima或Mathematica中做到这一点。当我有一个方程列表时,就会出现问题。
leq0 = [eq0,eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq17]
其中一个变量是v3,另一个是a2。我想替代
leq1 = []
for eq in leq0:
eq.subs([(v3,v),(a2,a)])
print(eq)
leq1.append(eq)
eq.subs([(v3,v),(a2,a)])
不执行任何操作
都不手动
eq = leq0[6]
eq.subs([(v3,v),(a2,a)])
当我打印eq时,方程看起来正确。
a0*t01**2/2 + j*t01**3/6 + t01*v0 + x0 - x1
a0*t01 + j*t01**2/2 + v0 - v2
a0 - a1 + j*t01
a1*t12**2/2 + t12*v1 + x1 - x2
a1*t12 + v1 - v2
a2*t23**2/2 - j*t23**3/6 + t23*v2 + x2 - x3
a2*t23 - j*t23**2/2 + v2 - v3
a2 - a3 - j*t23
t01 + t12 + t23
为什么我不能做一个简单的替换。我可以将v3
手动编辑为v
,但这是一个更复杂问题的简单示例。我可以在其他数学软件包中进行这些替换。
答案 0 :(得分:0)
subs
不会覆盖包含表达式的变量,而是在替换后返回结果表达式。
changed = original.subs({var1: value1, var2: value2})
在您的情况下,您没有捕获替换的表达式。
leq1 = []
for eq in leq0:
eq.subs([(v3,v),(a2,a)]) # result not captured
print(eq) # `eq` still has original expression
leq1.append(eq)
要解决此问题,您可以在添加到新列表之前用替换的表达式覆盖eq
:
eq = eq.subs({v3: v, a2: a})
或直接附加替换:
for eq in leq0:
leq1.append(eq.subs({v3: v, a2: a})
注意:我将您的方程式称为表达式,因为它们仅包含方程式的一侧。 subs
也适用于同时具有双方的方程。
eq6 = Eq(a2*t23 - j*t23**2/2 + v2, v3)
pprint(eq2.subs({v3: v, a2: a}))
在sympy live上查看结果。