在Prolog中找到赋予其根(零)的多项式的系数

时间:2013-11-27 10:18:35

标签: math prolog logic polynomial-math

如果我知道它的根,我如何在Prolog程序中实现找到多项式的系数。

例如:

input data (2;-1)
output (1;-1;2)

2 个答案:

答案 0 :(得分:3)

将给定根的一级因子相乘将形成扩展多项式。这与Prolog中的“累加器”设计模式完全吻合。

也就是说,我们将引入一个辅助论点来记住“到目前为止”处理的因素的乘积。一旦清空了指定根的列表,我们将得到所需的多项式扩展:

/* polynomialFromListofRoots(ListofRoots,[1],Polynomial) */
polynomialFromListofRoots([ ],Poly,Poly).
polynomialFromListofRoots([R|Roots],Pnow,Poly) :-
    polyMultiplyRootFactor(R,Pnow,Pnew),
    polynomialFromListofRoots(Roots,Pnew,Poly).

/* polyMultiplyRootFactor(R,Poly,ProductXminusR) */
polyMultiplyRootFactor(R,Poly,Prod) :-
    polyMultiplyRootFactorAux(R,0,Poly,Prod).

/* polyMultiplyRootFactorAux(R,Aux,Poly,Product) */
polyMultiplyRootFactorAux(R,A,[ ],[B]) :-
    B is -R*A.
polyMultiplyRootFactorAux(R,A,[P|Ps],[RP|RPs]) :-
    RP is P - R*A,
    polyMultiplyRootFactorAux(R,P,Ps,RPs).

使用问题中的示例:

?- polynomialFromListofRoots([2,-1],[1],Poly).

Poly = [1, -1, -2]
yes

请注意,这会更正问题中声明的output

答案 1 :(得分:0)

抱歉误读了问题。

a ^ 2x + bx + c = 0

取x1 + x2的总和,这等于-b / a。

取根x1 * x2的乘积,这等于c / a。

现在求解得到的线性方程组,找到b和c。

编辑:

如果你设置a = 1的参数,上面的解决方案是有效的。你会看到你给定根的时候你最终会得到两个方程和三个未知数,所以你必须在其中一个参数上设置一个固定值以上解决方案修正了a = 1。

因此,给定2个根,你无法找回特定的多项式,因为没有唯一的答案,这是一个无数的答案