如果我知道它的根,我如何在Prolog程序中实现找到多项式的系数。
例如:
input data (2;-1)
output (1;-1;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个根,你无法找回特定的多项式,因为没有唯一的答案,这是一个无数的答案