python - 象征性地解决。选择最终表示中的符号

标签 python scipy sympy

考虑以下简单的三个表达式:

from sympy import *

x1,y1,x2,y2,x,y,a,xn,yn = symbols('x1 y1 x2 y2 x y a xn yn')

yn = (1 - xn)/(1 - a*xn)
xn = (x - x1)/(x2 - x1)          
yn = (y - y1)/(y2 - y1)          

我想将 y 表示为 xx1x2 的函数y1y2a

我该怎么做? sub 可以用来做这种扩展/简化吗?

最佳答案

假设您的方程表示相等,而不是变量赋值,那么您的方程组是:

xn = (x - x1)(x2 - x1)

(1 - xn)/(1 - a*xn) = (y - y1)/(y2 - y1)

这可以在 SymPy 中解决如下:

from sympy import *
x1, y1, x2, y2, x, y, a = symbols('x1 y1 x2 y2 x y a')
xn  = (x - x1)/(x2 - x1)   
yn1 = (1 - xn)/(1 - a*xn)       
yn2 = (y - y1)/(y2 - y1)
eq0 = yn1 - yn2

solve(eq0, y)

返回:

[(a*x*y1 - a*x1*y1 - x*y1 + x*y2 + x1*y1 - x2*y2)/(a*x - a*x1 + x1 - x2)]

一些解释:

  • xn 不依赖于 yn,所以我们可以将它定义为一个表达式,而不是为它自己创建一个符号。
  • 表达式 eq0 是上面的 yn 等价方程,重新排列为右侧只有 0。许多数值求解器具有相同的接口(interface),sympy 在这里借用它。
  • solve 采用等效于 0 的表达式和要求解的符号。这里我们只想求解 y
  • solve 的结果是可迭代的解决方案(列表)。由于 SymPy 只找到一个解决方案,因此列表只有 1 长。其他方程式可能会返回更多。

关于python - 象征性地解决。选择最终表示中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759254/

相关文章:

python - 使用 ComboboxSelected 对 tkinter Combobox 选择进行事件驱动管理

python - 计算由另一列分组的列的 z 分数

r - 带有虚拟变量的 Python 中的 OLS - 最佳解决方案?

python - 由于 pandas 崩溃,flask 服务器退出且没有任何消息

Python 查找数组中最常见的值

python - AttributeError: 'str' 对象没有属性 'courseGrade'

python - 复杂的矩阵乘法

python - 我可以在 sympy 中使用符号叉积运算吗

python - 对由 Sympy 符号组成的 Dataframe 列进行排序

python - 当需要符号表达式时,SymPy 输出数值结果