有时候,水平平移(通过某个量水平地转换多项式),即
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](https://istack.dev59.com/80uzN.webp)