Python Sympy Subs、Replace和Xreplace不使用表达式
我试图替换一个表达式,它是一个已解方程组的输出,并且得到了错误Python Sympy Subs、Replace和Xreplace不使用表达式,python,sympy,Python,Sympy,我试图替换一个表达式,它是一个已解方程组的输出,并且得到了错误 q,a,b,c=symbols('q,a,b,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,新的_方程)时,我得到p(q),无论我做什么,返回给我一个类型错误。Xreplace抛出一个Sympify错误。任何关于如何使用简单
q,a,b,c=symbols('q,a,b,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,新的_方程)时,我得到p(q),无论我做什么,返回给我一个类型错误。Xreplace抛出一个Sympify错误。任何关于如何使用简单sub的建议?Symphy的
solve
总是返回一个Python解决方案列表。一般方程可以有零解、一解或多解subs
需要列表中的一个具体值,它不能作为一个整体使用列表。因此,您需要遍历列表来进行替换。如果您确定只有一种解决方案,则可以使用解决方案[0]
:
从sympy导入符号,求解,等式
q、 a,b,c=符号('q a b c')
def p(q):
返回a-b*q
某些_方程=p(q)-c
解=解(某些方程,q)
打印(“解决方案:”,解决方案)
对于sol in解决方案:
打印(“q=,sol,”-->p(q)=,p(q).subs(q,sol)的解决方案)
输出:
solutions: [(a - c)/b]
solution for q = (a - c)/b --> p(q) = c
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
请注意,除了将p
作为q的函数编写外,还可以直接将其作为sympy表达式编写:p=a-b*q
。还请注意,尽管您可以将方程写成some_方程=p(q)-c
,但sympy编写此类方程的标准方法是some_方程=Eq(p(q),c)
这里是另一个例子,它有两个解决方案。它还使用了simplify()
,因为在默认情况下,更复杂的表达式只会简化一点点
p=a*q**2+b*q
一些方程=Eq(p,c)
解=解(某些方程,q)
打印(“解决方案:”,解决方案)
对于sol in解决方案:
打印(“q=,sol,”-->p(q)=”,p.subs(q,sol).simplify()的解决方案)
输出:
solutions: [(a - c)/b]
solution for q = (a - c)/b --> p(q) = c
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
不熟悉症状,但它可能有助于提供错误的全文或一个完整的可运行的代码产生错误。如果这回答了你的问题,你可能会考虑投票和/或答案被接受。