计算输出为平方多项式加余数

时间:2016-05-29 03:08:00

标签: sympy factorization

我的儿子正在学习如何使用准线和焦点来计算他的可汗学院课程的抛物线公式。 (a,b)是焦点,k是准线的参数,即y = k。我想用Sympy向他展示一个检查结果的简单方法;编程有助于巩固内部算法。第1步显然是设定方程式。

Parabola = Eq(sqrt((y-k)**2),sqrt((x-a)**2+(y-b)**2))

我首先为y解决了这个问题,然后打算展示如何替换值并推导出等式,因此:

Y = solve(Parabola,y)

这是一个合理的形式,收集了1 /(2b-2k)到外面。 接下来,我将焦点和准线的值代入等式,得到方程y = 1/6 *(x ** 2 + 16 * x + 49),这是正确的。

他需要接下来以形式(x + c1)(x + c2)+余数解决这个问题。似乎没有直接的方法从上面的等式中考虑到这种形式,至少不是从一小时搜索文档。

Answer = Y[0].subs({a:-8,b:-1,k:-4})
factor(Answer,deep=True)

当然我理解如何减少到平方分解加上余数;我的问题仅仅是这是否可能在同情中,如果是,如何?

第二个也许是微不足道的问题是为什么Sympy将一些因子分解为(constant-x),其中(x -constant)是首选的:是否有指定形式的方法?

感谢代表我儿子的任何帮助,我向他展示了Sympy的奇迹。

1 个答案:

答案 0 :(得分:2)

这个过程通常被称为“完成广场”。它不是作为单个SymPy方法实现的,但是可以使用SymPy方程求解器来找到这种多项式形式的系数:

>>> var('A B C')
>>> solve(Eq(Answer, A*(x-B)**2 + C), [A, B, C])
[(1/6, -8, -5/2)]

因此抛物线顶点位于(8,-5 / 2),多项式可写为1/6*(x+8)**2 - 5/2