秦九韶算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化算法。在西方被稱作霍納算法(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運算時間。