Python中的多项式转换

3
我正在尝试移动一个多项式。我目前正在使用numpy.poly1d()制作二次方程。

例如:2x^2 + 3x + 4

但我需要通过tau来移动函数,使得

2(x-tau)^2 + 3(x-tau) + 4

Tau是一个值,将根据我的代码中的其他变量而改变。
2个回答

2
创建一个临时变量,将x-tau存储到其中,并将其输入到您的函数中。

1
有时候,水平平移(通过某个量水平地转换多项式),即 f(x) => f(x ± λ)展开形式非常重要。基本上,找到新多项式 f(y) 的系数,其中 y = x ± λ,是 多项式合成除法的扩展,实际上是 多项式应用的扩展。
现在,让我们的多项式为 f(x) = x^{3}-7x+7。我们将其表示为数组形式 [1,0,-7,7]

多项式应用:

由于它非常简单和直观,当一个特定的 x 值必须应用于多项式时,即使是经验丰富的编码人员也会使用幂、乘法和加法的纸笔方法来完成它。然而,计算机最简单的算法是不同的; Ruffini Horner 方法。 在 JS 中,它的实现就像这样:
poly.reduce((p,c) => p*x+c);

其中,poly 表示上述多项式的系数,例如 [1,0,-7,7],而x 是应用的值。如预期一样,当应用值为x = 3时,结果应为13

多项式合成除法:

实际上,这与多项式运算完全相同。唯一的区别是我们将中间值保留为所得多项式的系数,最终值作为余数。请注意,多项式合成除法的余数与多项式运算的结果相同。

要实现多项式合成除法,以下代码应该足够:

function div(y,x){
  var t = y[0],
      r = y.map((n,i,a) => i ? t = t*x+n : n);
  return { pol: r.slice(0,-1)
         , rem: r[r.length-1]
         };
}

多项式变换:

这是一些更深入的数学内容。在书籍《计算机代数基础及应用》- Alkiviadis G. Akridas - 1989 @ 第3.1.2节 Ruffini Horner方法中已经有很好的研究。

作为总结;为了通过λ量对多项式f(x)进行变换,我们首先执行合成除法;f(x)/(x-λ)。让结果多项式为f'(x),余数为c_0。然后执行完全相同的操作,如f'(x)/(x-λ),得到f''(x)c_1(余数)。重复这个过程n次,其中n是原始多项式f(x)的次数,你应该得到n+1个余数,如c_n,c_n-1,...,c_0。这些是你的转置多项式f(x+λ)的系数,包括最后的常数c_0
这个的JS代码可能是;
function transpose(y,x){
  var r = [],
      t;
  while (y.length) {
    t = div(y,x);
    y = t.pol;
    r.unshift(t.rem);
  }
  return r;
}

因此,如果我们将上述给定的蓝色多项式 f(x) = x^{3}-7x+7 ([1,0,-7,7]) 向右移动 λ = -3 个单位,得到的系数将变为 [ 1, -9, 20, 1 ],这是下图中可以看到的红色多项式 f(x) = x^{3}-9x{2}+20x+1

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接