【发布时间】:2016-08-30 15:13:10
【问题描述】:
多项式:a0x^0 + a1x^1 +a2x^2 + a3x^3 + ... + anx^n
数组:array_a[] = {a0, a1, a2, a3 ... an};
我用 Java 写了一个函数来计算这个多项式:
public double cal(double x) {
double y = 0.0;
for (int index = array_a.length - 1; index >= 0; index--) {
y = array_a[index] + y * x;
}
return y;
}
这似乎比循环 y += array_a[index] * Math.Pow(x, index); 快 5 倍
但我想知道是否有更好的方法来计算这个多项式?
** 对于任何认为这是不同的计算的人:我确实测试了上面的函数。它对y += array_a[index] * Math.Pow(x, index); 执行相同的操作,并且它们计算相同的结果。
谢谢。
【问题讨论】:
-
他使用多项式等于 a0 + x * (a1 + x*(a2 +... ))
-
@ErwinBolwidt 是的,我做到了。我知道这看起来像是一个不同的计算。但它做同样的事情。你可以检查一下。
-
有更好的方法吗?这似乎已经是最好的方法了。最少的计算次数。你问来干什么?你不喜欢哪个部分?
-
@Andreas 是的,我想是的。这是最好的方法,但我的教授仍然要求她的学生对此进行优化。所以我正在努力寻找更好的方法。
-
不管怎么弄,都得执行
n加操作和n+1乘操作。那是不能减少的。通过使用a0 + x * (a1 + x*(a2 +... ))公式,您已经成功消除了幂运算。好吧,从技术上讲,乘以x^0可以消除,所以只有n乘法运算。您的代码目前正在执行n+1加法和乘法运算,因此您可以稍微调整一下。 注意n = array_a.length - 1。
标签: java polynomial-math