如何解决Sympy Subs,Replace和Xreplace无法使用表达式
我试图替换一个表达式,该表达式是已解决的方程组系统的输出,并且出现错误。
q,a,b,c=symbols('q,c')
def p(q):
return a-b*q
some_equation=eqn1-eqn2
new_equation=sol(some_equation,q)
新方程式返回
[(a-c)/(2*b)]
当我使用p(q).subs(q,new_equation)时,无论如何我都会得到p(q)并返回给我一个类型错误。 Xreplace引发Sympify错误。任何获得什么的建议应该是一个简单的工作方式?
解决方法
Sympy的solve
始终返回Python解决方案列表。一个通用方程可以有零个,一个或多个解。 subs
需要列表中的一个具体值,它不能与整个列表一起使用。因此,您需要遍历列表以进行替换。如果确定只有一种解决方案,则可以使用solutions[0]
:
from sympy import symbols,solve,Eq
q,a,b,c = symbols('q a b c')
def p(q):
return a - b * q
some_equation = p(q) - c
solutions = solve(some_equation,q)
print("solutions:",solutions)
for sol in solutions:
print("solution for q =",sol," --> p(q) =",p(q).subs(q,sol))
输出:
solutions: [(a - c)/b]
solution for q = (a - c)/b --> p(q) = c
请注意,除了将p
写为q的函数外,还可以直接将其写为sympy表达式:p = a - b * q
。还要注意,尽管您可以将方程式写为some_equation = p(q) - c
,但是sympy编写此类方程式的规范方法是some_equation = Eq(p(q),c)
。
这是另一个示例,它有两个解决方案。它也使用simplify()
,因为默认情况下,更复杂的表达式仅被简化了一点。
p = a * q ** 2 + b * q
some_equation = Eq(p,c)
solutions = solve(some_equation,p.subs(q,sol).simplify())
输出:
solutions: [(-b + sqrt(4*a*c + b**2))/(2*a),-(b + sqrt(4*a*c + b**2))/(2*a)]
solution for q = (-b + sqrt(4*a*c + b**2))/(2*a) --> p(q) = c
solution for q = -(b + sqrt(4*a*c + b**2))/(2*a) --> p(q) = c
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。