我正在构建一个程序,它可以接收一个用逗号分隔的一组数字然后将它们转移到一个数组然后根据某个Maths方法执行以找到最简单的多项式,然后可以在序列中给我们更多的术语。希望这是有道理的。
现在我完成了前三个步骤(这里有很多来自这个神奇社区的帮助)。基本上就是这个。 1)重复计算序列中相邻数字之间的差异,直到序列中的每个数字相同:
[1,1,5,13,25]⇒[0,4,8,12]⇒[4,4,4]
2)新术语的指数是上面的步数,即2。
3)新术语的系数是最终序列上的数字除以指数的阶乘,即4/2!因此,新术语是2x ^ 2.
现在第四步有点奇怪了。
从原始序列的每个元素中减去新术语。从第一个元素减去2 * 1 ^ 2,从第二个减去2 * 2 ^ 2,从第三个减去2 * 3 ^ 2,等等。这留下[-1,-7,-13,-19,-25 ],这是开始下一次迭代的数字序列。
我看了一下,Math.pow是一种我可以使用的方法,但我不确定如何实际做到这一点。我现在有一个实现前三个步骤的方法,如下所示。
public Term nextTerm(){
double[] lastSequence = sequence;
int steps = 0;
while ( !allEqual(lastSequence)) {
lastSequence = differences(lastSequence);
steps++;
}
return new Term(lastSequence[1]/factorial(steps), steps);
}
和我相信的newTerm应该给我系数和指数。
我在看它。我想我有个主意。 我可以在该方法下使用for循环,所以它看起来像这样。
for(i=0;i<=sequence.length;i++){
sequence[i] - Term.getcoefficient * Math.pow(i,Term.getExponent)
}
请告诉我这是否以及如何更新序列数组。
任何人都可以在这里帮助我。谢谢你们。
答案 0 :(得分:0)
我不确定我是否会关注,但您可能会发现使用Newton的插值多项式更容易。您可以添加新术语2x(x-1),而不是添加新术语2x ^ 2。然后你不必乱用其他术语(减去等)。最后,您将得到一个看起来像c_0/0! + c_1/1! x + c_2/2! x(x-1) + c_3/3! x(x-1)(x-2) + ...
的多项式。如果您愿意,可以稍后简化该多项式。