热门问题
时间线
聊天
视角
秦九韶算法
来自维基百科,自由的百科全书
Remove ads
秦九韶算法是中國南宋時期的數學家秦九韶表述求解一元高次多項式的值的算法——正負開方術。它也可以配合牛頓法用來求解一元高次多項式的根。
歷史

19世紀初,英國數學家威廉·喬治·霍納重新發現並證明,後世稱作霍納算法(Horner's method、Horner scheme)[1]。但是,19世紀英國傳教士偉烈亞力 Alexander Wylie. (1815–1887) 最早對霍納的發明權提出質疑。他在1852年著的《中國科學札記》(Jottings on the Science of the Chinese)一篇論文中,詳細介紹秦九韶的正負開方術之後寫道「讀者不難認出這就是霍納在1819年因為發表《解所有次方程》論文,被數學家奧古斯都·德·摩根評為『必使其發明人因發現此算法而置身於重要發明家之列』的方法;我以為應該對霍納的發明權提出辯駁。歐洲的朋友們可能會覺得意外,一位來自天朝帝國的競爭者,有更大的機會確立他的優先權」[2]。[3]此後,日本數學史家三上義夫在《中日數學史》一書中在詳述秦九韶的正負開方術後寫道:「誰能否認,霍納的輝煌方法,至少在早於歐洲六百年之前,已經在中國運用了。」[4]。三上義夫還最先指出,秦九韶算法起源於漢代《九章算術》的開方法。其後王玲和李約瑟有專文論述秦九韶算法起源於《九章算術》。前蘇聯數學史家尤什克維奇說「這是中國傳統數學最偉大成就之一」,他還說印度人不知有此方法,而阿拉伯數學家可能從中國前人傳入此方法[5]。
下面以自今到古的順序,列出早在霍納之前對該算法的發現:
- 1809年,保羅·魯菲尼[6][7]
- 1669年,艾薩克·牛頓(但缺乏詳細引文)
- 14世紀,中國數學家朱世杰[7]
- 13世紀,中國數學家秦九韶在《數書九章》中
- 12世紀,波斯的伊斯蘭數學家薩拉夫·丁·圖西[8]
- 11世紀(宋朝),中國數學家賈憲
- 漢朝(公元前202到公元220年),劉徽所注的《九章算術》中[9][可疑]
霍納在1819年發表的《解所有次方程》論文中的算例,其算法程序和數字處理都遠不及五百多年前的秦九韶有條理;秦九韶算法不僅在時間上早於霍納,也比較成熟。[10]
Remove ads
用秦九韶算法解方程
精確解x=840
南宋數學家秦九韶將賈憲的增乘開方術推廣,以求解任意高次方程的實數根的數值解。秦九韶的《數書九章》詳細敘述用秦九韶算法求解二十六個二次到十次方程的的實數根的數值解,其中包含二十個二次方程,一個三次方程,四個四次方程和一個十次方程。[11];其中有些得到精確解;多數得近似解。
《數書九章》「《遙度圓城》」題列出一個十次方程,求解圓城的直徑:
- ,得精確解x=3[12]。
《數書九章》「《興田求積》」題列出一個四次方程,
將方程式寫成一般式
第一次估根~800;作y=x-800減根代換,估出根的第二位數字為y=40;經過第二次減根代換z=y-40後常數項抵消為0;得精確解 y=40;x=800+y=800+40=840。右圖為用阿拉伯數字表示的解此四次方程的秦九韶程序圖(c'、d'、e'是運算過程中的臨時數,最終分別併入c、d、e)。
《數書九章》「《環田三積》」題列出另一個四次方程,
下圖為秦九韶解下列四次方程的程序。
近似解x=20.5
以下是原算法與現代數學語言的對照:
其中:不等於0,其第一位有效數字=0.5;即商的下一位數字為5,商~20.5,按秦九韶程序的一般規則,運算須繼續進行下去直到「實」=0為止;但秦九韶在商=20.5而止,因20.5的精確度已滿足在相關問題的需要。
三上義夫特別指出:
- 秦九韶在處理這一類四次方程式時,絕非作為的二次方程式來求解(所謂雙二次方程),而是按四次方程來求解的。
- 秦九韶算法同樣可以求出小數點後的數值,後來的中國數學家和日本數學正是這麼做的。[17]
Remove ads
原理
設有項的次函數
將前項提取公因子,得
再將括號內的前項提取公因子,得
如此反覆提取公因子,最後將函數化為
令
......
則即為所求
Remove ads
應用示例
求當時的值。
反覆提取公因子後,原函數可以寫成。建立下列係數表可以用來加快演算速度:
| 3 | 2 -6 2 -1 | 6 0 6 |---------------------- 2 0 2 5
第四行中的數是表中本列上方兩數之和。第三行的數字是x的值與左下方第四行數的乘積。第二行的數是多項式各項按照次數從大到小排列後的係數。表中右下角的數就是函數的值:5。
Remove ads
效率
對於一個n次的多項式函數,用常規方法(用重複乘法計算冪,再把各項相加)計算出結果最多需要n次加法和次乘法。若用x迭代的方法計算冪則需要n次加法和2n+1次乘法。如果計算中的數值數據是以字節方式儲存的,那麼常規方法約需要x占用的字節的2n倍空間。
而使用秦九韶算法時,至多只需作n次加法和n次乘法,最多需要x占用的字節的n倍空間。
Remove ads
意義
該算法看似簡單,其最大的意義在於將求n次多項式的值轉化為求n個一次多項式的值。在人工計算時,利用秦九韶算法和其中的係數表可以大幅簡化運算;對於電腦程式算法而言,加法比乘法的計算效率要高很多,因此該算法仍有極大的意義,用於減少中央處理器運算時間。
參考文獻
參見
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads