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

时间:2015-04-20 22:03:53

标签: 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表达为xx1x2y1y2和{{1}的函数}}。

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

1 个答案:

答案 0 :(得分:2)

假设你的方程表示相等,而不是变量assignmnent,那么你的方程组是:

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。许多数值解算器具有相同的界面,并且同情在这里借用它。
  • solve采用等于0的表达式和要解决的符号。在这里,我们只想解决y
  • solve的结果是一个可迭代的解决方案(list)。由于SymPy只找到一个解决方案,因此列表只有1个长。其他方程可能会返回更多。