Sympy Subs,Replace和Xreplace无法使用表达式

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?