【问题标题】:Find the coefficients of a polynomial given its roots (zeros) in Prolog在 Prolog 中找到给定根(零)的多项式的系数
【发布时间】:2013-11-27 10:18:34
【问题描述】:

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

例如:

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

【问题讨论】:

  • 乘以一个例子,eq (x-x1)(x-x2)(x-x3)(x-x4)。模式应该很明显。
  • 您是否考虑过在 Prolog 中表示多项式?在您的示例中,多项式的系数似乎由一对括号内的分号分隔。以这种方式打印输出很容易,只要将这些相同的系数表示为列表。
  • 显示的output 不正确,因为 (x-2)(x+1) = x^2 - x - 2。

标签: math prolog logic polynomial-math


【解决方案1】:

将给定根的一次因子相乘将形成一个扩展多项式。这与 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

【讨论】:

    【解决方案2】:

    抱歉,误读了问题。

    a^2x + bx +c = 0

    取根 x1 + x2 之和等于 -b/a。

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

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

    编辑:

    如果您将参数设置为 a = 1,则上述解决方案有效。您会看到,当您给定根时,您将得到两个方程和三个未知数,因此您必须在其中一个参数上设置一个固定值以上解决方案修复了 a = 1。

    因此,给定 2 个根,您无法返回特定的多项式,因为没有唯一的答案,有无穷多个答案

    【讨论】:

    • (2;-1) => f(x) = (x-2)*(x+1) = x^2 - x - 2 => (1;-1;-2 )
    • 这取决于您是否只希望您的方程式采用 x^2 + bx + c 的形式(即您是否乐意设置 a = 1)
    • 但我可以有两个以上的根
    • 我认为它并不容易解决,因为多项式 f(x) 具有特定的根。但是根没有特定的多项式,因此如果给定多个根,则有无限多个满足这些根的多项式。因此,您的程序只能给出其中一个并决定将每个参数设置为什么可能非常难以确定。这是作为家庭作业给出的吗?它是否指定了程序必须做什么?
    • 假设你有所有的根,结果在乘数中是唯一的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多