秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。在西方被称作霍纳算法(Horner algorithm或Horner scheme),是以英国数学家威廉·乔治·霍纳命名的[1]。
目录[隐藏] |
[编辑] 计算过程
设有n + 1项的n次函数
f(x) = anxn + an − 1xn − 1 + an − 2xn − 2 + ...... + a2x2 + a1x + a0
将前n项提取公因子x,得
f(x) = (anxn − 1 + an − 1xn − 2 + an − 2xn − 3 + ...... + a2x + a1)x + a0
再将括号内的前n - 1项提取公因子x,得
f(x) = ((anxn − 2 + an − 1xn − 3 + an − 2xn − 4 + ...... + a2)x + a1)x + a0
如此反复提取公因子x,最后将函数化为
f(x) = (((anx + an − 1)x + an − 2)x + ...... + a1)x + a0
令
f1 = anx + an − 1
f2 = f1x + an − 2
f3 = f2x + an − 3
......
fn = fn − 1x + a0
则fn即为所求
[编辑] 应用示例
求当x = 3时的值。
反复提取公因子x后,原函数可以写成f1(x) = x(x(2x − 6) + 2) − 1。建立下列系数表可以用来加快演算速度:
x0 | x3 x2 x1 x0 3 | 2 -6 2 -1 | 6 0 6 |---------------------- 2 0 2 5
第四行中的数是表中本列上方两数之和。第三行的数字是x的值与左下方第四行数的乘积。第二行的数是多项式各项按照次数从大到小排列后的系数。表中右下角的数就是函数的值:5。
[编辑] 效率
对于一个n次的多项式函数,用常规方法(用重复乘法计算幂,再把各项相加)计算出结果最多需要n次加法和次乘法。若用x迭代的方法计算幂则需要n次加法和2n+1次乘法。如果计算中的数值数据是以字节方式储存的,那么常规方法约需要x占用的字节的2n倍空间。
而使用秦九韶算法时,至多只需作n次加法和n次乘法,最多需要x占用的字节的n倍空间。
[编辑] 意义
该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,用于减少CPU运算时间。