前段时间我为我编程的游戏实现了Polynom近似。
我正在使用牛顿的金字塔方法。 我花了很长时间来弄明白,但我的解决方案需要计算二项式系数,我还必须总结每个幂的最终系数的所有系数(因为解决这个问题类似于平方,立方体..术语和计算二项式系数)
例如:
从生物学术语的n个中选出k并添加它们
一个选择倍增
a *(x + b)(x + c)(x + d)==> a * x ^ 3 + a * x ^ 2 *(b + c + d)+ a * x(bc + bd + cd)+ a * b * c * d
所以b * c * d将是一个选择b * c和b * d
我现在的问题是: 有没有办法用牛顿方案计算多项插值而不必计算所有的二元系数?
我的代码: https://github.com/superphil0/Polynominterpolation/blob/master/PolynomInterpolation.java
它的效果非常好,但是如果一个点得分过多则会相当慢 因为选择了所有可以概括的术语
(我真的很难用英语解释这个,我希望有人能理解我想知道的事情)
欢呼声
答案 0 :(得分:1)
从this description判断,我认为你的“金字塔方案”会产生系数 c i ,这样多项式 p ( x )可写为
p ( x )=
c 0 +( x - x 0 )(
c 1 +( x - x 1 )(
c 2 +( x - x 2 )(
c 3 +( x - x 3 )(
......(
c n -1 +( x - x ñ -1 子>)
c n )...))))
现在,您可以从后面递归计算规范系数。从中开始 p n = c n
在每个步骤中,当前多项式可以写为
p k =
c k +( x - x k ) p k +1 =
c k +( x - x k )( b 0 +
b 1 x + b 2 x < sup> 2 + ...)
假设下一个较小的多项式已经变成规范系数。
现在你可以使用那些系数 b <计算 p k 的系数 a i sub> i p k +1 。在严格的正式方式中,我必须使用索引而不是 a 和 b ,但我相信这样更清晰。那么下一个多项式的规范系数是什么?
您可以在循环中编写它,使用并重用单个数组a
来保存系数:
double[] a = new double[n + 1]; // initialized to zeros
for (int k = n; k >= 0; --k) {
for (int i = n - k; i > 0; --i)
a[i] = a[i - 1] - x[k]*a[i];
a[0] = c[k] - x[k]*a[0];
}