用來簡化樸素多項式的求值,在中國叫秦九韶算法。
霍納規則是一種將一元n次多項式的求值問題轉化為n個一次式的算法。其大大簡化了計算過程,即使在現代,利用計算機解決多項式的求值問題時,霍納規則依然是最優的算法規則。
基本介紹
- 中文名:霍納算法 霍納規則 秦九韶算法 霍納法則
- 外文名:Horner's method
規則簡介,規則套用,
規則簡介
用來簡化樸素多項式的求值,在中國叫秦九韶算法。
霍納規則是一種將一元n次多項式的求值問題轉化為n個一次式的算法。其大大簡化了計算過程,即使在現代,利用計算機解決多項式的求值問題時,霍納規則依然是最優的算法規則。
霍納規則是採用最少的乘法運算策略,求多項式A(x) = anxn+ an-1xn-1+...+ a1x + a0在x0處的值,該規則是A(x0)=(...((anx0+ an-1)x0+...+ a1)x0+ a0)
規則套用
霍納規則的遞歸編程(c語言):
#include <stdlib.h>#include <stdio.h>#include <time.h>#define MAX_SIZE 101float horner(float [], int, int, float);int main(){ float coefficient[MAX_SIZE]; /*輸入多項式的項數*/ printf("Enter the number of polynomial terms to generate: "); int n; scanf_s("%d", &n); /* VS2013等版本中使用scanf_s(),VC6.0中使用scanf(),下同*/ if(n < 1 || n > MAX_SIZE) { fprintf(stderr, "Improper value of n\n"); exit(EXIT_FAILURE); } srand((unsigned)time(NULL)); int i; for(i = 0; i < n; i++) { /*隨機生成n個係數並存在數組coefficient里*/ coefficient[i] = rand() / (float)(RAND_MAX / 100); printf("%lf\t", coefficient[i]); } /*輸入多項式的自變數值*/ printf("\nEnter the value of x: "); float x; scanf_s("%f", &x); /*多項式結果*/ double result = 0; result = horner(coefficient, n, 0, x); printf("\nResult of this polynomial in %f is %f\n", x, result); return 0;}float horner(float list[], int n, int i, float x){ if(i == n - 1) return list[n-1]; /*遞歸出口*/ else return horner(list, n, i + 1, x) * x + list[i]; /*遞歸過程*/}